Commit Graph
709 Commits
Author SHA1 Message Date
Z User 676312ae79 feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
feat(telegram): 18-language bot replies, menus, and command descriptions
- Add telegram/i18n.go with en/zh-CN/zh-TW full strings and overlays for
ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Wire bot commands, inline keyboards, setMyCommands, and test message to settings.language
- Expand Settings UI bot language select to all 18 panel locales
- Normalize legacy zh → zh-CN on load
2026-09-10 15:48:10 +00:00
Z User a1cbef1d74 fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
fix: UNIQUE/soft-delete hygiene across tokens, HWID, config, templates, node delete
- Hard-delete access tokens and HWID devices so unique indexes free immediately
- Revive soft-deleted HWID rows and visual-config fragments on re-register/upsert
- Align node.Service.Delete with pre-delete name free; Unscoped clone rollbacks
- Clearer template name collision errors
2026-09-10 15:34:34 +00:00
Z User 2ad737dc45 fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
fix: reclaim unique names after delete; clearer user/listener conflicts
- Rename listener name before soft-delete so UNIQUE(name) is free immediately
- Reclaim soft-deleted proxy_users.username (and uuid/sub_token) on create/update
- Map missing listener delete to 404 with refresh-friendly message
- Translate SQLite UNIQUE username/uuid into clear API errors
2026-09-10 15:29:42 +00:00
Z User be14367116 i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
i18n: expand all 18 locales beyond shell — nav, common, login, dashboard, nodes, users, settings, etc.
Non-English locales now override major UI sections instead of only a few strings.
Protocol field tooltips that remain English fall back via existing t() chain.
zh-CN stays the full Chinese catalog; zh-TW covers traditional UI chrome.
2026-09-10 15:10:32 +00:00
Z User fe46a9cf72 i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
i18n: fill common/listeners/cluster strings; localize hard-coded UI labels
- Add TCP/UDP, IP:Port, cluster column headers and operation OK across 18 locales
- Improve zh-CN labels for protocol section headers and field names
- Wire Cluster and connection-diagnostics tables to t() instead of hard-coded English
2026-09-10 15:01:46 +00:00
freephilx 2278ab8f01 fix(listeners): focus the first invalid field on save (#52) 2026-09-10 22:36:01 +08:00
freephilx a567ae582c fix(listeners): skip automatic connection tests after saving (#51) 2026-09-10 22:35:58 +08:00
freephilx 77ff1256d3 fix(i18n): remove duplicate connection check messages (#50) 2026-09-10 22:35:55 +08:00
Z User 2c625c8790 fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
fix(db): silence GORM record-not-found noise for optional settings
Telegram and traffic_reset_day lookups are expected to miss until configured;
default Info logger flooded journal every scheduler tick and looked like errors.
2026-09-10 14:23:21 +00:00
Z User 4358177471 fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
fix(api): stop labeling aborted polls as backend unreachable
- Detect axios/fetch cancel (ERR_CANCELED) and reject without the
misleading "Backend service unreachable" toast text
- Clarify true network failures with actionable diagnostics
- Raise connection-check client timeout to 45s (backend probe ~20s)
2026-09-10 14:17:58 +00:00
Z User 7e3e0ab7d2 fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
fix(node): fall through share exporters when ClientYAML is empty
mui.BuildShares / protocol.ExportShares could succeed with URIs but empty
ClientYAML; connection-check then aborted with client YAML unavailable and
never reached converter.ExportClientYAML. Prefer any non-empty YAML across
tiers, then legacy converter.
2026-09-09 17:06:59 +00:00
Z User 9300899f72 fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
fix(connection-check): surface host/credentials failures clearly in diagnostics
Map export errors to client_access_host_missing / no_active_credentials so the
panel explains why 连接测试 cannot run instead of a generic unavailable state.
2026-09-09 16:52:45 +00:00
Z User f740a67f36 feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
feat(i18n): expand panel locales to 18 languages (EN fallback for untranslated strings)
- Locale codes aligned with README (en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk)
- Full zh-CN from existing Chinese strings; other langs merge UI shell onto English
- Header language menu lists all locales; Ant Design locale mapped where available
2026-09-09 15:26:21 +00:00
Z User 09fd9d0069 docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
docs: 18 language READMEs; main README language hub; 3m-ui menu CN/EN only
- Add README.<lang>.md for en, zh-CN, zh-TW, ja, ko, es, fr, de, ru, pt-BR, vi, id, th, tr, ar, hi, pl, uk
- Main README: language switcher + docs/site links; English body moved to README.en.md
- Management menu bilingual Chinese|English only (no extra locales in shell)
2026-09-09 15:14:16 +00:00
Z User 26f3fa6320 merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
merge main: combine default name suggestion with runtime status UI
2026-09-09 14:32:08 +00:00
freephilx 62f8e96a32 feat(listeners): suggest the first available default node name 2026-09-09 22:30:27 +08: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
Z User 41af78e628 fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
fix(auth): re-issue JWT after password change so session_version bump does not lock users out
After change-password the DB session_version was incremented while the browser
kept the old token, so every API returned 401 and the UI bounced back to login.
Also route first-login to /change-password and surface API error messages.
2026-09-08 15:50:19 +00:00
Z User 392fab1dba docs(readme): 维护 → 贡献者; list kazeyukiro and freephilx as contributors 2026-09-08 15:02:21 +00: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
freephilx 0e5af8a096 feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
feat(listeners)!: select REALITY targets with server-side checks
BREAKING CHANGE: REALITY create and update requests require an explicit reality-config.dest; implicit Microsoft and SNI-derived destinations are no longer supplied.
2026-09-08 22:47:32 +08:00
Z User db08c0745c fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
fix(scripts): quiet Mihomo download; try asset name variants; stable tag for mihomo
The curl 404 during 3m-ui update was optional Mihomo core refresh
(wrong/pre tag or missing -compatible asset). Panel update already succeeded.
2026-09-07 16:33:48 +00:00
Z User 81a2384c84 fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
fix(i18n): PageHeader subtitle visibility + en fallback; ensure *.subtitle keys
- PageHeader uses plain <p> with theme secondary color (Typography.Paragraph was easy to miss)
- t() falls back to English when key missing in current locale
- users/listeners/traffic/core/logs subtitles verified; unify page headers
2026-09-07 16:18:35 +00:00
Z User cff90cccfa fix(ui): remove duplicate 3M-UI brand in mobile drawer (SidebarMenu already has logo+title) 2026-09-07 16:07:37 +00:00
Z User 9ef94c2edb fix(i18n): add users.subtitle and users.batch (en/zh aligned) 2026-09-07 16:05:28 +00:00
Z User 88fb9770dc feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
feat(ui): page-wide desktop+mobile usability polish for v1.0.1
- PageHeader consistency across dashboard/core/logs/routing/config/cluster/traffic/share/settings/users/listeners
- responsive CSS for both breakpoints; content max-width on desktop
- mobile card lists + batch menus (nodes/users); settings Select nav
- full-width modals on phone; safer layout for deploy/CI (strict types retained)
2026-09-07 15:57:12 +00:00
Z User 0d5cee8deb feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
feat(ui): mobile-first lists for nodes/users; settings section select
- Listeners/Users: card list with checkbox + overflow actions menu on phone
- Users toolbar: create + batch dropdown instead of many buttons
- Settings: large Select section picker; hide desktop sider on mobile
- Full-width modals; touch-friendly CSS for entity cards
2026-09-07 15:49:24 +00:00
Z User 1379ef26f4 fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
fix(subpage): QR data-URI must be template.URL (html/template was breaking base64)
html/template URL-escapes src attributes, which percent-encodes base64
(+ → %2B etc.) and breaks the embedded PNG QR on the subscription HTML page.
2026-09-07 15:42:49 +00:00
Z User ab56fec2e6 fix(ui): Cluster table size on mobile 2026-09-07 15:32:04 +00:00
Z User 71067d49cd feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
feat(ui): mobile layout polish — sticky header, safe-area, tables, settings nav
- sticky translucent header + larger touch targets
- drawer brand; tighter content margins
- card toolbars full-width; table size small on phone
- settings menu horizontal scroll on narrow screens
- login/page safe-area and modal full-width tweaks
2026-09-07 15:25:18 +00:00
Z User 50066e169c fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
fix(ci): ProxyUser.hwid_limit; formal vs pre workflows; drop test branch CI
- release.yml: only v* formal releases
- release-pre.yml: manual rolling tag pre
- remove test from CI triggers
- fix missing hwid_limit on ProxyUser (tsc)
2026-09-07 15:07:31 +00:00
Z User 0707ff9316 ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
ci(release): formal v* releases are non-prerelease latest; pre stays rolling
2026-09-07 15:03:27 +00:00
Z User 7385a3d2ae merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
merge test: HWID type fix + channel scripts
2026-09-07 14:59:27 +00:00
Z User 8c9b7071c3 merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
merge test into main (HWID, subpage, PWA, rolling pre, random port) + fixed i18n
2026-09-07 14:47:14 +00:00
Z User 06f70bab3a fix(i18n): repair randomPort keys injected inside portHint string 2026-09-07 14:46:52 +00:00
Z User e72b53a315 refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
refactor(listeners): lightweight random port + inverted ranges + unit tests
Follow-up after merging #45: rejection sampling, normalize inverted ranges, node unit tests.
2026-09-07 14:42:22 +00:00
freephilx ca28263e1a feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
feat(listeners): suggest random ports for new nodes (#45)
Merged with improved lightweight random port selection (cherry-picked to main).
2026-09-07 22:42:01 +08:00
Z User 5d8ec7c981 feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
feat(listeners): random port suggest (lightweight, inverted ranges, tests)
Port of PR #45 onto test with review follow-ups:
- rejection sampling instead of materializing 50k free ports
- normalize inverted ranges (50000-40000)
- unit tests via node --experimental-strip-types
- i18n + README
2026-09-07 14:39:27 +00:00
Z User 7ce3796d9b feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
feat(hwid): Happ/Remnawave-compatible subscription HWID device limit
- Track x-hwid / x-device-os / x-ver-os / x-device-model on sub fetch
- Per-user hwid_limit; response headers x-hwid-active|not-supported|max-devices-reached
- Admin API list/delete/clear devices; user form field
2026-09-07 14:32:02 +00:00
風雪 e90014060d Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
2026-09-07 00:18:13 +08:00
風雪 15cba9b51c Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
2026-09-07 00:17:38 +08:00
Z User b7f0389353 ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
ci(test): single rolling Pre-release tag 'pre' (overwrite, no duplicates)
2026-09-06 15:57:03 +00:00
Z User e6e9f60e9d fix(subpage): drop unused encoding/json; CI on test; qrcode direct dep 2026-09-06 15:49:36 +00:00
Z User 0e963a56f6 fix(subpage): repair render.go syntax (broken formatBytes/defaultHTML merge) 2026-09-06 15:38:36 +00:00
Z User 7e2cc00afc feat(subpage): polish default HTML; local QR data-URI; human traffic 2026-09-06 15:34:39 +00:00
Z User 04865db275 feat(test): PWA manifest; update.sh HTTP health probe before success 2026-09-06 15:23:08 +00:00
Z User db96350bd8 fix(scripts): clean version argument case pattern 2026-09-06 15:06:00 +00:00
Z User 8086e729c0 fix(scripts): dedupe version arg pattern after test-* support 2026-09-06 15:05:51 +00:00
Z User f4bb43ecd3 ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
ci(test): publish Pre-releases; install/update prefer newest prerelease
2026-09-06 15:05:44 +00:00
Z User 5408ae651c docs(readme): remove m-ui from acknowledgements 2026-09-06 14:55:26 +00:00