676312ae79fb3ac01e4e066f53fc00a617efd95c
709
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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. |
||
|
|
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 |
||
|
|
2278ab8f01 | fix(listeners): focus the first invalid field on save (#52) | ||
|
|
a567ae582c | fix(listeners): skip automatic connection tests after saving (#51) | ||
|
|
77ff1256d3 | fix(i18n): remove duplicate connection check messages (#50) | ||
|
|
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. |
||
|
|
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) |
||
|
|
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. |
||
|
|
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. |
||
|
|
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 |
||
|
|
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) |
||
|
|
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 |
||
|
|
62f8e96a32 | feat(listeners): suggest the first available default node name | ||
|
|
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. |
||
|
|
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. |
||
|
|
392fab1dba | docs(readme): 维护 → 贡献者; list kazeyukiro and freephilx as contributors | ||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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 |
||
|
|
cff90cccfa | fix(ui): remove duplicate 3M-UI brand in mobile drawer (SidebarMenu already has logo+title) | ||
|
|
9ef94c2edb | fix(i18n): add users.subtitle and users.batch (en/zh aligned) | ||
|
|
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) |
||
|
|
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 |
||
|
|
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. |
||
|
|
ab56fec2e6 | fix(ui): Cluster table size on mobile | ||
|
|
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 |
||
|
|
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) |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
06f70bab3a | fix(i18n): repair randomPort keys injected inside portHint string | ||
|
|
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. |
||
|
|
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). |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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) |
||
|
|
e6e9f60e9d | fix(subpage): drop unused encoding/json; CI on test; qrcode direct dep | ||
|
|
0e963a56f6 | fix(subpage): repair render.go syntax (broken formatBytes/defaultHTML merge) | ||
|
|
7e2cc00afc | feat(subpage): polish default HTML; local QR data-URI; human traffic | ||
|
|
04865db275 | feat(test): PWA manifest; update.sh HTTP health probe before success | ||
|
|
db96350bd8 | fix(scripts): clean version argument case pattern | ||
|
|
8086e729c0 | fix(scripts): dedupe version arg pattern after test-* support | ||
|
|
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 |
||
|
|
5408ae651c | docs(readme): remove m-ui from acknowledgements |