- TypeScript 47.1%
- JavaScript 27%
- Go 18.5%
- CSS 6.9%
- HTML 0.5%
| integration | ||
| tools | ||
| ui | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| AGENTS.md | ||
| README.md | ||
DPI Strategies
This repository stores the shared DPI strategy data used by dpictl today and
intended for future Windows, macOS, Linux, Android, and iOS clients.
The repository is data-first. Platform apps should not parse upstream .bat
launchers or ship their own divergent rule catalog. They should consume the
ready YAML strategies and lists described here.
Structure
integration/ Only data consumed by apps, engines, tests, and SDKs
manifest.yaml Machine-readable index for clients
strategies/*.yaml Ready strategy scenarios
lists/*.txt Seed host/IP lists referenced by strategies
schema/*.json JSON Schema documentation for the public format
FORMAT.md Versioned data contract
tools/ Only developer tooling and validation code
go.mod Go module for validators and generators
manifest Manifest generator
validate Local validator
internal/contract Go validation library used by CI
ui/ TypeScript teaching UI for visual scenario diffs
Consumption Model
Clients download integration/manifest.yaml, verify each listed file by
sha256, then pass strategy YAML into their engine adapter. The engine should
receive a normalized configuration model, not raw upstream scripts.
youtube-only is the baseline scenario for clients that run DPI desync only for
YouTube/Google domains. Broader scenarios can be presented as optional additions
over that base in demo and testing tools.
Current Windows dpictl consumes the strategies entries from the manifest via
its update-strategies command. Future clients should also consume lists
entries so list updates can ship without an app rebuild.
Raw manifest URL:
https://git.politsin.com/dpi/dpi-strategies/-/raw/master/integration/manifest.yaml
Validate
Push-Location .\tools
go test ./...
go run .\validate
Pop-Location
Push-Location .\ui
npm ci
npm run check
Pop-Location
Validation checks the public contract:
- manifest version and declared format;
- no unsafe paths in manifest entries;
- every declared strategy/list file exists;
- sha256 values match file contents;
- strategy YAML has
version: 1, matchingid, at least one rule, and no unknown fields.
Update Flow
- Change files in
integration/strategies/orintegration/lists/. - Regenerate
integration/manifest.yaml:
Push-Location .\tools
go run .\manifest
Pop-Location
- Run
go test ./...fromtools/andnpm run checkfromui/. - Push to
masterafter CI passes.
The current source sync path is generated from the dpictl repository:
cd W:\proj\go\dpi\dpictl
go run .\configbundle\zapret2yaml
Then copy changed ready files from configbundle/strategies and
configbundle/lists into this repository, refresh the manifest, and validate:
cd W:\proj\go\dpi\dpi-strategies
Copy-Item ..\dpictl\configbundle\strategies\*.yaml .\integration\strategies\ -Force
Copy-Item ..\dpictl\configbundle\lists\*.txt .\integration\lists\ -Force
Push-Location .\tools
go run .\manifest
go test ./...
go run .\validate
Pop-Location