55 Commits
Author SHA1 Message Date
kazeyukiro 8af3d34589 docs: fix website URLs (/guide not /docs/guide) 2026-10-03 05:57:05 +00:00
kazeyukiro 7bdf35ba5b docs: point technical guides at 3m-ui.top; keep docs/readme/
Full documentation lives on the VitePress site (zh + en). Repository
docs/*.md are short stubs with links. Multilingual README files remain
under docs/readme/. Offline AI install prompts (.txt) are retained.
2026-10-03 05:52:05 +00:00
kazeyukiro 44ac4c9070 ui+docs: float page content on layout gray; document dashboard search
Drop the desktop full-width white content panel so Overview cards sit on
the layout background like 3X-UI. Docs: pin bundled Mihomo example to
v1.19.32 and note feature search / dashboard behavior.
2026-10-01 05:19:36 +00:00
kazeyukiro 2a900f4b85 feat(routing): richer WARP domain syntax and optional global WARP egress
Domain lines support domain:/full:/keyword:/geosite: prefixes. Toggle
warpGlobal sets MATCH,WARP while keeping Cloudflare control-plane DIRECT.
2026-09-29 17:00:51 +00:00
kazeyukiro 5f6ad28148 fix(warp): report register save errors; clarify MASQUE vs server WireGuard
WARPRegister no longer swallows SaveWARPAccount failures. UI/docs note that
server egress always injects WireGuard WARP; MASQUE is preview-only.
2026-09-29 16:42:38 +00:00
kazeyukiro 4e4c657674 fix(warp): upsert panel_settings without UNIQUE key conflicts
Soft-deleted panel_settings rows still occupied UNIQUE(key), so
re-registering WARP failed with constraint 2067. Use Unscoped
lookup/save and hard-delete on account removal; same for server-routing.
2026-09-29 16:30:46 +00:00
kazeyukiro 96d4a8a432 feat(routing): Mihomo rule-providers with hot update
Store rule-providers on server-routing, emit official rule-providers
block into serving config, and expose PUT hot-update via core
/providers/rules/{name}. Panel UI on Routing → Server egress.
2026-09-29 16:26:38 +00:00
kazeyukiro 95961c6cc2 fix(warp): make WARP domains actually work in server Mihomo
- ProxyMap always sets Cloudflare peer public-key, allowed-ips, remote-dns-resolve
- Default peer key when registration omits peers
- Surface ProxyMap errors at generate; clearer apply prompt for server egress
- Domain rule builder hardened; unit test for warp domain injection
2026-09-29 16:12:24 +00:00
kazeyukiro 1ddb808270 fix(i18n): declare WARP/routing keys; restore 3x-ui in acknowledgments
Unit test required en.ts keys used by Routing/Settings. Credits keep
3x-ui / s-ui as before.
2026-09-29 15:57:51 +00:00
kazeyukiro fec9733baa docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
docs: remove third-party panel name references from copy
Drop  and external m-ui product names from docs, UI strings,
and code comments. Keep functional descriptions of server egress and WARP.
2026-09-29 15:51:57 +00:00
kazeyukiro 0beaf396d1 docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
docs(api): align OpenAPI with server-routing and WARP account
Replace obsolete inject-warp; document GET/PUT server-routing,
GET/POST/DELETE system/warp, and templates/warp register nosave.
2026-09-29 15:49:13 +00:00
kazeyukiro 81df3a9e29 feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
feat(warp): persist WARP account, server inject, no server templates
Persist Cloudflare WARP account, inject outbound WARP into serving
Mihomo, route warpDomains on server egress. Remove client community
templates from the server tab; domains editor on Routing → Server egress.
2026-09-29 15:46:40 +00:00
kazeyukiro eefc5cc889 docs: zh-CN routing link for server egress 2026-09-29 15:17:48 +00:00
kazeyukiro ca2d4a3192 docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
docs: sync routing (server egress) and WARP limits
Document Client vs Server tabs, server-routing API, and that WARP
register is manual (no auto AI/streaming unlock pipeline).
2026-09-29 15:17:40 +00:00
kazeyukiro addf8aee32 fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
fix(sub): align sing-box export with migration 1.11–1.15
Drop deprecated DNS rule ip_is_private without match_response (1.14/1.16).
Keep typed DNS servers, TUN without stack, route sniff/hijack-dns actions,
and route-level private direct per official migration/deprecated docs.
2026-09-29 14:28:01 +00:00
kazeyukiro 38720e14c1 fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
fix(sub): sing-box DNS + mobile TUN MTU to stop broken web pages
Proxy-only TUN without DNS left CSS/JS CDNs failing under SFA.
Add dns.servers (UDP 8.8.8.8 via proxy), MTU 1500, mixed stack,
strict_route off for Android compatibility.
2026-09-28 15:34:37 +00:00
kazeyukiro 5e6cc8b604 fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
fix(sub): sing-box 1.11+ route actions instead of inbound sniff
Remove legacy inbound sniff (removed in 1.13). Use route rule
actions sniff + hijack-dns per official migration guide.
2026-09-28 15:06:53 +00:00
kazeyukiro 9fef35e238 feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
feat(sub): inject default TUN inbound into sing-box JSON (#88)
SFI/SFM need a tun inbound to create the system VPN interface.
Subscription docs now include tun-in + route.final=proxy alongside
node outbounds.
2026-09-28 14:31:26 +00:00
kazeyukiro bcee7502ff docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
docs: align panel SSL with DNS-01 wildcards
Add panel-ssl.md; update README, installation, batch-certificate, and
OpenAPI /system/ssl for challenge, Cloudflare token, and recovery notes.
2026-09-27 02:49:50 +00:00
kazeyukiro d283f38638 chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
chore: move localized READMEs under docs/readme
Keep root README.md as the canonical entry. Translations live in
docs/readme/ with fixed relative links and a language index.
2026-09-26 01:16:47 +00:00
kazeyukiro b9e8d57971 fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
fix(ci): repair i18n syntax; document GitHub OAuth
Remove double comma in en/zh-CN locale settings keys that broke oxlint.
Add OpenAPI paths, docs/github-oauth.md, and README security note.
2026-09-26 01:14:01 +00:00
kazeyukiro 8bfa8b7034 feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
feat(ssl): Let's Encrypt IP address certificates (shortlived)
When panel SSL domain is a public IP, obtain LE shortlived (~6 day) certs
via ACME profile=shortlived + HTTP-01, with automatic renewal under 48h.
Domain hostnames still use autocert as before.
2026-09-24 15:28:25 +00:00
kazeyukiro 3bb1abe43a docs: document POST /users/quick in OpenAPI and user guides 2026-09-24 14:51:09 +00:00
kazeyukiro feb8d6889a docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
docs: document Cloudflare WARP (v1.3.6) across READMEs and routing
Add docs/warp.md, link from all language READMEs / feature tables, and
clarify routing is client-only (WARP is Settings YAML, not server exit).
2026-09-24 14:35:45 +00:00
kazeyukiro 52bb97c083 chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
chore: remove Cloudflare WARP feature (panel, API, docs)
Drop register/inject endpoints, Settings/Routing UI, server-exit WARP
path, and documentation. Client routing and inbound panel unchanged;
server remains MATCH,DIRECT.
2026-09-23 17:05:13 +00:00
kazeyukiro a0ceb3a815 feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
feat: server WARP exit for listener traffic (user → node → WARP IP)
When visual-config contains wireguard/WARP outbounds, GenerateFinalConfig
merges them into the serving Mihomo process and sets MATCH to that exit
(optional CN DIRECT). Client community rules remain client-subscription only.
2026-09-23 16:25:12 +00:00
kazeyukiro ad35987e21 refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
refactor: drop server-side split; visual routing is client-only
GenerateFinalConfig strips rules/proxy-groups/proxies from visual-config
and forces MATCH,DIRECT on the serving Mihomo process. Panel Routing
page remains the editor for client subscription YAML only.
2026-09-23 16:10:00 +00:00
kazeyukiro 3b65c03d6c feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
feat(sub): export panel routing groups/rules into client Mihomo YAML
Client subscriptions now use visual-config proxy-groups and rules.
Leaf groups that only listed DIRECT get subscription node names injected.
Default remains PROXY+AUTO when routing was never customized.
2026-09-23 15:37:43 +00:00
kazeyukiro f11b686a5e fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
fix(routing): community templates restore proxy-groups
YiXuan/echs/MyClash presets now write matching select groups
(地区/代理/AI/TG 等) plus rules, not rules-only with a single PROXY.
2026-09-23 15:10:39 +00:00
kazeyukiro 1a7cff051c feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
feat(routing): community rule templates (MyClash, echs-top, YiXuanZX)
- Templates adapted for GEOSITE/GEOIP + PROXY group (server visual-config)
- Auto-create PROXY select group when applying community presets
- README acknowledgements; docs/routing.md notes
2026-09-23 14:49:51 +00:00
kazeyukiro c6ac347866 docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
docs: align routing (structured rules, WARP inject) and API notes
Add docs/routing.md; README feature links; OpenAPI paths for
rules/groups/inject-warp.
2026-09-22 16:57:20 +00:00
kazeyukiro f2c86450c8 fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
fix(ci): sync package-lock for lucide-react; document Lucide + cluster push
- Regenerate frontend/package-lock.json (fixes npm ci Missing lucide-react)
- CI: fall back to npm install if lock drifts
- README(s): Ant Design + Lucide; cluster push by name
- docs/cluster.md: multi-node push UX and API
- docs/installation.md: frontend stack note
2026-09-22 16:19:48 +00:00
kazeyukiro 79e6c778a1 chore: remove HWID feature (subscription device binding) 2026-09-21 00:00:00 +08:00
kazeyukiro e89750f9d0 docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
docs: align README/OpenAPI with per-node traffic, limits, backups
- docs/node-traffic.md; feature tables; installation backup cleanup note
- OpenAPI: traffic_multiplier, GET /users/{id}/node-traffic
2026-09-20 23:55:00 +08:00
kazeyukiro aab6c17745 fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
fix(hwid): more reliable device registration + client header aliases
- Upsert on (proxy_user_id, hwid); log registered/seen for diagnosis
- Accept x-device-id / x-hardware-id / ?hwid= aliases
- Response x-hwid-limit for v2rayTUN when limit active
- Docs: which clients actually send HWID (Clash stock does not)
2026-09-20 22:55:00 +08:00
kazeyukiro fa1744eef7 fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
fix(hwid): never 500 subscriptions; fail-open tracking when unlimited
Root cause: hwid_limit=0 still tried to INSERT/UPDATE devices; any DB error
returned 500 and blocked the whole subscription (Happ always sends x-hwid).
- limit<=0: best-effort track only, never deny
- limit>0: require x-hwid; deny only when over device cap
- Accept broader client HWID strings (4–128, strip controls)
- Router: only 403 for MaxDevices/Required; ignore other errors
2026-09-20 06:05:00 +08:00
kazeyukiro b6996ae2fb docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
docs: align README, OpenAPI, and docs with current limits/certs/subs
- Feature tables: IP 5s poll, HWID require x-hwid, sub_pull_limit, batch cert
- docs/users-limits.md, batch-certificate.md, subscription-formats.md
- OpenAPI ProxyUser + POST /nodes/batch/certificate
2026-09-20 01:15:00 +08:00
kazeyukiro 05bf9a270e chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
chore: align MetaCubeX audit — mihomo v1.19.31, TUIC modes, VMess schema
Per wiki.metacubex.one / KIMI audit:
- Bump bundled mihomo to v1.19.31 (amd64-v1 / arm64 digests verified)
- TUIC: panel keeps tuic-v4|tuic-v5; legacy "tuic" auto-detects token-only→v4 else v5
(YAML type always "tuic" per official inbound docs)
- UI: token field only on tuic-v4; tuic-v5 does not accept token in form
- VMess listener schema: drop allow-insecure (not in official VMess listener fields)
- Docs: version references → v1.19.31
2026-09-16 23:50:00 +08:00
kazeyukiro e48fb1008d docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
docs(ai-prompt): centralize install prompt and add curl-to-clipboard
Move the AI assistant install prompt into a single source of truth
(docs/ai-install-prompt.{md,zh.txt,en.txt}) so it no longer diverges
across README.md, README.en.md, README.zh-CN.md and docs/installation.md.
Add a one-liner that fetches the plain-text prompt straight to the
clipboard (pbcopy / xclip / wl-copy / Set-Clipboard), removing manual
copy-paste of a large block from rendered READMEs. The prompt content
itself is unchanged in spirit and still only runs the official
install.sh, with downloads verifying SHA256SUMS.
Prompt refinements (faithful to official script behavior):
- note CPU arch (amd64/arm64) and init system (systemd/OpenRC) checks
- mention sudo 3m-ui reset-admin for a lost one-time password
- explicitly forbid swapping third-party mirrors
2026-09-12 23:07:00 +08:00
Z User 715cec2ecd docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
docs: add AI assistant install prompt (official script only)
Copy-paste prompts for ChatGPT/Claude/Cursor in README (zh/en),
zh-CN README, and installation.md. Instruct assistants to use only the
official curl | sudo sh installer and not invent third-party sources.
2026-09-12 14:59:48 +00:00
freephilx 9471368afd perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54)
2026-09-11 23:11:20 +08:00
freephilx 3ec69d55de feat(mihomo): persistent core updates with rollback (#53) 2026-09-11 22:44:52 +08:00
Z User 3a5b0d7e66 feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener
- subscription URLs use configured path; legacy API path kept
- proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job
- GET /users/export-links for one-click subscription link export
- POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI
- Share page export-all; Users form fields for group/tags/cycles
2026-09-10 16:45:18 +00:00
phil d0b53dcc9e feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
feat(listeners): verify client connectivity and expose diagnostics
Inspect listener readiness and test exported client endpoints with isolated Mihomo clients. Preserve public addresses, ports and protocol settings, report diagnostic stages, and repair generated access SNI fields.
2026-09-09 21:50:55 +08:00
freephilx 2e6256fb6a feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
feat(distribution): add complete installation and recovery workflows
Ship stable-only Linux bundles and multiarch Docker images with a pinned Mihomo core. Share secure first-run initialization across native and container installs.
Validate downloads before downtime, snapshot persistent state before updates, and restore the previous installation after a failed upgrade. Add backup, restore, healthcheck, and randomized administrator reset commands.
Add release verification, lifecycle regression tests, and installation documentation.
2026-09-08 22:47:35 +08:00
Z User a3c5c3cd0f docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
docs: 迁移至 3m-ui-docs 仓库 (Docusaurus)
文档已从本仓库迁移至独立的 3m-ui-docs 仓库,基于 Docusaurus 3 构建。
变更:
- 删除 docs/ 目录(全部 18 篇 wiki 文档已迁移)
- README.md 顶部添加迁移指引
新文档仓库: https://github.com/kazeyukiro/3m-ui-docs
GitHub Wiki 已同步清空(仅保留迁移指引首页)
2026-08-30 08:56:54 +00:00
風雪 1c24114581 docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
docs: explain Mihomo verification behavior (THREE_M_UI_VERIFY_MIHOMO)
Add section '四、Mihomo 核心的校验(说明)' to 验证Release签名.md:
- Mihomo does not publish SHA256SUMS; we use GitHub Release API digest.
- Three-tier verification: default (best-effort), VERIFY_MIHOMO=1
(enforce), INSECURE=1 (skip all).
- Threat model: our 3m-ui binary is fully verified end-to-end;
Mihomo is independent and protected by HTTPS + ELF smoke-test.
Add item #11 to 安全建议.md summarizing the Mihomo verification stance.
2026-08-29 11:04:31 +00:00
風雪 b81f91cb58 docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
docs: add Release signature verification guide
Add a new wiki page 验证Release签名.md covering:
- Asset inventory (binaries, scripts, SHA256SUMS, cosign .pem/.sig)
- Layer 1: integrity verification via SHA256SUMS (default, fail-closed)
- Layer 2: authenticity verification via cosign keyless OIDC (opt-in)
- Three verification modes: installer auto, manual, end-to-end example
- v1.0.0 back-fill note (uses refs/heads/main identity)
- FAQ (legacy releases, THREE_M_UI_INSECURE, keyless model, cosign trust)
Cross-reference from:
- 安装与升级.md: new '验证安装包签名(推荐)' section with cosign
install + THREE_M_UI_VERIFY_COSIGN=1 usage for both install and update.
- 安全建议.md: new item #10 '供应链验证' summarizing the two layers
and warning against THREE_M_UI_INSECURE=1.
- _Sidebar.md: add 验证Release签名 entry above 安全建议.
2026-08-29 10:06:11 +00:00
風雪 7dca023678 docs: NAT and custom panel port guide 2026-08-29 12:45:34 +08:00
風雪 e930d6905e docs: NAT and custom panel port guide 2026-08-29 12:45:33 +08:00