diff --git a/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx b/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx index 5ebcc0def1..a0a983ce44 100644 --- a/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx +++ b/src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx @@ -259,7 +259,7 @@ export default function CostOverviewTab() { } } - void loadPresets(); + void loadRange(); return () => { active = false; diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 60ea81b4be..7b6ada4983 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "مرحبًا", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "الإعدادات", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "بالنسبة لنماذج عائلة GitHub Codex، احتفظ بالنموذج كـ gh/codex-model; يقوم جهاز التوجيه بتحديد/الاستجابات تلقائيًا.", "troubleshootingTestConnection": "استخدم لوحة المعلومات > الموفرون > اختبار الاتصال قبل الاختبار من بيئات تطوير متكاملة أو عملاء خارجيين.", "troubleshootingCircuitBreaker": "إذا أظهر مقدم الخدمة أن قاطع الدائرة مفتوح، فانتظر حتى فترة التهدئة أو راجع صفحة الصحة للحصول على التفاصيل.", - "troubleshootingOAuth": "بالنسبة لموفري OAuth، قم بإعادة المصادقة إذا انتهت صلاحية الرموز المميزة. تحقق من مؤشر حالة بطاقة المزود." + "troubleshootingOAuth": "بالنسبة لموفري OAuth، قم بإعادة المصادقة إذا انتهت صلاحية الرموز المميزة. تحقق من مؤشر حالة بطاقة المزود.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "سياسة الخصوصية", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 0d13117ca7..b87a1b60d7 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Добре дошли", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Настройки", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "За модели от семейството на GitHub Codex, запазете модела като gh/codex-model; рутерът избира /отговаря автоматично.", "troubleshootingTestConnection": "Използвайте Табло > Доставчици > Тестване на връзката, преди да тествате от IDE или външни клиенти.", "troubleshootingCircuitBreaker": "Ако доставчикът покаже отворен прекъсвач, изчакайте охлаждането или проверете страницата Health за подробности.", - "troubleshootingOAuth": "За доставчици на OAuth, повторно удостоверяване, ако токените изтекат. Проверете индикатора за състояние на картата на доставчика." + "troubleshootingOAuth": "За доставчици на OAuth, повторно удостоверяване, ако токените изтекат. Проверете индикатора за състояние на картата на доставчика.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Политика за поверителност", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 99e013bf8f..8a684d429d 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Vítejte", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Nastavení", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Pro modely z rodiny Codex ponechte model jako gh/codex-model; router automaticky vybere /responses.", "troubleshootingTestConnection": "Před testováním z IDE nebo externích klientů použijte Nstěnka > Poskytovatelé > Test Připojení.", "troubleshootingCircuitBreaker": "Pokud poskytovatel zobrazuje vypnutý jistič, počkejte na ochlazení nebo si pro podrobnosti prohlédněte stránku Stav.", - "troubleshootingOAuth": "U poskytovatelů OAuth proveďte opětovné ověření, pokud platnost tokenů vyprší. Zkontrolujte indikátor stavu karty poskytovatele." + "troubleshootingOAuth": "U poskytovatelů OAuth proveďte opětovné ověření, pokud platnost tokenů vyprší. Zkontrolujte indikátor stavu karty poskytovatele.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Zásady ochrany osobních údajů", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index acd1846e33..338ecfd44d 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Velkommen", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Indstillinger", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "For GitHub Codex-familiemodeller skal du beholde modellen som gh/codex-model; routeren vælger /svar automatisk.", "troubleshootingTestConnection": "Brug Dashboard > Udbydere > Test forbindelse, før du tester fra IDE'er eller eksterne klienter.", "troubleshootingCircuitBreaker": "Hvis en udbyder viser en afbryder åben, skal du vente på nedkøling eller tjekke Health-siden for detaljer.", - "troubleshootingOAuth": "For OAuth-udbydere skal du godkende igen, hvis tokens udløber. Tjek udbyderkortets statusindikator." + "troubleshootingOAuth": "For OAuth-udbydere skal du godkende igen, hvis tokens udløber. Tjek udbyderkortets statusindikator.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privatlivspolitik", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index e479fb070b..f6db88f95c 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Willkommen", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Einstellungen", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Behalten Sie für Modelle der GitHub Codex-Familie das Modell bei gh/codex-model; Der Router wählt /responses automatisch aus.", "troubleshootingTestConnection": "Verwenden Sie Dashboard > Anbieter > Verbindung testen, bevor Sie Tests mit IDEs oder externen Clients durchführen.", "troubleshootingCircuitBreaker": "Wenn ein Anbieter anzeigt, dass der Leistungsschalter geöffnet ist, warten Sie auf die Abklingzeit oder schauen Sie auf der Seite „Zustand“ nach, um Einzelheiten zu erfahren.", - "troubleshootingOAuth": "Führen Sie bei OAuth-Anbietern eine erneute Authentifizierung durch, wenn die Token ablaufen. Überprüfen Sie die Statusanzeige der Anbieterkarte." + "troubleshootingOAuth": "Führen Sie bei OAuth-Anbietern eine erneute Authentifizierung durch, wenn die Token ablaufen. Überprüfen Sie die Statusanzeige der Anbieterkarte.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Datenschutzrichtlinie", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 67d02dd594..b90bff4bc1 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -5037,6 +5037,7 @@ "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", "upstreamResponse": "Upstream provider response", "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", "statusFilters": { "all": "All", "error": "Errors", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 3a013f897b..97087e5be6 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Bienvenido", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Configuración", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Para los modelos de la familia GitHub Codex, mantenga el modelo como gh/codex-model; El enrutador selecciona/respuestas automáticamente.", "troubleshootingTestConnection": "Utilice Panel > Proveedores > Probar conexión antes de realizar pruebas desde IDE o clientes externos.", "troubleshootingCircuitBreaker": "Si un proveedor muestra el disyuntor abierto, espere el tiempo de reutilización o consulte la página de Salud para obtener más detalles.", - "troubleshootingOAuth": "Para los proveedores de OAuth, vuelva a autenticarse si los tokens caducan. Verifique el indicador de estado de la tarjeta del proveedor." + "troubleshootingOAuth": "Para los proveedores de OAuth, vuelva a autenticarse si los tokens caducan. Verifique el indicador de estado de la tarjeta del proveedor.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Política de privacidad", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 33f9f7fe45..2cbd32f525 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Tervetuloa", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Asetukset", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Säilytä GitHub Codex -perheen mallien mallina muodossa gh/codex-model; reititin valitsee / vastaa automaattisesti.", "troubleshootingTestConnection": "Käytä Dashboard > Providers > Test Connection ennen testaamista IDE:istä tai ulkoisista asiakkaista.", "troubleshootingCircuitBreaker": "Jos palveluntarjoaja näyttää katkaisijan auki, odota jäähtymistä tai katso lisätietoja Terveys-sivulta.", - "troubleshootingOAuth": "OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin." + "troubleshootingOAuth": "OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Tietosuojakäytäntö", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index d0bbf6c5ec..bbf4338363 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Bienvenue", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Paramètres", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Pour les modèles de la famille GitHub Codex, conservez le modèle sous la forme gh/codex-model ; Le routeur sélectionne /réponses automatiquement.", "troubleshootingTestConnection": "Utilisez Tableau de bord > Fournisseurs > Tester la connexion avant de tester à partir d'IDE ou de clients externes.", "troubleshootingCircuitBreaker": "Si un fournisseur indique que le disjoncteur est ouvert, attendez le temps de recharge ou consultez la page Santé pour plus de détails.", - "troubleshootingOAuth": "Pour les fournisseurs OAuth, réauthentifiez-vous si les jetons expirent. Vérifiez l'indicateur d'état de la carte du fournisseur." + "troubleshootingOAuth": "Pour les fournisseurs OAuth, réauthentifiez-vous si les jetons expirent. Vérifiez l'indicateur d'état de la carte du fournisseur.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Politique de confidentialité", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 7fade3bdfa..3ca62a86de 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "ברוך הבא", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "הגדרות", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "עבור מודלים של משפחת GitHub Codex, שמור את הדגם בתור gh/codex-model; הנתב בוחר / תגובות באופן אוטומטי.", "troubleshootingTestConnection": "השתמש בלוח מחוונים > ספקים > בדוק חיבור לפני בדיקה מ-IDEs או לקוחות חיצוניים.", "troubleshootingCircuitBreaker": "אם ספק מציג מפסק פתוח, המתן להתקררות או בדוק את דף הבריאות לפרטים.", - "troubleshootingOAuth": "עבור ספקי OAuth, בצע אימות מחדש אם פג תוקפם של אסימונים. בדוק את מחוון מצב כרטיס הספק." + "troubleshootingOAuth": "עבור ספקי OAuth, בצע אימות מחדש אם פג תוקפם של אסימונים. בדוק את מחוון מצב כרטיס הספק.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "מדיניות פרטיות", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 98d8b21ade..8fba2c217b 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "स्वागत है", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "सेटिंग्स", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "GitHub कोडेक्स-फ़ैमिली मॉडल के लिए, मॉडल को gh/codex-model के रूप में रखें; राउटर स्वचालित रूप से/प्रतिक्रियाओं का चयन करता है।", "troubleshootingTestConnection": "आईडीई या बाहरी क्लाइंट से परीक्षण करने से पहले डैशबोर्ड > प्रदाता > परीक्षण कनेक्शन का उपयोग करें।", "troubleshootingCircuitBreaker": "यदि कोई प्रदाता सर्किट ब्रेकर खुला दिखाता है, तो कूलडाउन की प्रतीक्षा करें या विवरण के लिए स्वास्थ्य पृष्ठ देखें।", - "troubleshootingOAuth": "OAuth प्रदाताओं के लिए, यदि टोकन समाप्त हो जाते हैं तो पुनः प्रमाणित करें। प्रदाता कार्ड स्थिति संकेतक की जाँच करें।" + "troubleshootingOAuth": "OAuth प्रदाताओं के लिए, यदि टोकन समाप्त हो जाते हैं तो पुनः प्रमाणित करें। प्रदाता कार्ड स्थिति संकेतक की जाँच करें।", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "गोपनीयता नीति", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 733a345323..056d63634f 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Üdvözöljük", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Beállítások elemre", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "A GitHub Codex-családhoz tartozó modelleknél tartsa a modellt gh/codex-model; a router automatikusan kiválasztja a /válaszokat.", "troubleshootingTestConnection": "Az IDE-kből vagy külső kliensekből történő tesztelés előtt használja az Irányítópult > Szolgáltatók > Kapcsolat tesztelése menüpontot.", "troubleshootingCircuitBreaker": "Ha a szolgáltató azt mutatja, hogy az áramkör megszakítója nyitva van, várja meg a lehűlést, vagy nézze meg az Egészség oldalt a részletekért.", - "troubleshootingOAuth": "OAuth-szolgáltatók esetén hitelesítse újra, ha a tokenek lejárnak. Ellenőrizze a szolgáltatói kártya állapotjelzőjét." + "troubleshootingOAuth": "OAuth-szolgáltatók esetén hitelesítse újra, ha a tokenek lejárnak. Ellenőrizze a szolgáltatói kártya állapotjelzőjét.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Adatvédelmi szabályzat", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 9261de026b..7ac48ac0fb 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Selamat datang", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Pengaturan", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Untuk model keluarga GitHub Codex, pertahankan model sebagai gh/codex-model; router memilih / merespons secara otomatis.", "troubleshootingTestConnection": "Gunakan Dasbor > Penyedia > Uji Koneksi sebelum menguji dari IDE atau klien eksternal.", "troubleshootingCircuitBreaker": "Jika penyedia menunjukkan pemutus sirkuit terbuka, tunggu hingga cooldown atau periksa halaman Kesehatan untuk detailnya.", - "troubleshootingOAuth": "Untuk penyedia OAuth, autentikasi ulang jika masa berlaku token habis. Periksa indikator status kartu penyedia." + "troubleshootingOAuth": "Untuk penyedia OAuth, autentikasi ulang jika masa berlaku token habis. Periksa indikator status kartu penyedia.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Kebijakan Privasi", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index f50718524d..1e81bc4ea0 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Benvenuto", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Impostazioni", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Per i modelli della famiglia GitHub Codex, mantieni il modello come gh/codex-model; il router seleziona/risponde automaticamente.", "troubleshootingTestConnection": "Utilizza Dashboard > Provider > Verifica connessione prima di effettuare test da IDE o client esterni.", "troubleshootingCircuitBreaker": "Se un fornitore mostra l'interruttore aperto, attendi il raffreddamento o controlla la pagina Salute per i dettagli.", - "troubleshootingOAuth": "Per i provider OAuth, eseguire nuovamente l'autenticazione se i token scadono. Controlla l'indicatore di stato della carta del fornitore." + "troubleshootingOAuth": "Per i provider OAuth, eseguire nuovamente l'autenticazione se i token scadono. Controlla l'indicatore di stato della carta del fornitore.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "politica sulla riservatezza", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index e6c9f1a78e..f137751f9d 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "ようこそ", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "設定", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "GitHub Codex ファミリ モデルの場合、モデルを gh/codex-model として保持します。ルーターは自動的に選択/応答します。", "troubleshootingTestConnection": "IDE または外部クライアントからテストする前に、[ダッシュボード] > [プロバイダー] > [接続のテスト] を使用します。", "troubleshootingCircuitBreaker": "プロバイダーがサーキット ブレーカーが開いていることを示している場合は、クールダウンするまで待つか、詳細について [ヘルス] ページを確認してください。", - "troubleshootingOAuth": "OAuth プロバイダーの場合、トークンの有効期限が切れた場合は再認証します。プロバイダー カードのステータス インジケーターを確認します。" + "troubleshootingOAuth": "OAuth プロバイダーの場合、トークンの有効期限が切れた場合は再認証します。プロバイダー カードのステータス インジケーターを確認します。", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "プライバシーポリシー", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index c2fd694265..0b8c8963c9 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "환영합니다", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "설정", @@ -3969,7 +3982,9 @@ "troubleshootingCodexFamily": "GitHub Codex 계열 모델의 경우 모델을 gh/codex-model로 유지합니다. 라우터는 /responses를 자동으로 선택합니다.", "troubleshootingTestConnection": "IDE 또는 외부 클라이언트에서 테스트하기 전에 대시보드 > 공급자 > 연결 테스트를 사용하세요.", "troubleshootingCircuitBreaker": "공급자가 회로 차단기를 열었다고 표시하는 경우 대기 시간을 기다리거나 상태 페이지에서 자세한 내용을 확인하세요.", - "troubleshootingOAuth": "OAuth 공급자의 경우 토큰이 만료되면 다시 인증하세요. 공급자 카드 상태 표시기를 확인하십시오." + "troubleshootingOAuth": "OAuth 공급자의 경우 토큰이 만료되면 다시 인증하세요. 공급자 카드 상태 표시기를 확인하십시오.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "개인 정보 보호 정책", @@ -4360,5 +4375,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 923c6fecff..a0dafb0f8c 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Selamat datang", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "tetapan", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Untuk model keluarga Codex GitHub, kekalkan model sebagai gh/codex-model; penghala memilih /membalas secara automatik.", "troubleshootingTestConnection": "Gunakan Papan Pemuka > Pembekal > Uji Sambungan sebelum menguji daripada IDE atau pelanggan luaran.", "troubleshootingCircuitBreaker": "Jika pembekal menunjukkan pemutus litar terbuka, tunggu masa bertenang atau semak halaman Kesihatan untuk mendapatkan butiran.", - "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal." + "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Dasar Privasi", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 87f0bdc5a3..4e0b95b966 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welkom", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Instellingen", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Voor modellen uit de GitHub Codex-familie behoudt u het model als gh/codex-model; router selecteert /responses automatisch.", "troubleshootingTestConnection": "Gebruik Dashboard > Providers > Verbinding testen voordat u gaat testen vanaf IDE's of externe clients.", "troubleshootingCircuitBreaker": "Als een provider aangeeft dat de stroomonderbreker open is, wacht dan op de cooldown of kijk op de Gezondheidspagina voor meer informatie.", - "troubleshootingOAuth": "Voor OAuth-providers geldt dat u opnieuw moet verifiëren als tokens verlopen. Controleer de statusindicator van de providerkaart." + "troubleshootingOAuth": "Voor OAuth-providers geldt dat u opnieuw moet verifiëren als tokens verlopen. Controleer de statusindicator van de providerkaart.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacybeleid", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 7f420cd60c..eda5ee6b15 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Velkommen", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Innstillinger", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "For GitHub Codex-familiemodeller, behold modellen som gh/codex-model; ruteren velger /responser automatisk.", "troubleshootingTestConnection": "Bruk Dashboard > Leverandører > Test tilkobling før du tester fra IDE-er eller eksterne klienter.", "troubleshootingCircuitBreaker": "Hvis en leverandør viser at strømbryteren er åpen, vent på nedkjøling eller sjekk helsesiden for detaljer.", - "troubleshootingOAuth": "For OAuth-leverandører, autentiser på nytt hvis tokens utløper. Sjekk leverandørkortets statusindikator." + "troubleshootingOAuth": "For OAuth-leverandører, autentiser på nytt hvis tokens utløper. Sjekk leverandørkortets statusindikator.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Personvernerklæring", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 47cb2b0ea0..c11b40e659 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Maligayang pagdating", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Mga setting", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Para sa mga modelo ng pamilya ng GitHub Codex, panatilihing gh/codex-model ang modelo; awtomatikong pinipili /tugon ng router.", "troubleshootingTestConnection": "Gamitin ang Dashboard > Mga Provider > Subukan ang Koneksyon bago subukan mula sa mga IDE o external na kliyente.", "troubleshootingCircuitBreaker": "Kung ipinapakita ng provider na bukas ang circuit breaker, hintayin ang cooldown o tingnan ang page ng Health para sa mga detalye.", - "troubleshootingOAuth": "Para sa mga provider ng OAuth, muling i-authenticate kung mag-e-expire ang mga token. Suriin ang tagapagpahiwatig ng katayuan ng provider card." + "troubleshootingOAuth": "Para sa mga provider ng OAuth, muling i-authenticate kung mag-e-expire ang mga token. Suriin ang tagapagpahiwatig ng katayuan ng provider card.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Patakaran sa Privacy", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index fccc303a88..4fd38df718 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Witamy", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Ustawienia", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "W przypadku modeli z rodziny GitHub Codex zachowaj model jako gh/codex-model; router wybiera opcję /odpowiada automatycznie.", "troubleshootingTestConnection": "Użyj Panelu sterowania > Dostawcy > Testuj połączenie przed testowaniem z IDE lub klientów zewnętrznych.", "troubleshootingCircuitBreaker": "Jeśli dostawca pokazuje, że wyłącznik jest otwarty, poczekaj na ochłodzenie lub sprawdź stronę Zdrowie, aby uzyskać szczegółowe informacje.", - "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy." + "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Polityka prywatności", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index f796253b88..55a1e5f1b2 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -2263,7 +2263,18 @@ "a": "A", "offset": "Offset", "limit": "Limit", - "tab": "Tab" + "tab": "Tab", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Bem-vindo", @@ -2785,7 +2796,9 @@ "testingModel": "Testing Model", "unhideModel": "Unhide Model", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Configurações", @@ -4176,7 +4189,9 @@ "troubleshootingCodexFamily": "Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; o roteador seleciona /responses automaticamente.", "troubleshootingTestConnection": "Use Painel > Provedores > Testar Conexão antes de testar por IDEs ou clientes externos.", "troubleshootingCircuitBreaker": "Se um provedor mostrar circuit breaker aberto, aguarde o cooldown ou verifique a página Health para detalhes.", - "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor." + "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Política de Privacidade", @@ -4507,5 +4522,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index e27f865647..71424e0573 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -2235,7 +2235,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Bem vindo", @@ -2755,7 +2766,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Configurações", @@ -4039,7 +4052,9 @@ "troubleshootingCodexFamily": "Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; roteador seleciona /respostas automaticamente.", "troubleshootingTestConnection": "Use Painel > Provedores > Testar conexão antes de testar em IDEs ou clientes externos.", "troubleshootingCircuitBreaker": "Se um provedor mostrar o disjuntor aberto, aguarde o resfriamento ou verifique a página de integridade para obter detalhes.", - "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor." + "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Política de Privacidade", @@ -4375,5 +4390,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 09e5d7c7fc..f997fb9255 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Bun venit", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Setări", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Pentru modelele din familia GitHub Codex, păstrați modelul ca gh/codex-model; routerul selectează/răspunde automat.", "troubleshootingTestConnection": "Utilizați Tabloul de bord > Furnizori > Testați conexiunea înainte de a testa de la IDE-uri sau clienți externi.", "troubleshootingCircuitBreaker": "Dacă un furnizor arată întrerupătorul deschis, așteptați răcirea sau verificați pagina Sănătate pentru detalii.", - "troubleshootingOAuth": "Pentru furnizorii OAuth, re-autentificați-vă dacă tokenurile expiră. Verificați indicatorul de stare a cardului furnizorului." + "troubleshootingOAuth": "Pentru furnizorii OAuth, re-autentificați-vă dacă tokenurile expiră. Verificați indicatorul de stare a cardului furnizorului.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Politica de confidențialitate", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index f93064b68d..37be9512f2 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -2187,7 +2187,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Добро пожаловать", @@ -2707,7 +2718,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Настройки", @@ -3991,7 +4004,9 @@ "troubleshootingCodexFamily": "Для моделей семейства GitHub Codex сохраните модель как gh/codex-model; Маршрутизатор выбирает / отвечает автоматически.", "troubleshootingTestConnection": "Используйте «Панель мониторинга» > «Поставщики» > «Проверить соединение» перед тестированием из IDE или внешних клиентов.", "troubleshootingCircuitBreaker": "Если поставщик услуг показывает, что автоматический выключатель разомкнут, дождитесь охлаждения или посетите страницу «Здоровье» для получения подробной информации.", - "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера." + "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Политика конфиденциальности", @@ -4382,5 +4397,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index e6468d0fb2..f8ebc3a226 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Vitajte", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Nastavenia", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Pre modely rodiny GitHub Codex ponechajte model ako gh/codex-model; router vyberá / odpovedá automaticky.", "troubleshootingTestConnection": "Pred testovaním z IDE alebo externých klientov použite Dashboard > Providers > Test Connection.", "troubleshootingCircuitBreaker": "Ak poskytovateľ zobrazí istič otvorený, počkajte na vychladnutie alebo skontrolujte stránku Zdravie, kde nájdete podrobnosti.", - "troubleshootingOAuth": "V prípade poskytovateľov OAuth znova overte, ak platnosť tokenov vyprší. Skontrolujte indikátor stavu karty poskytovateľa." + "troubleshootingOAuth": "V prípade poskytovateľov OAuth znova overte, ak platnosť tokenov vyprší. Skontrolujte indikátor stavu karty poskytovateľa.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Zásady ochrany osobných údajov", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index a4423b2711..5430d2f7c2 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Välkommen", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Inställningar", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "För GitHub Codex-familjens modeller, behåll modellen som gh/codex-model; routern väljer /svarar automatiskt.", "troubleshootingTestConnection": "Använd Dashboard > Leverantörer > Testa anslutning innan du testar från IDE:er eller externa klienter.", "troubleshootingCircuitBreaker": "Om en leverantör visar att strömbrytaren är öppen, vänta på nedkylning eller kolla Health-sidan för detaljer.", - "troubleshootingOAuth": "För OAuth-leverantörer, autentisera på nytt om tokens löper ut. Kontrollera leverantörskortets statusindikator." + "troubleshootingOAuth": "För OAuth-leverantörer, autentisera på nytt om tokens löper ut. Kontrollera leverantörskortets statusindikator.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Sekretesspolicy", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 52f0bc361d..c414946024 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "ยินดีต้อนรับ", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "การตั้งค่า", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "สำหรับโมเดลตระกูล GitHub Codex ให้เก็บโมเดลเป็น gh/codex-model; เราเตอร์เลือก / ตอบสนองโดยอัตโนมัติ", "troubleshootingTestConnection": "ใช้แดชบอร์ด > ผู้ให้บริการ > ทดสอบการเชื่อมต่อ ก่อนการทดสอบจาก IDE หรือไคลเอนต์ภายนอก", "troubleshootingCircuitBreaker": "หากผู้ให้บริการแสดงเซอร์กิตเบรกเกอร์เปิดอยู่ ให้รอคูลดาวน์หรือตรวจสอบหน้าสุขภาพเพื่อดูรายละเอียด", - "troubleshootingOAuth": "สำหรับผู้ให้บริการ OAuth ให้ตรวจสอบสิทธิ์อีกครั้งหากโทเค็นหมดอายุ ตรวจสอบตัวบ่งชี้สถานะบัตรผู้ให้บริการ" + "troubleshootingOAuth": "สำหรับผู้ให้บริการ OAuth ให้ตรวจสอบสิทธิ์อีกครั้งหากโทเค็นหมดอายุ ตรวจสอบตัวบ่งชี้สถานะบัตรผู้ให้บริการ", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "นโยบายความเป็นส่วนตัว", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index d282b0617c..6924310e23 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Hoş geldiniz", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Ayarlar", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "GitHub Codex ailesi modelleri için modeli gh/codex-model olarak tutun; yönlendirici /responses uç noktasını otomatik seçer.", "troubleshootingTestConnection": "IDE'lerden veya harici istemcilerden test yapmadan önce Kontrol Paneli > Sağlayıcılar > Bağlantıyı Test Et'i kullanın.", "troubleshootingCircuitBreaker": "Bir sağlayıcıda devre kesici açık görünüyorsa cooldown süresinin dolmasını bekleyin veya ayrıntılar için Sağlık sayfasını kontrol edin.", - "troubleshootingOAuth": "OAuth sağlayıcıları için belirteçlerin süresi dolduğunda yeniden kimlik doğrulaması yapın. Sağlayıcı kartı durum göstergesini kontrol edin." + "troubleshootingOAuth": "OAuth sağlayıcıları için belirteçlerin süresi dolduğunda yeniden kimlik doğrulaması yapın. Sağlayıcı kartı durum göstergesini kontrol edin.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Gizlilik Politikası", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index 1918225e9a..9374d28dc2 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Ласкаво просимо", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Налаштування", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Для моделей сімейства GitHub Codex збережіть модель як gh/codex-model; маршрутизатор вибирає /відповідає автоматично.", "troubleshootingTestConnection": "Перед тестуванням із IDE або зовнішніх клієнтів скористайтеся інструментальною панеллю > Постачальники > Перевірити з’єднання.", "troubleshootingCircuitBreaker": "Якщо постачальник показує, що автоматичний вимикач розімкнуто, дочекайтеся охолодження або подробиці перевірте на сторінці «Стан».", - "troubleshootingOAuth": "Для постачальників OAuth повторна автентифікація, якщо термін дії маркерів закінчився. Перевірте індикатор стану картки провайдера." + "troubleshootingOAuth": "Для постачальників OAuth повторна автентифікація, якщо термін дії маркерів закінчився. Перевірте індикатор стану картки провайдера.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Політика конфіденційності", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index f0a6007d1e..17f029d867 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -2323,7 +2323,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Welcome", @@ -2844,7 +2855,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Settings", @@ -4191,7 +4204,9 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Privacy Policy", @@ -4687,7 +4702,20 @@ "loadingLogs": "Loading logs...", "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", - "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4708,5 +4736,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index c02f68f5c2..77af58875a 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -2163,7 +2163,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "Chào mừng", @@ -2683,7 +2694,9 @@ "zedImportSuccess": "Zed Import Success", "zedImporting": "Zed Importing", "perModelQuotaDescription": "Per Model Quota Description", - "perModelQuotaLabel": "Per Model Quota Label" + "perModelQuotaLabel": "Per Model Quota Label", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "Cài đặt", @@ -3967,7 +3980,9 @@ "troubleshootingCodexFamily": "Đối với các mô hình dòng GitHub Codex, hãy giữ mô hình là gh/codex-model; bộ định tuyến chọn/phản hồi tự động.", "troubleshootingTestConnection": "Sử dụng Trang tổng quan > Nhà cung cấp > Kiểm tra kết nối trước khi thử nghiệm từ IDE hoặc ứng dụng khách bên ngoài.", "troubleshootingCircuitBreaker": "Nếu nhà cung cấp hiển thị cầu dao đang mở, hãy đợi thời gian hồi chiêu hoặc kiểm tra trang Sức khỏe để biết chi tiết.", - "troubleshootingOAuth": "Đối với nhà cung cấp OAuth, hãy xác thực lại nếu mã thông báo hết hạn. Kiểm tra chỉ báo trạng thái thẻ nhà cung cấp." + "troubleshootingOAuth": "Đối với nhà cung cấp OAuth, hãy xác thực lại nếu mã thông báo hết hạn. Kiểm tra chỉ báo trạng thái thẻ nhà cung cấp.", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "Chính sách bảo mật", @@ -4358,5 +4373,108 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "requestLogger": { + "recording": "Recording", + "paused": "Paused", + "pipelineLogsOn": "Pipeline logs on", + "pipelineLogsOff": "Pipeline logs off", + "updatingPipelineLogs": "Updating pipeline logs...", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "searchPlaceholder": "Search models, providers, accounts, API keys, combos...", + "allProviders": "All providers", + "allModels": "All models", + "allAccounts": "All accounts", + "allApiKeys": "All API keys", + "total": "Total", + "ok": "Success", + "err": "Error", + "combo": "Combo", + "keys": "Keys", + "shown": "Shown", + "sortNewest": "Newest", + "sortOldest": "Oldest", + "sortTokensDesc": "Tokens ↓", + "sortTokensAsc": "Tokens ↑", + "sortDurationDesc": "Duration ↓", + "sortDurationAsc": "Duration ↑", + "sortStatusDesc": "Status ↓", + "sortStatusAsc": "Status ↑", + "sortModelAsc": "Model A-Z", + "sortModelDesc": "Model Z-A", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}", + "statusFilters": { + "all": "All", + "error": "Errors", + "success": "Success", + "combo": "Combo" + }, + "columns": { + "status": "Status", + "cacheSource": "Cache Source", + "model": "Model", + "requested": "Requested", + "provider": "Provider", + "protocol": "Request Protocol", + "account": "Account", + "apiKey": "API Key", + "combo": "Combo", + "tokens": "Tokens", + "tps": "TPS", + "duration": "Duration", + "time": "Time" + }, + "loadingLogs": "Loading logs...", + "noLogs": "No logs yet. Make some API calls to see them here.", + "noMatchingLogs": "No logs matching current filters.", + "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}." + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 429d83ecac..fc4e1c31b6 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -1342,10 +1342,7 @@ "mitmClientsTab": "MITM 客户端", "customCliTab": "自定义 CLI", "toolCategories": "工具分类", - "visibleToolsCount": "{count} 个工具可用", - "installationGuide": "安装指南", - "whenToUseLabel": "何时使用", - "openToolDocs": "打开工具文档" + "visibleToolsCount": "{count} 个工具可用" }, "combos": { "title": "组合", @@ -2265,7 +2262,18 @@ "clientPayload": "Client Request Payload", "upstreamPayload": "Upstream Provider Payload", "upstreamNotSentYet": "Not sent to upstream yet", - "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}" + "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}", + "consoleViewer": { + "fetchFailed": "Failed to fetch logs", + "copyFailed": "Failed to copy log entry", + "copyLogEntry": "Copy log entry" + }, + "export": "Export", + "exporting": "Exporting...", + "exportFailed": "Export failed", + "timeRange": "Time Range", + "lastNHours": "Last {hours}", + "defaultRange": "default" }, "onboarding": { "welcome": "欢迎", @@ -2786,7 +2794,9 @@ "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing" + "zedImporting": "Zed Importing", + "expiredBadge": "Expired", + "expiringSoonBadge": "Expiring Soon" }, "settings": { "title": "设置", @@ -4070,7 +4080,9 @@ "troubleshootingCodexFamily": "对于 GitHub Codex 系列模型,请保持模型名为 `gh/codex-model`;路由器会自动选择 `/responses`。", "troubleshootingTestConnection": "在从 IDE 或外部客户端进行测试之前,请使用仪表板 > 提供商 > 测试连接。", "troubleshootingCircuitBreaker": "如果提供商显示断路器已打开,请等待冷却或查看运行状况页面以了解详细信息。", - "troubleshootingOAuth": "对于 OAuth 提供商,如果 Token 过期,请重新认证,并检查提供商卡片上的状态指示器。" + "troubleshootingOAuth": "对于 OAuth 提供商,如果 Token 过期,请重新认证,并检查提供商卡片上的状态指示器。", + "deployTermuxTitle": "Termux (Android)", + "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser." }, "legal": { "privacyPolicy": "隐私政策", @@ -4632,7 +4644,20 @@ "loadingLogs": "正在加载日志...", "noLogs": "暂无日志记录。进行一些API调用以在此处查看它们。", "noMatchingLogs": "没有匹配当前筛选器的日志。", - "callLogsInfo": "调用日志也保存为JSON文件到{dataDir},并根据{retentionDays}和{maxEntries}进行轮换。" + "callLogsInfo": "调用日志也保存为JSON文件到{dataDir},并根据{retentionDays}和{maxEntries}进行轮换。", + "updatePipelineFailed": "Failed to update pipeline logging", + "capturePipeline": "Capture pipeline payloads for new requests", + "sortLogs": "Sort logs", + "refresh": "Refresh", + "columnsLabel": "Columns", + "cacheSem": "SEM", + "cacheUp": "UP", + "semantic": "Semantic", + "upstream": "Upstream", + "semanticCacheHit": "Semantic cache hit (served by OmniRoute)", + "upstreamResponse": "Upstream provider response", + "noApiKey": "No API key", + "requestedRoutedTitle": "Requested {requested}, routed as {routed}" }, "endpointOptions": { "speech": "Speech", @@ -4653,5 +4678,42 @@ "codex": "Codex", "claude": "Claude", "kilo": "Kilo" + }, + "proxyLogger": { + "filterAll": "All", + "filterErrors": "Errors", + "filterSuccess": "Success", + "filterTimeout": "Timeout", + "colStatus": "Status", + "colProxy": "Proxy", + "colTls": "TLS", + "colType": "Type", + "colLevel": "Level", + "colProvider": "Provider", + "colTarget": "Target", + "colLatency": "Latency", + "colPublicIp": "Public IP", + "colTime": "Time", + "recording": "Recording", + "paused": "Paused", + "searchPlaceholder": "Search host, provider, target, IP...", + "allTypes": "All Types", + "allLevels": "All Levels", + "allProviders": "All Providers", + "total": "total", + "ok": "OK", + "err": "ERR", + "timeoutShort": "TMO", + "direct": "direct", + "newest": "Newest", + "oldest": "Oldest", + "latencyDesc": "Latency ↓", + "latencyAsc": "Latency ↑", + "refresh": "Refresh", + "columns": "Columns", + "loadingProxyLogs": "Loading proxy logs...", + "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.", + "noMatchingLogs": "No logs match the current filters.", + "tlsFingerprint": "Chrome 124 TLS Fingerprint" } } diff --git a/src/lib/db/migrationRunner.ts b/src/lib/db/migrationRunner.ts index d0e3d268f0..f3484dc214 100644 --- a/src/lib/db/migrationRunner.ts +++ b/src/lib/db/migrationRunner.ts @@ -100,6 +100,15 @@ const RENAMED_MIGRATION_COMPATIBILITY = [ }, ] as const; +const LEGACY_VERSION_SLOT_MIGRATIONS = [ + { version: "028", name: "evals_tables" }, + { version: "029", name: "webhooks_templates" }, + { version: "030", name: "mcp_scopes_api_keys" }, + { version: "031", name: "api_keys_expires" }, + { version: "032", name: "detailed_logs_warnings" }, + { version: "033", name: "provider_connections_block_extra_usage" }, +] as const; + const PHYSICAL_SCHEMA_SENTINELS = [ { version: "028", tableName: "batches", description: "batches table" }, { version: "024", tableName: "sync_tokens", description: "sync_tokens table" }, @@ -199,6 +208,25 @@ function ensureColumn( } } +function isProviderConnectionMaxConcurrentMigration(migration: { + version: string; + name: string; +}): boolean { + return migration.version === "029"; +} + +function applyProviderConnectionMaxConcurrentMigration(db: Database.Database): void { + ensureColumn( + db, + "provider_connections", + "max_concurrent", + "ALTER TABLE provider_connections ADD COLUMN max_concurrent INTEGER" + ); + db.exec( + "CREATE INDEX IF NOT EXISTS idx_pc_max_concurrent ON provider_connections(provider, max_concurrent)" + ); +} + function isApiKeyLifecycleMigration(migration: { version: string; name: string }): boolean { return migration.version === "032"; } @@ -368,6 +396,58 @@ function reconcileRenumberedMigrations( return repaired; } +function rehomeLegacyVersionSlotMigrations( + db: Database.Database, + files: Array<{ version: string; name: string; path: string }> +): boolean { + let repaired = false; + const diskNamesByVersion = new Map(files.map((file) => [file.version, file.name])); + + for (const legacy of LEGACY_VERSION_SLOT_MIGRATIONS) { + const diskName = diskNamesByVersion.get(legacy.version); + if (!diskName || diskName === legacy.name) { + continue; + } + + const legacyRow = db + .prepare("SELECT version, name FROM _omniroute_migrations WHERE version = ? AND name = ?") + .get(legacy.version, legacy.name) as { version: string; name: string } | undefined; + if (!legacyRow) { + continue; + } + + const legacyVersion = `legacy-${legacy.version}-${legacy.name}`; + const applyRepair = db.transaction(() => { + const existingLegacyRow = db + .prepare("SELECT version FROM _omniroute_migrations WHERE version = ?") + .get(legacyVersion) as { version: string } | undefined; + + if (existingLegacyRow) { + db.prepare("DELETE FROM _omniroute_migrations WHERE version = ? AND name = ?").run( + legacy.version, + legacy.name + ); + return; + } + + db.prepare("UPDATE _omniroute_migrations SET version = ? WHERE version = ? AND name = ?").run( + legacyVersion, + legacy.version, + legacy.name + ); + }); + + applyRepair(); + repaired = true; + console.warn( + `[Migration] Rehomed legacy migration ${legacy.version}_${legacy.name} ` + + `to ${legacyVersion} so current ${legacy.version}_${diskName} can apply.` + ); + } + + return repaired; +} + /** * Create a pre-migration backup of the SQLite database using VACUUM INTO. * Returns the backup path on success, null on failure. @@ -410,6 +490,7 @@ export function runMigrations(db: Database.Database, options?: { isNewDb?: boole ensureMigrationsTable(db); const files = getMigrationFiles(); + rehomeLegacyVersionSlotMigrations(db, files); reconcileRenumberedMigrations(db, files); const applied = getAppliedVersions(db); const appliedRecords = getAppliedRecords(db); @@ -495,7 +576,9 @@ export function runMigrations(db: Database.Database, options?: { isNewDb?: boole for (const migration of pending) { const applyMigration = db.transaction(() => { - if (isApiKeyLifecycleMigration(migration)) { + if (isProviderConnectionMaxConcurrentMigration(migration)) { + applyProviderConnectionMaxConcurrentMigration(db); + } else if (isApiKeyLifecycleMigration(migration)) { applyApiKeyLifecycleMigration(db); } else if (isSearchRequestTypeMigration(migration)) { applySearchRequestTypeMigration(db); diff --git a/src/shared/components/RequestLoggerV2.tsx b/src/shared/components/RequestLoggerV2.tsx index 37adb5abba..d7032bf15e 100644 --- a/src/shared/components/RequestLoggerV2.tsx +++ b/src/shared/components/RequestLoggerV2.tsx @@ -735,7 +735,10 @@ export default function RequestLoggerV2() { } title={ log.requestedModel !== log.model - ? `Requested ${log.requestedModel}, routed as ${log.model}` + ? t("requestedRoutedTitle", { + requested: log.requestedModel, + routed: log.model, + }) : log.requestedModel } > diff --git a/tests/integration/proxy-pipeline.test.ts b/tests/integration/proxy-pipeline.test.ts index 942069abfe..b54d369aea 100644 --- a/tests/integration/proxy-pipeline.test.ts +++ b/tests/integration/proxy-pipeline.test.ts @@ -3,7 +3,7 @@ * * Tests the proxy pipeline wiring: format detection, credential retry loop, * circuit breaker integration, and the new Phase 2 modules (DI container, - * prompt versioning, plugin architecture, eval scheduler). + * prompt versioning, plugin architecture, eval cleanup). * * @module tests/integration/proxy-pipeline.test.ts */ @@ -336,36 +336,13 @@ describe("Prompt Template Versioning — prompts.ts module existence", () => { }); // ═══════════════════════════════════════════════════ -// 5. Eval Scheduler (L-7) +// 5. Eval cleanup (Task 28) // ═══════════════════════════════════════════════════ -describe("Eval Scheduler — scheduler.ts module existence", () => { - it("scheduler.ts should exist", () => { +describe("Eval cleanup — orphaned scheduler module", () => { + it("scheduler.ts should remain deleted", () => { const full = join(ROOT, "src", "lib", "evals", "scheduler.ts"); - assert.ok(existsSync(full), "scheduler.ts should exist"); - }); - - it("should export scheduling functions", () => { - const src = readFileSync(join(ROOT, "src", "lib", "evals", "scheduler.ts"), "utf8"); - assert.match(src, /export function schedule/); - assert.match(src, /export function unschedule/); - assert.match(src, /export function pause/); - assert.match(src, /export function resume/); - assert.match(src, /export\s+(async\s+)?function\s+runNow/); - assert.match(src, /export function getSchedules/); - assert.match(src, /export function getHistory/); - assert.match(src, /export function stopAll/); - }); - - it("should define ScheduledEval and EvalRunResult types", () => { - const src = readFileSync(join(ROOT, "src", "lib", "evals", "scheduler.ts"), "utf8"); - assert.match(src, /export interface ScheduledEval/); - assert.match(src, /export interface EvalRunResult/); - }); - - it("should have pluggable output provider", () => { - const src = readFileSync(join(ROOT, "src", "lib", "evals", "scheduler.ts"), "utf8"); - assert.match(src, /export function setOutputProvider/); + assert.equal(existsSync(full), false, "scheduler.ts should stay removed"); }); }); diff --git a/tests/unit/db-migration-runner.test.ts b/tests/unit/db-migration-runner.test.ts index b586567638..a98aeac462 100644 --- a/tests/unit/db-migration-runner.test.ts +++ b/tests/unit/db-migration-runner.test.ts @@ -676,6 +676,125 @@ test( } ); +test( + "runMigrations rehomes legacy 028-033 version slots before applying current migrations", + serial, + async () => { + const runner = await importFresh("src/lib/db/migrationRunner.ts"); + const db = createDb(); + + try { + db.exec(` + CREATE TABLE _omniroute_migrations ( + version TEXT PRIMARY KEY, + name TEXT NOT NULL, + applied_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + + CREATE TABLE provider_connections ( + id TEXT PRIMARY KEY, + provider TEXT NOT NULL + ); + + CREATE TABLE api_keys ( + id TEXT PRIMARY KEY, + key TEXT NOT NULL + ); + `); + + const legacyRows = [ + ["028", "evals_tables"], + ["029", "webhooks_templates"], + ["030", "mcp_scopes_api_keys"], + ["031", "api_keys_expires"], + ["032", "detailed_logs_warnings"], + ["033", "provider_connections_block_extra_usage"], + ]; + for (const row of legacyRows) { + db.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run( + row[0], + row[1] + ); + } + + const count = withMockedMigrationFs( + { + "028_create_files_and_batches.sql": ` + CREATE TABLE files (id TEXT PRIMARY KEY); + CREATE TABLE batches (id TEXT PRIMARY KEY); + `, + "029_provider_connection_max_concurrent.sql": + "ALTER TABLE provider_connections ADD COLUMN should_not_run INTEGER;", + "030_create_eval_runs.sql": "CREATE TABLE eval_runs (id TEXT PRIMARY KEY);", + "031_create_eval_suites.sql": ` + CREATE TABLE eval_suites (id TEXT PRIMARY KEY); + CREATE TABLE eval_cases (id TEXT PRIMARY KEY); + `, + "032_apikey_lifecycle.sql": "ALTER TABLE api_keys ADD COLUMN should_not_run TEXT;", + "033_create_reasoning_cache.sql": "CREATE TABLE reasoning_cache (id TEXT PRIMARY KEY);", + }, + () => runner.runMigrations(db) + ); + + assert.equal(count, 6); + const rows = db.prepare("SELECT version, name FROM _omniroute_migrations").all() as Array<{ + version: string; + name: string; + }>; + const byVersion = new Map(rows.map((row) => [row.version, row.name])); + + assert.equal(byVersion.get("028"), "create_files_and_batches"); + assert.equal(byVersion.get("029"), "provider_connection_max_concurrent"); + assert.equal(byVersion.get("030"), "create_eval_runs"); + assert.equal(byVersion.get("031"), "create_eval_suites"); + assert.equal(byVersion.get("032"), "apikey_lifecycle"); + assert.equal(byVersion.get("033"), "create_reasoning_cache"); + for (const [version, name] of legacyRows) { + assert.equal(byVersion.get(`legacy-${version}-${name}`), name); + } + + for (const table of [ + "files", + "batches", + "eval_runs", + "eval_suites", + "eval_cases", + "reasoning_cache", + ]) { + assert.ok( + db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table), + `${table} should exist` + ); + } + + const providerColumns = db.prepare("PRAGMA table_info(provider_connections)").all() as Array<{ + name: string; + }>; + const providerColumnNames = new Set(providerColumns.map((column) => column.name)); + assert.equal(providerColumnNames.has("max_concurrent"), true); + assert.equal(providerColumnNames.has("should_not_run"), false); + + const apiKeyColumns = db.prepare("PRAGMA table_info(api_keys)").all() as Array<{ + name: string; + }>; + const apiKeyColumnNames = new Set(apiKeyColumns.map((column) => column.name)); + for (const expected of [ + "revoked_at", + "expires_at", + "last_used_at", + "key_prefix", + "ip_allowlist", + "scopes", + ]) { + assert.equal(apiKeyColumnNames.has(expected), true, `${expected} should exist`); + } + assert.equal(apiKeyColumnNames.has("should_not_run"), false); + } finally { + db.close(); + } + } +); + test( "memory FTS migrations upgrade existing UUID memories without datatype mismatches", serial, diff --git a/tests/unit/evals-route.test.ts b/tests/unit/evals-route.test.ts index 4237d23ccb..4893d36971 100644 --- a/tests/unit/evals-route.test.ts +++ b/tests/unit/evals-route.test.ts @@ -13,22 +13,18 @@ interface EvalsRoutePayload { targets: Array<{ type: string }>; apiKeys: Array<{ id: string; name: string; key?: string }>; recentRuns: Array<{ target: { key: string } }>; -} - -interface ScorecardRoutePayload { scorecard: { overallPassRate: number } | null; - runs: unknown[]; } const core = await import("../../src/lib/db/core.ts"); const localDb = await import("../../src/lib/localDb.ts"); const evalsRoute = await import("../../src/app/api/evals/route.ts"); -const evalsScorecardRoute = await import("../../src/app/api/evals/scorecard/route.ts"); const evalSuitesRoute = await import("../../src/app/api/evals/suites/route.ts"); const evalSuiteByIdRoute = await import("../../src/app/api/evals/suites/[suiteId]/route.ts"); function resetDb() { core.resetDbInstance(); + localDb.resetApiKeyState(); fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); fs.mkdirSync(TEST_DATA_DIR, { recursive: true }); } @@ -39,6 +35,7 @@ test.beforeEach(() => { test.after(() => { core.resetDbInstance(); + localDb.resetApiKeyState(); fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); }); @@ -98,7 +95,7 @@ test("evals GET returns suites, target options, api key metadata, and persisted ); }); -test("eval scorecard route exposes stored runs and aggregated pass rate", async () => { +test("evals GET exposes stored runs and aggregated pass rate inline", async () => { localDb.saveEvalRun({ suiteId: "golden-set", suiteName: "Golden Set", @@ -109,16 +106,14 @@ test("eval scorecard route exposes stored runs and aggregated pass rate", async createdAt: "2026-04-23T12:00:00.000Z", }); - const response = await evalsScorecardRoute.GET( - new Request("http://localhost/api/evals/scorecard?limit=10") - ); + const response = await evalsRoute.GET(new Request("http://localhost/api/evals")); assert.equal(response.status, 200); - const payload = (await response.json()) as ScorecardRoutePayload; + const payload = (await response.json()) as EvalsRoutePayload; assert.ok(payload.scorecard); assert.equal(payload.scorecard.overallPassRate, 100); - assert.equal(Array.isArray(payload.runs), true); - assert.equal(payload.runs.length, 1); + assert.equal(Array.isArray(payload.recentRuns), true); + assert.equal(payload.recentRuns.length, 1); }); test("eval suite routes create, update, fetch, and delete custom suites", async () => {