dokril efda8eb98f
CI / Windows baseline (push) Canceled after 0s
Release v2.0.0
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00
2026-09-10 20:59:52 +03:00

ProxyWarden

ProxyWarden — standalone Windows desktop-приложение для маршрутизации выбранных программ через SOCKS5-прокси. Оно управляет обязательным ProxiFyre и, при необходимости, локальным sing-box, но само не является VPN-драйвером, proxy server или облачным control plane.

Все системные действия остаются явными: apply только проверяет и применяет конфигурацию; установка, обновление, запуск, остановка, перенос и удаление компонентов выполняются отдельными командами пользователя.

Главное

  • Tauri 2 + React/TypeScript UI + Rust backend.
  • Маршрутизируются выбранные процессы, папки или .exe, а не вся система.
  • Глобальный Windows proxy не меняется.
  • Внешний SOCKS5 работает без Local sing-box.
  • Production runtime не запускает PowerShell: service/install/UAC orchestration принадлежит native Rust.
  • x64 installer содержит проверенные offline payloads компонентов и WebView2 Offline Installer; сеть для baseline-установки не нужна.

Компоненты

Компонент Роль Когда нужен
ProxyWarden Control App UI, storage, validation, config generation и orchestration Всегда
ProxiFyre Перехватывает трафик выбранных приложений и направляет его в SOCKS5 Для любого per-app routing
Windows Packet Filter / NDISAPI Сетевой драйвер ProxiFyre Устанавливается вместе с ProxiFyre, если отсутствует
Microsoft Visual C++ Redistributable Runtime-зависимость ProxiFyre Устанавливается при необходимости
sing-box Создаёт локальный SOCKS5 endpoint для выбранного subscription-сервера Только для Local sing-box flow
WinSW Запускает sing-box как Windows-службу Только для Local sing-box flow

Версии, SHA-256 и лицензии offline payloads зафиксированы в packaged component catalog. Установка Control App не запускает routing-компоненты: нужный компонент устанавливается отдельным действием в UI.

В UI и части внутренних DTO ProxiFyre может иметь исторический id proxyfier. Это не продукт Proxifier.

Маршруты

Внешний SOCKS5:

выбранные приложения -> ProxiFyre -> внешний SOCKS5 proxy

Local sing-box:

выбранные приложения -> ProxiFyre -> Local sing-box 127.0.0.1:1080 -> выбранный subscription-сервер

Во втором маршруте ProxiFyre по-прежнему отвечает за выбор приложений. Local sing-box только предоставляет локальный SOCKS5 endpoint и соединяется с выбранным сервером.

Установка и системные пути

Tauri NSIS installer устанавливает Control App per-machine. Managed runtime-компоненты лежат только под текущим app root:

C:\Program Files\ProxyWarden
C:\Program Files\ProxyWarden\components\ProxiFyre
C:\Program Files\ProxyWarden\components\sing-box

Службы:

ProxiFyreService
ProxyWardenSingBox

ProxyWarden управляет службой только после точной проверки PathName, marker/receipt и canonical component root. Похожее имя службы или найденная папка сами по себе не дают права на start/stop/delete.

Релиз одной командой

В PowerShell из корня проекта:

.\release.cmd

То же действие доступно как npm run release. Сценарий показывает изменения Git и предлагает patch/minor/major, произвольную версию или текущую ещё не выпущенную версию. Можно сразу ввести номер вроде 1.2.1.

После выбора он синхронизирует версии в package.json, package-lock.json, tauri.conf.json, Cargo.toml и Cargo.lock, проверяет frontend/Rust/offline bundle, собирает NSIS и готовит папку releases/proxywarden-vX.Y.Z. Затем создаёт commit со всеми текущими отслеживаемыми и неигнорируемыми новыми файлами, annotated tag vX.Y.Z и одним atomic push отправляет текущую ветку и этот тег в origin. При отсутствии изменений новый commit не нужен. Артефакты не попадают в Git.

В папке релиза: artifacts/nsis/ProxyWarden_X.Y.Z_x64-setup.exe, SHA256SUMS.txt, release-manifest.json с точным commit/hash и release-notes.md. EXE загружается на сайт вручную; GitHub/Gitea release page автоматически не создаётся.

Нужны Git с настроенной identity и доступом к origin, Node, установленные frontend-зависимости (npm ci один раз), Rust/MSVC/Windows SDK. Сам сценарий сборки использует Node напрямую и не требует npm в PATH. Запуск от администратора не нужен.

.\release.cmd -PlanOnly                     # только JSON-план: без записи, сборки и сети
.\release.cmd -Version 1.2.1                # версия без вопроса
.\release.cmd -Version 1.2.1 -Resume        # повторить только неудачный push

Не меняйте исходники во время сборки. Существующие теги не перезаписываются; при расхождении с удалённой веткой сценарий останавливается до изменения версий. При ошибке сборки изменения версии остаются локально для исправления, commit/tag/push не выполняются. При неудачном push готовая папка и локальный commit/tag сохраняются; -Resume проверяет исходники и SHA-256 перед повторной отправкой.

Для локальной подготовки без commit/tag/push остаётся scripts/prepare-release.ps1 -Version X.Y.Z. Автоматические проверки не заменяют Windows VM/UAC/driver/routing acceptance: в manifest это отмечается отдельно.

Данные и source of truth

Настройки и состояние лежат под C:\ProgramData\ProxyWarden:

config\profiles.json
config\targets.json
config\local-singbox.json
config\storage-meta.json
state\activity.json
state\component-layout.json
state\component-updates.json
state\migrations\...
packages\...

config\components.json не является текущим источником статуса компонентов. Это только legacy input: migration может проверить, сохранить snapshot/archive и затем перестать использовать его. Фактический install/service/version status читается из native inventory Windows и проверенных receipts.

Generated artifacts можно пересоздать:

generated\proxifyre-app-config.json
generated\sing-box-config.json

Не редактируйте generated-файлы как основной источник правды. Subscription URL, userinfo, credentials, proxy password и внутренние migration/job records нельзя выводить целиком в UI, logs или diagnostics.

Миграция старой установки

  • Startup выполняет только безопасную storage adoption/migration: backup, validation, atomic commit и повторный no-op.
  • Старые component roots и службы сначала обнаруживаются read-only.
  • Перенос компонента — отдельное UAC-действие с exact identity checks, rollback journal и quarantine.
  • Foreign или incomplete installation не управляется автоматически.
  • Пока cutover journal активен, требует recovery или quarantine ещё не подтверждён к удалению, upgrade/uninstall блокируется до безопасного завершения.

Права администратора

Без UAC можно редактировать настройки, выбирать приложения и proxy, загружать subscription, смотреть статус и генерировать конфигурацию.

UAC требуется для явных действий, которые меняют Windows:

  • install/update/uninstall ProxiFyre или Local sing-box;
  • установка Windows Packet Filter и VC++ Runtime при необходимости;
  • start/stop/create/delete Windows-служб;
  • подтверждённый legacy component cutover и его cleanup.

Elevated mode принимает только заранее записанный typed job ID либо один из фиксированных NSIS modes. UI не передаёт произвольную команду, script text или install path.

Типовые сценарии

Внешний SOCKS5

  1. Установите ProxiFyre явной кнопкой, если он отсутствует.
  2. На вкладке VPN / Прокси выберите внешний proxy и укажите host:port или socks5://host:port.
  3. Добавьте приложения в ProxiFyre route.
  4. Нажмите Применить.

Local sing-box для этого сценария не нужен.

Local sing-box с подпиской

  1. Явно установите ProxiFyre и Local sing-box.
  2. Добавьте subscription URL, загрузите список и выберите сервер.
  3. Добавьте приложения и примените маршрут.

Разработка

Целевая платформа — Windows 10/11 x64. Для сборки нужны Node.js/npm, Rust через rustup, Visual Studio Build Tools с MSVC и Windows SDK. PowerShell 7 используется только для build/release/QA tooling; установленному приложению PowerShell не нужен.

Set-Location D:\repos\ProxyWarden
npm ci
npm run tauri -- dev

Browser preview не доказывает работу Tauri commands, UAC или Windows-служб:

npm run dev -- --host 127.0.0.1

Проверка

Frontend и Rust:

npm run format:check
npm run lint
npm run typecheck
npm test -- --run
npm run build

Push-Location src-tauri
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets
Pop-Location

Build/release/QA boundaries:

& .\scripts\check-runtime-powershell-boundary.ps1 -CheckOnly
& .\scripts\update-component-bundle.ps1 -PlanOnly
& .\scripts\update-component-bundle.ps1 -CheckOnly
& .\scripts\audit-windows-smoke.ps1 -Mode PlanOnly
& .\scripts\prepare-release.ps1 -PlanOnly -SkipBuild
npm run tauri -- info
npm run tauri -- build

PlanOnly и CheckOnly возвращают structured JSON с changed: false. Обновление packaged component catalog — отдельная release-команда и не является runtime action.

Unit tests и build не подтверждают реальный UAC/SCM/driver/routing flow. Для release candidate нужны Windows VM smoke-сценарии: fresh offline install, legacy upgrade/rollback, foreign same-name service refusal и uninstall/reboot behavior.

Ограничения

  • Основной routing protocol — SOCKS5.
  • Link subscriptions поддерживают только форматы, которые явно принимает текущий parser; неизвестные поля/форматы отклоняются, а не теряются молча.
  • Local sing-box остаётся optional.
  • x86 и ARM64 не входят в текущий release contract.
  • Реальные Windows service, UAC, driver и offline installer сценарии нельзя считать подтверждёнными без VM evidence.
S
Description
No description provided
Readme MIT
46 MiB
1.0.1
Latest
2026-07-08 21:52:28 +03:00
Languages
Rust 80.9%
TypeScript 9.3%
PowerShell 4.5%
CSS 3.8%
NSIS 0.9%
Other 0.6%