Commit Graph
71 Commits
Author SHA1 Message Date
Dushnilin f553352e25 release: 1.3.9 - Оптимизация кодовой базы (Ponytail Audit), очистка мертвого кода и ускорение Telegram-бота
- Frontend: полное удаление неиспользуемого renderAdvancedSettings.ts (-1354 строки), очистка каталогов локализации от фантомных ключей, инкапсуляция внутренних экспортов в runtimeTags и singBoxVariant
- Backend: удаление неиспользуемого singbox/dns_prefetch.uc (-243 строки) и его вызова в lifecycle.uc, удаление устаревших заглушек Forkop-эпохи в service_check.uc
- Telegram Bot: внедрение in-memory кэша cb_map_cache для устранения избыточных дисковых чтений/записей JSON при рендеринге inline-кнопок
- Версия: bump версии до 1.3.9 в package.json и package-lock.json
2026-09-01 08:48:29 +03:00
Dushnilin dfb32722bf release: 1.3.8 - OpenWrt network interfaces for WARP generator, DoH doctor URL normalization & doctor lock fixes 2026-08-30 20:05:16 +03:00
Dushnilin 123f5e6ccf release: 1.3.7 - Telegram alert deduplication & rate limiting, DNS detour deadlock resolution, ucode fs.opendir fixes 2026-08-29 21:28:41 +03:00
Dushnilin 939d9418a2 release: 1.3.6 - Family Profiles, Mobile Responsiveness, Mixed Proxy fix & AI Doctor Fuzzer improvements 2026-08-29 13:57:17 +03:00
Dushnilin 6248452e79 chore(i18n): sync fe-app-tachyon locales with luci-app-tachyon catalogs 2026-08-29 08:34:58 +03:00
Dushnilin b620886b9e feat(fuzzer): DPI-детектор, авто-применение, история результатов
- DPI-детектор: перед бенчмарком определяет тип блокировки (RST/throttle/DNS)
  и переранжирует стратегии по приоритету (badseq для RST, multisplit для
  throttle, fake+TTL для DNS-блока)
- Авто-применение: галочка «Auto-apply best strategy» автоматически
  применяет выигравшую стратегию после завершения бенчмарка
- История: результаты бенчмарков сохраняются в /etc/tachyon/fuzzer_history.json
  (до 50 записей) — новая вкладка «History» в UI
- CLI: новые команды detect_dpi, auto_apply, history, clear_history
- Локализация: русские и английские строки для всех новых элементов UI
- Frontend: вкладка History, баннер DPI-детекции, чекбокс авто-применения
2026-08-27 15:29:07 +03:00
Dushnilin b000d3024a feat(fuzzer): мульти-таргетные сьюты, конструктор паттернов, кастомные стратегии и минималистичный UI 2026-08-27 13:54:51 +03:00
Dushnilin c58b7339f7 feat(fuzzer): алгоритмический комбинаторный генератор DPI-стратегий и выбор режима в LuCI 2026-08-27 07:50:21 +03:00
Dushnilin 3ead229264 feat(fuzzer): add RAG knowledge base and LLM-powered strategy synthesizer 2026-08-26 22:50:12 +03:00
Dushnilin dc6f0547b4 feat(fuzzer): автоматический подбор и тюнинг DPI-стратегий для Zapret v2, Zapret v1 и ByeDPI 2026-08-26 22:18:35 +03:00
Dushnilin 77e8cdaad0 feat: AI доктор — 5 багфиксов + Telegram кнопка
Багфиксы:
- rag.uc: исправлен порядок аргументов push() — RAG-эмбеддинги снова строятся
- fix_uci_config: правильный путь бэкапа (/etc/backup/tachyon_config + fallback)
- apply_quick_fix: честные exit codes для всех 23 фиксов
- doctor(): прокидывается busy flag в JSON-вывод
- diagnose_json: строится из checks[] вместо парсинга эмодзи из текста

UI:
- Кнопка Telegram канал (https://t.me/tachyon_proxy) на странице диагностики

Тесты:
- 5 новых проверок в ai_doctor_local.sh (uci_backup, exit codes, busy, structured checks, rag push)
2026-08-25 21:37:15 +03:00
Dushnilin 0b4edc4789 test(run_all): параллельный запуск с логами по тестам и сводкой pass/fail
run_all.sh гонял набор последовательно с fail-fast: первый упавший тест
отменял всё остальное, а CI (xargs -P4) расходился с локальным порядком.
Теперь поддерживается -P N параллельность как в CI, ведётся лог по каждому
тесту, печатается сводка pass/fail и вывод упавших, принимаются фильтры имён
для запуска подмножества, а ошибки синтакс-проверки по-прежнему прерывают
всё до старта тестов.
2026-08-21 20:50:21 +03:00
Dushnilin ae4f7c5128 fix(monitoring): оптимизация ширины колонок таблицы (уменьшена колонка Маршрут) и актуализация каталогов локализации 2026-08-21 15:01:00 +03:00
Dushnilin b2deb9a695 i18n(ru): добавить переводы WARP прокси, проверки Telegram и кнопки проверки подключения 2026-08-21 13:34:55 +03:00
Dushnilin e4e2d19c6d fix(runtime): устранение сбоев запуска sing-box, исправление правил nftables и защита от гонок вочдога
- Восстановление кэша правил: восстановление .srs, .lst, .json файлов из постоянного каталога /etc/tachyon/rulesets/ при старте; защита от удаления кэша при остановке; добавление фоллбэка пустых ruleset в runtime.uc перед валидацией
- nftables: удаление невалидного auto-merge для интервальных составных сетов (ipv4_addr/ipv6_addr . inet_service)
- core/ip: исправление нормализации IPv6-адреса и порта для TPROXY без дублирования скобок
- dns block: исправление возвращаемого статуса nft_add_dns_block_rules_from_schedules при отсутствии правил блокировки
- watchdog & lifecycle: добавление флага блокировки /var/run/tachyon/starting для исключения сброса правил вочдогом во время старта
- ui & i18n: форматирование бейджей устройств в родительском контроле и обновление переводов
2026-08-21 08:52:23 +03:00
Dushnilin adf5c7a22f i18n: добавить русские переводы для content blocking и telegram diagnose 2026-08-21 07:50:11 +03:00
Dushnilin bd083cc5d3 feat: content blocking в родительском контроле (блокировка доменов на устройство)
Новые опции config schedule:
- blocked_domains: домены для блокировки (full:/keyword:/regex: префиксы)
- mode: block (список) | allow (whitelist — всё кроме списка)
- dns_level: блокировка на DNS-уровне (NXDOMAIN через dns-block-in)
- notify: уведомление в Telegram при попытке доступа

Механизм:
- sing-box: новый dns-block-in inbound (127.0.0.43:1053) с reject-правилами
  для заблокированных доменов; source_ip_cidr для IP-устройств;
  invert для whitelist-режима
- nftables: nat chain dns_block — REDIRECT DNS-запросов устройств на
  dns-block-in; time-based через meta hour для расписаний; MAC-устройства
  матчатся по ether saddr (DHCP-динамические IP поддерживаются)
- route rules reject для always-on расписаний (fallback при обходе DNS)
- telegram worker: проверка nft counters каждые 60s, уведомление о
  заблокированной активности

UI (parental.js):
- колонка Blocked Sites в таблице
- textarea с пресетами: соцсети, видео, игры, взрослый контент,
  мессенджеры, магазины
- mode / dns_level / notify переключатели

Валидация: домены, mode, dns_level, notify в validator.uc
Тесты: tests/content_blocking.sh (98/98 backend, 522/522 frontend)
2026-08-21 05:11:39 +03:00
Dushnilin 7084b9ba3d chore: sync localization catalogs after telegram_diagnose strings 2026-08-20 22:28:27 +03:00
Dushnilin 66ffb50a1a feat: add Telegram API connection test button to settings
Runs 7-step diagnostic: token check, sing-box running, port 4534
listening, DNS resolution, direct IPv4 API, proxy API, send test
message. Shows green/red indicators with actionable advice for each.
2026-08-20 21:56:12 +03:00
Dushnilin b53b93786a chore: sync locales after adding enable_rag and warp_proxy_section 2026-08-20 19:48:24 +03:00
Dushnilin 1f116e571d feat: родительский контроль по расписанию, мультивыбор секций, перехват DNS и обновление локализации (1.2.86) 2026-08-17 20:34:42 +03:00
Dushnilin c35380200f fix(tailscale, ai): исправить скрытие полей Tailscale-сервера и добавить готовый пресет провайдера OpenRouter 2026-08-17 11:18:36 +03:00
Dushnilin bca948947e fix(updates): предотвратить повторные модальные окна и добавить активную проверку готовности сервисов роутера перед перезагрузкой страницы 2026-08-17 10:27:16 +03:00
Dushnilin beb132690e fix(server): добавить валидатор validatePositiveInteger для полей MTU и Keepalive сервера AWG 2026-08-16 20:35:23 +03:00
Dushnilin 9b5707982c feat(servers): полная поддержка генератора конфигураций AmneziaWG, QR-кода, скачивания .conf и расширенных настроек сервера 2026-08-16 19:37:14 +03:00
Dushnilin 1062982070 fix(ui): отображение всех условий маршрутизации (списки сообщества, IP, устройства, порты) для секций AWG, WARP и расширенных прокси 2026-08-16 17:50:58 +03:00
Dushnilin 5adda4bba7 fix(i18n,watchdog): полная актуализация русской локализации интерфейса и исправление детекции WAN в Watchdog 2026-08-16 16:01:37 +03:00
Dushnilin e0828eb53a fix(diagnostics): fix false-positive sing-box DNS check on busybox nslookup and auto-fetch LAN clients in support report 2026-08-15 12:12:59 +03:00
Dushnilin 3c5108b26b fix(i18n): translate all AI Doctor and LAN inspector strings to Russian and fix diagnostic banner status logic 2026-08-15 12:00:28 +03:00
Dushnilin 8ecc3ee685 feat(updates): live operation log with page lock in progress modal
The progress modal faked its steps on a timer because the worker only wrote to syslog. Now every updates_log line is appended to <job>.log (UPDATES_JOB_LOG), the running state advertises log_path, the log survives job completion until the TTL sweep, and the new component_action_log CLI mode serves it from a byte offset. The UI polls it into a monospace panel with auto-scroll, exposes a Copy log button, and the modal cannot be closed while the job runs (only the disabled progress button is shown).
2026-08-14 13:20:33 +03:00
Dushnilin 85ce7f98c7 feat(snapshots): сохранение и восстановление рабочих конфигов из расширенных настроек 2026-08-14 11:36:48 +03:00
Dushnilin 65b216b6a2 feat(p2p): поле портов торрент-клиента для изоляции P2P (issue #31) 2026-08-14 09:46:15 +03:00
Dushnilin 305e14d44e feat(reset): кнопка сброса настроек в LuCI и дефолтное состояние при чистой установке
- новый модуль service/reset.uc (режим reset-settings, флаг no-start): остановка сервиса, чистка runtime/кэшей, сохранение tailscale, запись дефолтного конфига
2026-08-13 21:06:39 +03:00
Dushnilin 443a62ece7 feat(ui): явные русские названия категорий и элементов интерфейса в окне проверки доступности 2026-08-13 08:38:11 +03:00
Dushnilin fb1d9dfe5b Fix CI test failures: add missing Russian translation for 'Cannot save settings' and use common.background_command in service_check.uc 2026-08-12 12:39:30 +03:00
Dushnilin 5b372f5572 v1.2.75: Add Service Check mode switcher (Active Sections / All Profiles), restore AI Chat Assistant, harmonize action button styles, and fix dark theme compatibility 2026-08-12 12:22:52 +03:00
Dushnilin 2bd2fd7645 feat(diagnostics): нативная кнопка проверки сервисов
Реализована нативная проверка сервисов (watchdog, telegram, sing-box) через ucode, избавляя от внешней зависимости forkop-servicecheck.
2026-08-12 10:42:09 +03:00
Dushnilin 2b4d8cd4e0 fix(i18n): wrap Ollama and LM Studio labels in _() with English defaults and update po/pot 2026-08-11 22:29:34 +03:00
Dushnilin 1a1fd7f4c3 fix(settings): add Ollama & LM Studio to CBI settings tab options and make API key optional for local LLMs 2026-08-11 22:27:57 +03:00
Dushnilin 5db8ed7889 feat(ai-doctor): add dynamic endpoint placeholders and optional API key hint for Ollama and LM Studio 2026-08-11 22:11:48 +03:00
Dushnilin 40e185c143 i18n: actualize translation pot and po files for 1.2.74 2026-08-11 22:01:21 +03:00
Dushnilin 7def6e556f i18n: fix Russian-source translation keys in AmneziaWG .conf import
section.js had 10 _() calls with Russian strings as keys instead of English.
This is a i18n antipattern: source keys must be language-neutral (English).

Changes:
- section.js: replace 10 Russian msgids with English equivalents
  - 'Загрузить конфиг .conf' -> 'Load .conf config'
  - 'Импортировать настройки AmneziaWG из файла .conf' -> 'Import AmneziaWG settings from .conf file'
  - 'Загрузить .conf' -> 'Load .conf'
  - 'Ошибка' (3x) -> 'Error' (reuses existing key)
  - 'Выберите файл с расширением .conf' -> 'Select a file with .conf extension'
  - 'Не удалось разобрать файл:' -> 'Failed to parse file:'
  - 'Загружено!' -> 'Loaded!'
  - 'Готово' -> 'Done'
  - 'Конфиг AmneziaWG успешно загружен!' -> 'AmneziaWG config loaded successfully!'
  - 'Ошибка чтения' -> 'Read error'

- tachyon.ru.po: add RU translations for 9 new English keys
- calls.json / tachyon.pot / tachyon.po: regenerated via locales:actualize

Result: 1108/1108 translated (no orphaned Russian-source entries)
2026-08-10 14:00:35 +03:00
Dushnilin 92f1b4e991 i18n: complete RU translations — 1109/1109 (was 1030/1109)
Translated 79 missing strings:
- 15 country names (Belarus, China, Finland, France, Germany, Japan,
  Kazakhstan, Netherlands, Russia, Singapore, Sweden, Turkey,
  Ukraine, United Kingdom, United States)
- TUIC URL validation errors (14 strings)
- UI general: Cancel, Conflict, Error, Fixed, Issues, Success, etc.
- Protocol abbreviations kept as-is: DNS, HTTP, MTU, RDP, SSH, TLS
- Doctor/watchdog: 'Doctor failed', 'Doctor repair', 'No issues found'
- WARP: registration detour, proxy, skip TLS cert, country code
- Hosts file descriptions, URL validation message
- Monitoring & Analytics, Optimization, Protection sections
- Checking… and Generating… (Unicode ellipsis U+2026 variants)
- Russian-source keys: 'Ошибка', 'Не удалось разобрать файл:'

Distributed to luci-app-tachyon/po/ via npm run locales:actualize
2026-08-10 13:53:23 +03:00
Dushnilin 940bf6554c fix(i18n): синхронизация упакованного русского каталога с source-локалью 2026-08-09 22:37:36 +03:00
Dushnilin af2d07b056 fix(updates): установка пересобранных релизов в рамках одного тега
opkg считает пакет уже установленным при равенстве версий, поэтому
пересборка под тем же тегом молча не применялась: задание завершалось
успехом, билд оставался старым. Добавлен --force-reinstall в
pkg_install_files_command (opkg) и в install.sh; apk не тронут, он
всегда пишет переданный файл.

Детект пересборки больше не зависит только от SHA, которого нет в
релизах старше f974e4a0: добавлен отпечаток билда по published_at и
метаданным ipk-ассета, решение вынесено в tachyon_build_differs с
префиксным сравнением SHA разной длины. Отпечаток установленного
билда пишется в state-файл и попадает в extra.

Telegram уведомляет о пересборках: check_notified_updates пропускает
outdated_same_release, дедуп идёт по версии и SHA, текст показывает
короткие SHA вместо пары одинаковых версий.

Кэш проверки обновлений сохраняет current_sha из результата действия
вместо безусловного latest, иначе неудачная установка выглядела как
"актуально".

Фронт пересобран из TS, ручная правка main.js снята. Добавлен
describeSameReleaseBuild с фолбэк-текстом, когда SHA недоступен.
2026-08-09 16:57:10 +03:00
Dushnilin 22a236e5d1 feat: commit-level version tracking for same-release updates
Backend:
- constants.uc: add TACHYON_COMMIT_SHA constant (placeholder __COMPILED_COMMIT_SHA__)
- build.sh: capture git rev-parse HEAD and sed-replace commit SHA placeholder
- Makefile: same commit SHA sed replacement for OpenWrt builds
- action.uc: modify check_tachyon() to compare installed commit SHA with
  target_commitish from GitHub release, new status 'outdated_same_release'
- action.uc: reuse release_json for both version and commit SHA extraction
- updater.uc: add release_commit_sha helper to extract target_commitish
- updates.uc: extend cacheable status to include outdated_same_release

Frontend:
- main.js: handle outdated_same_release status in renderComponentCard
- main.js: include outdated_same_release in shouldShowInstallAfterCheck
- main.js: include outdated_same_release in applyCachedCheckResults

i18n:
- Add 'Update is available for current release' and 'Update is available
  for current release:' to .pot and .ru.po files

78 tests pass.
2026-08-03 21:35:06 +03:00
Dushnilin ac1ff6bbb7 fix: кнопки активны после обновления + перевод Reinstall → Переустановить 2026-07-31 18:15:28 +03:00
Dushnilin 7757ceae6a feat: implement WebRTC Leak Protection and Strict DNS DoQ Enforcer 2026-07-30 21:43:56 +03:00
Dushnilin af620a2f45 fix: исправление резолвинга пакета zapret2 для роутеров и поиск релизов 2026-07-30 17:52:16 +03:00
Dushnilin b057e0a48d refactor: удаление неиспользуемого автоподбора Zapret2 и чистка файлов локализации 2026-07-30 16:42:30 +03:00