KAA VPN для Windows — сборка исходников версии 0.1.0

Состав
src/Kaa.Core              API, импорт профилей, конфигурации, TUN lifecycle
src/Kaa.Windows           интерфейс WPF, трей, Windows DPAPI
tests/Kaa.Core.Tests      автономные проверки Core без тестовых NuGet-пакетов
runtime/engines           Windows x64: sing-box.exe и xray.exe
runtime-arm64/engines     Windows ARM64: sing-box.exe и xray.exe
engine-source             отдельный полный набор исходников движков
licenses                  тексты лицензий и сведения о происхождении

Полный архив KAA-VPN-Windows-0.1.0-source.zip уже содержит engine-source
вместе с приложением и готовыми движками обеих архитектур.
Исходники интерфейса и движков также могут передаваться отдельными архивами.
Распакуйте полный архив движков так, чтобы каталог engine-source находился
рядом с src, tests и Build.ps1. Для полной пересборки сохраняйте оба архива.
Архив движков должен содержать sing-box 1.12.12, Xray-core 26.10.10,
точные архивы всех 96 Go-модулей в module-cache, графы/хеши зависимостей,
лицензии и build-engines.ps1. Ссылки на upstream без этих исходников
не заменяют полный комплект соответствующих исходников распространяемых
движков. Компиляторы и Microsoft .NET SDK в архив исходников не включены.

Требования к среде
Установленный .NET SDK 10.0.402, PowerShell 5.1 или 7.
global.json выбирает 10.0.402 с rollForward=latestPatch.
Сборку удобнее выполнять в Windows 10/11 x64 или Windows 11 ARM64.
WPF ориентирован на Windows; Core-тесты также запускаются на macOS/Linux.
Готовые пакеты self-contained: целевому пользователю .NET ставить не нужно.

Сборка с готовыми движками
Из каталога с Build.ps1:

  powershell -File .\Build.ps1 -Runtime win-x64 -Restore
  powershell -File .\Build.ps1 -Runtime win-arm64 -Restore

Либо обе архитектуры:

  powershell -File .\Build.ps1 -Runtime all -Restore

Параметр -Restore явно разрешает dotnet restore. Он может загрузить
reference/runtime-пакеты .NET из настроенных NuGet-источников; сообщения
restore видны в консоли. Сам скрипт не скачивает SDK, VPN-движки,
драйверы, инструменты или установщики. Для работы без сети заранее
подготовьте SDK и необходимые NuGet reference/runtime-пакеты.

При повторной сборке из готового NuGet-кэша можно убрать -Restore.
Тогда используются --no-restore и никакие недостающие пакеты автоматически
не скачиваются. Если изменены TargetFramework, RuntimeIdentifier или
версия SDK, сначала выполните явное восстановление пакетов для новой цели.

Скрипт сначала запускает Core-тесты, затем публикует Release. По умолчанию
результат размещается в artifacts/win-x64 или artifacts/win-arm64.
Если каталог результата уже не пуст, выберите новый -OutputRoot или
переместите предыдущую сборку. Скрипт не удаляет её автоматически.

Пример с другим каталогом движков:

  powershell -File .\Build.ps1 -Runtime win-arm64 `
    -EngineRuntimeRoot ..\..\runtime-arm64 -OutputRoot .\artifacts-arm -Restore

EngineRuntimeRoot относителен к src/Kaa.Windows/Kaa.Windows.csproj,
а не к текущему каталогу PowerShell. Допускается абсолютный путь.
Для -Runtime all оставьте параметр пустым: архитектуры выбираются отдельно.
Build.ps1 проверяет архитектуру PE и хеши обоих движков перед публикацией.

Эквивалентная отдельная публикация ARM64 вручную:

  dotnet publish .\src\Kaa.Windows\Kaa.Windows.csproj -c Release `
    -r win-arm64 --self-contained true `
    -p:EngineRuntimeRoot=../../runtime-arm64 -p:UseSharedCompilation=false `
    -o .\artifacts\win-arm64

В ручном варианте dotnet publish может выполнить restore; для автономной
сборки предварительно подготовьте пакеты и добавьте --no-restore.
Для x64 замените RID на win-x64 и EngineRuntimeRoot на ../../runtime.

Полная пересборка движков
См. engine-source/README-RU.txt. Нужны отдельные официальные Go 1.25.2
для sing-box и Go 1.27.1 для Xray. build-engines.ps1 использует только
включённый module-cache с GOPROXY=off, CGO_ENABLED=0; проверяет SHA256.
На каждой архитектуре должны совпасть архитектуры .NET-приложения,
sing-box.exe и xray.exe. После изменения исходников движка обновите
проверенные хеши/происхождение и повторите конфигурационные/сетевые тесты.

Проверки перед распространением
Core-тесты проверяют разбор и ограничения ссылок, защиту TLS/Reality,
контракт email/OTP, cookie/CSRF/HWID, восстановление операций после потери
ответа, создание профиля без повторного выделения устройства и конфигурации.
Они не подключаются к продукционному серверу и не используют реальные токены.
Результат запуска приложения, TUN, маршрутов, DNS, IPv4/IPv6 и сетевого
выхода из Windows фиксируйте отдельно с точной версией Windows и архитектурой.
Не заменяйте эти проверки успешной cross-compilation или проверкой PE.
В этой инструкции нет утверждения, что незавершённые VM/сетевые тесты прошли.

Дистрибутив
Сохраняйте все файлы dotnet publish, каталог engines, README-RU.txt,
LICENSE.txt, NOTICE.txt и licenses/. Не публикуйте bin/obj, локальные
NuGet-кэши, профили пользователей, state.dat, токены или серверные ключи.
Передавайте исходники приложения и полный соответствующий архив движков
вместе с бинарной поставкой, сохраняя уведомления и условия зависимостей.
Тексты лицензий включённого .NET runtime находятся в licenses/dotnet.
После обновления версии .NET перенесите лицензии/уведомления новой версии.
