Skip to content

1.7.15

Choose a tag to compare

@Dushnilin Dushnilin released this 05 Nov 20:00

1.7.15

Нововведения и улучшения

  • Нативные балансировщики tachyon-core (v0.3.9+) и уровни приоритета в секциях (tachyon_core/generator_routes.uc, tachyon_core/variant_state.uc, config/connections.uc, views/balancers.ts, views/section.ts, tachyon/studioDeck.ts):
    • Подключена генерация нативных балансировщиков для tachyon-core начиная с версии 0.3.9 с изоляцией от конфигурации sing-box и поддержкой уровней приоритета (tiers / priority_levels), заданных в секции маршрутизации и в balancer_settings.
    • В режиме mixed фильтрации кандидатов (filter_candidate_outbounds) при отсутствии правил включения исключения применяются ко всему пулу видимых узлов секции (visible_outbounds).
    • Доработано сопоставление тегов и отображаемых имён серверов секции с учётом префиксов и меток источников (resolve_section_server_outbound_tag), добавлена русская локализация режимов балансировки и метрик телеметрии узлов.
  • Анализ пересечений содержимого списков и согласованности DNS с маршрутизацией (#347 — @mrAntonD, service/config_plan.uc, components/updates.uc):
    • В analyze_rule_conflicts() добавлено сопоставление фактического содержимого списков (community_lists, локальных файлов .json и .lst) по доменам, поддоменам и диапазонам IPv4/CIDR как между разными списками (например, google_services в секции Direct и google_ai в секции проксирования), так и между списками и ручными правилами.
    • Добавлен учёт условий правил (devices, входные интерфейсы, диапазоны портов, протоколы L4 и списки исключений): правила для разных устройств или непересекающихся портов не помечаются как полностью затенённые (shadowed_sections), а частичное перекрытие отмечается областью действия conditional.
    • Для каждого конфликта отдельно рассчитываются решение DNS (dns_decision: секция, приоритет и резолвер dns-direct / dns-remote / dns-block) и решение маршрутизации (route_decision), а также признак расхождения путей dns_route_mismatch.
    • Добавлена поддержка списка ожидаемых пересечений (expected_overlaps / acknowledged_conflicts), сводка полноты анализа (analysis_completeness с перечнем проверенных списков, unverified_lists и unverified_conditions) и автоматическое обновление отчёта /var/run/tachyon/rule-conflicts.json после обновления списков и подписок.
  • Уведомления в Telegram о результате фонового обновления компонентов (#352 — @artkovalsky):
    • В service/telegram/update_jobs.uc, callbacks.uc, runtime.uc и service/i18n.uc добавлена очередь отслеживания фоновых задач обновления компонентов (/var/run/tachyon/telegram-component-jobs.json): после завершения задачи component_action_async воркер бота отправляет в чат уведомление с переходом версий при успешном обновлении либо статус, код возврата и последние строки журнала при ошибке.
  • Расширение базы знаний RAG и инструментов MCP / REST Agent API (diagnostics/rag.uc, service/agent_api.uc, service/agent_mcp.uc, docs/knowledge-base/*):
    • В diagnostics/rag.uc, agent_api.uc и agent_mcp.uc улучшено ранжирование лексического поиска по документации, добавлены эндпоинт /tachyon/agent/v1/docs/search, инструменты tachyon_docs_search и tachyon_route_explain, встроенные справочные ресурсы MCP и пересобран индекс rag_index.json.
  • Доработки интерфейса URLTest, Outbounds и карточек подписок (#323 — @KAMKillJoy, tachyon_core/priority.uc, diagnostics/routing.uc, subscription/parser.uc, subscription/cache.uc, tabs/dashboard/initController.ts, tabs/dashboard/partials/renderSections.ts, tachyon/studioDeck.ts, views/outbounds.ts):
    • В модальном окне URLTest и Priority добавлен пакетный по-URL замер задержек (getClashApiGroupLatency с передачей целевого URL), индивидуальный замер узла по клику на его плашку задержки и сохранение задержки карточки URLTest по активному дочернему узлу.
    • В верхнюю панель секции на дашборде добавлены кнопки быстрого открытия инспектора в модальном окне и перехода к настройкам секции.
    • Сохраняются многострочные объявления подписок (announce), длинные тексты сворачиваются до первой строки с разворотом по клику на дашборде и в Studio Deck.
    • В Outbounds устранено дублирование серверов с префиксами между subscription-cache и section-cache, а в таблицах серверов групп добавлена сортировка по колонкам (#, Сервер, Протокол).

Исправления ошибок

  • Восстановлены экспорт и импорт снапшотов конфигурации в LuCI на всех темах и отправка /backup в Telegram (#358 — @BronJKeee, service/snapshot.uc, service/telegram/commands.uc, views/settings.ts, rpcd/acl.d/luci-app-tachyon.json):
    • Причина: на роутерах с BusyBox tar -tzf корневая папка архива выводится как tachyon без завершающего слэша /, из-за чего проверка backup_archive_safe() отклоняла архив с ошибкой unexpected member: tachyon при экспорте, импорте, сравнении и восстановлении снапшотов. Кроме того, в архивы попадали каталоги component-backups и hosts-lists, увеличивая размер снапшота выше лимита буфера rpcd (64 КБ) и лимита sendDocument в Telegram Bot API (413 Request Entity Too Large).
    • В backup_archive_safe() добавлена поддержка элементов tachyon и config без завершающего /, в SNAPSHOT_EXCLUDED_DIRS добавлены component-backups и hosts-lists, при экспорте архив перепаковывается без кэшей и сохраняется в /tmp/tachyon-snapshot-export.json, а обмен профилями в LuCI и Telegram /backup переведён на чтение и запись через /tmp/tachyon-snapshot-export.json и /tmp/tachyon-snapshot-import.json.
  • Исправлены поиск стратегий zapret2, расхождение оценки между этапами фаззера, завышенный пинг при проверке и работа модульных источников DPI (#359 — @altichter, tachyon_core/route.uc, tachyon_core/generator_routes.uc, config/connections.uc, subscription/cache.uc, diagnostics/fuzzer.uc, diagnostics/fuzzer/binaries.uc, diagnostics/fuzzer/probe.uc):
    • Причина: при подключении zapret2 через модульный outbound_source функции resolve_rule_for_section и section_is_ipv4_only_dpi не применяли strategy = "ipv4_only", а curl в фаззере вызывался с флагом -L (--location) и следовал по 302 Redirect на сторонний домен вне правил nftables, завышая измеряемую задержку в 3–4 раза.
    • Учтены модульные DPI-источники при генерации правил DNS и маршрутизации, убран флаг -L из проб curl в фаззере, выровнена шкала оценки кандидатов между Stage 1 и Stage 2 с приоритетом верифицированных стратегий и дополнен список встроенных блобов nfqws2.
  • Устранено самопроизвольное смещение прокрутки дашборда в теме footstrap (#360 — @KAMKillJoy, helpers/preserveScrollForPage.ts, tabs/dashboard/initController.ts):
    • Причина: скрипт fs-fit.js темы footstrap через таймер lateDrift (80ms) сбрасывал window.scrollY к предыдущему якорю при фоновом обновлении DOM дашборда.
    • На время работы страницы Tachyon отключается якорь fsAnchor темы footstrap, отслеживается активная прокрутка (wheel, touchmove, scroll) и откладывается фоновая перерисовка виджетов дашборда до завершения скролла.
  • Исправлено залипание всплывающей подсказки описания списка в Мастере подключения (#361 — @KAMKillJoy, helpers/communityListPicker.ts, tachyon/connectionWizard.ts):
    • Добавлено автоматическое скрытие плавающего тултипа при прокрутке, изменении размера окна, нажатии Escape, клике вне чипа, уходе курсора (mouseleave / blur), переходе между шагами и закрытии модального окна.
  • Фоновый замер задержки резервных ступеней балансировщика Priority и отображение при включённой опции «Скрывать недоступные серверы» (#357 — @9xxtdjh966-collab, tachyon_core/priority.uc, methods/custom/getDashboardSections.ts, tabs/dashboard/initController.ts):
    • Причина: балансировщик Priority генерируется в конфигурации ядра как selector, поэтому sing-box и tachyon-core не опрашивают его узлы самостоятельно. Демон priority.uc при наличии доступного сервера на первой ступени (Level 0) прекращал обход и не измерял задержку узлов резервных ступеней (Level 1+), из-за чего в Clash API у второй подписки оставалась пустая история замеров (latency = 0), а фильтр dashboard_hide_na_servers скрывал все серверы резервной подписки как N/A.
    • В priority.uc добавлен фоновый опрос неактивных ступеней (warm_inactive_group_members) при первичной инициализации и в периодическом цикле fastest_check_interval. На дашборде в getDashboardSections.ts и initController.ts добавлены учёт balancer_settings[id].outbound_group_levels, защита от скрытия непротестированных подписок и ступеней Priority до получения первого замера, а также фоновый дозамер узлов Priority с нулевой задержкой.
  • Устранена задержка открытия интерфейса LuCI из-за CGI-запросов к отсутствующим файлам section-cache (#351 — @Neoniq, tachyon/studioDeck.ts, views/tachyon.ts, views/outbounds.ts, views/balancers.ts, views/section.ts, methods/custom/getDashboardSections.ts):
    • Причина: при рендере страницы mountAllStudioDecks() инициализировал все панели Studio Deck (включая скрытые вкладки), а чтение отсутствующих файлов /var/run/tachyon/section-cache/*.json приводило к откату на fs.read_direct() и множественным запросам /cgi-bin/cgi-download с кодом 404.
    • Теперь перед чтением section-cache список существующих файлов запрашивается через fs.list('/var/run/tachyon/section-cache'), ошибки отсутствия файла (NotFoundError / ENOENT) обрабатываются без вызова fs.read_direct(), а скрытые панели Studio Deck монтируются лениво при первом переключении на соответствующую вкладку или подвкладку.
  • Исправлена ошибка настройки dnsmasq при запуске Tailscale (#353 — @lQwestl):
    • Причина: uci_core.sections("dhcp", "dnsmasq") возвращает массив строковых имён секций, поэтому обращение s[".name"] в configure_dnsmasq_localservice() в providers/tailscale/runtime.uc вызывало исключение Reference error: left-hand side expression is not an array or object.
    • Добавлена обработка как строковых имён секций (с чтением опции localservice через uci_core.get), так и объектов секций.
  • Исправлены повреждённые строки кириллицы в локализации LuCI (tachyon.ru.po) и добавлена проверка кодировки (locales/tachyon.ru.po, generate-po.js, distribute-locales.js, tests/locales_deterministic_order.sh):
    • Восстановлены все строки русского перевода, содержавшие последовательности ? вместо кириллицы, удалён маркер UTF-8 BOM из distribute-locales.js и добавлена автоматическая проверка целостности кодировки .po-файлов при генерации и в тестах.
  • Ускорение пакетной проверки задержек и обновления подписок, сброс кэша system_info и загрузка пользовательских списков (diagnostics/system_info.uc, tachyon_core/subscription.uc, tachyon_core/generator_routes.uc, service/reconciler.uc):
    • Сокращено время пакетной проверки задержек узлов и обновления подписок.
    • Кэш system_info автоматически инвалидируется при обновлении бинарного файла ядра или файла версии.
    • Загрузка пользовательских удалённых наборов правил (custom remote rulesets) выполняется через detour соответствующей секции маршрутизации; исправлено определение состояния в reconciler.uc.

Закрытые задачи и влитые PR

  • #323 — Доработки интерфейса URLTest, Outbounds и карточек подписок (@KAMKillJoy)
  • #347 — Пересечения содержимого списков и согласованность DNS с маршрутизацией (@mrAntonD)
  • #351 — Устранение CGI-запросов 404 к отсутствующим файлам section-cache и ленивая инициализация Studio Deck (@Neoniq)
  • #352 — feat(telegram): уведомление о результате обновления компонентов (успех/ошибка) в чат (@artkovalsky)
  • #353 — fix(tailscale): handle string section names in configure_dnsmasq_localservice (@lQwestl)
  • #357 — Фоновый замер задержки резервных подписок при балансировщике Priority и фильтрации недоступных серверов (@9xxtdjh966-collab)
  • #358 — Исправление экспорта/импорта снапшотов в LuCI и ошибки 413 при /backup в Telegram (@BronJKeee)
  • #359 — Исправление поиска стратегий zapret2, пинга в фаззере и модульных источников DPI (@altichter)
  • #360 — Устранение сброса прокрутки дашборда в теме footstrap (@KAMKillJoy)
  • #361 — Исправление скрытия всплывающей подсказки списка в Мастере подключения (@KAMKillJoy)

Full Changelog: 1.7.14...1.7.15