Repository navigation
1.7.15
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.
- Причина: на роутерах с BusyBox
- Исправлены поиск стратегий
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