1. sslinks 403: Cloudflare blocks server IP. Add fetcher.proxy_url config
so subscription/flow requests can route through an HTTP proxy.
2. Egress probe: Docker image lacked sing-box. Install sing-box v1.11.4
in the Alpine runtime stage.
3. Collection rename: group by display baseName instead of internal
groupKey, format index as -N instead of %02d. Fixes double-suffix
issue where EnsureUniqueProxyNames appended -2/-3 onto existing 02.
- Add MaxMind GeoLite2-City mmdb auto-download and IP-based geo lookup
(covers all 249 countries globally, replacing limited 8-country regex)
- Add RenameOptions with 5 toggleable fields (flag/alias/country/city/index)
stored as rename_options_json on collections
- Collection rename pipeline uses DetectGeoWithServer(name, server) which
tries GeoIP lookup first, falls back to name-based regex matching
- Chinese country/city names + emoji flag prefix
- Country-city dedup: skip city when it equals country (e.g. 香港/香港)
- URI fragment encoding: url.QueryEscape -> url.PathEscape (%20 not +)
- Egress cache key excludes name field so renamed nodes still match cache
- Frontend: 5 toggle buttons in collection edit form, default all on
- Migrations: 0004 (source alias + collection rename_enabled),
0005 (collection rename_options_json)