docs(claude): teach the bot briefings about AmneziaWG and PIA

`grep -ci amneziawg` returned 0 in both .github/claude/repo-context.md and
REVIEW.md while CLAUDE.md has carried the protocol for releases. The issue
analyst and the review bot could not name internal/amneziawg/,
internal/amneziawgnet/ or internal/pia/, and the mention job's inline map
enumerated ten protocols with amneziawg missing from the list.

The 3.1 obfuscation parameters are generated twice - GenerateObfuscation31 in
internal/amneziawg/params.go and generateAwgObfuscation in
frontend/src/lib/xray/amneziawg-obfuscation.ts - so REVIEW.md now names that
pair as a divergence surface next to the three link implementations. Commit
bd1c27b0 was already a bug in exactly that pair.

Also corrects the CLAUDE.md CLI list, which omitted encrypt-tokens.
This commit is contained in:
Sanaei
2026-09-04 02:09:28 +02:00
parent 63b46cd612
commit 41db85a096
3 changed files with 23 additions and 5 deletions
+15
View File
@@ -27,6 +27,10 @@ question it already answers.
per inbound. Client, ad-tag and quota/expiry edits are hot-applied through the per inbound. Client, ad-tag and quota/expiry edits are hot-applied through the
fork's management API (`PUT /secrets`) so connections survive, with a process fork's management API (`PUT /secrets`) so connections survive, with a process
restart as the fallback on older binaries. restart as the fallback on older binaries.
- AmneziaWG inbounds run IN-PROCESS, not as a child: `internal/amneziawgnet/`
drives an amneziawg-go device over a gVisor userspace netstack and relays into a
loopback SOCKS5 Xray inbound. `internal/amneziawg/` derives the instance and peers
from an inbound and generates + validates the 3.1 obfuscation parameters.
- Storage: SQLite by default (`/etc/x-ui/x-ui.db` on Linux, the executable - Storage: SQLite by default (`/etc/x-ui/x-ui.db` on Linux, the executable
directory on Windows) or PostgreSQL (`XUI_DB_TYPE` / `XUI_DB_DSN`). The SQLite directory on Windows) or PostgreSQL (`XUI_DB_TYPE` / `XUI_DB_DSN`). The SQLite
driver is CGo, so `CGO_ENABLED=0` builds fail. driver is CGo, so `CGO_ENABLED=0` builds fail.
@@ -42,6 +46,8 @@ question it already answers.
| schema, migrations | `internal/database/`, `internal/database/model/` | | schema, migrations | `internal/database/`, `internal/database/model/` |
| Xray child process + config | `internal/xray/` | | Xray child process + config | `internal/xray/` |
| MTProto inbounds | `internal/mtproto/` | | MTProto inbounds | `internal/mtproto/` |
| AmneziaWG shape + embedded runtime | `internal/amneziawg/`, `internal/amneziawgnet/` |
| PIA WireGuard client | `internal/pia/` |
| subscription server | `internal/sub/` | | subscription server | `internal/sub/` |
| HTTP handlers | `internal/web/controller/` | | HTTP handlers | `internal/web/controller/` |
| business logic | `internal/web/service/` | | business logic | `internal/web/service/` |
@@ -112,12 +118,21 @@ Link and subscription generation is implemented three times, independently:
A change to share-link or subscription output that touches one and not the A change to share-link or subscription output that touches one and not the
others is how they drift apart. others is how they drift apart.
AmneziaWG's 3.1 obfuscation parameters are a second such pair: generated in Go by
`GenerateObfuscation31` (`internal/amneziawg/params.go`) and in TS by
`generateAwgObfuscation` (`frontend/src/lib/xray/amneziawg-obfuscation.ts`).
Changing one without the other is how the panel and the UI hand out different
configs for the same inbound.
## Downstream programs that must accept what the panel emits ## Downstream programs that must accept what the panel emits
- **XTLS/Xray-core** — the Xray config the panel generates, and the VLESS/VMess - **XTLS/Xray-core** — the Xray config the panel generates, and the VLESS/VMess
transport and security fields. transport and security fields.
- **MetaCubeX/mihomo** — consumes the Clash YAML from `internal/sub/`. - **MetaCubeX/mihomo** — consumes the Clash YAML from `internal/sub/`.
- **SagerNet/sing-box** — parses the share links the panel emits. - **SagerNet/sing-box** — parses the share links the panel emits.
- **amnezia-vpn/amneziawg-go** — the obfuscation parameters the panel generates
(`Jc`/`Jmin`/`Jmax`, `S1`-`S4`, `H1`-`H4`, `I1`-`I5`). Its `device/uapi.go` is the
symbol that decides which keys are accepted.
- **mhsanaei/mtg-multi** — the MTProto sidecar whose TOML (`[secrets]`, - **mhsanaei/mtg-multi** — the MTProto sidecar whose TOML (`[secrets]`,
`[secret-ad-tags]`, `[secret-limits]`) and management API `[secret-ad-tags]`, `[secret-limits]`) and management API
(`PUT /secrets`, `POST /secrets/{name}/reset-quota`) `internal/mtproto/` (`PUT /secrets`, `POST /secrets/{name}/reset-quota`) `internal/mtproto/`
+1 -1
View File
@@ -31,7 +31,7 @@ file locations when it can answer in one hop.
built into `internal/web/dist/` (gitignored) and embedded via `embed.FS`. built into `internal/web/dist/` (gitignored) and embedded via `embed.FS`.
## Repo map ## Repo map
- `main.go` — entry point + `x-ui` CLI (run, migrate, migrate-db, setting, cert). - `main.go` — entry point + `x-ui` CLI (run, migrate, migrate-db, encrypt-tokens, setting, cert).
- `internal/config/` — env parsing (XUI_DEBUG, XUI_LOG_LEVEL, XUI_LOG_FOLDER, - `internal/config/` — env parsing (XUI_DEBUG, XUI_LOG_LEVEL, XUI_LOG_FOLDER,
XUI_BIN_FOLDER, XUI_SKIP_HSTS, XUI_PORT, XUI_DB_*). XUI_BIN_FOLDER, XUI_SKIP_HSTS, XUI_PORT, XUI_DB_*).
- `internal/database/` + `internal/database/model/` — GORM schema (~24 models; - `internal/database/` + `internal/database/model/` — GORM schema (~24 models;
+7 -4
View File
@@ -44,10 +44,13 @@ surface — still 🟣, but open the summary with it.
PostgreSQL, or one that loses or overwrites operator data on upgrade or PostgreSQL, or one that loses or overwrites operator data on upgrade or
rollback. There are no migration files and no down-migrations. rollback. There are no migration files and no down-migrations.
- A change to what the panel emits on the wire — Xray config JSON, share - A change to what the panel emits on the wire — Xray config JSON, share
links, subscription/Clash YAML, mtg-multi TOML — that a downstream client links, subscription/Clash YAML, mtg-multi TOML, AmneziaWG obfuscation
would reject or read differently, or that makes the three independent link parameters — that a downstream client would reject or read differently, or
implementations (Go `internal/util/link/` + `internal/sub/`, TS that makes two independent implementations of the same output diverge: the
`frontend/src/lib/xray/`, TS `docs/lib/xray/`) diverge from one another. three link implementations (Go `internal/util/link/` + `internal/sub/`, TS
`frontend/src/lib/xray/`, TS `docs/lib/xray/`), and the AmneziaWG 3.1
generator in Go (`internal/amneziawg/params.go`) versus TS
(`frontend/src/lib/xray/amneziawg-obfuscation.ts`).
- Any edit to `.github/workflows/`: this repository runs workflows with - Any edit to `.github/workflows/`: this repository runs workflows with
secrets against a public fork stream. Untrusted expression interpolation secrets against a public fork stream. Untrusted expression interpolation
into `run:` blocks, broadened permissions, weakened guards, or a job that into `run:` blocks, broadened permissions, weakened guards, or a job that