4f59ab4e7a4586bcbcbdeb0fc86a45f272e03396
723
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4f59ab4e7a |
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart Symptom: confirm button seemed dead, refresh showed the create had succeeded — HTTP waited on full core restart and often timed out after DB write. - ApplyConfigDeferredRestart: save+validate sync, restart async - Listener path uses deferred apply so create/delete respond quickly - Users modal: confirmLoading + disable while submitting - Listeners: always toast errors; refresh list without blocking success path |
||
|
|
cc5b206f5e |
fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts
Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies fix(api): stop blocking user mutations on Mihomo reload; raise mutation timeouts Root cause: create/delete users (and node ops) waited on ApplyConfig (mihomo -t + restart), often exceeding the 30s axios timeout and surfacing as "Cannot reach the panel API" even when the DB write succeeded. - Debounced async credentials→config reload after user changes - Axios: 45s default, 120s for non-GET mutations - Clearer network error hint; listener RegenerateConfig generates under lock then applies |
||
|
|
bf895d036c |
fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles
- MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour fix(user): expire renew only after expiry; preserve traffic on cycle enable; edit form fills group/tags/cycles - MaybeApplyUserCycles no longer extends every tick inside a 24h pre-expiry window - First enable of traffic_reset_days records anchor without wiping counters - Users openEdit (and related setFieldsValue paths) populate group/tags/cycle fields so save does not clear them - Add unit tests for cycle behaviour |
||
|
|
d150574ad3 |
feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash
- Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags feat(subpage): modern subscription HTML — copy-by-format, zh/en, drop legacy Clash - Restyle built-in page (card layout, traffic bar, QR, URI list with protocol tags) - Format buttons copy Mihomo/Sing-box/V2Ray URLs (no separate copy-all, no Clash legacy) - Client-side zh/en toggle with localStorage + navigator language - ViewModel: TrafficPct, URIItems; protocolLabel helper for tags |
||
|
|
867619d5d6 |
i18n: WARP, share export, user group/tags/cycle strings for all locales
Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. i18n: WARP, share export, user group/tags/cycle strings for all locales Frontend already had UI; locale keys were missing so labels fell back to English. Add settings.warp*, share.export*, users.group/tags/cycle keys in 18 languages. |
||
|
|
9471368afd |
perf: compress and cache embedded frontend assets (#54)
perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) perf: compress and cache embedded frontend assets (#54) |
||
|
|
670b2210d1 |
i18n: localize core.updates (Mihomo persistent update UI) for all panel languages
Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. i18n: localize core.updates (Mihomo persistent update UI) for all panel languages Fill core.updates strings for ar/de/es/fr/hi/id/ja/ko/pl/pt-BR/ru/th/tr/uk/vi. en, zh-CN, zh-TW already complete from #53; zh re-exports zh-CN. |
||
|
|
3ec69d55de | feat(mihomo): persistent core updates with rollback (#53) | ||
|
|
437ad5eee8 |
docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens
- Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status docs(api): OpenAPI 1.2 — export-links, user group/tags/cycles, WARP register, sub path notes, tokens - Document health build fields, ProxyUser schemas, batch/HWID/Telegram user routes - Subscription short path / sub_port behaviour - system/templates/warp(+register), access-tokens, panel-settings, SSL status |
||
|
|
3a5b0d7e66 |
feat: sub path/port, user groups/tags/cycle renew, export links, WARP register
- server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles feat: sub path/port, user groups/tags/cycle renew, export links, WARP register - server.sub_path / sub_port / env overrides; custom /sub/:token + optional second listener - subscription URLs use configured path; legacy API path kept - proxy users: group, tags, traffic_reset_days, expire_renew_days + background cycle job - GET /users/export-links for one-click subscription link export - POST /system/templates/warp/register (Cloudflare WARP one-click) + Settings UI - Share page export-all; Users form fields for group/tags/cycles |
||
|
|
ac35a043e5 | docs: remove invalid update --stable; refresh version examples in READMEs | ||
|
|
d60605e9c3 | fix(ui): define AboutPanelVersion used by settings about section | ||
|
|
71119d59d6 |
feat(ui): 18 panel languages, login theme/lang, live about version
- Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo feat(ui): 18 panel languages, login theme/lang, live about version - Settings appearance language select uses full LOCALE_OPTIONS (18 locales) - Login page: theme + language switches (persisted via existing stores) - About shows version from /api/v1/health (buildinfo linked at release time) - ldflags write Version/GitCommit/BuildTime into internal/buildinfo |
||
|
|
1c37a28804 |
feat(telegram): localize scheduled notifications and event alerts in 18 languages
- Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) feat(telegram): localize scheduled notifications and event alerts in 18 languages - Traffic/expiry/block/restore/CPU/memory warnings, daily digest, login and crash - Periodic report and generic NotifyEvent time line follow settings.language - New n_* message keys in i18n catalog (en/zh-CN/zh-TW + EN fallback for others) |
||
|
|
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. |