88 lines
3.1 KiB
Markdown
88 lines
3.1 KiB
Markdown
# Skill: Subscriptions and Routing
|
|
|
|
## Когда использовать
|
|
|
|
Используй этот skill при изменениях в external SOCKS5 flow, Local sing-box flow, subscription fetching/parsing, server selection, ping/check route, ProxiFyre config generation или sing-box config generation.
|
|
|
|
## Mental model
|
|
|
|
Supported route shapes:
|
|
|
|
```text
|
|
selected Windows apps -> ProxiFyre -> external SOCKS5 proxy
|
|
```
|
|
|
|
```text
|
|
selected Windows apps -> ProxiFyre -> 127.0.0.1:1080 Local sing-box -> selected subscription server
|
|
```
|
|
|
|
ProxiFyre is the per-app router. Sing-box is optional local outbound runtime.
|
|
|
|
## Invariants
|
|
|
|
- External SOCKS5 must work without Local sing-box.
|
|
- Local sing-box route requires installed/configured/running sing-box and selected server.
|
|
- UI route chain must match generated backend config.
|
|
- Subscription URL is secret.
|
|
- Server identity should not rely only on non-unique human tag forever.
|
|
- Generated config should be validated before apply/start where possible.
|
|
|
|
## Subscription rules
|
|
|
|
When changing subscription parsing:
|
|
|
|
- Preserve JSON outbound support.
|
|
- Do not claim support for link formats that parser does not implement.
|
|
- If adding VMess/Trojan/Shadowsocks link parsing, add tests for each.
|
|
- Keep unsupported outbound types visible as unsupported, not silently dropped if this affects user expectation.
|
|
- Redact subscription URL and outbound secrets in logs/UI.
|
|
|
|
## Ping/check rules
|
|
|
|
- Network checks should have timeout.
|
|
- Checks should be cancel-safe where possible.
|
|
- Do not make route check mutate config/service state.
|
|
- Do not store external IP probe result as secret, but avoid over-logging.
|
|
- Make it clear if check verifies local sing-box only, external proxy only, or full route.
|
|
|
|
## Config generation
|
|
|
|
For ProxiFyre:
|
|
|
|
- Respect selected app targets.
|
|
- Deduplicate carefully, preferably case-insensitive where Windows semantics apply.
|
|
- Validate target kind semantics: process name vs exe path vs folder.
|
|
- Write config atomically.
|
|
|
|
For sing-box:
|
|
|
|
- Validate selected server/outbound exists.
|
|
- Avoid duplicate tag ambiguity by introducing stable id if needed.
|
|
- Run `sing-box check` when binary is available.
|
|
- Avoid writing secrets to temp files outside safe app directories.
|
|
|
|
## Tests to add for changes
|
|
|
|
- External route without sing-box.
|
|
- Local route with selected server.
|
|
- Missing ProxiFyre blocks apply.
|
|
- Missing sing-box blocks local route apply.
|
|
- Duplicate server tags.
|
|
- Redacted subscription display.
|
|
- Unsupported subscription formats.
|
|
- Timeout/fetch failure.
|
|
- Config generation produces expected route chain.
|
|
|
|
## Как отчитываться
|
|
|
|
Перед финальным ответом применить `.agent/skills/communication-reporting/SKILL.md` и `.agent/checklists/communication.md`.
|
|
|
|
Минимум для нетривиальной задачи:
|
|
|
|
- короткая сводка;
|
|
- таблица файлов `Файл / Что изменилось / Зачем`;
|
|
- важные места без пересказа каждой строки;
|
|
- что проверено;
|
|
- что не проверено;
|
|
- конкретные риски.
|