platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
101
docs/phase-e/E5_SINGBOX_CLIENT_FORM_MATRIX.md
Normal file
101
docs/phase-e/E5_SINGBOX_CLIENT_FORM_MATRIX.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# E5 SingBox Client Form Matrix (UI-first, VLESS baseline)
|
||||
|
||||
Дата: 2026-03-09
|
||||
Статус: active
|
||||
Владелец: Engineering
|
||||
|
||||
## 1) Что берём из твоего примера
|
||||
- Берём структуру "блоками", как на скрине:
|
||||
- базовый блок,
|
||||
- transport,
|
||||
- security,
|
||||
- sniffing,
|
||||
- advanced toggles.
|
||||
- Не копируем серверные поля биллинга/лимитов/истечения, потому что это не клиентский outbound.
|
||||
|
||||
## 2) Что исключаем (server-only)
|
||||
- `Email`, `Subscription`, `Total used`, `Traffic reset`, `Expire date`, `Fallbacks` (как серверный inbound list), и прочие учёт/статистика-поля.
|
||||
|
||||
## 3) Клиентская форма (VLESS + Reality) — целевая MVP
|
||||
|
||||
### 3.1 Block A: Profile
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Profile name | `profile.name` | yes | имя карточки |
|
||||
| Enabled | `profile.enabled` | yes | локальный toggle |
|
||||
| Protocol | `outbound.type` | yes | для этого шаблона фикс `vless` |
|
||||
|
||||
### 3.2 Block B: Server/Auth
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Address | `outbound.server` | yes | домен/IP |
|
||||
| Port | `outbound.server_port` | yes | `1..65535` |
|
||||
| UUID | `outbound.uuid` | yes | vless user id |
|
||||
| Flow | `outbound.flow` | no | напр. `xtls-rprx-vision` |
|
||||
| Packet encoding | `outbound.packet_encoding` | no | default `none` |
|
||||
|
||||
### 3.3 Block C: Transport
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Transport type | `outbound.transport.type` | no | `tcp|ws|grpc|http|httpupgrade|quic` |
|
||||
| Path | `outbound.transport.path` | depends | для `ws/http/httpupgrade` |
|
||||
| Host/Headers | `outbound.transport.headers` | no | advanced |
|
||||
| Service name | `outbound.transport.service_name` | depends | для `grpc` |
|
||||
|
||||
### 3.4 Block D: Security
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Security mode | `outbound.tls.enabled` + `outbound.tls.reality.enabled` | yes | `none|tls|reality` (segmented control) |
|
||||
| SNI | `outbound.tls.server_name` | depends | для `tls/reality` |
|
||||
| uTLS fingerprint | `outbound.tls.utls.fingerprint` | no | `chrome|firefox|safari|...` |
|
||||
| Reality public key | `outbound.tls.reality.public_key` | depends | must для reality |
|
||||
| Reality short id | `outbound.tls.reality.short_id` | no | обычно короткий hex |
|
||||
| Insecure | `outbound.tls.insecure` | no | advanced toggle |
|
||||
|
||||
### 3.5 Block E: Sniffing/Local inbound (опционально)
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Sniffing enabled | `inbounds[*].sniff` | no | если используем локальный socks inbound в generated config |
|
||||
| Sniff override destination | `inbounds[*].sniff_override_destination` | no | advanced |
|
||||
|
||||
### 3.6 Block F: Advanced Dial
|
||||
|
||||
| UI field | JSON path | Required | Notes |
|
||||
|---|---|---|---|
|
||||
| Network | `outbound.network` | no | `tcp|udp` |
|
||||
| Connect timeout | `outbound.connect_timeout` | no | duration |
|
||||
| Bind interface | `outbound.bind_interface` | no | advanced |
|
||||
| Routing mark | `outbound.routing_mark` | no | advanced |
|
||||
| Multiplex | `outbound.multiplex` | no | advanced group |
|
||||
| UDP over TCP | `outbound.udp_over_tcp` | no | advanced group |
|
||||
|
||||
## 4) Guardrails (обязательные)
|
||||
- `CV-001`: при `security=reality` автоматически `tls.enabled=true`, `tls.reality.enabled=true`.
|
||||
- `CV-002`: при `security=reality` поле `reality.public_key` обязательно.
|
||||
- `CV-003`: при `transport=grpc` поле `service_name` обязательно.
|
||||
- `CV-004`: при `transport=ws|http|httpupgrade` поле `path` обязательно.
|
||||
- `CV-005`: `address/port/uuid` обязательны всегда.
|
||||
|
||||
## 5) UI-компоновка (desktop)
|
||||
- Compact panel:
|
||||
- `Profile`,
|
||||
- `Server/Auth`,
|
||||
- `Transport`,
|
||||
- `Security`,
|
||||
- collapsed `Advanced`.
|
||||
- Actions:
|
||||
- `Preview render`,
|
||||
- `Validate profile`,
|
||||
- `Apply profile`,
|
||||
- `History`,
|
||||
- `Rollback profile`.
|
||||
|
||||
## 6) Расширение на другие протоколы
|
||||
- Сохраняем те же блоки UI, меняются только поля блока `Server/Auth` + часть `Security/Transport`.
|
||||
- То есть форма будет модульной, а не отдельное "окно под каждый протокол".
|
||||
|
||||
Reference in New Issue
Block a user