diff --git a/fe-app-tachyon/fill-po-translations.js b/fe-app-tachyon/fill-po-translations.js index c769ab6a..06da99fa 100644 --- a/fe-app-tachyon/fill-po-translations.js +++ b/fe-app-tachyon/fill-po-translations.js @@ -1233,6 +1233,22 @@ const dictionary = { "Proxy route to Telegram API works": "Маршрут через прокси к Telegram API работает", "sing-box is running": "sing-box запущен", "Test message sent to chat": "Тестовое сообщение отправлено в чат", + + // Component Auto-Update + "Automatic component updates": "Автоматическое обновление компонентов", + "Automatically download and install new versions of components": "Автоматически загружать и устанавливать новые версии компонентов", + "Auto-update mode": "Режим автообновления", + "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)": "Выберите, устанавливать ли обновления сразу при обнаружении или по расписанию (например, в ночное окно обслуживания)", + "Immediately upon release": "Сразу при выходе новой версии", + "By schedule": "По расписанию", + "Scheduled auto-update time": "Время обновления по расписанию", + "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00": "Время суток для запуска планового обновления компонентов в формате ЧЧ:ММ (24ч), например 04:00", + "Enter a valid time in HH:MM format (00:00 to 23:59)": "Введите корректное время в формате ЧЧ:ММ (от 00:00 до 23:59)", + "Eligible components for auto-update": "Разрешенные компоненты для автообновления", + "Select which components are permitted to update automatically": "Выберите, какие компоненты разрешено обновлять автоматически", + "All components": "Все компоненты", + "Tachyon Core": "Ядро Tachyon", + "LuCI Web UI": "Веб-интерфейс LuCI", }; function escapePoString(str) { diff --git a/fe-app-tachyon/locales/calls.json b/fe-app-tachyon/locales/calls.json index 0818f490..1903900c 100644 --- a/fe-app-tachyon/locales/calls.json +++ b/fe-app-tachyon/locales/calls.json @@ -25,7 +25,7 @@ "call": "(provider default)", "key": "(provider default)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1794" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1863" ] }, { @@ -394,9 +394,9 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16607", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:349", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:355", + "src/tachyon/tabs/dashboard/initController.ts:1127", "src/tachyon/tabs/monitoring/initController.ts:722", - "src/tachyon/tabs/monitoring/render.ts:20", - "src/tachyon/tabs/dashboard/initController.ts:1127" + "src/tachyon/tabs/monitoring/render.ts:20" ] }, { @@ -600,7 +600,7 @@ "call": "Administrator Chat IDs", "key": "Administrator Chat IDs", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2213" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2282" ] }, { @@ -649,14 +649,14 @@ "call": "AI Agent REST API Bearer Token", "key": "AI Agent REST API Bearer Token", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1745" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814" ] }, { "call": "AI API Key", "key": "AI API Key", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1813" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882" ] }, { @@ -707,7 +707,7 @@ "call": "AI Doctor Language", "key": "AI Doctor Language", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1800" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1869" ] }, { @@ -730,14 +730,14 @@ "call": "AI Model", "key": "AI Model", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1787" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1856" ] }, { "call": "AI Provider", "key": "AI Provider", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1770" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839" ] }, { @@ -788,7 +788,14 @@ "call": "All checks passed — Telegram bot should work correctly", "key": "All checks passed — Telegram bot should work correctly", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2425" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2494" + ] + }, + { + "call": "All components", + "key": "All components", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1498" ] }, { @@ -952,7 +959,7 @@ "call": "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations.", "key": "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1759" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1828" ] }, { @@ -1024,7 +1031,7 @@ "call": "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)", "key": "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883" ] }, { @@ -1115,7 +1122,7 @@ "call": "At least one Admin Chat ID is required", "key": "At least one Admin Chat ID is required", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2224" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2293" ] }, { @@ -1198,7 +1205,7 @@ "call": "Auto-detected domains", "key": "Auto-detected domains", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2016" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2085" ] }, { @@ -1212,14 +1219,14 @@ "call": "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy.", "key": "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1976" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2045" ] }, { "call": "Auto-failover of proxy sections", "key": "Auto-failover of proxy sections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1515" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584" ] }, { @@ -1244,6 +1251,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7987" ] }, + { + "call": "Auto-update mode", + "key": "Auto-update mode", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1455" + ] + }, { "call": "Automatic component update checks", "key": "Automatic component update checks", @@ -1251,6 +1265,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1398" ] }, + { + "call": "Automatic component updates", + "key": "Automatic component updates", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444" + ] + }, { "call": "Automatic User-Agent selection", "key": "Automatic User-Agent selection", @@ -1272,6 +1293,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1399" ] }, + { + "call": "Automatically download and install new versions of components", + "key": "Automatically download and install new versions of components", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445" + ] + }, { "call": "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings.", "key": "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings.", @@ -1283,7 +1311,7 @@ "call": "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s).", "key": "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1950" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2019" ] }, { @@ -1527,7 +1555,7 @@ "call": "Bot Status", "key": "Bot Status", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2175" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2244" ] }, { @@ -1578,6 +1606,20 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1985" ] }, + { + "call": "By schedule", + "key": "By schedule", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462" + ] + }, + { + "call": "ByeDPI", + "key": "ByeDPI", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504" + ] + }, { "call": "ByeDPI (ciadpi)", "key": "ByeDPI (ciadpi)", @@ -1708,14 +1750,14 @@ "call": "Cache File Path", "key": "Cache File Path", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1554" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1623" ] }, { "call": "Cache file path cannot be empty", "key": "Cache file path cannot be empty", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1568" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1637" ] }, { @@ -1954,7 +1996,7 @@ "key": "Checking…", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:276", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2067" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2136" ] }, { @@ -2023,6 +2065,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7540" ] }, + { + "call": "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)", + "key": "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456" + ] + }, { "call": "Choose whether to restrict the entire internet or only specific Tachyon routing sections.", "key": "Choose whether to restrict the entire internet or only specific Tachyon routing sections.", @@ -2177,10 +2226,10 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10239", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1803", "src/partials/modal/renderModal.ts:263", - "src/tachyon/tabs/monitoring/initController.ts:893", - "src/tachyon/tabs/monitoring/initController.ts:948", "src/tachyon/tabs/dashboard/initController.ts:1267", "src/tachyon/tabs/diagnostic/initController.ts:1553", + "src/tachyon/tabs/monitoring/initController.ts:893", + "src/tachyon/tabs/monitoring/initController.ts:948", "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:227", "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:178", "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:871", @@ -2251,7 +2300,7 @@ "call": "Comma-separated list of Telegram user IDs authorized to control the bot.", "key": "Comma-separated list of Telegram user IDs authorized to control the bot.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283" ] }, { @@ -2296,7 +2345,7 @@ "key": "compressed", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6081", - "src/tachyon/helpers/singBoxVariant.ts:57" + "src/tachyon/helpers/singBoxVariant.ts:56" ] }, { @@ -2325,14 +2374,14 @@ "call": "Config File Path", "key": "Config File Path", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1540" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609" ] }, { "call": "Config Snapshots", "key": "Config Snapshots", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1720" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1789" ] }, { @@ -2534,7 +2583,7 @@ "call": "Custom API Endpoint URL", "key": "Custom API Endpoint URL", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1824" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1893" ] }, { @@ -2591,14 +2640,14 @@ "call": "Custom OpenAI-Compatible API", "key": "Custom OpenAI-Compatible API", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1780" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1849" ] }, { "call": "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)", "key": "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894" ] }, { @@ -2672,22 +2721,22 @@ "call": "Default (auto)", "key": "Default (auto)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2409" ] }, { "call": "Default (Direct WAN / Default mixed proxy)", "key": "Default (Direct WAN / Default mixed proxy)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1647" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1704", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1716" ] }, { "call": "Default address for checking server availability and latency. URLTest uses its own address.", "key": "Default address for checking server availability and latency. URLTest uses its own address.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1514" ] }, { @@ -2742,7 +2791,7 @@ "call": "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC.", "key": "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1679" ] }, { @@ -2928,7 +2977,7 @@ "call": "DNS Check Interval (s)", "key": "DNS Check Interval (s)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963" ] }, { @@ -3209,7 +3258,7 @@ "call": "Domain test sections", "key": "Domain test sections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1988" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2057" ] }, { @@ -3245,7 +3294,7 @@ "call": "Dont Touch My DHCP!", "key": "Dont Touch My DHCP!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1574" ] }, { @@ -3277,42 +3326,42 @@ "call": "Download component packages via the selected section", "key": "Download component packages via the selected section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1484" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1553" ] }, { "call": "Download components through", "key": "Download components through", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1492" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1561" ] }, { "call": "Download components through a section", "key": "Download components through a section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1552" ] }, { "call": "Download lists through", "key": "Download lists through", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1539" ] }, { "call": "Download lists through a section", "key": "Download lists through a section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530" ] }, { "call": "Download remote lists and rule sets via the selected section", "key": "Download remote lists and rule sets via the selected section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531" ] }, { @@ -3466,6 +3515,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:71" ] }, + { + "call": "Eligible components for auto-update", + "key": "Eligible components for auto-update", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1494" + ] + }, { "call": "Enable", "key": "Enable", @@ -3480,21 +3536,21 @@ "call": "Enable Adaptive Intervals", "key": "Enable Adaptive Intervals", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1949" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2018" ] }, { "call": "Enable AI Doctor (ChatGPT / LLM Analysis)", "key": "Enable AI Doctor (ChatGPT / LLM Analysis)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1758" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1827" ] }, { "call": "Enable Anomaly Detection", "key": "Enable Anomaly Detection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1956" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2025" ] }, { @@ -3530,7 +3586,7 @@ "call": "Enable Config Validation", "key": "Enable Config Validation", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1928" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1997" ] }, { @@ -3545,28 +3601,28 @@ "call": "Enable DNS Continuous Check", "key": "Enable DNS Continuous Check", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1888" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957" ] }, { "call": "Enable Firewall Reload Dedup", "key": "Enable Firewall Reload Dedup", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1970" ] }, { "call": "Enable Graceful Degradation", "key": "Enable Graceful Degradation", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1935" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2004" ] }, { "call": "Enable Health Metrics", "key": "Enable Health Metrics", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1977" ] }, { @@ -3601,35 +3657,35 @@ "call": "Enable Proxy Health Monitor", "key": "Enable Proxy Health Monitor", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1933" ] }, { "call": "Enable RAG (Knowledge Base Retrieval)", "key": "Enable RAG (Knowledge Base Retrieval)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909" ] }, { "call": "Enable Smart Cooldowns", "key": "Enable Smart Cooldowns", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1921" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1990" ] }, { "call": "Enable Smart Detect", "key": "Enable Smart Detect", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1975" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2044" ] }, { "call": "Enable Telegram Bot", "key": "Enable Telegram Bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2185" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2254" ] }, { @@ -3650,7 +3706,7 @@ "call": "Enable Watchdog", "key": "Enable Watchdog", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1732" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801" ] }, { @@ -3671,14 +3727,14 @@ "call": "Enables the background daemon that polls Telegram for commands and sends notifications.", "key": "Enables the background daemon that polls Telegram for commands and sends notifications.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2186" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2255" ] }, { "call": "Enables the background watchdog process to monitor services and auto-recover on failures.", "key": "Enables the background watchdog process to monitor services and auto-recover on failures.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1733" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1802" ] }, { @@ -3754,6 +3810,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2907" ] }, + { + "call": "Enter a valid time in HH:MM format (00:00 to 23:59)", + "key": "Enter a valid time in HH:MM format (00:00 to 23:59)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1487" + ] + }, { "call": "Enter a whole number of minutes between 0 and 1440", "key": "Enter a whole number of minutes between 0 and 1440", @@ -3773,7 +3836,7 @@ "call": "Enter the API token obtained from @BotFather.", "key": "Enter the API token obtained from @BotFather.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2197" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2266" ] }, { @@ -4060,12 +4123,12 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19001", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19061", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19233", + "src/tachyon/methods/shell/index.ts:171", + "src/tachyon/methods/shell/index.ts:178", "src/tachyon/tabs/updates/initController.ts:661", "src/tachyon/tabs/updates/initController.ts:662", "src/tachyon/tabs/updates/initController.ts:739", - "src/tachyon/tabs/updates/initController.ts:953", - "src/tachyon/methods/shell/index.ts:171", - "src/tachyon/methods/shell/index.ts:178" + "src/tachyon/tabs/updates/initController.ts:953" ] }, { @@ -4205,8 +4268,8 @@ "call": "Failed to run diagnostics — is the tachyon binary installed?", "key": "Failed to run diagnostics — is the tachyon binary installed?", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2412", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2434" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2481", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2503" ] }, { @@ -4244,7 +4307,7 @@ "call": "Failed to start bot", "key": "Failed to start bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2131" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2200" ] }, { @@ -4276,7 +4339,7 @@ "call": "Failed to stop bot", "key": "Failed to stop bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2145" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214" ] }, { @@ -4344,7 +4407,7 @@ "call": "Failover failure threshold", "key": "Failover failure threshold", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1527" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1596" ] }, { @@ -4410,7 +4473,7 @@ "call": "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure.", "key": "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1889" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1958" ] }, { @@ -4551,7 +4614,7 @@ "call": "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding.", "key": "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1620" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1689" ] }, { @@ -4979,7 +5042,7 @@ "call": "How many hours of metrics to keep (default 24).", "key": "How many hours of metrics to keep (default 24).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1915" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1984" ] }, { @@ -5000,21 +5063,21 @@ "call": "How often to check DNS health in seconds (default 60).", "key": "How often to check DNS health in seconds (default 60).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1895" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1964" ] }, { "call": "How often to check proxy health in seconds (fast tier, default 30).", "key": "How often to check proxy health in seconds (fast tier, default 30).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1871" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1940" ] }, { "call": "How often to check Telegram for new messages (default: 5).", "key": "How often to check Telegram for new messages (default: 5).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2237" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2306" ] }, { @@ -5075,7 +5138,14 @@ "call": "If one health check fails with an error, continue running other checks instead of stopping.", "key": "If one health check fails with an error, continue running other checks instead of stopping.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1936" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2005" + ] + }, + { + "call": "Immediately upon release", + "key": "Immediately upon release", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461" ] }, { @@ -5337,7 +5407,7 @@ "call": "Interface", "key": "Interface", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1671" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1740" ] }, { @@ -6247,7 +6317,7 @@ "call": "Language for AI Doctor diagnosis responses", "key": "Language for AI Doctor diagnosis responses", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870" ] }, { @@ -6271,7 +6341,7 @@ "call": "Latency test URL", "key": "Latency test URL", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1513" ] }, { @@ -6324,7 +6394,7 @@ "call": "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section.", "key": "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2017" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2086" ] }, { @@ -6367,7 +6437,7 @@ "call": "LM Studio (Local PC / Server)", "key": "LM Studio (Local PC / Server)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1779" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1848" ] }, { @@ -6470,7 +6540,14 @@ "call": "Log Level", "key": "Log Level", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1591" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1660" + ] + }, + { + "call": "LuCI Web UI", + "key": "LuCI Web UI", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1500" ] }, { @@ -6478,7 +6555,7 @@ "key": "lx", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6083", - "src/tachyon/helpers/singBoxVariant.ts:59" + "src/tachyon/helpers/singBoxVariant.ts:58" ] }, { @@ -6575,7 +6652,7 @@ "call": "Max reconnects per hour before alert (default 10).", "key": "Max reconnects per hour before alert (default 10).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032" ] }, { @@ -6618,7 +6695,7 @@ "call": "Metrics Retention (hours)", "key": "Metrics Retention (hours)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1914" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1983" ] }, { @@ -6677,7 +6754,7 @@ "call": "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).", "key": "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1788" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1857" ] }, { @@ -6712,7 +6789,7 @@ "call": "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour.", "key": "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2026" ] }, { @@ -6727,7 +6804,7 @@ "call": "Must be a comma-separated list of numeric IDs", "key": "Must be a comma-separated list of numeric IDs", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2227" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296" ] }, { @@ -7013,7 +7090,7 @@ "call": "No domains detected yet", "key": "No domains detected yet", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101" ] }, { @@ -7197,8 +7274,8 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19467", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19477", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19487", - "src/tachyon/helpers/singBoxVariant.ts:35", - "src/tachyon/helpers/singBoxVariant.ts:43", + "src/tachyon/helpers/singBoxVariant.ts:34", + "src/tachyon/helpers/singBoxVariant.ts:42", "src/tachyon/tabs/updates/initController.ts:1237", "src/tachyon/tabs/updates/initController.ts:1251", "src/tachyon/tabs/updates/initController.ts:1265", @@ -7276,42 +7353,42 @@ "call": "Notify on Certificate Warnings", "key": "Notify on Certificate Warnings", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2309" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2378" ] }, { "call": "Notify on Core Crashes", "key": "Notify on Core Crashes", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2257" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2326" ] }, { "call": "Notify on DNS Leaks", "key": "Notify on DNS Leaks", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2322" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2391" ] }, { "call": "Notify on Server Switches", "key": "Notify on Server Switches", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2352" ] }, { "call": "Notify on Service Restarts", "key": "Notify on Service Restarts", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2270" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2339" ] }, { "call": "Notify on Subscription Updates", "key": "Notify on Subscription Updates", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2365" ] }, { @@ -7325,14 +7402,14 @@ "call": "Number of consecutive failed probes before switching sections", "key": "Number of consecutive failed probes before switching sections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1528" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1597" ] }, { "call": "Number of consecutive failures before restarting (default 3).", "key": "Number of consecutive failures before restarting (default 3).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1946" ] }, { @@ -7367,7 +7444,7 @@ "call": "Ollama (Local PC / Server)", "key": "Ollama (Local PC / Server)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1778" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1847" ] }, { @@ -7712,21 +7789,21 @@ "call": "Path must be absolute (start with /)", "key": "Path must be absolute (start with /)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1572" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1641" ] }, { "call": "Path must contain at least one directory (like /tmp/cache.db)", "key": "Path must contain at least one directory (like /tmp/cache.db)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1581" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1650" ] }, { "call": "Path must end with cache.db", "key": "Path must end with cache.db", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1576" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645" ] }, { @@ -7859,7 +7936,7 @@ "call": "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures.", "key": "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1934" ] }, { @@ -7874,7 +7951,7 @@ "call": "Persistent Smart Detect", "key": "Persistent Smart Detect", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1942" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2011" ] }, { @@ -7918,14 +7995,14 @@ "call": "Polling Interval (seconds)", "key": "Polling Interval (seconds)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2236" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2305" ] }, { "call": "Polling interval must be at least 1 second", "key": "Polling interval must be at least 1 second", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2249" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2318" ] }, { @@ -7991,7 +8068,7 @@ "call": "Pre-built index of Tachyon documentation chunks. When enabled, AI Doctor searches relevant docs before generating a diagnosis.", "key": "Pre-built index of Tachyon documentation chunks. When enabled, AI Doctor searches relevant docs before generating a diagnosis.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1841" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1910" ] }, { @@ -8062,7 +8139,7 @@ "call": "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops.", "key": "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1971" ] }, { @@ -8204,21 +8281,21 @@ "call": "Proxy Fail Threshold", "key": "Proxy Fail Threshold", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1876" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1945" ] }, { "call": "Proxy Health Check Interval (s)", "key": "Proxy Health Check Interval (s)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1939" ] }, { "call": "Proxy Health Check URL", "key": "Proxy Health Check URL", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1951" ] }, { @@ -8233,7 +8310,7 @@ "call": "Proxy Section for Bot", "key": "Proxy Section for Bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2333" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2402" ] }, { @@ -8382,7 +8459,7 @@ "call": "Reconnect Threshold", "key": "Reconnect Threshold", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1962" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2031" ] }, { @@ -8397,7 +8474,7 @@ "call": "Records proxy/DNS latency and health status in hourly buckets for analysis.", "key": "Records proxy/DNS latency and health status in hourly buckets for analysis.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1978" ] }, { @@ -8550,7 +8627,7 @@ "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:390", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:425", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1775" ] }, { @@ -8750,7 +8827,7 @@ "call": "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.", "key": "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1707" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1776" ] }, { @@ -8815,7 +8892,7 @@ "call": "Route bot API requests through this section. Leave empty to use the default mixed proxy.", "key": "Route bot API requests through this section. Leave empty to use the default mixed proxy.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2334" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2403" ] }, { @@ -9013,8 +9090,8 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13642", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:302", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2095", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2096", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2164", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2165", "src/tachyon/methods/custom/getDashboardSections.ts:1649", "src/tachyon/tabs/dashboard/partials/renderSections.ts:618", "src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135" @@ -9032,7 +9109,7 @@ "call": "Running diagnostics…", "key": "Running diagnostics…", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2399" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2468" ] }, { @@ -9075,7 +9152,7 @@ "call": "Save a snapshot of the working config and restore it later if something breaks.", "key": "Save a snapshot of the working config and restore it later if something breaks.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1721" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1790" ] }, { @@ -9100,6 +9177,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:486" ] }, + { + "call": "Scheduled auto-update time", + "key": "Scheduled auto-update time", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470" + ] + }, { "call": "Score", "key": "Score", @@ -9152,14 +9236,14 @@ "call": "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required.", "key": "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1746" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1815" ] }, { "call": "Section", "key": "Section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1654", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1723", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:437" ] }, @@ -9188,7 +9272,7 @@ "call": "Section used for Cloudflare WARP API registration. If your ISP blocks Cloudflare API on WAN, select a proxy section (with Mixed proxy enabled) or a tunnel interface section (WireGuard / AmneziaWG / VPN). Leave empty to use direct WAN / default mixed proxy.", "key": "Section used for Cloudflare WARP API registration. If your ISP blocks Cloudflare API on WAN, select a proxy section (with Mixed proxy enabled) or a tunnel interface section (WireGuard / AmneziaWG / VPN). Leave empty to use direct WAN / default mixed proxy.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1631" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1700" ] }, { @@ -9275,7 +9359,7 @@ "call": "Select AI LLM provider for diagnostics", "key": "Select AI LLM provider for diagnostics", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1771" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840" ] }, { @@ -9303,7 +9387,7 @@ "call": "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom.", "key": "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1989" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2058" ] }, { @@ -9345,7 +9429,7 @@ "call": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", "key": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1555" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1624" ] }, { @@ -9359,7 +9443,7 @@ "call": "Select path for sing-box config file. Change this ONLY if you know what you are doing", "key": "Select path for sing-box config file. Change this ONLY if you know what you are doing", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1541" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610" ] }, { @@ -9382,7 +9466,7 @@ "call": "Select the log level for sing-box", "key": "Select the log level for sing-box", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1592" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1661" ] }, { @@ -9413,6 +9497,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:863" ] }, + { + "call": "Select which components are permitted to update automatically", + "key": "Select which components are permitted to update automatically", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1495" + ] + }, { "call": "Selected", "key": "Selected", @@ -9450,28 +9541,28 @@ "call": "Send a Telegram notification if a potential DNS leak is detected.", "key": "Send a Telegram notification if a potential DNS leak is detected.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2323" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2392" ] }, { "call": "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored.", "key": "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2258" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2327" ] }, { "call": "Send a Telegram notification if SSL/TLS certificates are close to expiration.", "key": "Send a Telegram notification if SSL/TLS certificates are close to expiration.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2310" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2379" ] }, { "call": "Send a Telegram notification if the Tachyon service is restarted by the watchdog.", "key": "Send a Telegram notification if the Tachyon service is restarted by the watchdog.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2271" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340" ] }, { @@ -9485,14 +9576,14 @@ "call": "Send a Telegram notification when a URLTest group switches to a new server.", "key": "Send a Telegram notification when a URLTest group switches to a new server.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2284" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2353" ] }, { "call": "Send a Telegram notification when proxy subscriptions are successfully updated.", "key": "Send a Telegram notification when proxy subscriptions are successfully updated.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2297" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2366" ] }, { @@ -9675,9 +9766,9 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3486", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3505", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14452", - "src/tachyon/tabs/diagnostic/initController.ts:609", "src/tachyon/methods/shell/index.ts:440", - "src/tachyon/methods/shell/index.ts:461" + "src/tachyon/methods/shell/index.ts:461", + "src/tachyon/tabs/diagnostic/initController.ts:609" ] }, { @@ -9840,6 +9931,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2530" ] }, + { + "call": "sing-box", + "key": "sing-box", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1501" + ] + }, { "call": "Sing-box autostart disabled", "key": "Sing-box autostart disabled", @@ -10211,7 +10309,7 @@ "call": "Start bot", "key": "Start bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2077" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2146" ] }, { @@ -10250,7 +10348,7 @@ "key": "Starting…", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:335", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2124" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2193" ] }, { @@ -10292,7 +10390,7 @@ "call": "Stop bot", "key": "Stop bot", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2084" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2153" ] }, { @@ -10318,7 +10416,7 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13654", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:308", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2170", "src/tachyon/methods/custom/getDashboardSections.ts:1653", "src/tachyon/tabs/dashboard/partials/renderSections.ts:622", "src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147" @@ -10329,14 +10427,14 @@ "key": "Stopping…", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:349", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2138" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2207" ] }, { "call": "Store auto-detected domains in /etc instead of /tmp to survive reboots.", "key": "Store auto-detected domains in /etc instead of /tmp to survive reboots.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1943" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2012" ] }, { @@ -10382,7 +10480,7 @@ "call": "Strict ECH + DoQ DNS Enforcer", "key": "Strict ECH + DoQ DNS Enforcer", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1619" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1688" ] }, { @@ -10537,6 +10635,13 @@ "src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:69" ] }, + { + "call": "Tachyon Core", + "key": "Tachyon Core", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1499" + ] + }, { "call": "Tachyon Error", "key": "Tachyon Error", @@ -10608,7 +10713,7 @@ "call": "Tachyon will not modify your DHCP configuration", "key": "Tachyon will not modify your DHCP configuration", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1506" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1575" ] }, { @@ -10696,6 +10801,7 @@ "key": "Tailscale", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8410", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505", "src/tachyon/tabs/dashboard/initController.ts:1954" ] }, @@ -10806,7 +10912,7 @@ "call": "Telegram Bot Token", "key": "Telegram Bot Token", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2196" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2265" ] }, { @@ -10821,10 +10927,10 @@ "call": "Test Connection", "key": "Test Connection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2385", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2414", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2430", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2436" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2454", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2483", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2499", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2505" ] }, { @@ -10885,7 +10991,7 @@ "call": "Test Telegram Connection", "key": "Test Telegram Connection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2372" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2441" ] }, { @@ -10926,7 +11032,7 @@ "call": "Testing…", "key": "Testing…", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2396" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2465" ] }, { @@ -11118,6 +11224,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:117" ] }, + { + "call": "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00", + "key": "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1471" + ] + }, { "call": "Time skew tolerance", "key": "Time skew tolerance", @@ -11130,7 +11243,7 @@ "key": "tiny", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6085", - "src/tachyon/helpers/singBoxVariant.ts:61" + "src/tachyon/helpers/singBoxVariant.ts:60" ] }, { @@ -11174,7 +11287,7 @@ "call": "Token is required when the bot is enabled", "key": "Token is required when the bot is enabled", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2205" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2274" ] }, { @@ -11603,7 +11716,7 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10170", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10171", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18827", - "src/tachyon/helpers/singBoxVariant.ts:34", + "src/tachyon/helpers/singBoxVariant.ts:33", "src/tachyon/services/systemInfo.service.ts:10", "src/tachyon/services/systemInfo.service.ts:12", "src/tachyon/services/systemInfo.service.ts:13", @@ -11624,7 +11737,7 @@ "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:329", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2118", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2187", "src/tachyon/methods/custom/getDashboardSections.ts:1655" ] }, @@ -11855,7 +11968,7 @@ "call": "URL to test through the proxy (default: Cloudflare 204).", "key": "URL to test through the proxy (default: Cloudflare 204).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1952" ] }, { @@ -11918,7 +12031,7 @@ "call": "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval.", "key": "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1991" ] }, { @@ -12137,7 +12250,7 @@ "call": "Validates sing-box config before restart to prevent boot loops on broken configs.", "key": "Validates sing-box config before restart to prevent boot loops on broken configs.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1929" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1998" ] }, { @@ -12281,7 +12394,7 @@ "call": "WARP Generator Proxy Section", "key": "WARP Generator Proxy Section", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1630" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699" ] }, { @@ -12295,21 +12408,21 @@ "call": "Watchdog probes every Connection section; when the active one fails several checks in a row, traffic switches to a healthy backup and Telegram is notified. Requires a config reload to take effect.", "key": "Watchdog probes every Connection section; when the active one fails several checks in a row, traffic switches to a healthy backup and Telegram is notified. Requires a config reload to take effect.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1516" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585" ] }, { "call": "Watchdog Status", "key": "Watchdog Status", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1853" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922" ] }, { "call": "WebRTC Leak Protection", "key": "WebRTC Leak Protection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1678" ] }, { @@ -12413,6 +12526,13 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1074" ] }, + { + "call": "Zapret", + "key": "Zapret", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1502" + ] + }, { "call": "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies.", "key": "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies.", @@ -12492,6 +12612,13 @@ "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1733" ] }, + { + "call": "Zapret2", + "key": "Zapret2", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503" + ] + }, { "call": "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies.", "key": "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies.", diff --git a/fe-app-tachyon/locales/tachyon.pot b/fe-app-tachyon/locales/tachyon.pot index ede07a91..ef32e7c4 100644 --- a/fe-app-tachyon/locales/tachyon.pot +++ b/fe-app-tachyon/locales/tachyon.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-01 05:41+0300\n" -"PO-Revision-Date: 2026-09-01 05:41+0300\n" +"POT-Creation-Date: 2026-09-01 07:48+0300\n" +"PO-Revision-Date: 2026-09-01 07:48+0300\n" "Last-Translator: Dushnilin \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -32,7 +32,7 @@ msgstr "" msgid ".lst Lists" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1794 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1863 msgid "(provider default)" msgstr "" @@ -266,9 +266,9 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16607 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:349 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:355 +#: src/tachyon/tabs/dashboard/initController.ts:1127 #: src/tachyon/tabs/monitoring/initController.ts:722 #: src/tachyon/tabs/monitoring/render.ts:20 -#: src/tachyon/tabs/dashboard/initController.ts:1127 msgid "Active" msgstr "" @@ -391,7 +391,7 @@ msgstr "" msgid "Address" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2213 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2282 msgid "Administrator Chat IDs" msgstr "" @@ -419,11 +419,11 @@ msgstr "" msgid "AI & Watchdog" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1745 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814 msgid "AI Agent REST API Bearer Token" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1813 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882 msgid "AI API Key" msgstr "" @@ -456,7 +456,7 @@ msgstr "" msgid "AI Doctor failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1800 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1869 msgid "AI Doctor Language" msgstr "" @@ -470,11 +470,11 @@ msgstr "" msgid "AI DPI Engineer & Strategy Synthesizer" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1787 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1856 msgid "AI Model" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1770 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839 msgid "AI Provider" msgstr "" @@ -507,10 +507,14 @@ msgstr "" msgid "All" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2425 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2494 msgid "All checks passed — Telegram bot should work correctly" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1498 +msgid "All components" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:589 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:598 msgid "All devices" @@ -605,7 +609,7 @@ msgstr "" msgid "Allows limiting the list of servers for URLTest" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1759 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1828 msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." msgstr "" @@ -647,7 +651,7 @@ msgstr "" msgid "Anti-Bypass: Block Private DNS / DoH / DoT" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883 msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Assigned Devices (MAC / IP)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2224 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2293 msgid "At least one Admin Chat ID is required" msgstr "" @@ -755,7 +759,7 @@ msgstr "" msgid "Auto-apply failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2016 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2085 msgid "Auto-detected domains" msgstr "" @@ -763,11 +767,11 @@ msgstr "" msgid "Auto-detected Domains" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1976 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2045 msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1515 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584 msgid "Auto-failover of proxy sections" msgstr "" @@ -784,10 +788,18 @@ msgstr "" msgid "Auto-update Hosts Lists" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1455 +msgid "Auto-update mode" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1398 msgid "Automatic component update checks" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +msgid "Automatic component updates" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2433 msgid "Automatic User-Agent selection" msgstr "" @@ -800,11 +812,15 @@ msgstr "" msgid "Automatically check installed components for new versions" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +msgid "Automatically download and install new versions of components" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8015 msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1950 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2019 msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." msgstr "" @@ -952,7 +968,7 @@ msgstr "" msgid "Bootstrap DNS Servers" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2175 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2244 msgid "Bot Status" msgstr "" @@ -986,6 +1002,14 @@ msgstr "" msgid "By flag emoji from name" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +msgid "By schedule" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504 +msgid "ByeDPI" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12055 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13428 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13428 @@ -1064,11 +1088,11 @@ msgstr "" msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1554 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1623 msgid "Cache File Path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1568 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1637 msgid "Cache file path cannot be empty" msgstr "" @@ -1235,7 +1259,7 @@ msgid "Checking..." msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:276 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2067 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2136 msgid "Checking…" msgstr "" @@ -1281,6 +1305,10 @@ msgstr "" msgid "Choose Hosts File..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456 +msgid "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:830 msgid "Choose whether to restrict the entire internet or only specific Tachyon routing sections." msgstr "" @@ -1374,10 +1402,10 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10239 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1803 #: src/partials/modal/renderModal.ts:263 -#: src/tachyon/tabs/monitoring/initController.ts:893 -#: src/tachyon/tabs/monitoring/initController.ts:948 #: src/tachyon/tabs/dashboard/initController.ts:1267 #: src/tachyon/tabs/diagnostic/initController.ts:1553 +#: src/tachyon/tabs/monitoring/initController.ts:893 +#: src/tachyon/tabs/monitoring/initController.ts:948 #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:227 #: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:178 #: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:871 @@ -1424,7 +1452,7 @@ msgstr "" msgid "Cloudflare WARP API access token" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283 msgid "Comma-separated list of Telegram user IDs authorized to control the bot." msgstr "" @@ -1451,7 +1479,7 @@ msgid "Components" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6081 -#: src/tachyon/helpers/singBoxVariant.ts:57 +#: src/tachyon/helpers/singBoxVariant.ts:56 msgid "compressed" msgstr "" @@ -1468,11 +1496,11 @@ msgstr "" msgid "confidence" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1540 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609 msgid "Config File Path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1720 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1789 msgid "Config Snapshots" msgstr "" @@ -1599,7 +1627,7 @@ msgstr "" msgid "Custom" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1824 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1893 msgid "Custom API Endpoint URL" msgstr "" @@ -1632,11 +1660,11 @@ msgstr "" msgid "Custom header for handshake response" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1780 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1849 msgid "Custom OpenAI-Compatible API" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894 msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" msgstr "" @@ -1680,16 +1708,16 @@ msgstr "" msgid "Days of Week" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2409 msgid "Default (auto)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1647 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1704 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1716 msgid "Default (Direct WAN / Default mixed proxy)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1514 msgid "Default address for checking server availability and latency. URLTest uses its own address." msgstr "" @@ -1723,7 +1751,7 @@ msgstr "" msgid "Detect server country" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1679 msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." msgstr "" @@ -1837,7 +1865,7 @@ msgstr "" msgid "DNS Check Interval" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963 msgid "DNS Check Interval (s)" msgstr "" @@ -2007,7 +2035,7 @@ msgstr "" msgid "Domain Resolver" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1988 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2057 msgid "Domain test sections" msgstr "" @@ -2028,7 +2056,7 @@ msgstr "" msgid "Done" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1574 msgid "Dont Touch My DHCP!" msgstr "" @@ -2048,27 +2076,27 @@ msgstr "" msgid "Download .conf" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1484 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1553 msgid "Download component packages via the selected section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1492 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1561 msgid "Download components through" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1552 msgid "Download components through a section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1539 msgid "Download lists through" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530 msgid "Download lists through a section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531 msgid "Download remote lists and rule sets via the selected section" msgstr "" @@ -2163,6 +2191,10 @@ msgstr "" msgid "Edit" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1494 +msgid "Eligible components for auto-update" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:201 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:539 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7235 @@ -2170,15 +2202,15 @@ msgstr "" msgid "Enable" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1949 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2018 msgid "Enable Adaptive Intervals" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1758 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1827 msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1956 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2025 msgid "Enable Anomaly Detection" msgstr "" @@ -2199,7 +2231,7 @@ msgstr "" msgid "Enable built-in DNS resolver for domains handled by this section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1928 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1997 msgid "Enable Config Validation" msgstr "" @@ -2208,19 +2240,19 @@ msgstr "" msgid "Enable Direct WAN Bypass" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1888 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957 msgid "Enable DNS Continuous Check" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1970 msgid "Enable Firewall Reload Dedup" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1935 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2004 msgid "Enable Graceful Degradation" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1977 msgid "Enable Health Metrics" msgstr "" @@ -2240,23 +2272,23 @@ msgstr "" msgid "Enable Output Network Interface" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1933 msgid "Enable Proxy Health Monitor" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909 msgid "Enable RAG (Knowledge Base Retrieval)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1921 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1990 msgid "Enable Smart Cooldowns" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1975 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2044 msgid "Enable Smart Detect" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2185 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2254 msgid "Enable Telegram Bot" msgstr "" @@ -2268,7 +2300,7 @@ msgstr "" msgid "Enable WAN DNS Fallback for Main DNS" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1732 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801 msgid "Enable Watchdog" msgstr "" @@ -2280,11 +2312,11 @@ msgstr "" msgid "Enable YACD WAN Access" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2186 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2255 msgid "Enables the background daemon that polls Telegram for commands and sends notifications." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1733 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1802 msgid "Enables the background watchdog process to monitor services and auto-recover on failures." msgstr "" @@ -2334,6 +2366,10 @@ msgstr "" msgid "Enter a level name" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1487 +msgid "Enter a valid time in HH:MM format (00:00 to 23:59)" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:410 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:924 msgid "Enter a whole number of minutes between 0 and 1440" @@ -2343,7 +2379,7 @@ msgstr "" msgid "Enter HWID" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2197 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2266 msgid "Enter the API token obtained from @BotFather." msgstr "" @@ -2525,12 +2561,12 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19001 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19061 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19233 +#: src/tachyon/methods/shell/index.ts:171 +#: src/tachyon/methods/shell/index.ts:178 #: src/tachyon/tabs/updates/initController.ts:661 #: src/tachyon/tabs/updates/initController.ts:662 #: src/tachyon/tabs/updates/initController.ts:739 #: src/tachyon/tabs/updates/initController.ts:953 -#: src/tachyon/methods/shell/index.ts:171 -#: src/tachyon/methods/shell/index.ts:178 msgid "Failed to execute" msgstr "" @@ -2616,8 +2652,8 @@ msgstr "" msgid "Failed to restore snapshot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2412 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2481 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2503 msgid "Failed to run diagnostics — is the tachyon binary installed?" msgstr "" @@ -2640,7 +2676,7 @@ msgstr "" msgid "Failed to start benchmark" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2131 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2200 msgid "Failed to start bot" msgstr "" @@ -2660,7 +2696,7 @@ msgstr "" msgid "Failed to start watchdog" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2145 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214 msgid "Failed to stop bot" msgstr "" @@ -2707,7 +2743,7 @@ msgstr "" msgid "Failed to update subscriptions" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1527 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1596 msgid "Failover failure threshold" msgstr "" @@ -2746,7 +2782,7 @@ msgstr "" msgid "Family Profiles" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1889 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1958 msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." msgstr "" @@ -2833,7 +2869,7 @@ msgstr "" msgid "Forces SafeSearch on Google, Yandex, Bing, DuckDuckGo and Strict Restricted Mode on YouTube via DNS rewrite for all devices in this profile." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1620 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1689 msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." msgstr "" @@ -3090,7 +3126,7 @@ msgstr "" msgid "Hosts Lists Update Interval" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1915 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1984 msgid "How many hours of metrics to keep (default 24)." msgstr "" @@ -3102,15 +3138,15 @@ msgstr "" msgid "How often the currently selected server is checked" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1895 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1964 msgid "How often to check DNS health in seconds (default 60)." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1871 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1940 msgid "How often to check proxy health in seconds (fast tier, default 30)." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2237 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2306 msgid "How often to check Telegram for new messages (default: 5)." msgstr "" @@ -3147,10 +3183,14 @@ msgstr "" msgid "Idle timeout" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1936 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2005 msgid "If one health check fails with an error, continue running other checks instead of stopping." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461 +msgid "Immediately upon release" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7586 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7599 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7649 @@ -3307,7 +3347,7 @@ msgstr "" msgid "Installed version is newer than release" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1671 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1740 msgid "Interface" msgstr "" @@ -3869,7 +3909,7 @@ msgstr "" msgid "LAN Devices" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870 msgid "Language for AI Doctor diagnosis responses" msgstr "" @@ -3884,7 +3924,7 @@ msgstr "" msgid "Latency test failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1513 msgid "Latency test URL" msgstr "" @@ -3916,7 +3956,7 @@ msgstr "" msgid "List must be an HTTP(S) URL or a local .lst path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2017 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2086 msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." msgstr "" @@ -3941,7 +3981,7 @@ msgstr "" msgid "Lists and rule sets successfully updated!" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1779 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1848 msgid "LM Studio (Local PC / Server)" msgstr "" @@ -4008,12 +4048,16 @@ msgstr "" msgid "Local Address" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1591 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1660 msgid "Log Level" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1500 +msgid "LuCI Web UI" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6083 -#: src/tachyon/helpers/singBoxVariant.ts:59 +#: src/tachyon/helpers/singBoxVariant.ts:58 msgid "lx" msgstr "" @@ -4071,7 +4115,7 @@ msgstr "" msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032 msgid "Max reconnects per hour before alert (default 10)." msgstr "" @@ -4096,7 +4140,7 @@ msgstr "" msgid "Method" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1914 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1983 msgid "Metrics Retention (hours)" msgstr "" @@ -4131,7 +4175,7 @@ msgstr "" msgid "Mode" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1788 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1857 msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." msgstr "" @@ -4151,7 +4195,7 @@ msgstr "" msgid "Monitoring" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2026 msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." msgstr "" @@ -4160,7 +4204,7 @@ msgstr "" msgid "MTU" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2227 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296 msgid "Must be a comma-separated list of numeric IDs" msgstr "" @@ -4338,7 +4382,7 @@ msgstr "" msgid "No diagnostic history available yet." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101 msgid "No domains detected yet" msgstr "" @@ -4462,8 +4506,8 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19467 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19477 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19487 -#: src/tachyon/helpers/singBoxVariant.ts:35 -#: src/tachyon/helpers/singBoxVariant.ts:43 +#: src/tachyon/helpers/singBoxVariant.ts:34 +#: src/tachyon/helpers/singBoxVariant.ts:42 #: src/tachyon/tabs/updates/initController.ts:1237 #: src/tachyon/tabs/updates/initController.ts:1251 #: src/tachyon/tabs/updates/initController.ts:1265 @@ -4520,27 +4564,27 @@ msgstr "" msgid "Notify in Telegram" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2309 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2378 msgid "Notify on Certificate Warnings" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2257 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2326 msgid "Notify on Core Crashes" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2322 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2391 msgid "Notify on DNS Leaks" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2352 msgid "Notify on Server Switches" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2270 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2339 msgid "Notify on Service Restarts" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2365 msgid "Notify on Subscription Updates" msgstr "" @@ -4548,11 +4592,11 @@ msgstr "" msgid "Number of consecutive failed checks required before switching DNS servers." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1528 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1597 msgid "Number of consecutive failed probes before switching sections" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1946 msgid "Number of consecutive failures before restarting (default 3)." msgstr "" @@ -4572,7 +4616,7 @@ msgstr "" msgid "Obfuscation password" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1778 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1847 msgid "Ollama (Local PC / Server)" msgstr "" @@ -4782,15 +4826,15 @@ msgstr "" msgid "Path cannot be empty" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1572 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1641 msgid "Path must be absolute (start with /)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1581 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1650 msgid "Path must contain at least one directory (like /tmp/cache.db)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1576 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645 msgid "Path must end with cache.db" msgstr "" @@ -4872,7 +4916,7 @@ msgstr "" msgid "Periodically check the current level and switch to a faster server even when the current one works." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1934 msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." msgstr "" @@ -4881,7 +4925,7 @@ msgstr "" msgid "Persistent Keepalive" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1942 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2011 msgid "Persistent Smart Detect" msgstr "" @@ -4907,11 +4951,11 @@ msgstr "" msgid "Please specify strategy name and arguments" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2236 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2305 msgid "Polling Interval (seconds)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2249 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2318 msgid "Polling interval must be at least 1 second" msgstr "" @@ -4950,7 +4994,7 @@ msgstr "" msgid "Ports must be between 1 and 65535" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1841 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1910 msgid "Pre-built index of Tachyon documentation chunks. When enabled, AI Doctor searches relevant docs before generating a diagnosis." msgstr "" @@ -4991,7 +5035,7 @@ msgstr "" msgid "Preshared Key" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1971 msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." msgstr "" @@ -5079,15 +5123,15 @@ msgstr "" msgid "Proxy / DPI" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1876 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1945 msgid "Proxy Fail Threshold" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1939 msgid "Proxy Health Check Interval (s)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1951 msgid "Proxy Health Check URL" msgstr "" @@ -5096,7 +5140,7 @@ msgstr "" msgid "Proxy link is unavailable" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2333 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2402 msgid "Proxy Section for Bot" msgstr "" @@ -5185,7 +5229,7 @@ msgstr "" msgid "Recommended Quick Fixes:" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1962 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2031 msgid "Reconnect Threshold" msgstr "" @@ -5194,7 +5238,7 @@ msgstr "" msgid "Reconnect WAN" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1978 msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." msgstr "" @@ -5287,7 +5331,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:390 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:425 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1775 msgid "Reset Settings" msgstr "" @@ -5409,7 +5453,7 @@ msgstr "" msgid "Restore Snapshot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1707 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1776 msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." msgstr "" @@ -5450,7 +5494,7 @@ msgstr "" msgid "Route all non-local LAN traffic through the tailnet exit node instead of the proxy engines." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2334 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2403 msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." msgstr "" @@ -5573,8 +5617,8 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13642 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:302 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2095 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2096 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2164 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2165 #: src/tachyon/methods/custom/getDashboardSections.ts:1649 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:618 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135 @@ -5586,7 +5630,7 @@ msgstr "" msgid "Running benchmarks..." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2399 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2468 msgid "Running diagnostics…" msgstr "" @@ -5611,7 +5655,7 @@ msgstr "" msgid "Save" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1721 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1790 msgid "Save a snapshot of the working config and restore it later if something breaks." msgstr "" @@ -5628,6 +5672,10 @@ msgstr "" msgid "Schedule Rule" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +msgid "Scheduled auto-update time" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12353 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12946 #: src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:495 @@ -5658,11 +5706,11 @@ msgstr "" msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1746 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1815 msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1654 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1723 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:437 msgid "Section" msgstr "" @@ -5679,7 +5727,7 @@ msgstr "" msgid "Section Rules Content" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1631 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1700 msgid "Section used for Cloudflare WARP API registration. If your ISP blocks Cloudflare API on WAN, select a proxy section (with Mixed proxy enabled) or a tunnel interface section (WireGuard / AmneziaWG / VPN). Leave empty to use direct WAN / default mixed proxy." msgstr "" @@ -5730,7 +5778,7 @@ msgstr "" msgid "Select active days. If none selected, the rule applies every day." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1771 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840 msgid "Select AI LLM provider for diagnostics" msgstr "" @@ -5746,7 +5794,7 @@ msgstr "" msgid "Select an intermediate section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1989 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2058 msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." msgstr "" @@ -5770,7 +5818,7 @@ msgstr "" msgid "Select or enter a User-Agent" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1555 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1624 msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" msgstr "" @@ -5778,7 +5826,7 @@ msgstr "" msgid "Select or enter the IP addresses of your game consoles." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1541 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610 msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" msgstr "" @@ -5792,7 +5840,7 @@ msgstr "" msgid "Select the fastest node" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1592 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1661 msgid "Select the log level for sing-box" msgstr "" @@ -5812,6 +5860,10 @@ msgstr "" msgid "Select whether to disable the target during the schedule or enable it ONLY during the schedule." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1495 +msgid "Select which components are permitted to update automatically" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:7889 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8001 #: src/tachyon/tabs/dashboard/initController.ts:1289 @@ -5833,19 +5885,19 @@ msgstr "" msgid "Send" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2323 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2392 msgid "Send a Telegram notification if a potential DNS leak is detected." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2258 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2327 msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2310 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2379 msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2271 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340 msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." msgstr "" @@ -5853,11 +5905,11 @@ msgstr "" msgid "Send a Telegram notification to admins when a blocked site is accessed. Requires the Telegram bot to be enabled." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2284 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2353 msgid "Send a Telegram notification when a URLTest group switches to a new server." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2297 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2366 msgid "Send a Telegram notification when proxy subscriptions are successfully updated." msgstr "" @@ -5971,9 +6023,9 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3486 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3505 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14452 -#: src/tachyon/tabs/diagnostic/initController.ts:609 #: src/tachyon/methods/shell/index.ts:440 #: src/tachyon/methods/shell/index.ts:461 +#: src/tachyon/tabs/diagnostic/initController.ts:609 msgid "Service action failed" msgstr "" @@ -6074,6 +6126,10 @@ msgstr "" msgid "Show subscription metadata for this source on the dashboard" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1501 +msgid "sing-box" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9536 #: src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:77 msgid "Sing-box autostart disabled" @@ -6297,7 +6353,7 @@ msgstr "" msgid "Start" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2077 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2146 msgid "Start bot" msgstr "" @@ -6321,7 +6377,7 @@ msgid "Start watchdog" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:335 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2124 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2193 msgid "Starting…" msgstr "" @@ -6348,7 +6404,7 @@ msgstr "" msgid "Stop" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2084 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2153 msgid "Stop bot" msgstr "" @@ -6365,7 +6421,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13654 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:308 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2170 #: src/tachyon/methods/custom/getDashboardSections.ts:1653 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:622 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147 @@ -6373,11 +6429,11 @@ msgid "Stopped" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:349 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2138 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2207 msgid "Stopping…" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1943 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2012 msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." msgstr "" @@ -6405,7 +6461,7 @@ msgstr "" msgid "Strict (🔒)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1688 msgid "Strict ECH + DoQ DNS Enforcer" msgstr "" @@ -6501,6 +6557,10 @@ msgstr "" msgid "Table exist" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1499 +msgid "Tachyon Core" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6448 #: src/tachyon/services/core.service.ts:52 msgid "Tachyon Error" @@ -6541,7 +6601,7 @@ msgstr "" msgid "Tachyon update did not complete within the timeout" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1506 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1575 msgid "Tachyon will not modify your DHCP configuration" msgstr "" @@ -6596,6 +6656,7 @@ msgid "Tachyon-managed nfqws2 runtime is ready" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8410 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505 #: src/tachyon/tabs/dashboard/initController.ts:1954 msgid "Tailscale" msgstr "" @@ -6661,7 +6722,7 @@ msgstr "" msgid "Telegram Bot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2196 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2265 msgid "Telegram Bot Token" msgstr "" @@ -6670,10 +6731,10 @@ msgstr "" msgid "Telegram Channel" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2385 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2414 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2430 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2436 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2454 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2499 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2505 msgid "Test Connection" msgstr "" @@ -6710,7 +6771,7 @@ msgstr "" msgid "Test servers whose names match the expression." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2372 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2441 msgid "Test Telegram Connection" msgstr "" @@ -6736,7 +6797,7 @@ msgstr "" msgid "Testing..." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2396 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2465 msgid "Testing…" msgstr "" @@ -6857,12 +6918,16 @@ msgstr "" msgid "Time is required (e.g. 22:00)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1471 +msgid "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:3219 msgid "Time skew tolerance" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6085 -#: src/tachyon/helpers/singBoxVariant.ts:61 +#: src/tachyon/helpers/singBoxVariant.ts:60 msgid "tiny" msgstr "" @@ -6888,7 +6953,7 @@ msgstr "" msgid "Toddler (👶)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2205 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2274 msgid "Token is required when the bot is enabled" msgstr "" @@ -7152,7 +7217,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10170 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10171 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18827 -#: src/tachyon/helpers/singBoxVariant.ts:34 +#: src/tachyon/helpers/singBoxVariant.ts:33 #: src/tachyon/services/systemInfo.service.ts:10 #: src/tachyon/services/systemInfo.service.ts:12 #: src/tachyon/services/systemInfo.service.ts:13 @@ -7170,7 +7235,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:329 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2118 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2187 #: src/tachyon/methods/custom/getDashboardSections.ts:1655 msgid "Unknown" msgstr "" @@ -7320,7 +7385,7 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1952 msgid "URL to test through the proxy (default: Cloudflare 204)." msgstr "" @@ -7359,7 +7424,7 @@ msgstr "" msgid "URLTest settings" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1991 msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." msgstr "" @@ -7506,7 +7571,7 @@ msgstr "" msgid "Valid" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1929 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1998 msgid "Validates sing-box config before restart to prevent boot loops on broken configs." msgstr "" @@ -7593,7 +7658,7 @@ msgstr "" msgid "WARP Configuration generated and loaded successfully!" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699 msgid "WARP Generator Proxy Section" msgstr "" @@ -7601,15 +7666,15 @@ msgstr "" msgid "WARP Private Key" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1516 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585 msgid "Watchdog probes every Connection section; when the active one fails several checks in a row, traffic switches to a healthy backup and Telegram is notified. Requires a config reload to take effect." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1853 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922 msgid "Watchdog Status" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1678 msgid "WebRTC Leak Protection" msgstr "" @@ -7672,6 +7737,10 @@ msgstr "" msgid "You can select Output Network Interface, by default autodetect" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1502 +msgid "Zapret" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5648 msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." msgstr "" @@ -7724,6 +7793,10 @@ msgstr "" msgid "Zapret v2 (nfqws2)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503 +msgid "Zapret2" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6093 msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." msgstr "" diff --git a/fe-app-tachyon/locales/tachyon.ru.po b/fe-app-tachyon/locales/tachyon.ru.po index b7cadcae..e2e93df0 100644 --- a/fe-app-tachyon/locales/tachyon.ru.po +++ b/fe-app-tachyon/locales/tachyon.ru.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-01 08:41+0300\n" -"PO-Revision-Date: 2026-09-01 08:41+0300\n" +"POT-Creation-Date: 2026-09-01 10:48+0300\n" +"PO-Revision-Date: 2026-09-01 10:48+0300\n" "Last-Translator: Dushnilin\n" "Language-Team: none\n" "Language: ru\n" @@ -314,6 +314,9 @@ msgstr "Все" msgid "All checks passed — Telegram bot should work correctly" msgstr "Все проверки пройдены — бот должен работать корректно" +msgid "All components" +msgstr "Все компоненты" + msgid "All devices" msgstr "Все устройства" @@ -494,9 +497,15 @@ msgstr "Автолечение сетевого стека" msgid "Auto-update Hosts Lists" msgstr "Автообновление списков Hosts" +msgid "Auto-update mode" +msgstr "Режим автообновления" + msgid "Automatic component update checks" msgstr "Автоматическая проверка обновлений компонентов" +msgid "Automatic component updates" +msgstr "Автоматическое обновление компонентов" + msgid "Automatic User-Agent selection" msgstr "Автоматический выбор User-Agent" @@ -506,6 +515,9 @@ msgstr "Автоматически добавлять текст к имени msgid "Automatically check installed components for new versions" msgstr "Автоматически проверять установленные компоненты на наличие новых версий" +msgid "Automatically download and install new versions of components" +msgstr "Автоматически загружать и устанавливать новые версии компонентов" + msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." msgstr "Автоматически создать аккаунт Cloudflare WARP и настроить все параметры AmneziaWG." @@ -626,6 +638,12 @@ msgstr "Встроенные наборы правил" msgid "By flag emoji from name" msgstr "По эмодзи флага из имени" +msgid "By schedule" +msgstr "По расписанию" + +msgid "ByeDPI" +msgstr "" + msgid "ByeDPI (ciadpi)" msgstr "ByeDPI (ciadpi)" @@ -776,6 +794,9 @@ msgstr "Выберите визуальную иконку для профиля msgid "Choose Hosts File..." msgstr "Выбрать файл Hosts..." +msgid "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)" +msgstr "Выберите, устанавливать ли обновления сразу при обнаружении или по расписанию (например, в ночное окно обслуживания)" + msgid "Choose whether to restrict the entire internet or only specific Tachyon routing sections." msgstr "Выберите, блокировать ли весь доступ в интернет или только определенные секции Tachyon." @@ -1337,6 +1358,9 @@ msgstr "Каждая запись — \"proto\", \"proto:port\" или \"proto:p msgid "Edit" msgstr "Изменить" +msgid "Eligible components for auto-update" +msgstr "Разрешенные компоненты для автообновления" + msgid "Enable" msgstr "Включить" @@ -1454,6 +1478,9 @@ msgstr "Введите домен или IP для проверки (напр. e msgid "Enter a level name" msgstr "Введите имя уровня" +msgid "Enter a valid time in HH:MM format (00:00 to 23:59)" +msgstr "Введите корректное время в формате ЧЧ:ММ (от 00:00 до 23:59)" + msgid "Enter a whole number of minutes between 0 and 1440" msgstr "Введите целое число минут от 0 до 1440" @@ -1961,6 +1988,9 @@ msgstr "Таймаут простоя" msgid "If one health check fails with an error, continue running other checks instead of stopping." msgstr "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться." +msgid "Immediately upon release" +msgstr "Сразу при выходе новой версии" + msgid "Import" msgstr "Импорт" @@ -2495,6 +2525,9 @@ msgstr "Локальный адрес" msgid "Log Level" msgstr "Уровень логирования" +msgid "LuCI Web UI" +msgstr "Веб-интерфейс LuCI" + msgid "lx" msgstr "lx" @@ -3506,6 +3539,9 @@ msgstr "Расписание" msgid "Schedule Rule" msgstr "Правило расписания" +msgid "Scheduled auto-update time" +msgstr "Время обновления по расписанию" + msgid "Score" msgstr "Баллы" @@ -3635,6 +3671,9 @@ msgstr "Выберите WAN-интерфейсы для отслеживани msgid "Select whether to disable the target during the schedule or enable it ONLY during the schedule." msgstr "Выберите, отключать ли цель в период расписания или включать ТОЛЬКО в период расписания." +msgid "Select which components are permitted to update automatically" +msgstr "Выберите, какие компоненты разрешено обновлять автоматически" + msgid "Selected" msgstr "Выбран" @@ -3800,6 +3839,9 @@ msgstr "Не удалось показать конфигурацию sing-box" msgid "Show subscription metadata for this source on the dashboard" msgstr "Показывать метаданные подписки для этого источника на дашборде" +msgid "sing-box" +msgstr "" + msgid "Sing-box autostart disabled" msgstr "Автостарт sing-box отключен" @@ -4070,6 +4112,9 @@ msgstr "Системная информация" msgid "Table exist" msgstr "Таблица существует" +msgid "Tachyon Core" +msgstr "Ядро Tachyon" + msgid "Tachyon Error" msgstr "Ошибка Tachyon" @@ -4295,6 +4340,9 @@ msgstr "Время кэширования DNS-записей в секундах msgid "Time is required (e.g. 22:00)" msgstr "Укажите время (например, 22:00)" +msgid "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00" +msgstr "Время суток для запуска планового обновления компонентов в формате ЧЧ:ММ (24ч), например 04:00" + msgid "Time skew tolerance" msgstr "Допуск отклонения времени" @@ -4775,6 +4823,9 @@ msgstr "Да" msgid "You can select Output Network Interface, by default autodetect" msgstr "Вы можете выбрать выходной сетевой интерфейс, по умолчанию автоопределение" +msgid "Zapret" +msgstr "" + msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." msgstr "Шаблоны hostlist Zapret не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS по правилам." @@ -4802,6 +4853,9 @@ msgstr "Zapret v1 (nfqws)" msgid "Zapret v2 (nfqws2)" msgstr "Zapret v2 (nfqws2)" +msgid "Zapret2" +msgstr "" + msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." msgstr "Шаблоны hostlist Zapret2 не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS2 по правилам." diff --git a/fe-app-tachyon/package-lock.json b/fe-app-tachyon/package-lock.json index 8a36c1f8..5f3f9dbd 100644 --- a/fe-app-tachyon/package-lock.json +++ b/fe-app-tachyon/package-lock.json @@ -1,12 +1,12 @@ { "name": "fe-app-tachyon", - "version": "1.3.9", + "version": "1.3.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fe-app-tachyon", - "version": "1.3.9", + "version": "1.3.10", "license": "MIT", "devDependencies": { "@babel/parser": "7.28.4", diff --git a/fe-app-tachyon/package.json b/fe-app-tachyon/package.json index 65dd3415..0e2d6644 100644 --- a/fe-app-tachyon/package.json +++ b/fe-app-tachyon/package.json @@ -1,6 +1,6 @@ { "name": "fe-app-tachyon", - "version": "1.3.9", + "version": "1.3.10", "license": "MIT", "type": "module", "scripts": { diff --git a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js index 62003ab4..7a03a481 100644 --- a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js +++ b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js @@ -1437,6 +1437,75 @@ function createSettingsContent(section, capabilities) { return _("Use sing-box duration format like 1d, 12h or 30m"); }; + o = section.taboption( + "updates", + form.Flag, + "component_auto_update_enabled", + _("Automatic component updates"), + _("Automatically download and install new versions of components"), + ); + o.depends("component_update_check_enabled", "1"); + o.default = "0"; + o.rmempty = false; + + o = section.taboption( + "updates", + form.ListValue, + "component_auto_update_mode", + _("Auto-update mode"), + _( + "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)", + ), + ); + o.depends("component_auto_update_enabled", "1"); + o.value("immediate", _("Immediately upon release")); + o.value("schedule", _("By schedule")); + o.default = "immediate"; + o.rmempty = false; + + o = section.taboption( + "updates", + form.Value, + "component_auto_update_time", + _("Scheduled auto-update time"), + _( + "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00", + ), + ); + o.depends({ + component_auto_update_enabled: "1", + component_auto_update_mode: "schedule", + }); + o.placeholder = "04:00"; + o.default = "04:00"; + o.rmempty = false; + o.validate = function (_section_id, value) { + const normalized = value ? `${value}`.trim() : ""; + if (/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(normalized)) { + return true; + } + return _("Enter a valid time in HH:MM format (00:00 to 23:59)"); + }; + + o = section.taboption( + "updates", + form.MultiValue, + "component_auto_update_targets", + _("Eligible components for auto-update"), + _("Select which components are permitted to update automatically"), + ); + o.depends("component_auto_update_enabled", "1"); + o.value("all", _("All components")); + o.value("tachyon", _("Tachyon Core")); + o.value("luci_app_tachyon", _("LuCI Web UI")); + o.value("sing_box", _("sing-box")); + o.value("zapret", _("Zapret")); + o.value("zapret2", _("Zapret2")); + o.value("byedpi", _("ByeDPI")); + o.value("tailscale", _("Tailscale")); + o.default = ["all"]; + o.rmempty = false; + o = section.taboption( "updates", form.Value, diff --git a/luci-app-tachyon/po/ru/tachyon.po b/luci-app-tachyon/po/ru/tachyon.po index b7cadcae..e2e93df0 100644 --- a/luci-app-tachyon/po/ru/tachyon.po +++ b/luci-app-tachyon/po/ru/tachyon.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-01 08:41+0300\n" -"PO-Revision-Date: 2026-09-01 08:41+0300\n" +"POT-Creation-Date: 2026-09-01 10:48+0300\n" +"PO-Revision-Date: 2026-09-01 10:48+0300\n" "Last-Translator: Dushnilin\n" "Language-Team: none\n" "Language: ru\n" @@ -314,6 +314,9 @@ msgstr "Все" msgid "All checks passed — Telegram bot should work correctly" msgstr "Все проверки пройдены — бот должен работать корректно" +msgid "All components" +msgstr "Все компоненты" + msgid "All devices" msgstr "Все устройства" @@ -494,9 +497,15 @@ msgstr "Автолечение сетевого стека" msgid "Auto-update Hosts Lists" msgstr "Автообновление списков Hosts" +msgid "Auto-update mode" +msgstr "Режим автообновления" + msgid "Automatic component update checks" msgstr "Автоматическая проверка обновлений компонентов" +msgid "Automatic component updates" +msgstr "Автоматическое обновление компонентов" + msgid "Automatic User-Agent selection" msgstr "Автоматический выбор User-Agent" @@ -506,6 +515,9 @@ msgstr "Автоматически добавлять текст к имени msgid "Automatically check installed components for new versions" msgstr "Автоматически проверять установленные компоненты на наличие новых версий" +msgid "Automatically download and install new versions of components" +msgstr "Автоматически загружать и устанавливать новые версии компонентов" + msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." msgstr "Автоматически создать аккаунт Cloudflare WARP и настроить все параметры AmneziaWG." @@ -626,6 +638,12 @@ msgstr "Встроенные наборы правил" msgid "By flag emoji from name" msgstr "По эмодзи флага из имени" +msgid "By schedule" +msgstr "По расписанию" + +msgid "ByeDPI" +msgstr "" + msgid "ByeDPI (ciadpi)" msgstr "ByeDPI (ciadpi)" @@ -776,6 +794,9 @@ msgstr "Выберите визуальную иконку для профиля msgid "Choose Hosts File..." msgstr "Выбрать файл Hosts..." +msgid "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)" +msgstr "Выберите, устанавливать ли обновления сразу при обнаружении или по расписанию (например, в ночное окно обслуживания)" + msgid "Choose whether to restrict the entire internet or only specific Tachyon routing sections." msgstr "Выберите, блокировать ли весь доступ в интернет или только определенные секции Tachyon." @@ -1337,6 +1358,9 @@ msgstr "Каждая запись — \"proto\", \"proto:port\" или \"proto:p msgid "Edit" msgstr "Изменить" +msgid "Eligible components for auto-update" +msgstr "Разрешенные компоненты для автообновления" + msgid "Enable" msgstr "Включить" @@ -1454,6 +1478,9 @@ msgstr "Введите домен или IP для проверки (напр. e msgid "Enter a level name" msgstr "Введите имя уровня" +msgid "Enter a valid time in HH:MM format (00:00 to 23:59)" +msgstr "Введите корректное время в формате ЧЧ:ММ (от 00:00 до 23:59)" + msgid "Enter a whole number of minutes between 0 and 1440" msgstr "Введите целое число минут от 0 до 1440" @@ -1961,6 +1988,9 @@ msgstr "Таймаут простоя" msgid "If one health check fails with an error, continue running other checks instead of stopping." msgstr "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться." +msgid "Immediately upon release" +msgstr "Сразу при выходе новой версии" + msgid "Import" msgstr "Импорт" @@ -2495,6 +2525,9 @@ msgstr "Локальный адрес" msgid "Log Level" msgstr "Уровень логирования" +msgid "LuCI Web UI" +msgstr "Веб-интерфейс LuCI" + msgid "lx" msgstr "lx" @@ -3506,6 +3539,9 @@ msgstr "Расписание" msgid "Schedule Rule" msgstr "Правило расписания" +msgid "Scheduled auto-update time" +msgstr "Время обновления по расписанию" + msgid "Score" msgstr "Баллы" @@ -3635,6 +3671,9 @@ msgstr "Выберите WAN-интерфейсы для отслеживани msgid "Select whether to disable the target during the schedule or enable it ONLY during the schedule." msgstr "Выберите, отключать ли цель в период расписания или включать ТОЛЬКО в период расписания." +msgid "Select which components are permitted to update automatically" +msgstr "Выберите, какие компоненты разрешено обновлять автоматически" + msgid "Selected" msgstr "Выбран" @@ -3800,6 +3839,9 @@ msgstr "Не удалось показать конфигурацию sing-box" msgid "Show subscription metadata for this source on the dashboard" msgstr "Показывать метаданные подписки для этого источника на дашборде" +msgid "sing-box" +msgstr "" + msgid "Sing-box autostart disabled" msgstr "Автостарт sing-box отключен" @@ -4070,6 +4112,9 @@ msgstr "Системная информация" msgid "Table exist" msgstr "Таблица существует" +msgid "Tachyon Core" +msgstr "Ядро Tachyon" + msgid "Tachyon Error" msgstr "Ошибка Tachyon" @@ -4295,6 +4340,9 @@ msgstr "Время кэширования DNS-записей в секундах msgid "Time is required (e.g. 22:00)" msgstr "Укажите время (например, 22:00)" +msgid "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00" +msgstr "Время суток для запуска планового обновления компонентов в формате ЧЧ:ММ (24ч), например 04:00" + msgid "Time skew tolerance" msgstr "Допуск отклонения времени" @@ -4775,6 +4823,9 @@ msgstr "Да" msgid "You can select Output Network Interface, by default autodetect" msgstr "Вы можете выбрать выходной сетевой интерфейс, по умолчанию автоопределение" +msgid "Zapret" +msgstr "" + msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." msgstr "Шаблоны hostlist Zapret не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS по правилам." @@ -4802,6 +4853,9 @@ msgstr "Zapret v1 (nfqws)" msgid "Zapret v2 (nfqws2)" msgstr "Zapret v2 (nfqws2)" +msgid "Zapret2" +msgstr "" + msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." msgstr "Шаблоны hostlist Zapret2 не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS2 по правилам." diff --git a/luci-app-tachyon/po/templates/tachyon.pot b/luci-app-tachyon/po/templates/tachyon.pot index ede07a91..ef32e7c4 100644 --- a/luci-app-tachyon/po/templates/tachyon.pot +++ b/luci-app-tachyon/po/templates/tachyon.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-01 05:41+0300\n" -"PO-Revision-Date: 2026-09-01 05:41+0300\n" +"POT-Creation-Date: 2026-09-01 07:48+0300\n" +"PO-Revision-Date: 2026-09-01 07:48+0300\n" "Last-Translator: Dushnilin \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -32,7 +32,7 @@ msgstr "" msgid ".lst Lists" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1794 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1863 msgid "(provider default)" msgstr "" @@ -266,9 +266,9 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16607 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:349 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:355 +#: src/tachyon/tabs/dashboard/initController.ts:1127 #: src/tachyon/tabs/monitoring/initController.ts:722 #: src/tachyon/tabs/monitoring/render.ts:20 -#: src/tachyon/tabs/dashboard/initController.ts:1127 msgid "Active" msgstr "" @@ -391,7 +391,7 @@ msgstr "" msgid "Address" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2213 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2282 msgid "Administrator Chat IDs" msgstr "" @@ -419,11 +419,11 @@ msgstr "" msgid "AI & Watchdog" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1745 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814 msgid "AI Agent REST API Bearer Token" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1813 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882 msgid "AI API Key" msgstr "" @@ -456,7 +456,7 @@ msgstr "" msgid "AI Doctor failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1800 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1869 msgid "AI Doctor Language" msgstr "" @@ -470,11 +470,11 @@ msgstr "" msgid "AI DPI Engineer & Strategy Synthesizer" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1787 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1856 msgid "AI Model" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1770 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839 msgid "AI Provider" msgstr "" @@ -507,10 +507,14 @@ msgstr "" msgid "All" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2425 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2494 msgid "All checks passed — Telegram bot should work correctly" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1498 +msgid "All components" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:589 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:598 msgid "All devices" @@ -605,7 +609,7 @@ msgstr "" msgid "Allows limiting the list of servers for URLTest" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1759 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1828 msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." msgstr "" @@ -647,7 +651,7 @@ msgstr "" msgid "Anti-Bypass: Block Private DNS / DoH / DoT" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1814 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883 msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Assigned Devices (MAC / IP)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2224 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2293 msgid "At least one Admin Chat ID is required" msgstr "" @@ -755,7 +759,7 @@ msgstr "" msgid "Auto-apply failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2016 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2085 msgid "Auto-detected domains" msgstr "" @@ -763,11 +767,11 @@ msgstr "" msgid "Auto-detected Domains" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1976 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2045 msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1515 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584 msgid "Auto-failover of proxy sections" msgstr "" @@ -784,10 +788,18 @@ msgstr "" msgid "Auto-update Hosts Lists" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1455 +msgid "Auto-update mode" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1398 msgid "Automatic component update checks" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +msgid "Automatic component updates" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2433 msgid "Automatic User-Agent selection" msgstr "" @@ -800,11 +812,15 @@ msgstr "" msgid "Automatically check installed components for new versions" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +msgid "Automatically download and install new versions of components" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8015 msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1950 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2019 msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." msgstr "" @@ -952,7 +968,7 @@ msgstr "" msgid "Bootstrap DNS Servers" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2175 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2244 msgid "Bot Status" msgstr "" @@ -986,6 +1002,14 @@ msgstr "" msgid "By flag emoji from name" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +msgid "By schedule" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504 +msgid "ByeDPI" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12055 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13428 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13428 @@ -1064,11 +1088,11 @@ msgstr "" msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1554 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1623 msgid "Cache File Path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1568 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1637 msgid "Cache file path cannot be empty" msgstr "" @@ -1235,7 +1259,7 @@ msgid "Checking..." msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:276 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2067 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2136 msgid "Checking…" msgstr "" @@ -1281,6 +1305,10 @@ msgstr "" msgid "Choose Hosts File..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456 +msgid "Choose whether to install updates immediately when detected or at a scheduled time (e.g. maintenance window)" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:830 msgid "Choose whether to restrict the entire internet or only specific Tachyon routing sections." msgstr "" @@ -1374,10 +1402,10 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10239 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1803 #: src/partials/modal/renderModal.ts:263 -#: src/tachyon/tabs/monitoring/initController.ts:893 -#: src/tachyon/tabs/monitoring/initController.ts:948 #: src/tachyon/tabs/dashboard/initController.ts:1267 #: src/tachyon/tabs/diagnostic/initController.ts:1553 +#: src/tachyon/tabs/monitoring/initController.ts:893 +#: src/tachyon/tabs/monitoring/initController.ts:948 #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:227 #: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:178 #: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:871 @@ -1424,7 +1452,7 @@ msgstr "" msgid "Cloudflare WARP API access token" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283 msgid "Comma-separated list of Telegram user IDs authorized to control the bot." msgstr "" @@ -1451,7 +1479,7 @@ msgid "Components" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6081 -#: src/tachyon/helpers/singBoxVariant.ts:57 +#: src/tachyon/helpers/singBoxVariant.ts:56 msgid "compressed" msgstr "" @@ -1468,11 +1496,11 @@ msgstr "" msgid "confidence" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1540 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609 msgid "Config File Path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1720 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1789 msgid "Config Snapshots" msgstr "" @@ -1599,7 +1627,7 @@ msgstr "" msgid "Custom" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1824 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1893 msgid "Custom API Endpoint URL" msgstr "" @@ -1632,11 +1660,11 @@ msgstr "" msgid "Custom header for handshake response" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1780 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1849 msgid "Custom OpenAI-Compatible API" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894 msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" msgstr "" @@ -1680,16 +1708,16 @@ msgstr "" msgid "Days of Week" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2409 msgid "Default (auto)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1647 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1704 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1716 msgid "Default (Direct WAN / Default mixed proxy)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1514 msgid "Default address for checking server availability and latency. URLTest uses its own address." msgstr "" @@ -1723,7 +1751,7 @@ msgstr "" msgid "Detect server country" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1679 msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." msgstr "" @@ -1837,7 +1865,7 @@ msgstr "" msgid "DNS Check Interval" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1894 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963 msgid "DNS Check Interval (s)" msgstr "" @@ -2007,7 +2035,7 @@ msgstr "" msgid "Domain Resolver" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1988 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2057 msgid "Domain test sections" msgstr "" @@ -2028,7 +2056,7 @@ msgstr "" msgid "Done" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1574 msgid "Dont Touch My DHCP!" msgstr "" @@ -2048,27 +2076,27 @@ msgstr "" msgid "Download .conf" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1484 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1553 msgid "Download component packages via the selected section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1492 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1561 msgid "Download components through" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1552 msgid "Download components through a section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1539 msgid "Download lists through" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530 msgid "Download lists through a section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531 msgid "Download remote lists and rule sets via the selected section" msgstr "" @@ -2163,6 +2191,10 @@ msgstr "" msgid "Edit" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1494 +msgid "Eligible components for auto-update" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:201 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:539 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7235 @@ -2170,15 +2202,15 @@ msgstr "" msgid "Enable" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1949 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2018 msgid "Enable Adaptive Intervals" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1758 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1827 msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1956 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2025 msgid "Enable Anomaly Detection" msgstr "" @@ -2199,7 +2231,7 @@ msgstr "" msgid "Enable built-in DNS resolver for domains handled by this section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1928 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1997 msgid "Enable Config Validation" msgstr "" @@ -2208,19 +2240,19 @@ msgstr "" msgid "Enable Direct WAN Bypass" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1888 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957 msgid "Enable DNS Continuous Check" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1970 msgid "Enable Firewall Reload Dedup" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1935 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2004 msgid "Enable Graceful Degradation" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1977 msgid "Enable Health Metrics" msgstr "" @@ -2240,23 +2272,23 @@ msgstr "" msgid "Enable Output Network Interface" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1933 msgid "Enable Proxy Health Monitor" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909 msgid "Enable RAG (Knowledge Base Retrieval)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1921 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1990 msgid "Enable Smart Cooldowns" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1975 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2044 msgid "Enable Smart Detect" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2185 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2254 msgid "Enable Telegram Bot" msgstr "" @@ -2268,7 +2300,7 @@ msgstr "" msgid "Enable WAN DNS Fallback for Main DNS" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1732 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801 msgid "Enable Watchdog" msgstr "" @@ -2280,11 +2312,11 @@ msgstr "" msgid "Enable YACD WAN Access" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2186 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2255 msgid "Enables the background daemon that polls Telegram for commands and sends notifications." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1733 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1802 msgid "Enables the background watchdog process to monitor services and auto-recover on failures." msgstr "" @@ -2334,6 +2366,10 @@ msgstr "" msgid "Enter a level name" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1487 +msgid "Enter a valid time in HH:MM format (00:00 to 23:59)" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:410 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:924 msgid "Enter a whole number of minutes between 0 and 1440" @@ -2343,7 +2379,7 @@ msgstr "" msgid "Enter HWID" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2197 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2266 msgid "Enter the API token obtained from @BotFather." msgstr "" @@ -2525,12 +2561,12 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19001 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19061 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19233 +#: src/tachyon/methods/shell/index.ts:171 +#: src/tachyon/methods/shell/index.ts:178 #: src/tachyon/tabs/updates/initController.ts:661 #: src/tachyon/tabs/updates/initController.ts:662 #: src/tachyon/tabs/updates/initController.ts:739 #: src/tachyon/tabs/updates/initController.ts:953 -#: src/tachyon/methods/shell/index.ts:171 -#: src/tachyon/methods/shell/index.ts:178 msgid "Failed to execute" msgstr "" @@ -2616,8 +2652,8 @@ msgstr "" msgid "Failed to restore snapshot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2412 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2481 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2503 msgid "Failed to run diagnostics — is the tachyon binary installed?" msgstr "" @@ -2640,7 +2676,7 @@ msgstr "" msgid "Failed to start benchmark" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2131 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2200 msgid "Failed to start bot" msgstr "" @@ -2660,7 +2696,7 @@ msgstr "" msgid "Failed to start watchdog" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2145 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2214 msgid "Failed to stop bot" msgstr "" @@ -2707,7 +2743,7 @@ msgstr "" msgid "Failed to update subscriptions" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1527 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1596 msgid "Failover failure threshold" msgstr "" @@ -2746,7 +2782,7 @@ msgstr "" msgid "Family Profiles" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1889 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1958 msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." msgstr "" @@ -2833,7 +2869,7 @@ msgstr "" msgid "Forces SafeSearch on Google, Yandex, Bing, DuckDuckGo and Strict Restricted Mode on YouTube via DNS rewrite for all devices in this profile." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1620 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1689 msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." msgstr "" @@ -3090,7 +3126,7 @@ msgstr "" msgid "Hosts Lists Update Interval" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1915 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1984 msgid "How many hours of metrics to keep (default 24)." msgstr "" @@ -3102,15 +3138,15 @@ msgstr "" msgid "How often the currently selected server is checked" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1895 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1964 msgid "How often to check DNS health in seconds (default 60)." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1871 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1940 msgid "How often to check proxy health in seconds (fast tier, default 30)." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2237 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2306 msgid "How often to check Telegram for new messages (default: 5)." msgstr "" @@ -3147,10 +3183,14 @@ msgstr "" msgid "Idle timeout" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1936 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2005 msgid "If one health check fails with an error, continue running other checks instead of stopping." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1461 +msgid "Immediately upon release" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7586 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7599 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7649 @@ -3307,7 +3347,7 @@ msgstr "" msgid "Installed version is newer than release" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1671 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1740 msgid "Interface" msgstr "" @@ -3869,7 +3909,7 @@ msgstr "" msgid "LAN Devices" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1801 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870 msgid "Language for AI Doctor diagnosis responses" msgstr "" @@ -3884,7 +3924,7 @@ msgstr "" msgid "Latency test failed" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1513 msgid "Latency test URL" msgstr "" @@ -3916,7 +3956,7 @@ msgstr "" msgid "List must be an HTTP(S) URL or a local .lst path" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2017 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2086 msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." msgstr "" @@ -3941,7 +3981,7 @@ msgstr "" msgid "Lists and rule sets successfully updated!" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1779 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1848 msgid "LM Studio (Local PC / Server)" msgstr "" @@ -4008,12 +4048,16 @@ msgstr "" msgid "Local Address" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1591 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1660 msgid "Log Level" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1500 +msgid "LuCI Web UI" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6083 -#: src/tachyon/helpers/singBoxVariant.ts:59 +#: src/tachyon/helpers/singBoxVariant.ts:58 msgid "lx" msgstr "" @@ -4071,7 +4115,7 @@ msgstr "" msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1963 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032 msgid "Max reconnects per hour before alert (default 10)." msgstr "" @@ -4096,7 +4140,7 @@ msgstr "" msgid "Method" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1914 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1983 msgid "Metrics Retention (hours)" msgstr "" @@ -4131,7 +4175,7 @@ msgstr "" msgid "Mode" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1788 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1857 msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." msgstr "" @@ -4151,7 +4195,7 @@ msgstr "" msgid "Monitoring" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1957 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2026 msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." msgstr "" @@ -4160,7 +4204,7 @@ msgstr "" msgid "MTU" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2227 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296 msgid "Must be a comma-separated list of numeric IDs" msgstr "" @@ -4338,7 +4382,7 @@ msgstr "" msgid "No diagnostic history available yet." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2032 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101 msgid "No domains detected yet" msgstr "" @@ -4462,8 +4506,8 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19467 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19477 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19487 -#: src/tachyon/helpers/singBoxVariant.ts:35 -#: src/tachyon/helpers/singBoxVariant.ts:43 +#: src/tachyon/helpers/singBoxVariant.ts:34 +#: src/tachyon/helpers/singBoxVariant.ts:42 #: src/tachyon/tabs/updates/initController.ts:1237 #: src/tachyon/tabs/updates/initController.ts:1251 #: src/tachyon/tabs/updates/initController.ts:1265 @@ -4520,27 +4564,27 @@ msgstr "" msgid "Notify in Telegram" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2309 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2378 msgid "Notify on Certificate Warnings" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2257 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2326 msgid "Notify on Core Crashes" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2322 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2391 msgid "Notify on DNS Leaks" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2283 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2352 msgid "Notify on Server Switches" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2270 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2339 msgid "Notify on Service Restarts" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2365 msgid "Notify on Subscription Updates" msgstr "" @@ -4548,11 +4592,11 @@ msgstr "" msgid "Number of consecutive failed checks required before switching DNS servers." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1528 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1597 msgid "Number of consecutive failed probes before switching sections" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1946 msgid "Number of consecutive failures before restarting (default 3)." msgstr "" @@ -4572,7 +4616,7 @@ msgstr "" msgid "Obfuscation password" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1778 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1847 msgid "Ollama (Local PC / Server)" msgstr "" @@ -4782,15 +4826,15 @@ msgstr "" msgid "Path cannot be empty" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1572 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1641 msgid "Path must be absolute (start with /)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1581 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1650 msgid "Path must contain at least one directory (like /tmp/cache.db)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1576 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645 msgid "Path must end with cache.db" msgstr "" @@ -4872,7 +4916,7 @@ msgstr "" msgid "Periodically check the current level and switch to a faster server even when the current one works." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1934 msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." msgstr "" @@ -4881,7 +4925,7 @@ msgstr "" msgid "Persistent Keepalive" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1942 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2011 msgid "Persistent Smart Detect" msgstr "" @@ -4907,11 +4951,11 @@ msgstr "" msgid "Please specify strategy name and arguments" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2236 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2305 msgid "Polling Interval (seconds)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2249 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2318 msgid "Polling interval must be at least 1 second" msgstr "" @@ -4950,7 +4994,7 @@ msgstr "" msgid "Ports must be between 1 and 65535" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1841 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1910 msgid "Pre-built index of Tachyon documentation chunks. When enabled, AI Doctor searches relevant docs before generating a diagnosis." msgstr "" @@ -4991,7 +5035,7 @@ msgstr "" msgid "Preshared Key" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1971 msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." msgstr "" @@ -5079,15 +5123,15 @@ msgstr "" msgid "Proxy / DPI" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1876 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1945 msgid "Proxy Fail Threshold" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1870 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1939 msgid "Proxy Health Check Interval (s)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1882 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1951 msgid "Proxy Health Check URL" msgstr "" @@ -5096,7 +5140,7 @@ msgstr "" msgid "Proxy link is unavailable" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2333 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2402 msgid "Proxy Section for Bot" msgstr "" @@ -5185,7 +5229,7 @@ msgstr "" msgid "Recommended Quick Fixes:" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1962 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2031 msgid "Reconnect Threshold" msgstr "" @@ -5194,7 +5238,7 @@ msgstr "" msgid "Reconnect WAN" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1909 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1978 msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." msgstr "" @@ -5287,7 +5331,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:390 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:425 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1775 msgid "Reset Settings" msgstr "" @@ -5409,7 +5453,7 @@ msgstr "" msgid "Restore Snapshot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1707 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1776 msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." msgstr "" @@ -5450,7 +5494,7 @@ msgstr "" msgid "Route all non-local LAN traffic through the tailnet exit node instead of the proxy engines." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2334 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2403 msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." msgstr "" @@ -5573,8 +5617,8 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13642 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:302 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2095 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2096 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2164 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2165 #: src/tachyon/methods/custom/getDashboardSections.ts:1649 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:618 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135 @@ -5586,7 +5630,7 @@ msgstr "" msgid "Running benchmarks..." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2399 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2468 msgid "Running diagnostics…" msgstr "" @@ -5611,7 +5655,7 @@ msgstr "" msgid "Save" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1721 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1790 msgid "Save a snapshot of the working config and restore it later if something breaks." msgstr "" @@ -5628,6 +5672,10 @@ msgstr "" msgid "Schedule Rule" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +msgid "Scheduled auto-update time" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12353 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12946 #: src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:495 @@ -5658,11 +5706,11 @@ msgstr "" msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1746 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1815 msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1654 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1723 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:437 msgid "Section" msgstr "" @@ -5679,7 +5727,7 @@ msgstr "" msgid "Section Rules Content" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1631 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1700 msgid "Section used for Cloudflare WARP API registration. If your ISP blocks Cloudflare API on WAN, select a proxy section (with Mixed proxy enabled) or a tunnel interface section (WireGuard / AmneziaWG / VPN). Leave empty to use direct WAN / default mixed proxy." msgstr "" @@ -5730,7 +5778,7 @@ msgstr "" msgid "Select active days. If none selected, the rule applies every day." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1771 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1840 msgid "Select AI LLM provider for diagnostics" msgstr "" @@ -5746,7 +5794,7 @@ msgstr "" msgid "Select an intermediate section" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1989 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2058 msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." msgstr "" @@ -5770,7 +5818,7 @@ msgstr "" msgid "Select or enter a User-Agent" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1555 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1624 msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" msgstr "" @@ -5778,7 +5826,7 @@ msgstr "" msgid "Select or enter the IP addresses of your game consoles." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1541 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1610 msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" msgstr "" @@ -5792,7 +5840,7 @@ msgstr "" msgid "Select the fastest node" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1592 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1661 msgid "Select the log level for sing-box" msgstr "" @@ -5812,6 +5860,10 @@ msgstr "" msgid "Select whether to disable the target during the schedule or enable it ONLY during the schedule." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1495 +msgid "Select which components are permitted to update automatically" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:7889 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8001 #: src/tachyon/tabs/dashboard/initController.ts:1289 @@ -5833,19 +5885,19 @@ msgstr "" msgid "Send" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2323 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2392 msgid "Send a Telegram notification if a potential DNS leak is detected." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2258 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2327 msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2310 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2379 msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2271 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2340 msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." msgstr "" @@ -5853,11 +5905,11 @@ msgstr "" msgid "Send a Telegram notification to admins when a blocked site is accessed. Requires the Telegram bot to be enabled." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2284 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2353 msgid "Send a Telegram notification when a URLTest group switches to a new server." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2297 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2366 msgid "Send a Telegram notification when proxy subscriptions are successfully updated." msgstr "" @@ -5971,9 +6023,9 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3486 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3505 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14452 -#: src/tachyon/tabs/diagnostic/initController.ts:609 #: src/tachyon/methods/shell/index.ts:440 #: src/tachyon/methods/shell/index.ts:461 +#: src/tachyon/tabs/diagnostic/initController.ts:609 msgid "Service action failed" msgstr "" @@ -6074,6 +6126,10 @@ msgstr "" msgid "Show subscription metadata for this source on the dashboard" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1501 +msgid "sing-box" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:9536 #: src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:77 msgid "Sing-box autostart disabled" @@ -6297,7 +6353,7 @@ msgstr "" msgid "Start" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2077 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2146 msgid "Start bot" msgstr "" @@ -6321,7 +6377,7 @@ msgid "Start watchdog" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:335 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2124 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2193 msgid "Starting…" msgstr "" @@ -6348,7 +6404,7 @@ msgstr "" msgid "Stop" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2084 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2153 msgid "Stop bot" msgstr "" @@ -6365,7 +6421,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13654 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:308 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2101 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2170 #: src/tachyon/methods/custom/getDashboardSections.ts:1653 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:622 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147 @@ -6373,11 +6429,11 @@ msgid "Stopped" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:349 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2138 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2207 msgid "Stopping…" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1943 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2012 msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." msgstr "" @@ -6405,7 +6461,7 @@ msgstr "" msgid "Strict (🔒)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1688 msgid "Strict ECH + DoQ DNS Enforcer" msgstr "" @@ -6501,6 +6557,10 @@ msgstr "" msgid "Table exist" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1499 +msgid "Tachyon Core" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6448 #: src/tachyon/services/core.service.ts:52 msgid "Tachyon Error" @@ -6541,7 +6601,7 @@ msgstr "" msgid "Tachyon update did not complete within the timeout" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1506 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1575 msgid "Tachyon will not modify your DHCP configuration" msgstr "" @@ -6596,6 +6656,7 @@ msgid "Tachyon-managed nfqws2 runtime is ready" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8410 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1505 #: src/tachyon/tabs/dashboard/initController.ts:1954 msgid "Tailscale" msgstr "" @@ -6661,7 +6722,7 @@ msgstr "" msgid "Telegram Bot" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2196 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2265 msgid "Telegram Bot Token" msgstr "" @@ -6670,10 +6731,10 @@ msgstr "" msgid "Telegram Channel" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2385 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2414 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2430 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2436 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2454 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2499 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2505 msgid "Test Connection" msgstr "" @@ -6710,7 +6771,7 @@ msgstr "" msgid "Test servers whose names match the expression." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2372 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2441 msgid "Test Telegram Connection" msgstr "" @@ -6736,7 +6797,7 @@ msgstr "" msgid "Testing..." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2396 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2465 msgid "Testing…" msgstr "" @@ -6857,12 +6918,16 @@ msgstr "" msgid "Time is required (e.g. 22:00)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1471 +msgid "Time of day to run scheduled component updates in HH:MM (24h) format, e.g. 04:00" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:3219 msgid "Time skew tolerance" msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6085 -#: src/tachyon/helpers/singBoxVariant.ts:61 +#: src/tachyon/helpers/singBoxVariant.ts:60 msgid "tiny" msgstr "" @@ -6888,7 +6953,7 @@ msgstr "" msgid "Toddler (👶)" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2205 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2274 msgid "Token is required when the bot is enabled" msgstr "" @@ -7152,7 +7217,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10170 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10171 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18827 -#: src/tachyon/helpers/singBoxVariant.ts:34 +#: src/tachyon/helpers/singBoxVariant.ts:33 #: src/tachyon/services/systemInfo.service.ts:10 #: src/tachyon/services/systemInfo.service.ts:12 #: src/tachyon/services/systemInfo.service.ts:13 @@ -7170,7 +7235,7 @@ msgstr "" #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5319 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:329 -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2118 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2187 #: src/tachyon/methods/custom/getDashboardSections.ts:1655 msgid "Unknown" msgstr "" @@ -7320,7 +7385,7 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1883 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1952 msgid "URL to test through the proxy (default: Cloudflare 204)." msgstr "" @@ -7359,7 +7424,7 @@ msgstr "" msgid "URLTest settings" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1991 msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." msgstr "" @@ -7506,7 +7571,7 @@ msgstr "" msgid "Valid" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1929 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1998 msgid "Validates sing-box config before restart to prevent boot loops on broken configs." msgstr "" @@ -7593,7 +7658,7 @@ msgstr "" msgid "WARP Configuration generated and loaded successfully!" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699 msgid "WARP Generator Proxy Section" msgstr "" @@ -7601,15 +7666,15 @@ msgstr "" msgid "WARP Private Key" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1516 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585 msgid "Watchdog probes every Connection section; when the active one fails several checks in a row, traffic switches to a healthy backup and Telegram is notified. Requires a config reload to take effect." msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1853 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1922 msgid "Watchdog Status" msgstr "" -#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1609 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1678 msgid "WebRTC Leak Protection" msgstr "" @@ -7672,6 +7737,10 @@ msgstr "" msgid "You can select Output Network Interface, by default autodetect" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1502 +msgid "Zapret" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5648 msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." msgstr "" @@ -7724,6 +7793,10 @@ msgstr "" msgid "Zapret v2 (nfqws2)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503 +msgid "Zapret2" +msgstr "" + #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6093 msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." msgstr "" diff --git a/tachyon/files/etc/config/tachyon b/tachyon/files/etc/config/tachyon index 001f4818..6e928499 100644 --- a/tachyon/files/etc/config/tachyon +++ b/tachyon/files/etc/config/tachyon @@ -28,6 +28,10 @@ config settings 'settings' option download_all_presets '0' option component_update_check_enabled '1' option component_update_check_interval '1d' + option component_auto_update_enabled '0' + option component_auto_update_mode 'immediate' + option component_auto_update_time '04:00' + list component_auto_update_targets 'all' option latency_test_url 'https://www.gstatic.com/generate_204' option download_lists_via_proxy '0' option download_components_via_proxy '0' diff --git a/tachyon/files/usr/bin/tachyon b/tachyon/files/usr/bin/tachyon index 985bb658..271aa142 100755 --- a/tachyon/files/usr/bin/tachyon +++ b/tachyon/files/usr/bin/tachyon @@ -229,6 +229,7 @@ function command_spec(command) { component_action_status: [ "components/updates.uc", "component-action-status", 1 ], component_action_log: [ "components/updates.uc", "component-action-log", 2 ], component_updates_if_due: [ "components/updates.uc", "component-updates-if-due", 0 ], + component_auto_update_apply: [ "components/updates.uc", "component-auto-update-apply", 0 ], component_update_check_cache: [ "components/updates.uc", "component-update-check-cache", 0 ], hosts_list_update: [ "components/hosts.uc", "list-update", 1 ], hosts_list_status: [ "components/hosts.uc", "list-status", 0 ], diff --git a/tachyon/files/usr/lib/components/updates.uc b/tachyon/files/usr/lib/components/updates.uc index 271fe286..65d38b01 100644 --- a/tachyon/files/usr/lib/components/updates.uc +++ b/tachyon/files/usr/lib/components/updates.uc @@ -109,6 +109,7 @@ let object_or_empty = common.object_or_empty; let array_or_empty = common.array_or_empty; let option = common.option; let bool_option = common.bool_option; +let list_option = common.list_option; function read_stdin() { let data = fs.readfile("/dev/stdin"); @@ -568,6 +569,56 @@ function settings_component_update_check_interval(settings) { return value != "" ? value : "1d"; } +function normalize_component_name(component) { + component = as_string(component); + if (component == "sing-box" || component == "singbox") + return "sing_box"; + if (component == "tachyon") + return "tachyon"; + return component; +} + +function valid_component_name(component) { + component = normalize_component_name(component); + return component == "tachyon" || component == "sing_box" || component == "zapret" || + component == "zapret2" || component == "byedpi" || component == "tailscale"; +} + +function settings_component_auto_update_enabled(settings) { + settings = object_or_empty(settings); + return bool_option(settings, "component_auto_update_enabled", false); +} + +function settings_component_auto_update_mode(settings) { + settings = object_or_empty(settings); + let mode = option(settings, "component_auto_update_mode", "immediate"); + return (mode == "schedule" || mode == "scheduled") ? "schedule" : "immediate"; +} + +function settings_component_auto_update_time(settings) { + settings = object_or_empty(settings); + let time = trim(as_string(option(settings, "component_auto_update_time", "04:00"))); + return match(time, /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/) != null ? time : "04:00"; +} + +function settings_component_auto_update_targets(settings) { + settings = object_or_empty(settings); + let raw = list_option(settings, "component_auto_update_targets"); + if (length(raw) == 0 || (length(raw) == 1 && raw[0] == "all")) + return [ "all" ]; + return raw; +} + +function component_is_auto_update_target(settings, component) { + let targets = settings_component_auto_update_targets(settings); + component = normalize_component_name(component); + for (let target in targets) { + if (target == "all" || normalize_component_name(target) == component) + return true; + } + return false; +} + function section_subscription_update_interval(section) { let result = ""; let result_seconds = 0; @@ -693,6 +744,16 @@ function cron_refresh_plan_rows(settings, sections, bin, list_marker, subscripti } } + if (settings_component_auto_update_enabled(settings) && + settings_component_auto_update_mode(settings) == "schedule") { + let time_str = settings_component_auto_update_time(settings); + let parts = split(time_str, ":"); + let hour = int(parts[0] || "4"); + let minute = int(parts[1] || "0"); + let cron_time = sprintf("%d %d * * *", minute, hour); + push(rows, "component-auto-update\t" + cron_time + " " + as_string(bin) + " component_auto_update_apply " + as_string(component_marker)); + } + return { status, rows @@ -720,7 +781,7 @@ function strip_unmarked_tachyon_cron_lines(data, bin, markers) { return ""; let escaped_bin = replace(as_string(bin), /([^0-9A-Za-z_])/g, "\\$1"); - let pattern = "^[^#\\n]*" + escaped_bin + "[ \\t]+(list_update|subscription_update|component_updates_if_due)([ \\t]|$)"; + let pattern = "^[^#\\n]*" + escaped_bin + "[ \\t]+(list_update|subscription_update|component_updates_if_due|component_auto_update_apply)([ \\t]|$)"; let lines = split(data, "\n"); let has_trailing_newline = substr(data, length(data) - 1) == "\n"; @@ -777,6 +838,10 @@ function cron_refresh_apply_result(settings, sections, existing_crontab, bin, li cron_jobs += rest + "\n"; push(logs, { level: "info", message: "The component update check cron job has been created: " + rest }); } + else if (type == "component-auto-update") { + cron_jobs += rest + "\n"; + push(logs, { level: "info", message: "The component auto-update cron job has been created: " + rest }); + } else if (type == "component-error") { push(logs, { level: "error", message: "Invalid component_update_check_interval value: " + rest }); } @@ -1358,21 +1423,6 @@ function component_running_job_state_value(component, action, started_at) { }; } -function normalize_component_name(component) { - component = as_string(component); - if (component == "sing-box" || component == "singbox") - return "sing_box"; - if (component == "tachyon") - return "tachyon"; - return component; -} - -function valid_component_name(component) { - component = normalize_component_name(component); - return component == "tachyon" || component == "sing_box" || component == "zapret" || - component == "zapret2" || component == "byedpi" || component == "tailscale"; -} - function component_update_check_cache_path(component) { component = normalize_component_name(component); if (!valid_component_name(component)) @@ -1824,28 +1874,22 @@ function component_action_worker(state_file, output_file, component, action) { finish_component_job(state_file, component, action, status, output_file); } -function component_action_async(component, action) { +function component_action_async_job(component, action) { component = normalize_component_name(component); - if (!ensure_component_runtime_dirs()) { - component_job_json_response(false, "", "Failed to create component action state directory"); - exit(1); - } + if (!ensure_component_runtime_dirs()) + return { success: false, job_id: "", message: "Failed to create component action state directory" }; component_cleanup_jobs(); let job_id = component_job_id(); let state_file = component_job_state_path_value(job_id); - if (state_file == "") { - component_job_json_response(false, "", "Failed to prepare component action job"); - exit(1); - } + if (state_file == "") + return { success: false, job_id: "", message: "Failed to prepare component action job" }; let running_state = component_running_job_state_value(component, action, now_seconds()); running_state.log_path = component_job_log_path(job_id); - if (!write_state_file(state_file, running_state)) { - component_job_json_response(false, "", "Failed to write component action state"); - exit(1); - } + if (!write_state_file(state_file, running_state)) + return { success: false, job_id: "", message: "Failed to write component action state" }; let output_file = component_job_output_path(job_id); let pid = launch_component_worker([ @@ -1859,11 +1903,29 @@ function component_action_async(component, action) { if (pid == "" || !set_component_running_job_pid(state_file, pid)) { if (pid != "") command_success_from_args([ "kill", pid ]); - component_job_json_response(false, "", "Failed to write component action worker pid"); - exit(1); + return { success: false, job_id: "", message: "Failed to write component action worker pid" }; } - component_job_json_response(true, job_id, "Component action started"); + return { success: true, job_id, message: "Component action started" }; +} + +function component_action_async(component, action) { + let res = component_action_async_job(component, action); + component_job_json_response(res.success, res.job_id, res.message); + if (!res.success) + exit(1); +} + +function component_has_running_job() { + if (!ensure_component_runtime_dirs()) + return false; + component_cleanup_jobs(); + for (let path in fs.glob(COMPONENT_JOB_DIR + "/*.json")) { + let val = object_or_empty(read_json_file(path)); + if (val.running === true) + return true; + } + return false; } function component_action_status(job_id) { @@ -1938,6 +2000,46 @@ function run_automatic_component_update_check(component) { return cache_component_update_check_result(value, true); } +function trigger_component_auto_update(component, target_version) { + component = normalize_component_name(component); + if (component_has_running_job()) { + log_message("[auto-update] Skipping auto-update for " + component + ": another component update is already running", "warn"); + return false; + } + + log_message("[auto-update] Initiating automatic update for " + component + (target_version != "" ? " to version " + target_version : ""), "info"); + let res = component_action_async_job(component, "update"); + if (!res.success) { + log_message("[auto-update] Failed to start auto-update for " + component + ": " + res.message, "error"); + return false; + } + return true; +} + +function component_auto_update_apply() { + let settings = uci_settings(); + if (!settings_component_auto_update_enabled(settings)) { + log_message("[auto-update] Automatic component updates are disabled", "info"); + exit(0); + } + + let checked_components = automatic_component_check_names(); + for (let component in checked_components) { + if (!component_is_auto_update_target(settings, component)) + continue; + + run_automatic_component_update_check(component); + let cached = object_or_empty(read_json_file(component_update_check_cache_path(component))); + if (cached.status == "outdated" || cached.status == "outdated_same_release") { + if (trigger_component_auto_update(component, cached.latest_version)) { + break; + } + } + } + + exit(0); +} + function component_updates_if_due() { let interval = settings_component_update_check_interval(uci_settings()); if (interval == "") @@ -1976,6 +2078,22 @@ function component_updates_if_due() { for (let component in automatic_component_check_names()) run_automatic_component_update_check(component); + let settings = uci_settings(); + if (settings_component_auto_update_enabled(settings) && + settings_component_auto_update_mode(settings) == "immediate") { + for (let component in automatic_component_check_names()) { + if (!component_is_auto_update_target(settings, component)) + continue; + + let cached = object_or_empty(read_json_file(component_update_check_cache_path(component))); + if (cached.status == "outdated" || cached.status == "outdated_same_release") { + if (trigger_component_auto_update(component, cached.latest_version)) { + break; + } + } + } + } + if (!write_file(COMPONENT_UPDATE_CHECK_STATE_FILE, as_string(now_seconds()) + "\n")) { release_runtime_lock(COMPONENT_UPDATE_CHECK_LOCK_DIR); log_message("Failed to write component update check timestamp", "error"); @@ -3285,6 +3403,8 @@ else if (mode == "component-action-log") component_action_log(ARGV[1], ARGV[2]); else if (mode == "component-updates-if-due") component_updates_if_due(); +else if (mode == "component-auto-update-apply") + component_auto_update_apply(); else if (mode == "component-update-check-cache") component_update_check_cache(); else { diff --git a/tests/component_auto_update.sh b/tests/component_auto_update.sh new file mode 100644 index 00000000..7f2762d2 --- /dev/null +++ b/tests/component_auto_update.sh @@ -0,0 +1,159 @@ +#!/usr/bin/env bash +set -eo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +TACHYON_LIB="$ROOT_DIR/tachyon/files/usr/lib" +UPDATES_UC="$TACHYON_LIB/components/updates.uc" +WORK_DIR="$(mktemp -d)" + +cleanup() { + rm -rf "$WORK_DIR" +} +trap cleanup EXIT + +fail() { + printf 'FAIL: %s\n' "$1" >&2 + exit 1 +} + +assert_eq() { + local expected="$1" + local actual="$2" + local label="$3" + + [ "$actual" = "$expected" ] || fail "$label: expected '$expected', got '$actual'" +} + +fake_lib="$WORK_DIR/lib" +cache_dir="$WORK_DIR/cache" +job_dir="$WORK_DIR/jobs" +timestamp_file="$WORK_DIR/component-update-check.timestamp" +mkdir -p \ + "$fake_lib/core" \ + "$fake_lib/config" \ + "$fake_lib/components" \ + "$fake_lib/service" \ + "$fake_lib/providers/zapret" \ + "$fake_lib/providers/zapret2" \ + "$fake_lib/providers/byedpi" \ + "$job_dir" \ + "$cache_dir" + +cat >"$fake_lib/core/uci.uc" <<'UCODE' +function get_all(_config, section) { + if (section == "settings") { + return { + component_update_check_enabled: getenv("TEST_COMPONENT_UPDATE_CHECK_ENABLED") || "1", + component_update_check_interval: getenv("TEST_COMPONENT_UPDATE_CHECK_INTERVAL") || "1d", + component_auto_update_enabled: getenv("TEST_COMPONENT_AUTO_UPDATE_ENABLED") || "0", + component_auto_update_mode: getenv("TEST_COMPONENT_AUTO_UPDATE_MODE") || "immediate", + component_auto_update_time: getenv("TEST_COMPONENT_AUTO_UPDATE_TIME") || "04:00", + component_auto_update_targets: getenv("TEST_COMPONENT_AUTO_UPDATE_TARGETS") ? split(getenv("TEST_COMPONENT_AUTO_UPDATE_TARGETS"), " ") : [ "all" ] + }; + } + return {}; +} + +function section_objects(_config, _type) { + return []; +} + +return { + get_all, + section_objects +}; +UCODE + +cat >"$fake_lib/config/connections.uc" <<'UCODE' +return {}; +UCODE + +cat >"$fake_lib/components/action.uc" <<'UCODE' +#!/usr/bin/env ucode +let component = ARGV[1] || "tachyon"; +let action = ARGV[2] || "check_update"; +if (action == "check_update") { + let result = { + success: true, + component, + action, + message: "Update is available", + current_version: "1.0.0", + latest_version: "1.1.0", + release_url: "https://example.com/release", + changed: 0, + status: "outdated" + }; + print(sprintf("%J\n", result)); + exit(0); +} + +if (action == "update") { + let result = { + success: true, + component, + action, + message: "Updated successfully", + current_version: "1.1.0", + latest_version: "1.1.0", + changed: 1, + status: "latest" + }; + print(sprintf("%J\n", result)); + exit(0); +} +UCODE + +cat >"$fake_lib/providers/zapret/runtime.uc" <<'UCODE' +#!/usr/bin/env ucode +exit(1); +UCODE +cp "$fake_lib/providers/zapret/runtime.uc" "$fake_lib/providers/zapret2/runtime.uc" +cp "$fake_lib/providers/zapret/runtime.uc" "$fake_lib/providers/byedpi/runtime.uc" + +cat >"$fake_lib/service/state.uc" <<'UCODE' +#!/usr/bin/env ucode +exit(0); +UCODE + +updates_ucode() { + TEST_COMPONENT_UPDATE_CHECK_ENABLED="${TEST_COMPONENT_UPDATE_CHECK_ENABLED:-1}" \ + TEST_COMPONENT_UPDATE_CHECK_INTERVAL="${TEST_COMPONENT_UPDATE_CHECK_INTERVAL:-1d}" \ + TEST_COMPONENT_AUTO_UPDATE_ENABLED="${TEST_COMPONENT_AUTO_UPDATE_ENABLED:-0}" \ + TEST_COMPONENT_AUTO_UPDATE_MODE="${TEST_COMPONENT_AUTO_UPDATE_MODE:-immediate}" \ + TEST_COMPONENT_AUTO_UPDATE_TIME="${TEST_COMPONENT_AUTO_UPDATE_TIME:-04:00}" \ + TEST_COMPONENT_AUTO_UPDATE_TARGETS="${TEST_COMPONENT_AUTO_UPDATE_TARGETS:-all}" \ + TACHYON_LIB="$fake_lib" \ + TACHYON_BIN="/usr/bin/tachyon" \ + TACHYON_SERVICE_INIT="/etc/init.d/tachyon" \ + TACHYON_COMPONENT_UPDATE_CHECK_CACHE_DIR="$cache_dir" \ + TACHYON_COMPONENT_UPDATE_CHECK_STATE_FILE="$timestamp_file" \ + UPDATES_JOB_DIR="$job_dir" \ + ucode -L "$fake_lib" -L "$TACHYON_LIB" "$UPDATES_UC" "$@" +} + +# 1. Test immediate auto-update trigger on check if outdated +TEST_COMPONENT_AUTO_UPDATE_ENABLED=1 \ + TEST_COMPONENT_AUTO_UPDATE_MODE=immediate \ + updates_ucode component-updates-if-due + +# Verify update check cache was populated +[ -f "$cache_dir/tachyon.json" ] || fail "component update check cache missing" + +# Verify that auto-update spawned a background job in job_dir +sleep 1 +job_files=( "$job_dir"/*.json ) +[ -f "${job_files[0]}" ] || fail "auto-update should create background job state" + +# 2. Test scheduled apply +rm -rf "$job_dir"/* +TEST_COMPONENT_AUTO_UPDATE_ENABLED=1 \ + TEST_COMPONENT_AUTO_UPDATE_MODE=schedule \ + TEST_COMPONENT_AUTO_UPDATE_TIME="04:00" \ + updates_ucode component-auto-update-apply + +sleep 1 +job_files=( "$job_dir"/*.json ) +[ -f "${job_files[0]}" ] || fail "scheduled auto-update should create background job state" + +printf 'component auto update test passed\n' diff --git a/tests/run_all.sh b/tests/run_all.sh index 560b5501..1b32f1e7 100644 --- a/tests/run_all.sh +++ b/tests/run_all.sh @@ -50,14 +50,16 @@ fi echo "=== Running ${#test_files[@]} Tests (-P $PARALLEL) ===" -results_dir="$(mktemp -d)" +results_dir="$(mktemp -d /tmp/tachyon-run-all-XXXXXX 2>/dev/null || mktemp -d)" cleanup() { rm -rf "$results_dir"; } trap cleanup EXIT run_one() { - f="$1" - log="$2" + local f="$1" + local results_dir="$2" + local name name="$(basename "$f")" + local log="$results_dir/${name%.sh}.log" echo "--- START $name ---" if bash "$f" >"$log" 2>&1; then echo "--- PASS $name ---" @@ -65,9 +67,20 @@ run_one() { echo "--- FAIL $name ---" fi } -export -f run_one -printf '%s\0' "${test_files[@]}" | xargs -0 -n1 -I'{}' bash -c 'run_one "$1" "$2/$(basename "${1%.sh}").log"' _ '{}' "$results_dir" | tee "$results_dir/progress.log" +progress_log="$results_dir/progress.log" +touch "$progress_log" + +running=0 +for f in "${test_files[@]}"; do + ( run_one "$f" "$results_dir" | tee -a "$progress_log" ) & + running=$((running + 1)) + if [ "$running" -ge "$PARALLEL" ]; then + wait -n 2>/dev/null || wait + running=$((running - 1)) + fi +done +wait pass_count=0 fail_count=0 diff --git a/tests/updates_due.sh b/tests/updates_due.sh index 732867c2..0ba0efb6 100644 --- a/tests/updates_due.sh +++ b/tests/updates_due.sh @@ -199,6 +199,24 @@ assert_eq "list-disabled" \ "$(updates_ucode cron-refresh-plan-fixture "$WORK_DIR/cron-plan-list-disabled.json" /usr/bin/tachyon '# list' '# subscription' '# component')" \ "disabled list cron plan" +cat >"$WORK_DIR/cron-plan-auto-update.json" <<'JSON' +{ + "settings": { + "list_update_enabled": "0", + "component_update_check_enabled": "1", + "component_update_check_interval": "1d", + "component_auto_update_enabled": "1", + "component_auto_update_mode": "schedule", + "component_auto_update_time": "03:30" + }, + "section": [] +} +JSON + +assert_eq $'component\t0 0 * * * /usr/bin/tachyon component_updates_if_due # component\ncomponent-auto-update\t30 3 * * * /usr/bin/tachyon component_auto_update_apply # component' \ + "$(updates_ucode cron-refresh-plan-fixture "$WORK_DIR/cron-plan-auto-update.json" /usr/bin/tachyon '# list' '# subscription' '# component')" \ + "component auto-update cron plan" + cat >"$WORK_DIR/cron-plan-invalid-list.json" <<'JSON' { "settings": { diff --git a/tests/watchdog_selfheal.sh b/tests/watchdog_selfheal.sh index efa42c89..d488b783 100644 --- a/tests/watchdog_selfheal.sh +++ b/tests/watchdog_selfheal.sh @@ -40,8 +40,8 @@ grep -Fq 'function strip_unmarked_tachyon_cron_lines(' "$UPD" || grep -Fq 'strip_unmarked_tachyon_cron_lines(' "$UPD" || true [ "$(grep -c 'strip_unmarked_tachyon_cron_lines(' "$UPD")" -ge 3 ] || fail "unmarked cron line stripping must be applied to remove and refresh paths" -grep -Fq '(list_update|subscription_update|component_updates_if_due)' "$UPD" || - fail "legacy cron pattern must cover all three tachyon jobs" +grep -Fq '(list_update|subscription_update|component_updates_if_due|component_auto_update_apply)' "$UPD" || + fail "legacy cron pattern must cover all tachyon jobs" # 4. Tunnel-style sections count as outbound configuration: a lone AWG/WARP # section must not trigger "No proxy outbound sections found".