zapret-kvn/HANDOFF.md
loop-uh 97f1cd4902 HANDOFF: detailed auto-reconnect spec (InfoBar, no perf impact, cooldown)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:13:38 +03:00

75 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XrayFluent — Handoff для нового AI
## Что это
PyQt6 + qfluentwidgets GUI клиент для xray/sing-box proxy с TUN VPN на Windows.
Репозиторий: `G:\bin\Xray-windows-64`
## Текущее состояние (2026-03-24)
### Работает:
- **sing-box TUN с dialerProxy** — process-based routing (маршрутизация по .exe файлам)
- **Process presets** — быстрый выбор: Telegram, Discord, Chrome, Firefox, Edge, Spotify, Torrents, Windows System/Defender/Update/OneDrive
- **Per-process traffic monitoring** — live таблица: скорость, VPN/Direct байты, хосты, соединения
- **Traffic history** — persistent JSON (`data/traffic_history.json`), sessions + daily totals
- **DNS settings** — configurable bootstrap/proxy DNS серверы и протоколы
- **Proxy ports в TUN mode** — SOCKS5:10808 + HTTP:8080 доступны параллельно с TUN
- **Windows API process tracking** — в proxy mode (без TUN) через `GetExtendedTcpTable`
### Архитектура sing-box TUN (hybrid mode):
```
App → TUN (sing-box) → process_name rules → proxy/direct
proxy → SOCKS:11808 → xray → dialerProxy → SS protect (chacha20) → sing-box direct → VPS
direct → sing-box direct → physical NIC → internet
```
### Ключевые файлы:
- `xray_fluent/singbox_config_builder.py` — генерация sing-box + xray конфигов
- `xray_fluent/app_controller.py` — центральный контроллер (подключение, hot-swap, метрики)
- `xray_fluent/process_traffic_collector.py` — Clash API polling, per-process stats
- `xray_fluent/win_proc_monitor.py` — Windows API для proxy mode
- `xray_fluent/traffic_history.py` — persistent storage сессий
- `xray_fluent/process_presets.py` — пресеты приложений
- `xray_fluent/ui/dashboard_page.py` — дашборд с графиком и таблицей процессов
- `xray_fluent/ui/routing_page.py` — настройки маршрутизации, DNS, process presets
- `sing-box.md` — полная документация: 5 попыток, баги, решения, справочник
### Известные ограничения:
- `strict_route: false` обязательно (true ломает direct outbound на Windows)
- `method:none` SS несовместим между xray и sing-box → используем chacha20-ietf-poly1305
- Запрет (DPI bypass) несовместим с sing-box sniff
- sing-box 1.14+ обязателен (1.13.3 имеет баг direct outbound)
- DNS: `outbound` rule items deprecated в 1.12, удалены в 1.14 → используем `domain_resolver`
- Per-process bytes недоступны в proxy mode (только connection count через Windows API)
### Что нужно доделать:
- [ ] **Авто-переключение ноды при падении скорости:**
- Мониторить `down_bps` из live_metrics. Если ниже порога (напр. 50 KB/s) дольше N секунд (напр. 30с) → hot-swap на следующую ноду
- Показать InfoBar уведомление: "Скорость упала. Переключение на {node.name}..." — держать 30 секунд
- **КРИТИЧНО: мониторинг НЕ должен тормозить скорость!** Только читать уже собранные метрики, не делать никаких HTTP/API запросов. Просто проверять `self._last_down_bps` в контроллере
- Порог и задержка настраиваемые в AppSettings
- Cooldown между переключениями (напр. 60с) чтобы не зациклиться
- Не переключаться если всего 1 нода
- [ ] UI страница истории трафика (фильтр по дням/месяцам, графики)
- [ ] Автоостановка запрета при включении TUN
- [ ] Баг: VPN отключается при смене настроек маршрутизации (reconnect race)
- [ ] Подстраница процессов: live обновление данных
- [ ] TUN + system proxy одновременно (сейчас proxy отключается при TUN)
### Сборка:
```bash
# Kill processes first!
wmic process where "name='XrayFluent.exe'" call terminate
wmic process where "name='xray.exe'" call terminate
wmic process where "name='sing-box.exe'" call terminate
sleep 5
.venv/Scripts/python build.py
```
### Правила (из CLAUDE.md):
- Используй stock qfluentwidgets компоненты
- Держи page surfaces transparent для Mica эффекта
- Hot-swap через `QTimer.singleShot(0, ...)`
- `_active_core` устанавливать ДО старта процессов
- Metrics worker стартовать только когда `_switching=False`
- sing-box log level: warn (не debug/info в production)