Compare commits

...

3907 Commits

Author SHA1 Message Date
Slinetrac
7d42850aa8 feat(ui): introduce BaseSearchPanel popover and migrate connections search 2026-01-25 23:50:53 +08:00
Slinetrac
28568cf728 feat(connections): add pause/resume, filters, and advanced sorting 2026-01-25 22:41:51 +08:00
Tunglies
6477dd61c3 perf: reduce various timeout and retry intervals for improved responsiveness to fetch proxy infomation (#6072) 2026-01-25 07:31:34 +00:00
Tunglies
6ded9bdcde doc: changelog 2026-01-25 15:40:58 +08:00
Tunglies
13dc3feb9f perf: migrate fs method to async (#6071)
* perf(profiles): migrate file handling to async and improve error handling

* refactor(profiles): simplify cleanup_orphaned_files and adjust CleanupResult structure
2026-01-25 07:20:12 +00:00
Tunglies
c7462716e5 refactor: reduce duplicated separately useSWR (#6153)
* refactor: reduce duplicated seperatlly useSWR

* refactor: streamline useSWR integration and improve error handling
2026-01-25 07:14:45 +00:00
Tunglies
bf189bb144 perf: improve config processing (#6091)
* perf: improve config processing

* perf: enhance profile reordering logic and adjust logging level

* perf: add PartialEq derive to PrfSelected and PrfExtra structs for improved comparison

* perf: refactor PrfOption merge logic and streamline update_item method in IProfiles

* perf: simplify current_mapping and profiles_preview methods in IProfiles for improved readability

* perf: optimize filename matching logic in IProfiles by using a static regex
2026-01-25 07:13:38 +00:00
Tunglies
0c6631ebb0 fix(ip-info-card): handle offline state and clashConfig absence in IP info fetching (#6085)
* fix(ip-info-card): handle offline state and clashConfig absence in IP info fetching

* fix: eslint errors
2026-01-25 07:12:17 +00:00
Sline
93e7ac1bce feat(webdav): cache connection status and adjust auto-refresh behavior (#6129) 2026-01-25 06:49:12 +00:00
Sline
b921098182 refactor(connections): switch manager table to TanStack column accessors and IConnectionsItem rows (#6083)
* refactor(connection-table): drive column order/visibility/sorting by TanStack Table state

* refactor(connection-table): simplify table data flow and align with built-in API

* refactor(connection-table): let column manager consume TanStack Table columns directly
2026-01-25 06:49:10 +00:00
Sline
440f95f617 feat(misc-viewer): optional delay check interval (#6145)
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2026-01-25 06:48:16 +00:00
Tunglies
b9667ad349 chore: bump version to 2.4.6 2026-01-25 14:22:22 +08:00
Tunglies
4e7cdbfcc0 Release: 2.4.5 2026-01-25 14:05:57 +08:00
Tunglies
966fd68087 fix(unix): update clash_verge_service_ipc to 2.1.1 to fix directory permissions 2026-01-25 13:35:18 +08:00
Tunglies
334cec3bde fix: update tauri-plugin-mihomo version, improve error handling #6149 2026-01-24 09:19:52 +08:00
Tunglies
6e16133393 ci(Mergify): configuration update (#6152)
Signed-off-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2026-01-23 14:35:57 +00:00
Tunglies
5e976c2fe1 chore: inline crate clash-verge-types to module for better maintenance (#6142) 2026-01-23 14:00:51 +00:00
DikozImpact
d81aa5f233 Ru language fix (#6143)
* Ru language fix

* Update proxies.json

* Update home.json
2026-01-23 07:42:31 +08:00
Tunglies
e5fc0de39a ci: downgrade Ubuntu version in autobuild workflow 2026-01-22 22:08:19 +08:00
Tunglies
6c62350cc3 Release: bump version to 2.4.5-rc.2 2026-01-21 21:26:11 +08:00
Tunglies
d1649e3017 fix: update service to 2.1.0 and improve service installation for Unix systems (#6114)
* fix: update service to 2.1.0 and improve service installation for Unix systems

* fix: set GID environment variable during service installation on Linux

* Revert "fix: set GID environment variable during service installation on Linux"

This reverts commit 373aec579b.
2026-01-19 14:02:25 +08:00
Slinetrac
2869a35f1e chore(i18n): update backend i18n keys
translated by GPT-5.2.
2026-01-19 12:35:30 +08:00
renovate[bot]
98f12a9c72 chore(deps): lock file maintenance npm dependencies (#6119)
* chore(deps): lock file maintenance npm dependencies

* chore: run pnpm update

* fix(components): satisfy ESLint destructuring and narrow unknown errors

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2026-01-19 12:05:48 +08:00
renovate[bot]
6dc8a2f232 chore(deps): lock file maintenance cargo dependencies (#6118)
* chore(deps): lock file maintenance cargo dependencies

* chore: update Cargo.toml

* refactor: use reqwest directly

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2026-01-19 12:05:36 +08:00
Tunglies
6511f3868e fix: log IPC path issues conditionally based on tun mode setting 2026-01-18 09:13:22 +08:00
Tunglies
7da5a804f9 chore: bump service top 2.0.30, reduce memory footpoint 2026-01-18 08:43:39 +08:00
wonfen
20ed7a3abe chore: temporarily remove promotion 2026-01-17 03:33:10 +08:00
Sline
fd98caccd2 revert: use-app-data (#6088)
* Revert "refactor(app-data): split monolithic context into focused SWR hooks (#5576)"

This reverts commit 8e8182f707.

# Conflicts:
#	src/components/home/clash-info-card.tsx
#	src/components/home/clash-mode-card.tsx
#	src/components/home/current-proxy-card.tsx
#	src/components/home/home-profile-card.tsx
#	src/components/proxy/provider-button.tsx
#	src/components/proxy/proxy-chain.tsx
#	src/components/proxy/proxy-groups.tsx
#	src/components/proxy/use-render-list.ts
#	src/components/rule/provider-button.tsx
#	src/components/setting/mods/sysproxy-viewer.tsx
#	src/hooks/use-clash-data.ts
#	src/hooks/use-current-proxy.ts
#	src/hooks/use-shared-swr-poller.ts
#	src/hooks/use-system-proxy-state.ts
#	src/pages/rules.tsx

* docs: Changelog.md
2026-01-16 18:32:31 +08:00
Tunglies
a5f494bda2 fix: ensure external control source settings take effect immediately #6103 2026-01-16 18:27:21 +08:00
Tunglies
d4d8ef3849 chore: update Mihomo(Meta) kernel version to v1.19.19 2026-01-16 12:43:12 +08:00
Slinetrac
b16cbd5379 feat(backup): restore starts automatically with loading overlay without closing dialog 2026-01-16 12:32:36 +08:00
Tunglies
9e6689ef08 bump: sysproxy-rs version to 0.4.3 2026-01-15 21:25:10 +08:00
Tunglies
e0c35c5ee3 fix: unexpected port in use error when change ports 2026-01-15 17:40:06 +08:00
Slinetrac
670055aba1 docs: simplify Linux wording 2026-01-15 14:09:34 +08:00
Slinetrac
a780e44e69 docs: add warning to Changelog.md 2026-01-15 13:31:46 +08:00
Tunglies
5c9b46f031 chore: bump version to prerelease 2.4.5-rc.1 2026-01-14 16:55:27 +08:00
renovate[bot]
f5e75d5287 chore(deps): update dependency node to v24.13.0 (#6087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 14:40:47 +08:00
Slinetrac
c2d8277a1a fix(connections): allow full-width header sorting without triggering on resize 2026-01-14 11:23:50 +08:00
Tunglies
66e98518a7 chore(ci): update autobuild setup for ARM architecture support 2026-01-13 18:42:41 +08:00
Tunglies
089b73bbfd chore(deps): update clash_verge_service_ipc to version 2.0.29 (#6073) 2026-01-13 18:30:54 +08:00
Slinetrac
d2c52d09e1 chore(renovate): disable lockfile maintenance automerge 2026-01-12 15:10:52 +08:00
Slinetrac
84143ec761 chore(deps): bump npm deps 2026-01-12 14:50:54 +08:00
renovate[bot]
f451a26f8c chore(deps): lock file maintenance (#6063)
* chore(deps): lock file maintenance

* chore(deps): update Cargo.toml

* chore(deps): use git repo until the next release

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2026-01-12 14:45:33 +08:00
renovate[bot]
e1220a189b chore(deps): lock file maintenance npm dependencies (#6064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-12 05:12:01 +00:00
Tunglies
57d4149807 fix(config): improve runtime config fallback handling 2026-01-11 15:27:54 +08:00
Slinetrac
86c3b241b1 docs: Changelog.md 2026-01-10 11:04:55 +08:00
Sline
a49000712d feat(tun-viewer): route-exclude-address GUI support (#6053) 2026-01-10 10:50:44 +08:00
歳納七夏
35b2066d4c build(tauri): add libayatana-appindicator3 dependency for linux packages (#6051) 2026-01-10 08:42:57 +08:00
renovate[bot]
92e0762fc4 chore(deps): update dependency @actions/github to v7 (#6042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-09 00:27:00 +08:00
Slinetrac
6b8630d357 docs: Changelog.md 2026-01-08 22:44:11 +08:00
Slinetrac
a1e77070f0 chore(deps): bump clash-verge-service-ipc to 2.0.29 2026-01-08 22:29:10 +08:00
Slinetrac
6926744ca2 docs: Changelog.md 2026-01-08 14:12:48 +08:00
Slinetrac
13855b9bc2 perf(tun-viewer): run enhanceProfiles in background to avoid save blocking 2026-01-08 14:03:00 +08:00
Slinetrac
1889f18183 feat(notice): override context menu to copy error details 2026-01-07 13:17:56 +08:00
Slinetrac
a981be80ef refactor(base): expand barrel exports and standardize imports 2026-01-06 15:02:10 +08:00
Slinetrac
60d3a1927b docs: Changelog.md 2026-01-05 16:18:44 +08:00
Slinetrac
620841592f fix(scheme): prevent double-decoding of subscription URLs #2609
Closes #2609
2026-01-05 15:36:01 +08:00
renovate[bot]
2128e1f788 chore(deps): lock file maintenance npm dependencies (#6015)
* chore(deps): lock file maintenance npm dependencies

* chore(deps): bump npm deps

* chore: fix eslint ref-name

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2026-01-05 13:53:22 +08:00
Slinetrac
256a3f697b chore(deps): update Cargo.toml 2026-01-05 13:26:28 +08:00
renovate[bot]
a701450362 chore(deps): lock file maintenance (#6014)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-05 10:47:37 +08:00
Tunglies
9e4e0c81a4 refactor: clean up and improve code structure (#6010) 2026-01-04 19:21:45 +08:00
oomeow
421bbd090e feat: reconfig log dynamically (#5724) 2026-01-04 16:56:16 +08:00
Tunglies
4adf678480 chore: update Cargo.lock dependencies and increment tauri-plugin-mihomo version to 0.1.3 2026-01-04 16:29:01 +08:00
Slinetrac
a9a782d5c9 docs: Changelog.md 2026-01-04 15:05:12 +08:00
Sline
ee5e5ee8a6 feat(sysproxy-viewer): add visual editor for bypass list with chips display (#6007) 2026-01-04 14:58:50 +08:00
Slinetrac
a940445081 chore(deps): revert tray-icon patch
Patch PR is merged.
2026-01-04 11:47:32 +08:00
Tunglies
65653594c7 chore: allow to update Cargo.lockl from git repo 2026-01-04 06:59:36 +08:00
renovate[bot]
ac8f62bea2 chore(deps): update tauri-apps/tauri-action action to v0.6.1 (#6005)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-03 20:25:57 +00:00
Tunglies
eb8ba8b369 refactor(tray): replace Arc<str> with Cow<'static, str> for menu texts and update tray event handling 2026-01-03 19:25:36 +08:00
Slinetrac
c18821288e feat(sysproxy-viewer): make proxy bypass validation optional #4012 2026-01-03 17:10:10 +08:00
Slinetrac
7d40410dea chore: update tray-icon patch 2026-01-03 15:44:46 +08:00
AetherWing
349be20a6c chore(windows): remove redundant 3s delay from autostart task (#5996)
* fix(tray): retry tray creation with delay on Windows

* fix(tray): retry tray creation with delay on Windows

* chore(windows): remove redundant 3s delay from autostart task

* chore(windows): remove redundant 3s delay from autostart task
2026-01-02 15:18:01 +08:00
renovate[bot]
1901a6c97c chore(deps): update dependency globals to v17 (#5997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 15:07:31 +08:00
Slinetrac
bb72b92ae9 refactor(tray): unify tray icon retrieval into get_tray_icon 2026-01-02 14:28:17 +08:00
Slinetrac
8a1740d38b fix(tray): apply patch for tray-icon #5984
Closes #5984.
2026-01-02 13:54:47 +08:00
Tunglies
d75d3bd86e fix(proxy): update system proxy state references to use configState 2026-01-01 17:40:56 +08:00
renovate[bot]
b277a1e760 chore(deps): update dependency react-i18next to v16.5.1 (#5994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-01 16:55:15 +08:00
Slinetrac
522eccdd0e refactor(icon): extract icon cache logic into reusable hook 2026-01-01 16:35:36 +08:00
renovate[bot]
f3b9eedcf7 chore(deps): update rust crate reqwest to 0.13.1 (#5990)
* chore(deps): update rust crate reqwest to 0.13.0

* fix: replace rustls-tls with rustls and update lock file

* fix(webdav): use tauri_plugin_http re-exported reqwest client

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-12-31 23:53:49 +08:00
Tunglies
3bbcdbe5ca fix(service): update update clash_verge_service_ipc to 2.0.27
chore(changelog): add IPC permission restrictions for macOS and Linux

refactor(service): remove outdated service version check logic
2025-12-31 21:35:34 +08:00
Tunglies
cceb0a6eb4 fix(permissions): manage umask for sidecar process in CoreManager on Unix
Co-authored-by: KaguraNaku <97681505+KaguraNaku@users.noreply.github.com>
2025-12-31 21:05:05 +08:00
Slinetrac
cb5a2e7ce3 perf(proxy-chain): avoid duplicate proxy refresh in chain panel #5855 2025-12-31 16:42:56 +08:00
Slinetrac
609008f087 refactor(uri-parser): split parser into folder-based modules 2025-12-31 14:40:45 +08:00
Slinetrac
bae3576e93 fix: update tauri-plugin-mihomo version in pnpm-lock.yaml 2025-12-30 23:58:43 +08:00
Tunglies
9ce343fb45 perf(i18n): update translate function to use Cow to aovid allocate 2025-12-30 18:32:19 +08:00
Tunglies
cf08628200 fix(config): update home_cards reference to use as_ref() for improved handling 2025-12-30 18:09:10 +08:00
Tunglies
c06c15450f perf(draft): update with_data_modify to use T instead of Box<T> for better performance
Performance improved around 11.7%, avoid to allocate stack and copy to heap.
2025-12-30 17:51:50 +08:00
Slinetrac
772b87e733 feat: add GUI support for AnyTLS/Mieru/Sudoku and AnyTLS URI parsing 2025-12-30 15:15:55 +08:00
Slinetrac
c80c659180 fix(dns-viewer): disable spellcheck on DNS viewer text fields #5948
Closes #5948
2025-12-30 13:44:56 +08:00
renovate[bot]
0cde6cfce9 chore(deps): update dependency react-error-boundary to v6.0.1 (#5969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-29 10:33:24 +08:00
Slinetrac
e6a0369036 fix(ui): hide scrollbars on side menu and hover jump navigator #5945
Closes #5945
2025-12-29 10:26:34 +08:00
Slinetrac
ca50e35435 chore(deps): bump deps 2025-12-28 17:55:58 +08:00
Slinetrac
0193ba7bf9 refactor(seq): use if let filter for selector group dedup 2025-12-28 11:05:28 +08:00
Slinetrac
c40cdf6b55 fix(seq): prepend newly added proxies to first selector group 2025-12-28 10:55:27 +08:00
Sline
a82bcbe86e feat(proxy): auto-append new proxies to first selector group (#5965)
* feat(proxy): auto-append new proxies to first selector group

* docs: Changelog.md
2025-12-28 10:33:10 +08:00
Slinetrac
895e54f7ec fix(config): restrict restart_core_needed mutability to non-Windows to avoid unused-mut 2025-12-28 09:45:54 +08:00
Tunglies
c41db51f81 feat: add governor crate for rate limiting and improve window/tray operation handling 2025-12-27 20:27:49 +08:00
Tunglies
2c1303c2bd feat: add bitflags crate and refactor UpdateFlags implementation 2025-12-27 17:09:08 +08:00
Sline
c8aeae3f83 crate(i18n): add clash-verge-i18n crate and integrate localization support (#5961)
* crate(i18n): add clash-verge-i18n crate and integrate localization support

* refactor(service): remove redundant reinstall_service functions for Windows, Linux, and macOS

* chore(i18n): align i18n key

* feat(i18n): unify scan roots and add backend Rust/YAML support to cleanup script

* chore(i18n): add scripts to package.json

* fix(tray): initialize i18n locale before setup

* refactor(i18n): move locale initialization into Config::init_config

* fix(i18n): refresh systray tooltip on language change and correct docs reference

* fix(tray): remove unnecessary locale synchronization to improve performance

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-27 15:03:19 +08:00
Slinetrac
1b477ed0b2 chore: fix typo 2025-12-27 13:56:52 +08:00
Slinetrac
5aba848741 Revert "crate(i18n): add clash-verge-i18n crate and integrate localization support (#5959)"
This reverts commit 593751eda2.
2025-12-27 12:07:56 +08:00
Tunglies
593751eda2 crate(i18n): add clash-verge-i18n crate and integrate localization support (#5959)
* crate(i18n): add clash-verge-i18n crate and integrate localization support

* refactor(service): remove redundant reinstall_service functions for Windows, Linux, and macOS

* chore(i18n): align i18n key

* feat(i18n): unify scan roots and add backend Rust/YAML support to cleanup script

* chore(i18n): add scripts to package.json

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-12-27 11:33:58 +08:00
Slinetrac
b53f54f3f4 fix(i18n): remove invalid i18n key usage 2025-12-27 09:24:15 +08:00
Tunglies
bfb18cf003 refactor(profile): improve error handling for file not found case
refactor(merge): simplify deep_merge function signature
chore: remove unused fmt_bytes function and related tests
chore: clean up help module by removing unused macros
chore: remove format module from utils
2025-12-26 22:15:09 +08:00
Tunglies
9c6f5bc991 fix(profiles): add cleanup of orphaned files and adjust logging level 2025-12-26 17:17:18 +08:00
Slinetrac
63cd4905f9 refactor(notice): extract resolveNoticeMessage helper 2025-12-26 16:42:31 +08:00
歳納七夏
2417d064e1 feat: allow disabling proxy groups in tray icon (#5946)
* feat: allow disabling proxy groups in tray icon

* feat: allow disabling proxy groups in tray icon (update i11n)

* feat: allow disabling proxy groups in tray icon (fix)

* feat: allow disabling proxy groups in tray icon (less nesting)

* feat: allow disabling proxy groups in tray icon (changelog)
2025-12-26 16:29:05 +08:00
Slinetrac
d91e19e166 chore: reorganize frontend files 2025-12-26 15:53:25 +08:00
Sline
65b4d8713d refactor: windows autostart (#5941)
* refactor(windows-autostart): switch to scheduled tasks with user/admin split

* fix(schtasks): decode stdout/stderr using Windows OEM/ANSI code pages

* refactor(ui): remove admin auto-launch warning and clean i18n

* feat(windows): user-level auto-launch via task XML

* docs: Changelog.md
2025-12-26 14:42:21 +08:00
Slinetrac
a67abda72d refactor(theme): simplify useCustomTheme for Tauri only 2025-12-26 12:25:51 +08:00
Slinetrac
8e27834e35 fix(theme/windows): apply patch to tao to fix Windows theme sync 2025-12-26 12:01:44 +08:00
Slinetrac
ee3f7df417 Revert "fix(theme/windows): switch to dark-light based theme detection"
This reverts commit 1c044f053f.
2025-12-26 11:59:13 +08:00
Tunglies
f9b8a658a1 perf(draft): optimize memory layout by removing double indirection & implemented optimistic locking via Arc::ptr_eq for with_data_modify (#5942)
* perf(draft): optimize memory layout by removing double indirection

- Replace `Arc<Box<T>>` with `Arc<T>` to reduce pointer chasing and memory overhead.
- Leverage `Arc::from(Box<T>)` in async modify path for efficient ownership transfer.
- Fix race conditions in `edit_draft` by ensuring atomicity under write lock.
- Performance improved by ~16-24% across all operations (based on Criterion bench).

Benchmarks:
- latest_arc:     41.1ns (-24.2%)
- edit_draft:     92.2ns (-17.6%)
- apply:          89.8ns (-17.7%)
- async_modify:   66.0ns (-16.6%)

* perf(draft): implemented optimistic locking via Arc::ptr_eq for with_data_modify

Benchmarks confirm only a negligible ~2% (1.3ns) overhead for async operations, ensuring total data integrity during concurrent updates.
2025-12-25 16:44:23 +08:00
Slinetrac
1c044f053f fix(theme/windows): switch to dark-light based theme detection 2025-12-25 14:43:27 +08:00
Slinetrac
712b8ff19b refactor(linux): move Linux-specific mime.rs and workarounds.rs to utils/linux 2025-12-25 13:18:55 +08:00
Slinetrac
4ab2720ac4 refactor(tray): remove --no-tray code path and env-based tray bypass 2025-12-25 10:42:03 +08:00
Slinetrac
af0e72d119 feat(linux): disable WebKit DMABUF renderer on NVIDIA GPUs at startup #5921 2025-12-25 10:34:27 +08:00
Slinetrac
bd62a4ecc0 refactor(utils): extract freedesktop mimeapps handling into utils/mime 2025-12-25 10:02:07 +08:00
Tunglies
4ffb8b415f perf(traffic): optimize traffic data handling and improve performance 2025-12-24 13:40:03 +08:00
Slinetrac
0992556b4a feat(update-viewer): support rendering HTML in update markdown #5932
Closes #5932
2025-12-23 20:48:14 +08:00
Tunglies
be6b53c760 ci: update Ubuntu sources to use 'noble' release and adjust package installation 2025-12-23 14:52:47 +08:00
Slinetrac
797c0f90aa chore(deps): bump npm deps 2025-12-23 11:59:49 +08:00
Slinetrac
d52f00c1b1 feat(ui): add collapse/expand option to navbar context menu #5910
Closes #5910
2025-12-23 11:52:40 +08:00
Slinetrac
f26abcd2a9 fix(backup): reload config.yaml and profiles.yaml after restore to avoid stale memory overwrite #5909
Closes #5909
2025-12-23 10:56:31 +08:00
Tunglies
863a80df43 ci: update Ubuntu version to 24.04 and adjust dependencies in autobuild workflow 2025-12-22 23:23:35 +08:00
oomeow
19accbd538 chore: rust related config for workspace (#5912)
* chore: move rust related config to workspace

* chore: cargo fmt
2025-12-22 15:28:55 +08:00
Sukka
8e48e4ed10 chore(eslint): add eslint-plugin-react-compiler (#5918)
* chore(eslint): add `eslint-plugin-react-compiler`

* refactor: fix eslint warnings and avoid in-render mutations

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-12-22 12:51:20 +08:00
Slinetrac
eafa08066d docs(notice): add example for passing Error directly with i18n key 2025-12-22 11:01:53 +08:00
Slinetrac
231517b5db chore(monaco): ignore worker errors in console 2025-12-21 23:52:16 +08:00
Slinetrac
45193e017f fix(monaco): Ensure monaco loader uses the bundled ESM instance instead of CDN 2025-12-21 21:38:05 +08:00
Slinetrac
2515deefed Revert "refactor(editor-viewer): simplify loading/save flow with timeout fallback (#5905)"
This reverts commit c84bb91f4a.
2025-12-21 20:28:38 +08:00
Sline
c84bb91f4a refactor(editor-viewer): simplify loading/save flow with timeout fallback (#5905) 2025-12-21 17:10:52 +08:00
Tunglies
af094bfcd7 refactor: remove port_scanner dependency and simplify port checking logic 2025-12-21 16:51:55 +08:00
Slinetrac
a5752f7b00 docs: Changelog.md 2025-12-21 13:16:54 +08:00
Slinetrac
23e551e384 feat(tray): add optional inline outbound modes in tray menu #5881
Closes #5881
2025-12-21 10:33:19 +08:00
Slinetrac
a0b12b8797 chore(deps): bump npm deps 2025-12-21 09:43:07 +08:00
Tunglies
16c3dcc616 fix(proxy): check if proxy port is in use #5891 2025-12-20 19:11:27 +08:00
Slinetrac
5afe11e55b fix(monaco): disable MUI Dialog focus enforcement for Monaco editor #5885
Closes #5885
2025-12-20 16:12:45 +08:00
renovate[bot]
6f61759a39 chore(deps): update rust crate zip to v7 (#5886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-20 13:54:25 +08:00
Cactus
57b17ab8d3 feat: add navigation collapse functionality to layout (#5815)
* feat(layout): add collapsible navbar toggle in UI settings

* refactor(layout): adjust collapsed navbar styles

* docs: Changelog.md

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-12-19 18:15:20 +08:00
Sline
fc84dc561c feat(notice): persist toast position preference (#5621)
* feat(notice): persist toast position preference

* docs: Changelog.md
2025-12-19 18:04:23 +08:00
Sline
bd8eccdcea feat(backup): add local backup import flow (#5669)
* feat(backup): add local backup import flow

* refactor(backup): robustify history listing and propagate import error details

* docs: Changelog.md
2025-12-19 17:46:31 +08:00
Sline
b4e25951b4 feat(proxy): unify filter search box and sync filter options (#5819)
* feat(proxy): unify filter search box and sync filter options

* docs: fix JSDoc placement

* refactor(search): unify string matcher and stabilize regex filtering

* fix(search): treat invalid regex as matching nothing

* docs: update changelog to include advanced filter search feature for proxy page

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-19 17:12:36 +08:00
zhuo-github
aa72fa9a42 fix: add DNS hijacking fix for macOS wired network(#5728)
* [bugfix][issues-2701]mac有线网络下dns劫持失败

* [bugfix][issues-2701]mac有线网络下dns劫持失败。删除弃用代码,删除打印端口日志

* fix(changelog): add DNS hijacking fix for macOS wired network

---------

Co-authored-by: zhuocanhe <zhuocanhe>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-19 17:05:47 +08:00
Tunglies
f0ae631cb0 chore: update version to 2.4.5 and enhance changelog management scripts 2025-12-19 16:51:11 +08:00
Tunglies
787463a226 chore: bump version to 2.4.4 2025-12-19 16:25:24 +08:00
Slinetrac
8d5d72957b fix(home): correct delay sorting for Current Node card #5870
Closes #5870
2025-12-19 14:24:04 +08:00
Slinetrac
7d805cb83e chore(deps): bump npm deps 2025-12-19 10:32:40 +08:00
oomeow
a1286ad057 fix: always occupies hotkey globally when app launch silently (#5866)
* fix: always occupies hotkey when app launch silently

* docs: update Changelog.md

* chore: update
2025-12-18 22:21:15 +08:00
oomeow
9713343323 refactor: use sysproxy-rs to set system proxy on windows (#5846)
* refactor: use sysproxy-rs to set system proxy on windows

* fix: remove download sysproxy.exe task

* chore: unified processing system proxy reset

* docs: update Changelog.md
2025-12-18 20:23:29 +08:00
wonfen
b282217e5c doc: update promotion 2025-12-18 18:42:18 +08:00
Slinetrac
4b29a140b5 docs: Changelog.md 2025-12-17 16:57:34 +08:00
Slinetrac
b6af7b7440 fix(tun): set auto-redirect default to false to improve cross-distro compatibility #5845
Closes #5845
2025-12-17 16:20:06 +08:00
Tunglies
bcb8e831c5 fix(runtime): aovid force re-reresh runtime after create proxy chain 2025-12-17 12:52:25 +08:00
Slinetrac
a9e6391417 feat(layout/nav): add reset-to-default menu order action 2025-12-17 11:33:31 +08:00
Slinetrac
721929a2a1 refactor(layout/nav): extract nav menu order logic into hook 2025-12-17 11:06:38 +08:00
Tunglies
b35d0ac16f chore: prerelease 2.4.4-rc.1 2025-12-16 16:05:48 +08:00
Slinetrac
3198c3f023 chore(deps): bump npm deps 2025-12-16 11:48:18 +08:00
Slinetrac
a3df3fc2a6 refactor(uri-parser): centralize scheme dispatch and harden parsing 2025-12-15 14:46:21 +08:00
Tunglies
507d85ac2f fix: update dependencies in Cargo.lock and Cargo.toml for compatibility 2025-12-15 14:26:54 +08:00
Tunglies
236e5c56c3 fix: update windows-sys and socket2 dependencies in Cargo.lock 2025-12-15 14:23:42 +08:00
Tunglies
5b63f350ed fix: update edition and rust-version fields in Cargo.toml files 2025-12-15 14:17:56 +08:00
Tunglies
5f885bbe32 fix: update clash_verge_service_ipc to version 2.0.26 and kode-bridge to version 0.3.5 2025-12-15 14:09:33 +08:00
oomeow
6e170993dc docs: update Changelog.md 2025-12-14 13:39:54 +08:00
oomeow
ee6b857336 perf: cache listen functions to prevent always repeatedly remove and re-add listener on useLayoutEvents hook 2025-12-14 13:06:34 +08:00
Slinetrac
195f470bca docs: Changelog.md 2025-12-14 10:07:39 +08:00
xuvjso
37c2428f49 fix: head state not updated when using config.yaml as current profile (#5827) 2025-12-14 10:01:46 +08:00
Slinetrac
34793f9880 chore(husky): support cargo workspace 2025-12-13 20:28:25 +08:00
Slinetrac
04e50824f1 chore(issue): adjust issue template 2025-12-13 20:00:18 +08:00
oomeow
da7faf815f Revert "perf: improve check tun mode available when update tray menu"
This reverts commit af7b33d35b.
Closes: https://github.com/clash-verge-rev/clash-verge-rev/issues/5806
2025-12-13 18:26:27 +08:00
oomeow
af9b67186e perf: handle tray icon event to reduce always spawn thread 2025-12-13 16:49:55 +08:00
oomeow
c5fa64a213 perf: use blocking recv method reduce unnecessary polling overhead. 2025-12-13 16:10:15 +08:00
oomeow
5c42658a2e fix: init work config and resources twice 2025-12-13 15:21:22 +08:00
oomeow
3c1bcd7d72 fix: macOS tray icon color flickers during app launch 2025-12-13 13:46:49 +08:00
renovate[bot]
328803b894 chore(deps): update dependency react-i18next to v16.5.0 (#5808)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 12:08:51 +08:00
renovate[bot]
fbe44cf9c1 chore(deps): update actions/upload-artifact action to v6 (#5812)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 12:08:29 +08:00
Slinetrac
6db559f346 chore(i18n): optimize proxy strategy names and GeoSite capitalization #5811
Closes #5811
2025-12-13 11:19:59 +08:00
Slinetrac
f0c7aca3ff fix(window): hover effect of the minimize and close button does not disappear
`5bb4539e3f2d04288bf52164fdbf47bcaf949aea` was accidentally reverted in `8316c75c7836af254257d6be338d99c5c4c5923c`, so we reapply it here.
2025-12-12 17:27:05 +08:00
Slinetrac
8316c75c78 Revert "refactor(window): improve WindowProvider implementation"
May break frontend input on macOS
This reverts commit d8e386e3
2025-12-12 16:45:37 +08:00
Tunglies
e56a989944 fix: improve service availability checks #5788 2025-12-12 16:07:36 +08:00
Tunglies
cea78289c1 Revert "fix: service unexpected status after restart app in unix (#5768)"
This reverts commit 2995f61087.
2025-12-12 12:46:51 +08:00
Slinetrac
1a2d45555d docs: unify language list separators 2025-12-12 09:31:00 +08:00
Mehdi Bahrami
11879e224c docs(i18n): add README_fa.md (#5792)
* Create README_fa.md

in Persian

* Update README_fa.md

Readme file in Persian

* Add links for Persian and Korean in README_es

Added links for Persian and Korean languages in the README.

* Add Persian link to language options in README

Added Persian language link to the README.

* Add Persian link to Japanese README

* Add Persian link to Korean README

* Add links for Korean and Persian in README_ru

Added links to Korean and Persian translations in the README.

* update

fix error

* Add Persian language link to README

update

* Update link to Persian README in multiple languages section

fix

* Update README_fa.md

* style: prettier

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-12-12 09:23:36 +08:00
renovate[bot]
c8628f32df chore(deps): update npm dependencies to v19.2.3 (#5802)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-12 08:41:19 +08:00
renovate[bot]
1bb1cb3511 chore(deps): update actions/cache action to v5 (#5801)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-12 08:38:28 +08:00
renovate[bot]
711aaf05d3 chore(deps): update npm dependencies to v19.2.2 (#5800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-12 08:38:14 +08:00
renovate[bot]
430c946b61 chore(deps): update dependency node to v24.12.0 (#5799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-12 08:37:49 +08:00
hank
2995f61087 fix: service unexpected status after restart app in unix (#5768)
* fix: 修复macos重启应用后需要重设服务器模式问题

* chore: remove package-lock.json (using pnpm)

* Delete test.sh

* refactor(lifecycle): remove unnecessary conditional compilation for macOS and Windows

* refactor(timing): remove conditional compilation for service wait durations on Windows and macOS

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-11 20:09:27 +08:00
Sline
2aaa91f4cb perf(connections): improve scrolling performance on macOS (#5787) 2025-12-11 17:54:04 +08:00
Mehdi Bahrami
104fd11b04 Update settings.json (#5791)
* Update settings.json

Add translation to Persian

* Update src/locales/fa/settings.json

---------

Co-authored-by: Sline <realakayuki@gmail.com>
2025-12-11 17:39:04 +08:00
Mehdi Bahrami
c7dd93004e chore(i18n): fa tunMode notifications (#5790)
translate some
2025-12-11 16:43:07 +08:00
Slinetrac
86dcf0bdcf fix: proxy chain #5776
Closes #5776
2025-12-11 16:23:43 +08:00
Slinetrac
09a4e7e083 docs: Changelog.md 2025-12-11 12:12:33 +08:00
Undo
5bb4539e3f fix(window): hover effect of the minimize and close button does not disappear (#5786)
* fix(window): hover effect of the minimize and close button does not disappear

* docs: add necessary comments

---------

Co-authored-by: Sline <realakayuki@gmail.com>
2025-12-11 12:02:05 +08:00
renovate[bot]
cad1cf2895 chore(deps): update dependency react-i18next to v16.4.1 (#5780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 02:42:42 +00:00
Tunglies
623ed69a37 fix(logging): adjust conditional compilation for NoModuleFilter based on tracing-full feature 2025-12-11 08:03:32 +08:00
Tunglies
7838fa1e75 refactor(tray): remove timer for updating tray in plan, use update manually to prevent needless refresh to cause visuual flash 2025-12-10 23:40:17 +08:00
Tunglies
dd34ced070 fix(service): await for service operations, prevent too early to check service available 2025-12-10 23:29:11 +08:00
Tunglies
66483d0ef6 docs: add section on signing commits to CONTRIBUTING.md 2025-12-10 22:22:53 +08:00
Slinetrac
54858ce1fb chore: move onlyBuiltDependencies to package.json 2025-12-10 17:56:12 +08:00
Tunglies
dfa5cff1b7 feat(proxy-groups): filter available groups to show only Selector types in chain mode 2025-12-10 10:04:20 +08:00
renovate[bot]
2b552d6ddb chore(deps): update dependency @tauri-apps/cli to v2.9.6 (#5769)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-09 19:48:05 +00:00
oomeow
af7b33d35b perf: improve check tun mode available when update tray menu 2025-12-09 19:06:57 +08:00
Slinetrac
d8e386e394 refactor(window): improve WindowProvider implementation 2025-12-09 16:42:29 +08:00
Slinetrac
bae65a523a chore: rename files to kebab-case and update imports 2025-12-09 13:52:42 +08:00
Slinetrac
aa767695af chore(types): consolidate traffic monitor types into shared globals 2025-12-09 13:27:46 +08:00
wonfen
494e888b52 fix: typo 2025-12-08 11:26:20 +08:00
Tunglies
5292067284 chore: bump pnpm version to 10.24.0 2025-12-07 21:36:35 +08:00
Sline
9286e921a6 chore(linux): remove WebKit DMABUF env setup logic (#5758) 2025-12-07 16:06:54 +08:00
oomeow
3ab985aacc fix: failed to restart core (#5754)
* fix: failed to restart core after install service

* chore: update tauri-plugin-mihomo deps

* fix: update dependencies for tauri-plugin-mihomo and related packages

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-07 12:42:32 +08:00
Slinetrac
418fc1c702 chore(vite): add semantic chunk naming 2025-12-07 12:35:39 +08:00
Slinetrac
b5da9c9629 chore: update Cargo.lock for sysproxy-rs 2025-12-06 22:53:17 +08:00
oomeow
86936d5322 fix: wrong service status when handle service status error 2025-12-06 20:34:41 +08:00
oomeow
c1489647d1 fix: update service status when service is ready 2025-12-06 20:22:45 +08:00
Tunglies
af0a3be66d chore: update browserlist-db 2025-12-06 20:15:55 +08:00
oomeow
d0917dae73 fix: core always run by sidecar mode after reinstall service 2025-12-06 13:27:24 +08:00
Tunglies
f383a18f77 fix(release): add Rust target installation step for cross-compilation 2025-12-06 12:28:55 +08:00
Tunglies
f8035710df fix(release): update Rust toolchain to version 1.91.0 and adjust installation steps 2025-12-06 12:11:45 +08:00
Tunglies
4e34eb156b chore: update version to 2.4.4-rc 2025-12-06 11:52:04 +08:00
Tunglies
c997fbbeed chore: update Cargo.lock 2025-12-06 11:48:00 +08:00
Tunglies
54ba9fc98d fix(changelog): remove obsolete entry and clarify i18n support details 2025-12-06 11:44:07 +08:00
Slinetrac
eb7d22f610 refactor(debug): simplify toggle flow and unify flag handling 2025-12-06 11:36:47 +08:00
Tunglies
90b1c6e153 refactor(signal): migrate signal to handling async in windows and remove windows_sys dependency (#5741)
* refactor(signal): migrate signal to handling async in windows and remove signal-hook dependency

* refactor(signal): enhance Windows signal handling with improved cleanup logic

* refactor(signal): improve exit handling in run function for async compatibility
2025-12-06 11:33:49 +08:00
Slinetrac
5797bb7f8c docs: add JSDoc for showNotice API 2025-12-06 11:16:26 +08:00
Tunglies
2ca8e6716d style: adjust rustfmt max_width to 120 2025-12-06 10:31:31 +08:00
Tunglies
c888703b05 fix(service): enhance version check error handling for compatibility with older service versions 2025-12-06 10:26:03 +08:00
Tunglies
cd6885f115 Revert "ci(dev): add --profile fast-release argument to Tauri build step"
This reverts commit 7ae2414067.
2025-12-06 09:28:41 +08:00
renovate[bot]
643df7c15d chore(deps): update dependency react-i18next to v16.4.0 (#5739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-06 09:20:09 +08:00
❤是纱雾酱哟~
ff0de29f17 Fixes traffic parsing for small values (#5737)
- Unified handler to IEC standard.
- Change handler to parse number in a unified style, even with number less than 1000.

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-12-06 09:00:04 +08:00
Tunglies
7ae2414067 ci(dev): add --profile fast-release argument to Tauri build step 2025-12-06 08:14:33 +08:00
Tunglies
d28075221c refactor(signal): migrate signal to handling async in unix and remove signal-hook dependency 2025-12-06 06:41:47 +08:00
Slinetrac
d0c8f7fcc1 docs: Changelog.md 2025-12-05 13:55:32 +08:00
Slinetrac
28f8bb9199 fix(tray): remove checkmark from proxy group entries 2025-12-05 13:46:22 +08:00
Slinetrac
19a31450e5 fix(nav): use ListItemButton as drag handle for navigation items 2025-12-05 13:21:46 +08:00
Tunglies
a0fd24bb90 refactor(sysopt): replace Mutex with RwLock for inner_proxy management 2025-12-04 23:47:34 +08:00
Tunglies
f2ad62e446 chore: update clash_verge_service_ipc to version 2.0.24 , improve service prompts and improve service need reinstall process 2025-12-04 23:04:03 +08:00
renovate[bot]
7aeaab6e5c chore(deps): update npm dependencies to v19.2.1 (#5711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-04 15:01:51 +08:00
Sline
afee21dae4 refactor: unify Mihomo WS subscription with shared hook (#5719)
* refactor: unify Mihomo WS subscription with shared hook

* refactor: relocate clash log hook and streamline services

* docs: Changelog.md
2025-12-04 14:58:03 +08:00
Slinetrac
3cf51de850 refactor: reorganize component and hook structure; remove unused modules 2025-12-04 12:51:22 +08:00
Slinetrac
4f8ed63cf0 refactor(use-clash): centralize patch typing and port validation logic 2025-12-04 09:30:24 +08:00
Tunglies
135d14b170 chore: allow renovate automerge patch version and allow checks cargo workspace 2025-12-04 06:27:17 +08:00
Tunglies
762c991035 Revert "chore: update renovate configuration to enhance dependency management and grouping"
This reverts commit 2af7ddfdef.
2025-12-04 06:13:35 +08:00
Tunglies
357069505a chore(deps): bump clash_verge_service_ipc version to 2.0.23 2025-12-04 00:04:27 +08:00
Tunglies
2af7ddfdef chore: update renovate configuration to enhance dependency management and grouping 2025-12-03 23:57:53 +08:00
Tunglies
bd24a3f0ed chore: update Changelog for WebView2 Runtime upgrade to 133.0.3065.92 2025-12-03 22:08:30 +08:00
Tunglies
127501ce49 chore(deps): bump fixed WebView2 Runtime from 109.0.1518.78 to 133.0.3065.92 2025-12-03 22:05:43 +08:00
Tunglies
666878e288 refactor(release): enhance Rust caching strategy and update file paths 2025-12-03 22:00:19 +08:00
oomeow
9388b73c1f fix: upgrade mihomo core failed (#5646)
* fix: upgrade mihomo core failed

* fix: upgrade core failed when run core by service

* fix: app freeze when restart core on windows

* deps: bump clash-verge-rev-ipc version lock

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-12-03 21:48:30 +08:00
renovate[bot]
29cf57d4b9 chore(deps): update npm dependencies (#5706)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 21:27:23 +08:00
wonfen
176ad1a741 revert: macOS skip codesign 2025-12-03 17:51:24 +08:00
Slinetrac
56ad05cbf9 refactor(main): extract keyboard shortcuts to utils 2025-12-03 13:15:21 +08:00
Slinetrac
1727d0b6d4 refactor(preload): unify preload logic into preload.ts 2025-12-03 12:51:46 +08:00
renovate[bot]
cbc8782bf6 chore(deps): update npm dependencies (#5701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 12:23:50 +08:00
renovate[bot]
76eb063f7d chore(deps): update cargo dependencies (#5699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 12:18:43 +08:00
Slinetrac
edf6e7cc42 chore: improve i18n 2025-12-02 18:55:59 +08:00
renovate[bot]
3a5ce1dd19 chore(deps): update dependency typescript-eslint to ^8.48.1 (#5698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 18:29:40 +08:00
Tunglies
550a7e0bb9 fix: restart core or change can not remember proxy select in Global mode with sidecar #5466 2025-12-02 16:25:25 +08:00
Slinetrac
1393828078 docs: Changelog.md 2025-12-02 11:23:00 +08:00
Slinetrac
32a5044026 fix(updater): compute real download progress and stabilize progress bar states 2025-12-02 11:06:10 +08:00
renovate[bot]
bfa7e1a2e6 chore(deps): update dependency @eslint-react/eslint-plugin to ^2.3.10 (#5693)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 10:36:14 +08:00
renovate[bot]
9f151594ff chore(deps): update dependency i18next to ^25.7.1 (#5692)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 09:36:19 +08:00
Tunglies
a611f7d8a7 fix: switch reqwest client to use rustls-tls for improved security #5559 2025-12-01 22:22:26 +08:00
renovate[bot]
d5f1af91f1 chore(deps): update dependency i18next to ^25.7.0 (#5691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-01 21:54:56 +08:00
Sline
008234988c fix: ensure early CSS injection by preloading Verge config (#5690)
* fix(theme): background css injection

* fix: ensure early CSS injection by preloading Verge config
2025-12-01 21:45:01 +08:00
renovate[bot]
9056e8a298 chore(deps): update dependency vite to ^7.2.6 (#5682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-01 19:32:21 +08:00
Tunglies
e6a4da8064 chore: update Mihomo(Meta) kernel version to v1.19.17 and improve warning formatting 2025-12-01 16:30:36 +08:00
renovate[bot]
8f10f98db1 chore(deps): update dependency react-virtuoso to ^4.16.1 (#5675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-01 07:45:20 +08:00
Tunglies
a1a9c2b7bb refactor: optimize reference handling in profile and i18n modules 2025-11-30 23:00:16 +08:00
Tunglies
6897ead070 perf: change patch_config parameter from Mapping to &Mapping for efficiency 2025-11-30 20:44:21 +08:00
renovate[bot]
ae8c302bf4 chore(deps): update cargo dependencies (#5670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-30 19:48:44 +08:00
renovate[bot]
aab8c8b3a1 chore(deps): update npm dependencies (#5671)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-30 19:47:19 +08:00
Tunglies
dca9b51b4b chore: macOS skip codesign 2025-11-30 16:16:16 +08:00
Tunglies
a14f76eaf8 chore: comment out Apple signing credentials in dev workflow 2025-11-30 15:12:06 +08:00
Tunglies
3e4bdf2d64 chore: comment out Apple signing credentials in autobuild workflow 2025-11-30 14:38:31 +08:00
renovate[bot]
b03dcd71f4 chore(deps): update dependency prettier to ^3.7.3 (#5663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-30 08:48:14 +08:00
renovate[bot]
25a3c2524f chore(deps): update github actions (#5660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-29 20:44:46 +08:00
Slinetrac
882f1a2a4a Revert "feat: imporve the layout of proxies page (#5647)"
This reverts commit 8c1caf8555.
2025-11-29 20:40:45 +08:00
renovate[bot]
bd2d86fd8f chore(deps): update github actions (#5661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-29 20:37:21 +08:00
Tunglies
271550205b chore: update autobuild action version, let renovate manage ci version 2025-11-29 20:28:41 +08:00
Slinetrac
45d4f0e89c chore: remove meta-json-schema #5656 #5478 2025-11-29 15:10:41 +08:00
Slinetrac
1d41cf691b fix: wake window correctly on first silent startup 2025-11-29 14:10:55 +08:00
DengHanjie
8c1caf8555 feat: imporve the layout of proxies page (#5647)
* feat: imporve the layout of proxies page to avoid navigator overlapping items (issue #5556)

* feat(proxy): remove left padding
2025-11-29 11:08:58 +08:00
renovate[bot]
0fa77441f5 chore(deps): update npm dependencies (#5648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-29 10:04:40 +08:00
oomeow
6456c597ed perf: spawn clean task (#5595)
* perf: spawn task

* perf: spawn task to save draft date

* perf: store proxy client

* chore: update

* perf: reduce handle quit on macOS

* chore: clippy

* docs: update Changelog.md

* chore: update
2025-11-28 21:12:34 +08:00
Sline
683667f8ae fix(ui): prevent light flash on dark startup (#5637)
* fix(ui): prevent light flash on dark startup

* fix(window): apply initial dark/light theme to prevent white flash

* refactor(boot): optimize config fetch and theme fallback

* fix: system theme detection

* fix(window): remove black flash before loader by aligning initial paint with theme
2025-11-28 15:15:17 +08:00
Slinetrac
34aa26813f docs: Changelog.md 2025-11-28 11:05:49 +08:00
Slinetrac
99dda5496e fix(i18n): prevent zh flash and normalize language caching #5632 2025-11-28 10:38:42 +08:00
oomeow
9ce5d27d6e Revert "chore: frontend format check"
This reverts commit 90b850154d.
2025-11-27 21:50:25 +08:00
oomeow
90b850154d chore: frontend format check 2025-11-27 21:08:04 +08:00
renovate[bot]
aed3060a11 chore(deps): update dependency prettier to ^3.7.1 (#5631)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 20:46:33 +08:00
renovate[bot]
3cd6e88c37 chore(deps): update dependency prettier to ^3.7.0 (#5625)
* chore(deps): update dependency prettier to ^3.7.0

* style: prettier

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-27 17:25:34 +08:00
renovate[bot]
c2c628e8e0 chore(deps): update dependency @eslint-react/eslint-plugin to ^2.3.9 (#5613)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 10:06:25 +08:00
Slinetrac
a572708fd8 fix(search): prevent crash on invalid regex input in search box
Closes #5609
2025-11-26 18:40:22 +08:00
Slinetrac
cbd8c89097 fix(connection-table): set boxSizing to border-box for header and cells
Closes #5611
2025-11-26 17:49:17 +08:00
Slinetrac
affdfc045e fix(backup-config-viewer): add top margin to WebDAV address field to prevent floating label from overlapping dialog title
Closes #5608
2025-11-26 17:13:05 +08:00
Tunglies
adb969d370 fix(ip-info-card): update IP detection to refresh only when necessary 2025-11-26 14:41:12 +08:00
Tunglies
22e2e751a2 refactor(profile): update get_profiles to return SharedBox and optimize clone usage 2025-11-26 11:27:02 +08:00
Tunglies
2e6e9a0db4 refactor(use_seq): optimize group handling by removing unnecessary cloning 2025-11-26 11:27:01 +08:00
renovate[bot]
643e15b752 chore(deps): update dependency react-virtuoso to ^4.15.0 (#5600)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 11:10:52 +08:00
Tunglies
ecc272aa20 feat: integrate tauri-plugin-clipboard-manager and add system info commands (#5593) 2025-11-25 16:58:25 +08:00
Slinetrac
d3dc40e788 docs: Changelog.md 2025-11-25 11:51:00 +08:00
Sline
b83ef994f8 refactor(traffic-monitor): Move traffic sampling/compression to a dedicated Web Worker (#5588)
* refactor(traffic-monitor): Move traffic sampling/compression to a dedicated Web Worker

* refactor(traffic-monitor): introduce shared sampler, safe fallback, and decoupled range handling

* refactor(traffic-monitor): add optional subscribe flag and fix range handling

* fix(traffic-monitor): age out idle samples and prevent ref-count updates after unmount
2025-11-25 11:43:45 +08:00
Sline
caca8b2bc4 refactor: debugLog for frontend (#5587) 2025-11-25 10:01:04 +08:00
renovate[bot]
64727ad660 chore(deps): update dependency typescript-eslint to ^8.48.0 (#5583)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 08:49:32 +08:00
AetherWing
6b3f5eea16 fix: correct flag emoji for ISO alpha-3 region code (#5557)
* fix: correct flag emoji for ISO alpha-3 region code

* fix: use rust_iso3166 to convert ISO3 region code

* fix: validate ISO country code when generating flag emoji

* fix: correct icon encoding for unlock test in specific regions

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-11-24 20:40:32 +08:00
renovate[bot]
38b306a438 chore(deps): update dependency @types/react to v19.2.7 (#5577)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 20:12:49 +08:00
Tunglies
e24bb8f9cc chore: update cargo lock 2025-11-24 20:06:06 +08:00
Slinetrac
0c00a39754 docs: Changelog.md 2025-11-24 16:22:14 +08:00
Sline
8e8182f707 refactor(app-data): split monolithic context into focused SWR hooks (#5576)
* refactor(app-data): split monolithic context into focused SWR hooks

* refactor(swr): unify polling and consolidate proxy/config/provider data flow
2025-11-24 16:18:31 +08:00
Tunglies
871881c460 fix(resolve): implement resolve_done state management and refactor timer logic 2025-11-24 13:52:08 +08:00
Tunglies
cbd1fa44d7 fix(reqwest): add native-tls feature to reqwest dependency #5559 2025-11-24 13:25:00 +08:00
Tunglies
ad6fe696c0 fix: resolve proxy button and highlight state desynchronization; fix sidebar navigation issues 2025-11-23 20:01:54 +08:00
Tunglies
44adf55975 fix(proxy): sync system proxy switch state with background highlight #5240, #5439, #5421, #4651, #4536
Fixed race condition where button state and background color would desync
during rapid toggles or slow backend responses.

Root causes:
- Button used actualState while background used configState
- toggleSystemProxy returned immediately via setTimeout(0), releasing lock
  before backend operation completed
- 100ms delay in updateProxyStatus caused visual flash

Changes:
- Unified state source: both button and background now use actualState
- Made toggleSystemProxy truly async with proper await chain
- Wrapped toggle function with useLockFn to serialize operations
- Reduced state refresh delay from 100ms to 50ms
- Fixed GuardState lock release timing for async operations
- Added proper error rollback with state refresh on failure

Resolves issue where proxy toggle button would show as off while
background remained green, or vice versa.
2025-11-23 12:17:52 +08:00
Tunglies
ddd24eb3ac fix: prevent drag listeners from blocking navigation clicks in sidebar #5567
Separated dnd-kit drag handlers (attributes/listeners) from ListItemButton
to ListItemIcon only. Previously, long-press or rapid clicks on nav items
would trigger drag detection and cancel the click event, causing the item
to visually highlight but fail to navigate.

Changes:
- Moved sortable attributes/listeners to icon elements only
- ListItemButton now handles pure navigation clicks without interference
- Drag handle cursor ('grab') remains on icons when sortable is enabled

Fixes issue where sidebar tabs would "go dark" without actual route change.
2025-11-23 11:47:27 +08:00
oomeow
cbab199f80 fix: failed to receive shutdown signal on windows (#5533)
* fix: receive shutdown signal failed on windows

* docs: update Changelog.md

* chore: update

* fix: use tokio runtime to handle shutdown signal

* docs: update Changelog.md

* fix: move tauri dependency to the correct section in Cargo.toml

* fix: remove unused exit handling code in run function

* fix(clash-verge-signal): use global runtime to avoid tokio runtime panic on unix

* chore: update tauri-plugin-mihomo deps

* fix: handle macOS exit event to ensure proper application termination

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-11-22 22:36:00 +08:00
Slinetrac
687530a9cd fix(sysproxy): remove redundant 172.29.0.0/16 entry #4351
Closes #4351
2025-11-22 19:05:57 +08:00
Sline
4ff186497c feat(tun): auto-redirect GUI support for linux (#5565)
* feat(tun): auto-redirect GUI support for linux

* refactor(tun-viewer): unify Linux-only auto-redirect row layout
2025-11-22 18:58:57 +08:00
Slinetrac
45020fceda refactor(proxies): reorder chain-mode toggle for immediate UI feedback 2025-11-22 17:06:35 +08:00
renovate[bot]
51760a5b95 chore(deps): update npm dependencies (#5561)
* chore(deps): update npm dependencies

* fix: types

* chore: replace vite-plugin-monaco-editor-esm with utils/monaco

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-22 16:33:34 +08:00
Tunglies
a271ba6ce5 feat: add update_proxy_chain_config method with detailed documentation for proxy and proxy-group configuration 2025-11-22 16:30:25 +08:00
Tunglies
82bed4910e perf: refactor IRuntime to use HashSet for exists_keys and improve related functions performance 2025-11-22 16:25:50 +08:00
Tunglies
c82cefe80e feat: add clash-verge-types crate and integrate IRuntime struct 2025-11-22 15:33:24 +08:00
Slinetrac
d110e462aa Revert "chore(deps): update npm dependencies (#5558)"
This reverts commit ddcd4a8192.
2025-11-22 13:49:17 +08:00
Slinetrac
1d9179ba7e Revert "fix: update vite-plugin-monaco-editor to version 1.1.0"
This reverts commit dd52522905.
2025-11-22 13:49:14 +08:00
Tunglies
dd52522905 fix: update vite-plugin-monaco-editor to version 1.1.0 2025-11-22 12:01:34 +08:00
renovate[bot]
ddcd4a8192 chore(deps): update npm dependencies (#5558)
* chore(deps): update npm dependencies

* fix: correct monaco typescript reference in editor viewer

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-11-22 08:39:08 +08:00
Slinetrac
c38dd5da14 fix(unlock): normalize and dedupe unlock items 2025-11-21 20:22:57 +08:00
Tunglies
803f749063 Revert "chore(deps): update npm dependencies (#5554)"
This reverts commit da0106b1e8.
2025-11-21 18:13:22 +08:00
Slinetrac
192b15a02d docs: CONTRIBUTING.md 2025-11-21 14:36:04 +08:00
Slinetrac
a5a791a7f8 fix(ci): pnpm cache 2025-11-21 13:47:30 +08:00
Sline
02d0a7e61f chore(ci): add frontend-check.yml (#5555)
* chore(ci): add frontend-check.yml

* test

* Revert "test"

This reverts commit 24c4cf270c.
2025-11-21 13:28:54 +08:00
renovate[bot]
da0106b1e8 chore(deps): update npm dependencies (#5554)
* chore(deps): update npm dependencies

* fix: types

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-21 12:36:17 +08:00
Tunglies
ee9e9182dc perf: update current_* methods to return references instead of owned Strings and decrease unnecessary arc clone 2025-11-21 12:17:35 +08:00
Tunglies
6a62009485 Revert "chore(deps): update dependency monaco-editor to ^0.55.1 (#5548)"
This reverts commit 22241f8f60.
2025-11-21 12:11:45 +08:00
renovate[bot]
22241f8f60 chore(deps): update dependency monaco-editor to ^0.55.1 (#5548)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-21 10:08:49 +08:00
Tunglies
a1f8ab7308 refactor: update function signatures to use references for Mapping and String 2025-11-20 22:50:36 +08:00
Tunglies
5a677fbbeb refactor: update function signatures to use references for Mapping and String 2025-11-20 21:49:16 +08:00
Slinetrac
fcc1d4f9b5 chore: remove vitest 2025-11-20 21:42:11 +08:00
renovate[bot]
e3da884bde chore(deps): update dependency vitest to ^4.0.12 (#5547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 20:54:01 +08:00
Tunglies
8e3273a32c refactor: simplify sysproxy usage in network commands 2025-11-20 19:50:25 +08:00
Slinetrac
0827829cc5 docs: Changelog.md 2025-11-20 17:52:20 +08:00
Sline
bf06cbc87d refactor: replace @mui/x-data-grid with @tanstack/react-table (#5544) 2025-11-20 17:41:34 +08:00
Tunglies
7e373ff39c fix(mihomo): unix can not connect mihomo ipc after reload config #5532 2025-11-20 17:02:57 +08:00
Tunglies
87e3125e67 fix: resolve issue with application not remembering user behavior on restart or shutdown 2025-11-20 16:07:05 +08:00
Tunglies
131cd6c3b8 fix(config): restart and quit application or shutdown system can not remember user's behavior #5347, #5359, #5430 2025-11-20 16:03:43 +08:00
renovate[bot]
e42ae0e8c5 chore(deps): update dependency vite to ^7.2.4 (#5541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 15:54:09 +08:00
renovate[bot]
c765016063 chore(deps): update dependency vite to ^7.2.3 (#5540)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 15:48:52 +08:00
Slinetrac
614a2cf00b style: prettier 2025-11-20 15:27:42 +08:00
Slinetrac
be97a27ba3 fix: Monaco syntax highlighting broken by CSS injection #5440 2025-11-20 15:16:25 +08:00
Tunglies
b3dc48d07e fix(tests): suppress clippy expect warnings in enhance function
fix(timer): improve task removal logic in add_task method
refactor(notification): drop binding after emitting event
chore(Cargo): add lints section to Cargo.toml
2025-11-20 14:59:49 +08:00
Tunglies
4c8673fcb2 fix(timer): optimize lock handling in add_task method 2025-11-20 14:50:53 +08:00
Slinetrac
51a7b4fe75 docs: Changelog.md 2025-11-20 13:29:45 +08:00
Slinetrac
2bb9f648ba fix(app-data-provider): dashboard state sync 2025-11-20 13:23:50 +08:00
renovate[bot]
c3fe2d31ef chore(deps): update npm dependencies (#5535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 12:35:17 +08:00
renovate[bot]
4617ec0997 chore(deps): update dependency glob to v13 (#5534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 12:33:59 +08:00
Tunglies
d8090277af refactor: replace singleton_lazy with singleton macro across multiple modules 2025-11-19 22:40:52 +08:00
Tunglies
108a05ce96 refactor: replace CommandChildGuard with CommandChild and simplify related methods 2025-11-19 22:11:22 +08:00
Sline
d808e59156 fix(enhance): prevent crash when deleted proxies remain in manual groups (#5522)
* feat(enhance): cleanup stale proxies and policies before final config

* feat(enhance): preserve provider-backed groups when sanitizing proxies

* docs: Changelog.md

* refactor: to_owned

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-11-19 18:59:20 +08:00
Tunglies
ba3cd9b006 refactor: simplify IVerge struct by deriving Default and removing manual implementation 2025-11-19 18:40:53 +08:00
Tunglies
aad5bb812c chore: add removeUnusedCommands to build configuration 2025-11-19 18:13:35 +08:00
Slinetrac
6ab597db8f fix: prevent filename from overlapping with action icons in backup records #5525
Closes #5525
2025-11-19 17:29:11 +08:00
renovate[bot]
85302144b2 chore(deps): update npm dependencies (#5528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-19 17:11:05 +08:00
Slinetrac
ba90c6a1e1 docs: Changelog.md 2025-11-19 17:09:54 +08:00
Sline
f439e93a2b feat(hotkey): add global reactivate_profiles shortcut (#5527)
* feat(hotkey): add global reactivate_profiles shortcut

* feat(profile): expose validation state for reactivation shortcuts
2025-11-19 17:06:23 +08:00
Slinetrac
94b07b51d6 chore: rename Youtube to YouTube
Closes #5526
2025-11-19 17:04:19 +08:00
oomeow
9e3bc6db8c chore: update tauri-plugin-mihomo deps 2025-11-18 22:02:14 +08:00
Tunglies
531307ebe1 fix(workflows): update pnpm cache key format and node version in autobuild and dev workflows 2025-11-18 20:05:49 +08:00
Tunglies
df4c69e9cc fix(workflows): enable caching for all crates in autobuild, dev, and lint-clippy workflows 2025-11-18 19:55:30 +08:00
Tunglies
9ef4362b23 fix(autobuild): update file paths for deb, rpm, and nsis bundles 2025-11-18 19:40:34 +08:00
Tunglies
3ec7c6d2b8 feat(profiles): add profile preview structure and update profile menu handling 2025-11-18 19:08:07 +08:00
Slinetrac
ec7f912eae fix(home-profile-card): use profiles label for home shortcut 2025-11-18 18:50:53 +08:00
Slinetrac
e7812396df feat(logs): support reverse chronological order #5513
Closes #5513
2025-11-18 17:39:56 +08:00
Slinetrac
4fa8b1f118 chore(types): refine monaco plugin default export typing 2025-11-18 16:51:41 +08:00
Tunglies
af9b1b777e feat(app_init): enhance IPC pool configuration with new connection limits and reject policy 2025-11-18 16:41:41 +08:00
Tunglies
096b1b0d81 fix(ci): update Rust cache configuration and artifact paths in dev workflow 2025-11-18 16:33:13 +08:00
Tunglies
7a81a673f3 chore(ci): update Rust cache configuration in autobuild and lint-clippy workflows for improved efficiency 2025-11-18 16:14:30 +08:00
Sline
38980b1249 chore(deps): bump pnpm10 (#5511)
* chore(deps): bump pnpm10

* fix: keep React and router in a single chunk to avoid runtime crash
2025-11-18 16:01:34 +08:00
Tunglies
b34e4cf551 Revert "fix: update Rust cache keys in autobuild and lint-clippy workflows for consistency"
This reverts commit 9df0998f3e.
2025-11-18 15:53:04 +08:00
Tunglies
8339fabb17 feat(sysinfo): add tauri-plugin-clash-verge-sysinfo for system information retrieval (#5510)
* feat(sysinfo): add tauri-plugin-clash-verge-sysinfo for system information retrieval

* feat(sysinfo): add tauri-plugin-clash-verge-sysinfo for system information retrieval

* fix(service): import Manager trait for app handle in linux_running_as_root function
2025-11-18 15:48:48 +08:00
renovate[bot]
ca35994ccb chore(deps): update npm dependencies (#5502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-18 13:33:45 +08:00
renovate[bot]
92d3a59d0d chore(deps): update rust crate open to 5.3.3 (#5501)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-18 13:32:18 +08:00
renovate[bot]
4f6ceec0d5 chore(deps): update dependency glob to v12 (#5503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-18 13:31:17 +08:00
Tunglies
9df0998f3e fix: update Rust cache keys in autobuild and lint-clippy workflows for consistency 2025-11-18 10:11:32 +08:00
Tunglies
e672d19622 feat(signal): add clash-verge-signal crate and integrate signal handling (#5500)
* feat(signal): add clash-verge-signal crate and integrate signal handling

* fix: clippy error on type complexity
2025-11-18 10:04:21 +08:00
oomeow
16478d314b fix: install service (#5479)
* fix: compatible older service version when install service

* docs: update Changelog.md

* chore: check service available

* chore: wait for service server is running

* fix: update changelog to reflect compatibility with legacy service mode upgrades

---------

Co-authored-by: Tunglies <tunglies.dev@outlook.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-11-18 09:52:48 +08:00
Slinetrac
a5de24a545 fix(webdav): prevent dialog refresh loop and stabilize busy-state handling 2025-11-17 18:16:13 +08:00
Tunglies
35ae5cdba1 fix: update caching keys in workflow files to use glob pattern for Cargo.lock 2025-11-17 13:02:44 +08:00
Tunglies
d1a099b480 fix: update file paths in release script for fixed WebView2 setup 2025-11-17 12:57:34 +08:00
Tunglies
eb1768e212 fix: update file paths in autobuild script for WebView2 setup 2025-11-17 12:47:01 +08:00
Tunglies
056af768e5 feat: initialize workspace with clash-verge-draft and clash-verge-logging crates (#5489)
- Add Cargo.toml for workspace management, including dependencies and profiles.
- Create clash-verge-draft crate with basic structure, including a benchmark for Draft functionality.
- Implement Draft management with shared state and asynchronous modifications.
- Add tests for Draft functionality to ensure correctness.
- Create clash-verge-logging crate for logging utilities with structured log types and macros.
- Update src-tauri to use new crates and remove unnecessary configurations.
- Refactor existing code to utilize the new Draft and logging functionalities.
2025-11-17 11:51:50 +08:00
Tunglies
0866b93175 feat(logging): introduce clash-verge-logging crate for management (#5486)
* feat(logging): introduce clash-verge-logging crate for management

- Added a new crate `clash-verge-logging` with dependencies on `log`, `tokio`, `compact_str`, and `flexi_logger`.
- Implemented logging types and macros for structured logging across the application.
- Replaced existing logging imports with the new `clash_verge_logging` crate in various modules.
- Updated logging functionality to support different logging types and error handling.
- Refactored code to improve logging consistency and maintainability.

* fix(logging): update import paths for clash_verge_logging in linux.rs and dns.rs

* fix(logging): update import statement for clash_verge_logging in windows.rs
2025-11-17 10:42:57 +08:00
Slinetrac
635f63e9e5 feat: explicit paste button 2025-11-17 10:07:38 +08:00
Slinetrac
f315a98afd fix: monaco editor line count limit 2025-11-17 07:41:37 +08:00
oomeow
b0089d162b fix: dynamically modify pac content (#5468)
* fix: dynamically modify pac content

* docs: update Changelog.md
2025-11-16 18:53:43 +08:00
Slinetrac
e1fc9547d8 docs: Changelog.md 2025-11-16 16:05:25 +08:00
Slinetrac
cfd4532440 fix(home/traffic): ensure traffic chart stretches on Windows maximize 2025-11-16 15:42:14 +08:00
Tunglies
1eb4a0d834 fix(macos): remove tproxy-port from config on macOS #5439, #5397, #5372 2025-11-16 15:38:39 +08:00
Su Guoyu
29d8df40b9 fix(linux): retry with sudo when pkexec execution failed (#5469) 2025-11-16 14:52:13 +08:00
Tunglies
dbb4877be6 refactor(Draft): management as crate (#5470)
* feat: implement draft functionality with apply and discard methods, and add benchmarks and tests

* Refactor Draft management and integrate Tokio for asynchronous operations

- Introduced a new `IVerge` struct for configuration management.
- Updated `Draft` struct to use `Arc<RwLock>` for better concurrency handling.
- Added asynchronous editing capabilities to `Draft` using Tokio.
- Replaced synchronous editing methods with asynchronous counterparts.
- Updated benchmark tests to reflect changes in the `Draft` API.
- Removed redundant draft utility module and integrated its functionality into the main `Draft` implementation.
- Adjusted tests to validate new behavior and ensure correctness of the `Draft` management flow.
2025-11-16 00:33:21 +08:00
Tunglies
e66b8e7894 feat(timer): better subscription update timer after core startup 2025-11-15 21:18:35 +08:00
Tunglies
8654bad6b0 refactor: migrate proxy setting guard to sysproxy-rs crate (#5287)
* Refactor proxy management: Remove EventDrivenProxyManager and async_proxy_query

- Removed the EventDrivenProxyManager and its related event-driven proxy management logic.
- Replaced usages of AsyncProxyQuery with direct calls to sysproxy for fetching system and auto proxy configurations.
- Cleaned up constants by removing unused default proxy host.
- Updated sysopt to eliminate calls to the removed EventDrivenProxyManager.
- Adjusted logging and proxy state management to reflect the removal of event-driven architecture.
- Simplified the core module structure by removing unnecessary module imports.

* refactor: remove bypass module for cleaner network configuration

* feat: update sysproxy to version 0.4.0 and add guard feature; refactor sysopt for improved proxy management

* feat(windows/sysproxy): unify guard-type handling and auto-restore drift

* refactor(config): remove commented-out code for SysProxy update flag

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-15 20:51:36 +08:00
Slinetrac
e021e45e9a fix(backup): correctly restore CSS injection from verge.yaml backups 2025-11-15 20:20:27 +08:00
Slinetrac
272c2f3467 Revert "fix(editor): restore syntax highlighting for JS/CSS in Monaco editor"
This reverts commit 55ac25b1a6.
vite-plugin-monaco-editor-esm has handled it
2025-11-15 16:46:11 +08:00
Slinetrac
0b641992e7 refactor(async-proxy): remove unnecessary Result wrappers from Windows registry helpers 2025-11-15 16:37:53 +08:00
Slinetrac
55ac25b1a6 fix(editor): restore syntax highlighting for JS/CSS in Monaco editor 2025-11-15 15:51:03 +08:00
Tunglies
40db928436 fix: suppress error from deep link registration in setup_plugins 2025-11-15 12:34:06 +08:00
renovate[bot]
2eb5b5802d chore(deps): update dependency @types/react to v19.2.5 (#5465)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-15 10:10:12 +08:00
Tunglies
7f2bced0d4 fix: remove unnecessary exit statement from pre-push script 2025-11-15 08:58:52 +08:00
Tunglies
a6cb903fe6 refactor: simplify function return types and remove unnecessary wraps 2025-11-15 08:56:58 +08:00
Tunglies
2b0ba4dc95 refactor: streamline config handling and logging mechanisms 2025-11-15 02:46:34 +08:00
Tunglies
f6f288f02b fix: prevent save yaml return too early to failed get runtime config 2025-11-15 01:09:22 +08:00
wonfen
c4e558d377 refactor: replace isahc with reqwest (#5463) 2025-11-14 23:10:56 +08:00
Tunglies
8190432903 fix: update download links for Windows and macOS installers
I hate tauri-action update :(
2025-11-14 21:59:27 +08:00
oomeow
20cb3e49fd chore: don't record websocket logs 2025-11-14 20:23:25 +08:00
renovate[bot]
4fb8611e55 chore(deps): update npm dependencies (#5462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 19:38:06 +08:00
Tunglies
e41f910063 feat: add infoPlist configuration for macOS build 2025-11-14 17:30:27 +08:00
renovate[bot]
4e800d165b chore(deps): update npm dependencies (#5455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 09:59:10 +08:00
renovate[bot]
f1bd56ea13 chore(deps): update cargo dependencies (#5453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-13 23:17:55 +08:00
Slinetrac
dbd46f2b76 fix: ruleEditor i18n keys 2025-11-13 21:45:04 +08:00
oomeow
18b3db46b0 chore: update tauri-plugin-mihomo deps 2025-11-13 20:24:24 +08:00
renovate[bot]
0e2e919a58 chore(deps): update dependency @mui/x-data-grid to ^8.18.0 (#5452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-13 19:53:41 +08:00
oomeow
1125dc0562 feat: support closed connections (#5244)
* feat: support closed connections

* fix: clear closed connections

* feat: show footer

* feat: show closed connection detail

* docs: update Changelog.md

* chore: update
2025-11-13 19:50:23 +08:00
renovate[bot]
d73036a3b6 chore(deps): update npm dependencies (#5441)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-13 10:20:51 +08:00
Tunglies
9c24b3089c fix(editor): update editorRef initialization and handleChange logic for better type safety #5442 2025-11-13 09:42:03 +08:00
Tunglies
d0d35da2f1 fix(editor): update theme mode for MonacoEditor to use 'light' instead of 'vs' in multiple components #5440 2025-11-13 08:39:10 +08:00
renovate[bot]
3db69bd816 chore(deps): update npm dependencies (#5431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-12 18:47:40 +08:00
renovate[bot]
3fab4ce34a chore(deps): update dependency @types/react-dom to v19.2.3 (#5424)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-12 14:13:43 +08:00
Sline
2a2de29224 feat: tray menu enhance (#5412)
* feat(tray): move outbound modes into a dedicated submenu

* refactor: Enable 'Show Proxy Groups Inline' by default

* refactor(tray): move `copyEnv` to `more` submenu
2025-11-12 14:10:20 +08:00
Slinetrac
2ea22feb95 fix(tray): refresh icon with latest draft before apply() commits 2025-11-12 11:41:28 +08:00
renovate[bot]
a5f2b163f1 chore(deps): update dependency @types/node to ^24.10.1 (#5420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-12 10:55:48 +08:00
Tunglies
f3a3d0e8b0 refactor: update update_icon method to require a non-optional verge reference and adjust related calls (#5417) 2025-11-12 07:36:24 +08:00
renovate[bot]
92a3f0cae3 chore(deps): update dependency @types/react to v19.2.3 (#5416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-12 01:26:04 +08:00
Slinetrac
d18c303e12 fix(tun): set linux DEFAULT_STACK to gvisor 2025-11-12 00:39:46 +08:00
Slinetrac
b40136a790 chore: Changelog.md 2025-11-12 00:19:50 +08:00
Slinetrac
645b92bc28 fix(tun): remove Linux-only block that forced tun.stack to mixed 2025-11-12 00:08:17 +08:00
Sline
afb3842776 feat(canvas): add adaptive FPS and pause rendering on window blur (#5409) 2025-11-11 20:15:07 +08:00
renovate[bot]
e02f23e0aa chore(deps): update npm dependencies (#5400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-11 16:38:08 +08:00
Tunglies
6e9c6e60bb chore: update sysproxy-rs 2025-11-11 08:53:14 +08:00
Tunglies
600019f980 chore: update tauri-plugin-mihomo 2025-11-11 08:24:23 +08:00
renovate[bot]
2d9eef834b chore(deps): update dependency @eslint-react/eslint-plugin to ^2.3.4 (#5394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-10 22:38:29 +08:00
Tunglies
33f575ed4d refactor: update icon handling in tray methods to accept IVerge reference and improve logging #5379 (#5387)
* refactor: update icon handling in tray methods to accept IVerge reference and improve logging #5379

* refactor: simplify icon retrieval logic in Tray implementation
2025-11-10 19:06:37 +08:00
Slinetrac
7d42d5cb0f feat: add proxy chain icon 2025-11-10 14:30:47 +08:00
Sline
838e401796 feat(auto-backup): implement centralized auto-backup manager and UI (#5374)
* feat(auto-backup): implement centralized auto-backup manager and UI

- Introduced AutoBackupManager to handle verge settings, run a background scheduler, debounce change-driven backups, and trim auto-labeled archives (keeps 20); wired into startup and config refresh hooks
  (src-tauri/src/module/auto_backup.rs:28-209, src-tauri/src/utils/resolve/mod.rs:64-136, src-tauri/src/feat/config.rs:102-238)

- Extended verge schema and backup helpers so scheduled/change-based settings persist, create_local_backup can rename archives, and profile/global-extend mutations now trigger backups
  (src-tauri/src/config/verge.rs:162-536, src/types/types.d.ts:857-859, src-tauri/src/feat/backup.rs:125-189, src-tauri/src/cmd/profile.rs:66-476, src-tauri/src/cmd/save_profile.rs:21-82)

- Added Auto Backup settings panel in backup dialog with dual toggles + interval selector; localized new strings across all locales
  (src/components/setting/mods/auto-backup-settings.tsx:1-138, src/components/setting/mods/backup-viewer.tsx:28-309, src/locales/en/settings.json:312-326 and mirrored entries)

- Regenerated typed i18n resources for strong typing in React
  (src/types/generated/i18n-keys.ts, src/types/generated/i18n-resources.ts)

* refactor(setting/backup): restructure backup dialog for consistent layout

* refactor(ui): unify settings dialog style

* fix(backup): only trigger auto-backup on valid saves & restore restarts app safely

* fix(backup): scrub console.log leak and rewire WebDAV dialog to actually probe server

* refactor: rename SubscriptionChange to ProfileChange

* chore: update i18n

* chore: WebDAV i18n improvements

* refactor(backup): error handling

* refactor(auto-backup): wrap scheduler startup with maybe_start_runner

* refactor: remove the redundant throw in handleExport

* feat(backup-history-viewer): improve WebDAV handling and UI fallback

* feat(auto-backup): trigger backups on all profile edits & improve interval input UX

* refactor: use InputAdornment

* docs: Changelog.md
2025-11-10 13:49:14 +08:00
Cactus
78d5cb5eca i18n: remove proxy chain icon due to design inconsistency (#5377)
style: prettier
2025-11-10 12:40:59 +08:00
Tunglies
b308251022 refactor: replace async_runtime::block_on with AsyncHandler::block_on and add inline annotations 2025-11-10 09:30:55 +08:00
Tunglies
49e5a557ca refactor: add inline annotations to CommandChildGuard methods 2025-11-10 09:23:30 +08:00
Tunglies
e66a4f6aca perf: some inline magic for Draft
This would improve 8-14% CPU for all API
2025-11-10 07:18:50 +08:00
Tunglies
204bfa36e5 refactor: reorganize imports and remove unused axios instance code 2025-11-10 02:12:16 +08:00
Slinetrac
a8fe5a71f7 fix: use Manager as _ 2025-11-09 23:46:23 +08:00
Slinetrac
c03e10b5dc fix: macOS clippy lint 2025-11-09 23:36:39 +08:00
Slinetrac
0dcdd7fed6 fix: clippy lint 2025-11-09 23:23:03 +08:00
Tunglies
221a1e89eb chore: update Changelog for v2.4.4 with Mihomo(Meta) kernel upgrade and additional improvements 2025-11-09 22:38:55 +08:00
Tunglies
4eeb883464 refactor: update imports to use as _ for unused identifiers across multiple files 2025-11-09 22:15:37 +08:00
Tunglies
e6c8f762db refactor: replace cloned() with clone() for improved performance in multiple files 2025-11-09 22:07:12 +08:00
Tunglies
7f267fa727 fix: update configuration data access from latest_arc to data_arc in Clash and WebDAV commands and init windows 2025-11-09 21:26:11 +08:00
renovate[bot]
f5160ef277 chore(deps): update dependency @tauri-apps/cli to v2.9.4 (#5375)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-09 21:01:49 +08:00
Tunglies
5f2ac77923 chore: update Rust toolchain to version 1.91.0 in autobuild workflow
fix: update Rust toolchain action to use master branch for consistency

feat: add support for Windows ARM64 Gnullvm in development workflow

refactor: remove Windows ARM64 Gnullvm support and ensure Rust target is added for the pinned toolchain

feat: add Rust target installation step for pinned toolchain in autobuild workflow

fix: remove unnecessary blank lines in autobuild workflow
2025-11-09 20:53:19 +08:00
Tunglies
3e81dcd78f refactor: simplify icon file search logic in find_target_icons function
Try with 1.91.0 new API
2025-11-09 16:59:43 +08:00
Tunglies
f644036e08 chore: update Rust toolchain to version 1.91 and adjust edition in rustfmt configuration 2025-11-09 16:31:37 +08:00
Tunglies
c763fdd233 fix: update configuration data access from latest_arc to data_arc for TUN and system proxy settings 2025-11-09 16:05:32 +08:00
Tunglies
6026f432da fix: update method call to fetch configuration data for global hotkey settings 2025-11-09 16:02:21 +08:00
Tunglies
d193460649 refactor: replace inline log fetching with dedicated script for better maintainability 2025-11-09 15:46:40 +08:00
Tunglies
02ff2d3c2e chore: update dependencies in Cargo.toml and Cargo.lock for improved performance and features 2025-11-09 15:35:22 +08:00
oomeow
72544ccb54 fix: missing app_log_max_size and app_log_max_count when saving misc settings 2025-11-09 13:32:59 +08:00
oomeow
ba1b9796e8 fix: Tun disable failed due to too short timeout 2025-11-09 13:09:32 +08:00
Slinetrac
2f7b3bb9a0 chore(i18n): update zhtw translations
Co-authored-by: LiMoon <azhe9335@gmail.com>
2025-11-09 10:51:21 +08:00
Slinetrac
5c323fc40f docs: move Changelog.history.md to docs 2025-11-09 10:15:21 +08:00
Tunglies
d3d47d448a docs: update Changelog.md to include backend memory and performance optimizations 2025-11-09 02:52:22 +08:00
Tunglies
9c5cda793d refactor: streamline UI readiness handling by replacing RwLock with AtomicU8 and updating related functions 2025-11-09 02:47:48 +08:00
Tunglies
243f5b1b96 refactor: replace OnceCell with AtomicBool for UI readiness state 2025-11-09 02:29:50 +08:00
Tunglies
a57ffba8ba refactor: replace RwLock with AtomicBool for is_exiting and emergency_mode in Handle and NotificationSystem 2025-11-09 02:23:35 +08:00
Tunglies
8f080389fe feat: add Changelog.md and update scripts to reference it
- Created a new Changelog.md file to document version updates and changes.
- Updated the updatelog.mjs script to parse Changelog.md instead of UPDATELOG.md.
- Modified updater-fixed-webview2.mjs to use the new Changelog.md for update notes.
2025-11-09 01:09:10 +08:00
Slinetrac
2a13696d06 docs: UPDATELOG.md 2025-11-09 00:21:03 +08:00
XiaoBuHaly
af4463fef1 feat(connections): enable persistent column visibility and ordering #5235 (#5249)
* feat(connections): enable persistent column visibility and ordering

fix(connections): smooth column manager access in table view

fix(connections): integrate column manager into column menu

- Move the Connections column manager trigger into the DataGrid column menu, reusing existing i18n strings
- Clean up the page toolbar by removing the standalone button and lifting dialog state to the parent page

fix(connections): unify column order handling and resolve lint warnings

fix(connections): unify column order handling and enforce 0 ESLint warnings

- extract reconcileColumnOrder helper and reuse it across:
  - initial normalization (useEffect)
  - manager drag order handler (handleManagerOrderChange)
- derive columnOptions directly from the computed, sorted columns to keep a single source of truth and prevent dialog/grid drift
- connections.tsx: remove direct setState in useEffect; gate dialog open with `isTableLayout && isColumnManagerOpen`; clean up unused imports
- connection-column-manager.tsx: replace deprecated `primaryTypographyProps` with `slotProps`
- run full lint; project now has 0 warnings on main configuration

* feat(connection-table): safeguard column visibility

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-09 00:15:01 +08:00
Sline
c8aa72186e chore: i18n (#5276)
* chore: notice i18n

* feat: add script to clean up unused i18n keys

* chore: cleanup i18n keys

* refactor(i18n/proxies): migrate proxies UI to structured locale keys

* chore: i18n for rule module

* chore: i18n for profile module

* chore: i18n for connections module

* chore: i18n for settings module

* chore: i18n for verge settings

* chore: i18n for theme settings

* chore: i18n for theme

* chore(i18n): components.home.*

* chore(i18n): remove unused i18n keys

* chore(i18n): components.profile.*

* chore(i18n): components.connection

* chore(i18n): pages.logs.*

* chore(i18n): pages.*.provider

* chore(i18n): components.settings.externalCors.*

* chore(i18n): components.settings.clash.*

* chore(i18n): components.settings.liteMode.*

* chore(i18n): components.settings.backup.*

* chore(i18n): components.settings.clash.port.*

* chore(i18n): components.settings.misc.*

* chore(i18n): components.settings.update.*

* chore(i18n): components.settings.sysproxy.*

* chore(i18n): components.settings.sysproxy.*

* chore(i18n): pages.profiles.notices/components.providers.notices

* refactor(notice): unify showNotice usage

* refactor(notice): add typed showNotice shortcuts, centralize defaults, and simplify subscriptions

* refactor: unify showNotice usage

* refactor(notice): unify showNotice API

* refactor(notice): unify showNotice usage

* chore(i18n): components.test.*

* chore(i18n): components.settings.dns.*

* chore(i18n): components.home.clashInfo.*

* chore(i18n): components.home.systemInfo.*

* chore(i18n): components.home.ipInfo/traffic.*

* chore(i18n): navigation.*

* refactor(i18n): remove pages.* namespace and migrate route texts under module-level page keys

* chore(i18n): common.*

* chore(i18n): common.*

* fix: change error handling in patch_profiles_config to return false when a switch is in progress

* fix: improve error handling in patch_profiles_config to prevent requests during profile switching

* fix: change error handling in patch_profiles_config to return false when a switch is in progress

fix: ensure CURRENT_SWITCHING_PROFILE is reset after config updates in perform_config_update and patch_profiles_config

* chore(i18n): restructure root-level locale keys into namespaces

* chore(i18n): add missing i18n keys

* docs: i18n guide

* chore: adjust i18n

* refactor(i18n): align UI actions and status labels with common keys

* refactor(i18n): unify two-name locale namespaces

* refactor(i18n/components): unify locale keys and update component references

* chore(i18n): add shared and entities namespaces to all locale files

* refactor(i18n): consolidate shared and entity namespaces across features

* chore(deps): update npm dependencies to ^7.3.5 (#5310)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* refactor(i18n): migrate shared editor modes and consolidate entities namespaces

* tmp

* refactor(i18n): flatten locales and move theme/validation strings

* docs: CONTRIBUTING_i18n.md

* refactor(i18n): restructure feedback and profile namespaces for better organization

* refactor(i18n): unify settings locale structure and update references

* refactor(i18n): reorganize locale keys for home, proxies, rules, connections, logs, unlock, and tests

* refactor(i18n/feedback/layout): unify shared toasts & normalize layout namespace

* refactor(i18n): centralize common UI strings in shared

* refactor(i18n): flatten headers and unify locale schema

* refactor(i18n): consolidate duplicate per-feature translations into shared namespace

* refactor(i18n): split locales into per-namespace files

* style: lint

* refactor(i18n): unify unlock UI translations under tests namespace

* feat(i18n): add type-checked translation keys

* style: eslint import order

* feat(i18n): replace ad-hoc loader with rust-i18n backend bundles

* chore(prebuild): remove locale-copy step

* fix(i18n, notice): propagate runtime params and update cleanup script path

* fix(i18n,notice): make locale formatting idempotent and guard early notice translations

* fix(i18n): resolve locale aliases and match OS codes correctly

* fix(unlock): use i18next-compatible double-brace interpolation in failure notice

* fix(i18n): route unlock error notices through translation keys

* fix(i18n): i18n types

* feat(i18n): localize upgrade notice for Clash core viewer

* fix(notice): ensure runtime overrides apply to prefix translations

* chore(i18n): replace literal notices with translation keys

* chore(i18n): types

* chore(i18n): regen typings before formatting to keep keys in sync

* chore(i18n): simply labels

* chore(i18n): adjust translation

* chore: remove eslint-plugin-i18next

* chore(i18n): add/refine Korean translations across frontend scopes and Rust backend (#5341)

* chore(i18n): translate settings.json (missed in previous pass) (#5343)

* chore(i18n): add/refine Korean translations across frontend scopes and Rust backend

* chore(i18n): add/refine Korean translations across frontend scopes and Rust backend

* fix(i18n-tauri): quote placeholder-leading value in ko.yml to prevent rust_i18n parse panic

* chore(i18n): translate settings.json (forgot to include previously)

---------

Co-authored-by: rozan <34974262+thelojan@users.noreply.github.com>
2025-11-08 19:40:38 +08:00
Tunglies
c1a2e99f63 feat: migrate from react-monaco-editor to @monaco-editor/react and update editor components (#5263)
* feat: migrate from react-monaco-editor to @monaco-editor/react and update editor components

* chore: add acknowledgments for contributors in update log

* feat: enhance frontend information editing component for improved performance
2025-11-08 19:32:26 +08:00
Tunglies
9d874e5c6f chore: update version to 2.4.4 in package.json, Cargo.toml, Cargo.lock, tauri.conf.json, and add new changelog section 2025-11-08 19:16:51 +08:00
Tunglies
fa74e79f40 fix: update version from 2.4.3-rc to 2.4.3 in package.json, Cargo.toml, Cargo.lock, and tauri.conf.json 2025-11-08 19:10:29 +08:00
Tunglies
6017423a49 chore: update version to 2.4.3-rc and enhance release notes 2025-11-08 18:31:22 +08:00
Tunglies
538cba5a33 fix: return correct type in get_profiles function 2025-11-08 17:07:48 +08:00
oomeow
76bf91ff8a fix: import profile panic (#5346)
* fix: import profile panic

docs: update UPDATELOG.md

chore: update

* perf: spawn import profile
2025-11-07 22:46:30 +08:00
renovate[bot]
758c21e656 chore(deps): update dependency vitest to ^4.0.8 (#5349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 21:51:09 +08:00
Slinetrac
5759bed687 refactor(linux): replace users crate with libc::geteuid for root detection
Closes #5333
2025-11-07 18:58:13 +08:00
renovate[bot]
9cc2f44379 chore(deps): update dependency vite to ^7.2.2 (#5342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 16:22:28 +08:00
rozan
aa6a1c8650 add Korean README and update language selectors (#5338)
* docs(i18n): add Korean README and update language selectors

* style: prettier

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-11-07 12:06:48 +08:00
renovate[bot]
5b3dbaaec6 chore(deps): update dependency i18next to ^25.6.1 (#5331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 10:49:11 +08:00
oomeow
81e35e2ead chore: optimize (#5319)
* chore: optimize and reduce spawn

* chore: optimize
2025-11-07 06:06:09 +08:00
Tunglies
19b3899a1b refactor: improve notification handling and avoid backend loop with empty messages 2025-11-07 00:54:16 +08:00
renovate[bot]
333440535b chore(deps): update dependency vite to ^7.2.1 (#5324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 14:17:21 +08:00
Tunglies
409b16b49f refactor: streamline admin check logic and improve get_running_mode return type (#5325) 2025-11-06 13:37:11 +08:00
Tunglies
9a1465ec4d refactor: replace AtomicI64 with Instant for app start time tracking and simplify uptime calculation 2025-11-06 12:59:05 +08:00
Tunglies
04fc9640c6 refactor: move handle_window_destroyed function under macOS conditional compilation 2025-11-06 11:31:15 +08:00
Slinetrac
966693c9cb fix: clippy lint 2025-11-06 11:21:12 +08:00
Tunglies
363fa98891 refactor: enhance YouTube Premium check logic and streamline response handling 2025-11-06 11:03:35 +08:00
Tunglies
a0f7fb7952 refactor: update linting rules and optimize directory handling in Unix 2025-11-06 10:52:14 +08:00
Tunglies
5a8e83cd49 refactor: change function definitions to const for improved performance and clarity 2025-11-06 10:47:25 +08:00
Tunglies
aaf3ebe547 refactor: enhance error handling in Timer and update server argument collection 2025-11-06 10:42:21 +08:00
Tunglies
651513c826 refactor: optimize error message handling and improve cloning in various functions 2025-11-06 10:26:40 +08:00
Tunglies
69a706b438 refactor: streamline error handling and resource management in various modules 2025-11-06 10:19:06 +08:00
Tunglies
671ac2ebed refactor: replace type references with Self in various structs and methods for consistency 2025-11-06 10:19:06 +08:00
Tunglies
70236f781c refactor: simplify uid assignment in PrfItem from_merge and from_script methods 2025-11-06 10:19:05 +08:00
renovate[bot]
ccffc0a4fa chore(deps): update npm dependencies (#5321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 09:36:30 +08:00
Tunglies
21de5cbb0b refactor: remove unnecessary emit calls in switch_proxy_node and enhance profile switch notifications 2025-11-06 00:30:43 +08:00
Tunglies
6eaf999240 refactor: optimize worker loop to use try_recv for non-blocking event processing #5318 2025-11-05 22:59:22 +08:00
Tunglies
1bd2bde096 refactor: streamline lightweight mode initialization and logging levels 2025-11-05 18:57:04 +08:00
renovate[bot]
cf89ac381a chore(deps): update npm dependencies (#5317)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-05 18:47:43 +08:00
Tunglies
ea41e71f72 refactor: replace EncryptionGuard with with_encryption for better async context handling 2025-11-05 16:56:04 +08:00
Tunglies
8c3e9c9ea9 feat: implement encryption guard for secure data handling in YAML operations 2025-11-05 15:05:19 +08:00
renovate[bot]
7145096729 chore(deps): update npm dependencies (#5311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-05 12:13:07 +08:00
Tunglies
3e2f605e77 fix: improve error handling and logging in various modules 2025-11-05 02:11:43 +08:00
Tunglies
28483ff9db fix: simplify error handling in toggle_proxy_profile by logging errors directly 2025-11-04 23:05:03 +08:00
renovate[bot]
5c207a8a7d chore(deps): update npm dependencies to ^7.3.5 (#5310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 23:05:03 +08:00
Tunglies
ab136e463f fix: change error handling in patch_profiles_config to return false when a switch is in progress
fix: improve error handling in patch_profiles_config to prevent requests during profile switching

fix: change error handling in patch_profiles_config to return false when a switch is in progress

fix: ensure CURRENT_SWITCHING_PROFILE is reset after config updates in perform_config_update and patch_profiles_config
2025-11-04 23:05:01 +08:00
Tunglies
97769cf93a feat: add methods to retrieve current subscription details in PrfItem and refactor profile handling in IProfiles 2025-11-04 12:03:03 +08:00
Tunglies
0306f73841 fix: replace update_tray_display with update_menu for consistency across tray updates 2025-11-04 12:03:03 +08:00
Tunglies
0a03867352 fix: optimize ownership handling in patch macro for better performance 2025-11-04 12:03:03 +08:00
renovate[bot]
28a78464e1 chore(deps): update npm dependencies (#5303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 12:00:47 +08:00
Tunglies
bae584b1ab perf: optimize profile handle memory usage 2025-11-04 10:05:17 +08:00
Tunglies
a5e6a35dea fix: update IVerge struct to skip serializing optional fields and adjust types for latency timeout and proxy layout column 2025-11-04 08:16:02 +08:00
Tunglies
b86ceb26f6 fix: streamline verge configuration fetching and patching functions 2025-11-04 08:01:33 +08:00
Tunglies
b70d45b66a fix: update profile handling to apply and discard changes correctly 2025-11-04 07:58:14 +08:00
Tunglies
ebd7f457d2 fix: improve error handling in port settings save function #4707 2025-11-04 07:17:14 +08:00
Tunglies
72d94c62f4 Revert "modify the port detection range to prevent the use of system ports (#3587)"
This reverts commit d3dbc11b1b.
2025-11-04 07:11:44 +08:00
Tunglies
fe757ed984 docs(autobuild): Assets URL correction for rpm package 2025-11-04 06:23:53 +08:00
Tunglies
2287ea5f0b Refactor configuration access to use latest_arc() instead of latest_ref()
- Updated multiple instances in the codebase to replace calls to latest_ref() with latest_arc() for improved performance and memory management.
- This change affects various modules including validate, enhance, feat (backup, clash, config, profile, proxy, window), utils (draft, i18n, init, network, resolve, server).
- Ensured that all references to configuration data are now using the new arc-based approach to enhance concurrency and reduce cloning overhead.

refactor: update imports to explicitly include ClashInfo and Config in command files
2025-11-04 06:06:20 +08:00
Slinetrac
48a19f99e2 docs: UPDATELOG.md 2025-11-03 20:54:46 +08:00
❤是纱雾酱哟~
1003118468 docs(release): Assets URL correction (#5294)
- Fix mis-spelling of assets URL to Linux RPM package
2025-11-03 20:45:06 +08:00
renovate[bot]
940717712a chore(deps): update dependency @types/node to ^24.10.0 (#5292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 20:44:58 +08:00
Tunglies
4babc72754 feat: integrate arc-swap for improved concurrency in CoreManager and Hotkey(onMac) management 2025-11-03 12:32:36 +08:00
Tunglies
54039c2448 fix: correct download URL for ARM64 Windows setup in autobuild.yml 2025-11-03 09:24:27 +08:00
Tunglies
5d0b18eecd docs: update contributor acknowledgment in UPDATELOG.md 2025-11-03 09:20:52 +08:00
Tunglies
8f4c0e823b refactor: remove update semaphore from CoreManager and related config update logic 2025-11-03 08:53:55 +08:00
Tunglies
501def6695 refactor: update patch_config method to accept a reference to IProfiles 2025-11-03 08:46:37 +08:00
Tunglies
dce349586c refactor: simplify profile retrieval and remove unused template method 2025-11-03 03:17:33 +08:00
Slinetrac
ed08fadb5a fix: refresh_lightweight_tray_state #5285 2025-11-02 23:42:26 +08:00
Tunglies
34cac0fa3a feat: improve subscription update method and enhance error handling for profile updates 2025-11-02 22:41:51 +08:00
oomeow
d4cb16f4ff perf: select proxy (#5284)
* perf: improve select proxy for group

* chore: update
2025-11-02 22:33:50 +08:00
Tunglies
36d1a3878f refactor: remove retry notice for Clash proxy updates from notification handlers and localization files 2025-11-02 20:13:09 +08:00
Tunglies
fb5bf72fb9 feat: add function to retrieve profile name by UID and improve error logging for profile updates 2025-11-02 20:07:47 +08:00
renovate[bot]
85244a8f86 chore(deps): update dependency @eslint-react/eslint-plugin to ^2.3.1 (#5281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-02 18:27:58 +08:00
Tunglies
4a7859bdae refactor: replace hardcoded DNS config filename with constant reference (#5280)
* refactor: replace hardcoded DNS config filename with constant reference

* refactor: remove redundant import of constants in IClashTemp template method

* refactor: add conditional compilation for DEFAULT_REDIR based on OS

* refactor: simplify default TPROXY port handling and remove unused trace_err macro

* refactor: simplify default TPROXY port fallback logic
2025-11-01 22:50:19 +08:00
Tunglies
c0f9920531 refactor: remove orphaned process cleanup functionality
It might breaks mihomo starting.

Due to potentiall process name processing, permissions verifing, permissions and safty FORCE KILL, find process faillure.
2025-11-01 22:11:16 +08:00
Tunglies
d3d32006c3 feat: add logging check to pre-commit and CI workflow 2025-11-01 21:22:41 +08:00
Tunglies
fb260fb33d Refactor logging to use a centralized logging utility across the application (#5277)
- Replaced direct log calls with a new logging macro that includes a logging type for better categorization.
- Updated logging in various modules including `merge.rs`, `mod.rs`, `tun.rs`, `clash.rs`, `profile.rs`, `proxy.rs`, `window.rs`, `lightweight.rs`, `guard.rs`, `autostart.rs`, `dirs.rs`, `dns.rs`, `scheme.rs`, `server.rs`, and `window_manager.rs`.
- Introduced logging types such as `Core`, `Network`, `ProxyMode`, `Window`, `Lightweight`, `Service`, and `File` to enhance log clarity and filtering.
2025-11-01 20:47:01 +08:00
Slinetrac
50567d9b97 refactor(profiles): remove import verification and simplify post-import refresh 2025-11-01 20:09:00 +08:00
Tunglies
9370a56337 refactor: reduce clone operation (#5268)
* refactor: optimize item handling and improve profile management

* refactor: update IVerge references to use references instead of owned values

* refactor: update patch_verge to use data_ref for improved data handling

* refactor: move handle_copy function to improve resource initialization logic

* refactor: update profile handling to use references for improved memory efficiency

* refactor: simplify get_item method and update profile item retrieval to use string slices

* refactor: update profile validation and patching to use references for improved performance

* refactor: update profile functions to use references for improved performance and memory efficiency

* refactor: update profile patching functions to use references for improved memory efficiency

* refactor: simplify merge function in PrfOption to enhance readability

* refactor: update change_core function to accept a reference for improved memory efficiency

* refactor: update PrfItem and profile functions to use references for improved memory efficiency

* refactor: update resolve_scheme function to accept a reference for improved memory efficiency

* refactor: update resolve_scheme function to accept a string slice for improved flexibility

* refactor: simplify update_profile parameters and logic
2025-11-01 20:03:56 +08:00
renovate[bot]
73e53eb33f chore(deps): update npm dependencies (#5278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-01 19:42:34 +08:00
Slinetrac
30d1655e07 docs: UPDATELOG.md 2025-11-01 19:25:04 +08:00
Slinetrac
9dc50da167 fix: profile auto refresh #5274 2025-11-01 19:24:54 +08:00
Tunglies
b3b8eeb577 refactor: convert file operations to async using tokio fs (#5267)
* refactor: convert file operations to async using tokio fs

* refactor: integrate AsyncHandler for file operations in backup processes
2025-11-01 19:24:52 +08:00
Sline
413f29e22a fix: linux theme sync (#5273) 2025-11-01 19:24:47 +08:00
Tunglies
ae319279ae chore(deps): update cc, clash_verge_logger, and version-compare to latest versions 2025-11-01 10:15:12 +08:00
Tunglies
c0e111e756 fix: resolve macOS lightweight mode exit synchronization issues and improve logging levels #5241 2025-11-01 10:09:51 +08:00
Slinetrac
52545a626c chore(lint): enforce no warnings in pre hooks 2025-11-01 09:49:52 +08:00
Tunglies
518875acde refactor: update draft handling and improve benchmark structure 2025-10-31 23:31:04 +08:00
renovate[bot]
b672dd7055 chore(deps): update dependency sass to ^1.93.3 (#5265)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 22:54:52 +08:00
renovate[bot]
804641425b chore(deps): update dependency vitest to ^4.0.6 (#5264)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 22:51:12 +08:00
Tunglies
d3386908ff fix: improve caching strategy for autobuild jobs 2025-10-31 19:48:36 +08:00
Slinetrac
59e7095b0f chore: up sysproxy git hash 2025-10-31 19:20:07 +08:00
Tunglies
8fc8eb1789 chore: add acknowledgments for contributors in update log 2025-10-31 18:15:46 +08:00
Slinetrac
0f1537ef48 chore: up Cargo.lock 2025-10-31 17:36:33 +08:00
oomeow
8c734a5a35 fix: disable tun mode menu on tray when tun mode is unavailable (#4975)
* fix: check if service installed when toggle tun mode on tray

* chore: cargo fmt

* fix: auto disable tun mode

* docs: update UPDATELOG.md

* fix: init Tun mode status

* chore: update

* feat: disable tun mode tray menu when tun mode is unavailable

* fix: restart core when uninstall service is canceled

* chore: remove check notification when toggle tun mode

* chore: fix updatelog

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-10-31 17:31:40 +08:00
Tunglies
5187712a71 chore(deps): remove zustand and update vite-plugin-monaco-editor to esm version 2025-10-31 16:55:52 +08:00
renovate[bot]
7b7fa2239b chore(deps): update dependency dayjs to v1.11.19 (#5261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 13:36:35 +08:00
Slinetrac
85ff296912 chore(deps): update deps 2025-10-31 11:28:14 +08:00
renovate[bot]
5e7adf76ca chore(deps): update npm dependencies (#5258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 10:46:42 +08:00
Slinetrac
d094d3885c chore: move CONTRIBUTING_i18n.md to /docs 2025-10-31 10:41:48 +08:00
Tunglies
648c93c066 chore(i18n): update localization files sorting and add i18n contribution guidline
- Add i18n contribution guidline
- Chinese (zh.json): fix TPROXY port missing translation
2025-10-31 05:15:47 +08:00
Tunglies
1e9df69ffc fix: remove unused dependencies from Cargo.toml and Cargo.lock 2025-10-31 00:55:50 +08:00
Tunglies
ef35752d84 fix: specify version for sysproxy dependency in Cargo.toml 2025-10-31 00:33:11 +08:00
Tunglies
ffb7400a22 fix: add updateCargoLock to postUpdateOptions in renovate.json 2025-10-31 00:11:55 +08:00
oomeow
4d5f1f4327 fix: incorrect proxies route 2025-10-30 20:28:56 +08:00
Tunglies
999830aaf5 fix: correct download link for ARM64 Windows setup in autobuild workflow 2025-10-30 20:18:23 +08:00
Tunglies
6d7efbbf28 fix: reorder import statements and enhance normalizeDetailsTags function 2025-10-30 20:08:57 +08:00
Tunglies
a869dbb441 Revert "refactor: profile switch (#5197)"
This reverts commit c2dcd86722.
2025-10-30 18:11:04 +08:00
Tunglies
928f226d10 fix: update clash_verge_service_ipc version to 2.0.21 2025-10-30 18:02:24 +08:00
Tunglies
c27ad3fdcb feat: add log opening functionality in tray menu and update localization 2025-10-30 17:34:41 +08:00
Sline
c2dcd86722 refactor: profile switch (#5197)
* refactor: proxy refresh

* fix(proxy-store): properly hydrate and filter backend provider snapshots

* fix(proxy-store): add monotonic fetch guard and event bridge cleanup

* fix(proxy-store): tweak fetch sequencing guard to prevent snapshot invalidation from wiping fast responses

* docs: UPDATELOG.md

* fix(proxy-snapshot, proxy-groups): restore last-selected proxy and group info

* fix(proxy): merge static and provider entries in snapshot; fix Virtuoso viewport height

* fix(proxy-groups): restrict reduced-height viewport to chain-mode column

* refactor(profiles): introduce a state machine

* refactor:replace state machine with reducer

* refactor:introduce a profile switch worker

* refactor: hooked up a backend-driven profile switch flow

* refactor(profile-switch): serialize switches with async queue and enrich frontend events

* feat(profiles): centralize profile switching with reducer/driver queue to fix stuck UI on rapid toggles

* chore: translate comments and log messages to English to avoid encoding issues

* refactor: migrate backend queue to SwitchDriver actor

* fix(profile): unify error string types in validation helper

* refactor(profile): make switch driver fully async and handle panics safely

* refactor(cmd): move switch-validation helper into new profile_switch module

* refactor(profile): modularize switch logic into profile_switch.rs

* refactor(profile_switch): modularize switch handler

- Break monolithic switch handler into proper module hierarchy
- Move shared globals, constants, and SwitchScope guard to state.rs
- Isolate queue orchestration and async task spawning in driver.rs
- Consolidate switch pipeline and config patching in workflow.rs
- Extract request pre-checks/YAML validation into validation.rs

* refactor(profile_switch): centralize state management and add cancellation flow

- Introduced SwitchManager in state.rs to unify mutex, sequencing, and SwitchScope handling.
- Added SwitchCancellation and SwitchRequest wrappers to encapsulate cancel tokens and notifications.
- Updated driver to allocate task IDs via SwitchManager, cancel old tokens, and queue next jobs in order.
- Updated workflow to check cancellation and sequence at each phase, replacing global flags with manager APIs.

* feat(profile_switch): integrate explicit state machine for profile switching

- workflow.rs:24 now delegates each switch to SwitchStateMachine, passing an owned SwitchRequest.
  Queue cancellation and state-sequence checks are centralized inside the machine instead of scattered guards.
- workflow.rs:176 replaces the old helper with `SwitchStateMachine::new(manager(), None, profiles).run().await`,
  ensuring manual profile patches follow the same workflow (locking, validation, rollback) as queued switches.
- workflow.rs:180 & 275 expose `validate_profile_yaml` and `restore_previous_profile` for reuse inside the state machine.

- workflow/state_machine.rs:1 introduces a dedicated state machine module.
  It manages global mutex acquisition, request/cancellation state, YAML validation, draft patching,
  `CoreManager::update_config`, failure rollback, and tray/notification side-effects.
  Transitions check for cancellations and stale sequences; completions release guards via `SwitchScope` drop.

* refactor(profile-switch): integrate stage-aware panic handling

- src-tauri/src/cmd/profile_switch/workflow/state_machine.rs:1
  Defines SwitchStage and SwitchPanicInfo as crate-visible, wraps each transition in with_stage(...) with catch_unwind, and propagates CmdResult<bool> to distinguish validation failures from panics while keeping cancellation semantics.

- src-tauri/src/cmd/profile_switch/workflow.rs:25
  Updates run_switch_job to return Result<bool, SwitchPanicInfo>, routing timeout, validation, config, and stage panic cases separately. Reuses SwitchPanicInfo for logging/UI notifications; patch_profiles_config maps state-machine panics into user-facing error strings.

- src-tauri/src/cmd/profile_switch/driver.rs:1
  Adds SwitchJobOutcome to unify workflow results: normal completions carry bool, and panics propagate SwitchPanicInfo. The driver loop now logs panics explicitly and uses AssertUnwindSafe(...).catch_unwind() to guard setup-phase panics.

* refactor(profile-switch): add watchdog, heartbeat, and async timeout guards

- Introduce SwitchHeartbeat for stage tracking and timing; log stage transitions with elapsed durations.
- Add watchdog in driver to cancel stalled switches (5s heartbeat timeout).
- Wrap blocking ops (Config::apply, tray updates, profiles_save_file_safe, etc.) with time::timeout to prevent async stalls.
- Improve logs for stage transitions and watchdog timeouts to clarify cancellation points.

* refactor(profile-switch): async post-switch tasks, early lock release, and spawn_blocking for IO

* feat(profile-switch): track cleanup and coordinate pipeline

- Add explicit cleanup tracking in the driver (`cleanup_profiles` map + `CleanupDone` messages) to know when background post-switch work is still running before starting a new workflow. (driver.rs:29-50)
- Update `handle_enqueue` to detect “cleanup in progress”: same-profile retries are short-circuited; other requests collapse the pending queue, cancelling old tokens so only the latest intent survives. (driver.rs:176-247)
- Rework scheduling helpers: `start_next_job` refuses to start while cleanup is outstanding; discarded requests release cancellation tokens; cleanup completion explicitly restarts the pipeline. (driver.rs:258-442)

* feat(profile-switch): unify post-switch cleanup handling

- workflow.rs (25-427) returns `SwitchWorkflowResult` (success + CleanupHandle) or `SwitchWorkflowError`.
  All failure/timeout paths stash post-switch work into a single CleanupHandle.
  Cleanup helpers (`notify_profile_switch_finished` and `close_connections_after_switch`) run inside that task for proper lifetime handling.

- driver.rs (29-439) propagates CleanupHandle through `SwitchJobOutcome`, spawns a bridge to wait for completion, and blocks `start_next_job` until done.
  Direct driver-side panics now schedule failure cleanup via the shared helper.

* tmp

* Revert "tmp"

This reverts commit e582cf4a65.

* refactor: queue frontend events through async dispatcher

* refactor: queue frontend switch/proxy events and throttle notices

* chore: frontend debug log

* fix: re-enable only ProfileSwitchFinished events - keep others suppressed for crash isolation

- Re-enabled only ProfileSwitchFinished events; RefreshClash, RefreshProxy, and ProfileChanged remain suppressed (they log suppression messages)
- Allows frontend to receive task completion notifications for UI feedback while crash isolation continues
- src-tauri/src/core/handle.rs now only suppresses notify_profile_changed
- Serialized emitter, frontend logging bridge, and other diagnostics unchanged

* refactor: refreshClashData

* refactor(proxy): stabilize proxy switch pipeline and rendering

- Add coalescing buffer in notification.rs to emit only the latest proxies-updated snapshot
- Replace nextTick with queueMicrotask in asyncQueue.ts for same-frame hydration
- Hide auto-generated GLOBAL snapshot and preserve optional metadata in proxy-snapshot.ts
- Introduce stable proxy rendering state in AppDataProvider (proxyTargetProfileId, proxyDisplayProfileId, isProxyRefreshPending)
- Update proxy page to fade content during refresh and overlay status banner instead of showing incomplete snapshot

* refactor(profiles): move manual activating logic to reducer for deterministic queue tracking

* refactor: replace proxy-data event bridge with pure polling and simplify proxy store

- Replaced the proxy-data event bridge with pure polling: AppDataProvider now fetches the initial snapshot and drives refreshes from the polled switchStatus, removing verge://refresh-* listeners (src/providers/app-data-provider.tsx).
- Simplified proxy-store by dropping the proxies-updated listener queue and unused payload/normalizer helpers; relies on SWR/provider fetch path + calcuProxies for live updates (src/stores/proxy-store.ts).
- Trimmed layout-level event wiring to keep only notice/show/hide subscriptions, removing obsolete refresh listeners (src/pages/_layout/useLayoutEvents.ts).

* refactor(proxy): streamline proxies-updated handling and store event flow

- AppDataProvider now treats `proxies-updated` as the fast path: the listener
  calls `applyLiveProxyPayload` immediately and schedules only a single fallback
  `fetchLiveProxies` ~600 ms later (replacing the old 0/250/1000/2000 cascade).
  Expensive provider/rule refreshes run in parallel via `Promise.allSettled`, and
  the multi-stage queue on profile updates completion was removed
  (src/providers/app-data-provider.tsx).

- Rebuilt proxy-store to support the event flow: restored `setLive`, provider
  normalization, and an animation-frame + async queue that applies payloads without
  blocking. Exposed `applyLiveProxyPayload` so providers can push events directly
  into the store (src/stores/proxy-store.ts).

* refactor: switch delay

* refactor(app-data-provider): trigger getProfileSwitchStatus revalidation on profile-switch-finished

- AppDataProvider now listens to `profile-switch-finished` and calls `mutate("getProfileSwitchStatus")` to immediately update state and unlock buttons (src/providers/app-data-provider.tsx).
- Retain existing detailed timing logs for monitoring other stages.
- Frontend success notifications remain instant; background refreshes continue asynchronously.

* fix(profiles): prevent duplicate toast on page remount

* refactor(profile-switch): make active switches preemptible and prevent queue piling

- Add notify mechanism to SwitchCancellation to await cancellation without busy-waiting (state.rs:82)
- Collapse pending queue to a single entry in the driver; cancel in-flight task on newer request (driver.rs:232)
- Update handle_update_core to watch cancel token and 30s timeout; release locks, discard draft, and exit early if canceled (state_machine.rs:301)
- Providers revalidate status immediately on profile-switch-finished events (app-data-provider.tsx:208)

* refactor(core): make core reload phase controllable, reduce 0xcfffffff risk

- CoreManager::apply_config now calls `reload_config_with_retry`, each attempt waits up to 5s, retries 3 times; on failure, returns error with duration logged and triggers core restart if needed (src-tauri/src/core/manager/config.rs:175, 205)
- `reload_config_with_retry` logs attempt info on timeout or error; if error is a Mihomo connection issue, fallback to original restart logic (src-tauri/src/core/manager/config.rs:211)
- `reload_config_once` retains original Mihomo call for retry wrapper usage (src-tauri/src/core/manager/config.rs:247)

* chore(frontend-logs): downgrade routine event logs from info to debug

- Logs like `emit_via_app entering spawn_blocking`, `Async emit…`, `Buffered proxies…` are now debug-level (src-tauri/src/core/notification.rs:155, :265, :309…)
- Genuine warnings/errors (failures/timeouts) remain at warn/error
- Core stage logs remain info to keep backend tracking visible

* refactor(frontend-emit): make emit_via_app fire-and-forget async

- `emit_via_app` now a regular function; spawns with `tokio::spawn` and logs a warn if `emit_to` fails, caller returns immediately (src-tauri/src/core/notification.rs:269)
- Removed `.await` at Async emit and flush_proxies calls; only record dispatch duration and warn on failure (src-tauri/src/core/notification.rs:211, :329)

* refactor(ui): restructure profile switch for event-driven speed + polling stability

- Backend
  - SwitchManager maintains a lightweight event queue: added `event_sequence`, `recent_events`, and `SwitchResultEvent`; provides `push_event` / `events_after` (state.rs)
  - `handle_completion` pushes events on success/failure and keeps `last_result` (driver.rs) for frontend incremental fetch
  - New Tauri command `get_profile_switch_events(after_sequence)` exposes `events_after` (profile_switch/mod.rs → profile.rs → lib.rs)
- Notification system
  - `NotificationSystem::process_event` only logs debug, disables WebView `emit_to`, fixes 0xcfffffff
  - Related emit/buffer functions now safe no-op, removed unused structures and warnings (notification.rs)
- Frontend
  - services/cmds.ts defines `SwitchResultEvent` and `getProfileSwitchEvents`
  - `AppDataProvider` holds `switchEventSeqRef`, polls incremental events every 0.25s (busy) / 1s (idle); each event triggers:
      - immediate `globalMutate("getProfiles")` to refresh current profile
      - background refresh of proxies/providers/rules via `Promise.allSettled` (failures logged, non-blocking)
      - forced `mutateSwitchStatus` to correct state
  - original switchStatus effect calls `handleSwitchResult` as fallback; other toast/activation logic handled in profiles.tsx
- Commands / API cleanup
  - removed `pub use profile_switch::*;` in cmd::mod.rs to avoid conflicts; frontend uses new command polling

* refactor(frontend): optimize profile switch with optimistic updates

* refactor(profile-switch): switch to event-driven flow with Profile Store

- SwitchManager pushes events; frontend polls get_profile_switch_events
- Zustand store handles optimistic profiles; AppDataProvider applies updates and background-fetches
- UI flicker removed

* fix(app-data): re-hook profile store updates during switch hydration

* fix(notification): restore frontend event dispatch and non-blocking emits

* fix(app-data-provider): restore proxy refresh and seed snapshot after refactor

* fix: ensure switch completion events are received and handle proxies-updated

* fix(app-data-provider): dedupe switch results by taskId and fix stale profile state

* fix(profile-switch): ensure patch_profiles_config_by_profile_index waits for real completion and handle join failures in apply_config_with_timeout

* docs: UPDATELOG.md

* chore: add necessary comments

* fix(core): always dispatch async proxy snapshot after RefreshClash event

* fix(proxy-store, provider): handle pending snapshots and proxy profiles

- Added pending snapshot tracking in proxy-store so `lastAppliedFetchId` no longer jumps on seed. Profile adoption is deferred until a qualifying fetch completes. Exposed `clearPendingProfile` for rollback support.
- Cleared pending snapshot state whenever live payloads apply or the store resets, preventing stale optimistic profile IDs after failures.
- In provider integration, subscribed to the pending proxy profile and fed it into target-profile derivation. Cleared it on failed switch results so hydration can advance and UI status remains accurate.

* fix(proxy): re-hook tray refresh events into proxy refresh queue

- Reattached listen("verge://refresh-proxy-config", …) at src/providers/app-data-provider.tsx:402 and registered it for cleanup.
- Added matching window fallback handler at src/providers/app-data-provider.tsx:430 so in-app dispatches share the same refresh path.

* fix(proxy-snapshot/proxy-groups): address review findings on snapshot placeholders

- src/utils/proxy-snapshot.ts:72-95 now derives snapshot group members solely from proxy-groups.proxies, so provider ids under `use` no longer generate placeholder proxy items.
- src/components/proxy/proxy-groups.tsx:665-677 lets the hydration overlay capture pointer events (and shows a wait cursor) so users can’t interact with snapshot-only placeholders before live data is ready.

* fix(profile-switch): preserve queued requests and avoid stale connection teardown

- Keep earlier queued switches intact by dropping the blanket “collapse” call: after removing duplicates for the same profile, new requests are simply appended, leaving other profiles pending (driver.rs:376). Resolves queue-loss scenario.
- Gate connection cleanup on real successes so cancelled/stale runs no longer tear down Mihomo connections; success handler now skips close_connections_after_switch when success == false (workflow.rs:419).

* fix(profile-switch, layout): improve profile validation and restore backend refresh

- Hardened profile validation using `tokio::fs` with a 5s timeout and offloading YAML parsing to `AsyncHandler::spawn_blocking`, preventing slow disks or malformed files from freezing the runtime (src-tauri/src/cmd/profile_switch/validation.rs:9, 71).
- Restored backend-triggered refresh handling by listening for `verge://refresh-clash-config` / `verge://refresh-verge-config` and invoking shared refresh services so SWR caches stay in sync with core events (src/pages/_layout/useLayoutEvents.ts:6, 45, 55).

* feat(profile-switch): handle cancellations for superseded requests

- Added a `cancelled` flag and constructor so superseded requests publish an explicit cancellation instead of a failure (src-tauri/src/cmd/profile_switch/state.rs:249, src-tauri/src/cmd/profile_switch/driver.rs:482)
- Updated the profile switch effect to log cancellations as info, retain the shared `mutate` call, and skip emitting error toasts while still refreshing follow-up work (src/pages/profiles.tsx:554, src/pages/profiles.tsx:581)
- Exposed the new flag on the TypeScript contract to keep downstream consumers type-safe (src/services/cmds.ts:20)

* fix(profiles): wrap logging payload for Tauri frontend_log

* fix(profile-switch): add rollback and error propagation for failed persistence

- Added rollback on apply failure so Mihomo restores to the previous profile
  before exiting the success path early (state_machine.rs:474).
- Reworked persist_profiles_with_timeout to surface timeout/join/save errors,
  convert them into CmdResult failures, and trigger rollback + error propagation
  when persistence fails (state_machine.rs:703).

* fix(profile-switch): prevent mid-finalize reentrancy and lingering tasks

* fix(profile-switch): preserve pending queue and surface discarded switches

* fix(profile-switch): avoid draining Mihomo sockets on failed/cancelled switches

* fix(app-data-provider): restore backend-driven refresh and reattach fallbacks

* fix(profile-switch): queue concurrent updates and add bounded wait/backoff

* fix(proxy): trigger live refresh on app start for proxy snapshot

* refactor(profile-switch): split flow into layers and centralize async cleanup

- Introduced `SwitchDriver` to encapsulate queue and driver logic while keeping the public Tauri command API.
- Added workflow/cleanup helpers for notification dispatch and Mihomo connection draining, re-exported for API consistency.
- Replaced monolithic state machine with `core.rs`, `context.rs`, and `stages.rs`, plus a thin `mod.rs` re-export layer; stage methods are now individually testable.
- Removed legacy `workflow/state_machine.rs` and adjusted visibility on re-exported types/constants to ensure compilation.
2025-10-30 17:29:15 +08:00
renovate[bot]
af79bcd1cf chore(deps): update dependency react-i18next to v16.2.2 (#5251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-30 17:12:20 +08:00
Tunglies
2d73afdff2 style: update UPDATELOG.md using details and summary 2025-10-30 17:00:00 +08:00
miewx
e7a9f8f755 add support x-oss-meta-subscription-userinfo (#5234)
* add support x-oss-meta-subscription-userinfo

* Update prfitem.rs

match any subscription-userinfo

* Update prfitem.rs

改为 ends_with 更好

* feat(config): enforce stricter header match for subscription usage

---------

Co-authored-by: i18n <i18n.site@gmail.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-30 11:24:40 +08:00
renovate[bot]
d209238009 chore(deps): update npm dependencies (#5245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-30 10:24:35 +08:00
Sukka
dfcdb33e58 chore: use vite-swc-react (#5246) 2025-10-30 10:19:29 +08:00
Tunglies
37359ffc27 fix: add check for allow_auto_update in timer task filtering 2025-10-30 01:40:43 +08:00
oomeow
fb09e6c85d fix: notification can not notify frontend (#5243) 2025-10-30 00:34:45 +08:00
oomeow
d10665091b chore: update eslint ignorePattern 2025-10-29 21:16:18 +08:00
Tunglies
d8b0e9929c fix: include Mihomo-go122 by default for macOS 10.15+ to resolve Intel architecture compatibility issues 2025-10-29 21:14:02 +08:00
Tunglies
73323edf06 chore(deps): update clash_verge_service_ipc to version 2.0.20
Reduce memory usage, avoid duplicated clients
2025-10-29 20:35:45 +08:00
Tunglies
f4de4738f1 refactor(logger): replace ClashLogger with CLASH_LOGGER and update log handling; improve log retrieval and management 2025-10-29 17:58:02 +08:00
Tunglies
2e9f6dd174 fix: prevent service duplicate start_core and early-return after stop_core; fix start failures
Update clash_verge_service_ipc version to 2.0.18
2025-10-29 16:09:19 +08:00
renovate[bot]
e928089a77 chore(deps): update npm dependencies (#5231)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 08:29:47 +08:00
Tunglies
f41998284a fix(verge_patch): add tray_inline_proxy_groups handling to update flags and refresh tray 2025-10-29 02:41:07 +08:00
Tunglies
9375674c91 refactor(validate): simplify validation process management and remove unused code 2025-10-28 19:36:17 +08:00
Tunglies
2a7ccb5bde refactor(core): optimize RunningMode handling and improve state management 2025-10-28 19:16:42 +08:00
Tunglies
2af0af0837 refactor(tray): comment out enable_tray_icon references for future removal #5161
Since network speed display in Tray on menu has been removed
2025-10-28 14:37:57 +08:00
renovate[bot]
0fcf168b08 chore(deps): update dependency axios to ^1.13.0 (#5225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-28 10:47:36 +08:00
Tunglies
f39436f1d0 refactor(i18n): optimize translation handling with Arc<str> for better memory efficiency
refactor(tray): change menu text storage to use Arc<str> for improved performance
refactor(service): utilize SmartString for error messages to enhance memory management
2025-10-28 00:26:20 +08:00
❤是纱雾酱哟~
a9eb512f20 docs(autobuild): update download links for release assets (#5224)
- To match those in actual "Assets" section

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-10-28 00:00:01 +08:00
Tunglies
713162ca37 perf(i18n): change TRANSLATIONS type to use Box<Value> for better memory management
This reduce memory usage from 72 to 48
2025-10-27 23:17:40 +08:00
Tunglies
87168b6ce0 perf(tray): improve menu handling localization support
refactor(tray): replace string literals with MenuIds for menu event handling
2025-10-27 23:08:05 +08:00
Slinetrac
2ee8d164fd chore(i18n): upload zhtw.json
Co-authored-by: LiMoon <azhe9335@gmail.com>
2025-10-27 21:39:45 +08:00
Tunglies
c736796380 feat(clippy): cognitive-complexity rule (#5215)
* feat(config): enhance configuration initialization and validation process

* refactor(profile): streamline profile update logic and enhance error handling

* refactor(config): simplify profile item checks and streamline update flag processing

* refactor(disney_plus): add cognitive complexity allowance for check_disney_plus function

* refactor(enhance): restructure configuration and profile item handling for improved clarity and maintainability

* refactor(tray): add cognitive complexity allowance for create_tray_menu function

* refactor(config): add cognitive complexity allowance for patch_config function

* refactor(profiles): simplify item removal logic by introducing take_item_file_by_uid helper function

* refactor(profile): add new validation logic for profile configuration syntax

* refactor(profiles): improve formatting and readability of take_item_file_by_uid function

* refactor(cargo): change cognitive complexity level from warn to deny

* refactor(cargo): ensure cognitive complexity is denied in Cargo.toml

* refactor(i18n): clean up imports and improve code readability
refactor(proxy): simplify system proxy toggle logic
refactor(service): remove unnecessary `as_str()` conversion in error handling
refactor(tray): modularize tray menu creation for better maintainability

* refactor(tray): update menu item text handling to use references for improved performance
2025-10-27 20:55:51 +08:00
renovate[bot]
6df1e137f3 chore(deps): update dependency vitest to ^4.0.4 (#5221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 20:40:13 +08:00
renovate[bot]
5a29508407 chore(deps): update cargo dependencies (#5217)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 20:39:00 +08:00
renovate[bot]
45c68424f0 chore(deps): update npm dependencies (#5218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 20:38:17 +08:00
renovate[bot]
9426fc1b1c chore(deps): update dependency react-i18next to v16.2.1 (#5216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 18:34:00 +08:00
Slinetrac
c234d1dc16 fix(groups-editor): persist deletions/restorations and normalize YAML
Prevent state resets while editing groups so deletions/restorations persist instead of being overwritten.
Ensure YAML is normalized and the latest visual state is saved.

- Add `normalizeDeleteSeq` to handle legacy `{name: ...}` entries and `buildGroupsYaml` for consistent serialization.
- Guard reassigning `deleteSeq` unless normalized value changes to avoid effect loops.
- Normalize proxy deletions and deduplicate policy names without extra backend writes.
- Split “on open” effect from proxy-policy refresh; toggling delete no longer triggers `fetchContent()`.
- Write composed YAML in `handleSave`, keep `currData`/`prevData` aligned, and provide accurate payloads to `onSave`.
2025-10-27 16:20:47 +08:00
Tunglies
11035db307 feat: add signal handling for graceful shutdown on Windows and Unix (#5023)
* feat: add signal handling for graceful shutdown on Windows and Unix

Co-authored-by: oomeow <oomeow@outlook.com>

* chore: update Cargo.lock

* fix(windows): restore shutdown hook build by enabling missing Win32 APIs and removing stray tracing call

Includes the required windows-sys feature expansions and replaces a leftover tracing reference so the Windows shutdown hook builds successfully.

* fix: add deprecation warnings for encrypt_data and decrypt_data functions

---------

Co-authored-by: oomeow <oomeow@outlook.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-27 14:02:27 +08:00
renovate[bot]
d2614396da chore(deps): update npm dependencies (#5212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 13:06:15 +08:00
renovate[bot]
a2bbb69b73 chore(deps): update cargo dependencies (#5210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 08:30:10 +08:00
renovate[bot]
b23b2a95c5 chore(deps): update npm dependencies (#5211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 08:29:39 +08:00
❤是纱雾酱哟~
8fa9bcc650 Refactor(zhtw): Refines terminology for consistency (#5189)
* Refactor(zhtw): Refines terminology for consistency

- Updates: "連接" -> "連線"
- Updates: "高級" -> "進階"
- Updates: "局域網連接" -> "區域網路連線"

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* chore(i18n): Refine Traditional Chinese translations

- Improves the quality and consistency to match Traditional Chinese localized expressions.

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* chore(i18n): Refines Traditional Chinese translations

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

---------

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-10-26 14:01:56 +08:00
renovate[bot]
e544203ca0 chore(deps): update dependency commander to ^14.0.2 (#5205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-25 21:19:05 +08:00
renovate[bot]
ed9eed226d chore(deps): update npm dependencies (#5198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-25 09:59:54 +08:00
renovate[bot]
806769b307 chore(deps): update npm dependencies (#5185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 09:55:18 +08:00
Tunglies
d291fc5c64 chore(dependencies): update clash_verge_logger source to specific commit 2025-10-24 00:08:10 +08:00
Tunglies
bf45e487f9 feat(tauri-plugin-mihomo): configure IPC pool settings with connection limits and health checks 2025-10-23 22:32:23 +08:00
Tunglies
99ef0e51fc feat(init_logger): improve log level retrieval from environment variable 2025-10-23 22:13:43 +08:00
oomeow
cc2dc66d5f chore: update tauri-plugin-mihomo dep 2025-10-23 20:45:34 +08:00
renovate[bot]
001c11913a chore(deps): update dependency vite to ^7.1.12 (#5180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-23 16:25:38 +08:00
Tunglies
f061bce2a1 refactor(window_manager): simplify window state handling and improve method organization 2025-10-23 16:21:51 +08:00
oomeow
d7859b07a6 fix: parse hotkey (#5167)
* fix: incorrectly parse hotkey

* refactor: parse hotkey

* fix: panic on linux

* chore: update

* chore: update style

* fix: register hotkey error on windows

* chore: update style

---------

Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-10-23 15:54:48 +08:00
renovate[bot]
585963e751 chore(deps): update dependency lint-staged to ^16.2.6 (#5175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-23 13:18:51 +08:00
renovate[bot]
d84b762ef3 chore(deps): update dependency vitest to v4 (#5176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-23 13:18:30 +08:00
Sline
8657cedca0 feat: add configurable hover jump navigator delay (#5178)
* fix: hover options

* feat: add configurable hover jump navigator delay

- Added `hover_jump_navigator_delay` to Verge config defaults, patch flow, and response payload for persistent app-wide settings.
- Made proxy navigator respect configurable delay via `DEFAULT_HOVER_DELAY` and new `hoverDelay` prop.
- Threaded stored delay through proxy list so hover scrolling uses Verge-configured value.
- Added "Hover Jump Navigator Delay" control in Layout settings with clamped numeric input, tooltip, and toggle-aware disabling.
- Localized new labels in English, Simplified Chinese, and Traditional Chinese.
- Extended frontend Verge config type to include delay field for type-safe access.

* docs: UPDATELOG.md
2025-10-23 13:14:01 +08:00
Tunglies
9ea9704bbf refactor(sysopt): replace Arc<TokioMutex> with AtomicBool for sysproxy state management 2025-10-23 00:53:57 +08:00
renovate[bot]
302677aed0 chore(deps): update dependency react-i18next to v16.1.5 (#5171)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 22:01:37 +08:00
renovate[bot]
1415df1d23 chore(deps): update cargo dependencies (#5169)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 21:59:53 +08:00
renovate[bot]
b7d2bc7c74 chore(deps): update dependency @tauri-apps/cli to v2.9.1 (#5170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 21:59:31 +08:00
Sline
4f7d069f19 feat(ui): add left menu lock/unlock with reorder mode and context menu (#5168)
* feat: free menu

* feat(ui): add left menu lock/unlock with reorder mode and context menu

* docs: UPDATELOG.md
2025-10-22 21:39:12 +08:00
Sline
3bedf7ec35 feat(backup): add dns_config into backup (#5166) 2025-10-22 19:52:44 +08:00
Sline
c4c37bf291 feat(tray): close all connections (#5165) 2025-10-22 19:28:00 +08:00
Tunglies
815a865265 perf(tray): ignore unnecessary tray icon events to reduce refreshes 2025-10-22 18:49:28 +08:00
Tunglies
2d2167e048 refactor: replace unwrap_or with unwrap_or_else for improved error handling (#5163)
In Rust, the `or` and `or_else` methods have distinct behavioral differences. The `or` method always eagerly evaluates its argument and executes any associated function calls. This can lead to unnecessary performance costs—especially in expensive operations like string processing or file handling—and may even trigger unintended side effects.

In contrast, `or_else` evaluates its closure lazily, only when necessary. Introducing a Clippy lint to disallow `or` sacrifices a bit of code simplicity but ensures predictable behavior and enforces lazy evaluation for better performance.
2025-10-22 17:33:55 +08:00
Tunglies
a05ea64bcd perf: utilize smartstring for string handling (#5149)
* perf: utilize smartstring for string handling

- Updated various modules to replace standard String with smartstring::alias::String for improved performance and memory efficiency.
- Adjusted string manipulations and conversions throughout the codebase to ensure compatibility with the new smartstring type.
- Enhanced readability and maintainability by using `.into()` for conversions where applicable.
- Ensured that all instances of string handling in configuration, logging, and network management leverage the benefits of smartstring.

* fix: replace wrap_err with stringify_err for better error handling in UWP tool invocation

* refactor: update import path for StringifyErr and adjust string handling in sysopt

* fix: correct import path for CmdResult in UWP module

* fix: update argument type for execute_sysproxy_command to use std::string::String

* fix: add missing CmdResult import in UWP platform module

* fix: improve string handling and error messaging across multiple files

* style: format code for improved readability and consistency across multiple files

* fix: remove unused file
2025-10-22 16:25:44 +08:00
renovate[bot]
fe96a7030a chore(deps): update rust crate boa_engine to 0.21.0 (#5159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 09:11:57 +08:00
renovate[bot]
9050e56cdb chore(deps): update npm dependencies (#5158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 09:02:32 +08:00
Tunglies
b813cbdfc8 fix: update clash_verge_service_ipc to version 2.0.17 2025-10-22 01:51:11 +08:00
Slinetrac
95aee6ec81 chore: better pre-hooks 2025-10-22 00:08:16 +08:00
Slinetrac
4d2c1b4dc2 fix: resolve clippy lint in linux utils 2025-10-21 23:20:27 +08:00
Tunglies
d9fdf261d1 fix: optimize process ID collection and remove unnecessary async handler in window destruction
fix: remove unnecessary condition check in process name matching
2025-10-21 23:14:57 +08:00
Slinetrac
a8b17926ed refactor: adjust MIME detection to merge duplicates and follow Freedesktop standard
- Honor Freedesktop precedence when locating mimeapps.list
- Replace per-scheme HashSet with index-tracking HashMap
- Merge duplicate handler entries instead of discarding them
- Ensure all schemes exist using the new tracking structure
2025-10-21 22:53:47 +08:00
Tunglies
afb049ca17 fix: simplify conditional checks and improve async handler usage across multiple files (#5156)
* fix: simplify conditional checks and improve async handler usage across multiple files

* fix: add missing AsyncHandler import in find_processes_by_name function

* fix: remove redundant AsyncHandler import in find_processes_by_name function
2025-10-21 22:39:32 +08:00
Sline
9c9aefe4cd fix: MIME config (#5154)
* fix: MIME config #2487

* fix: path

* refactor: enhance logic
2025-10-21 22:02:41 +08:00
Tunglies
e7a4415d1f ci: improve clippy lint workflow to handle manual triggers and src-tauri changes 2025-10-21 18:10:44 +08:00
xmk23333
ef3f8e1839 style: clean up whitespace and improve code formatting across multiple files 2025-10-21 17:53:02 +08:00
xmk23333
0e933597f5 refactor: streamline SWR configuration and improve error handling in AppDataProvider 2025-10-21 17:51:12 +08:00
Slinetrac
bafe2ae164 fix: home card save 2025-10-21 15:10:48 +08:00
renovate[bot]
6d93e21bc7 chore(deps): update dependency react-i18next to v16.1.3 (#5150)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 13:35:33 +08:00
renovate[bot]
91fb0d9ffa chore(deps): update npm dependencies (#5147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 13:31:52 +08:00
Tunglies
8fc72814c8 build: optimize release profile for better performance
Upstream Tauri fixed the stack overflow in the invoke handler
(https://github.com/tauri-apps/tauri/pull/14170) in v2.9.0,
so we can safely use opt-level 3 now.
2025-10-21 00:19:27 +08:00
renovate[bot]
a5d3d6fc50 chore(deps): update dependency @tauri-apps/cli to v2.9.0 (#5145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 23:57:28 +08:00
renovate[bot]
b6d51d6fe4 chore(deps): update cargo dependencies (#5141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 23:57:19 +08:00
oomeow
a5c00ecb12 fix: faile to reset sysproxy (#5139) 2025-10-20 23:09:13 +08:00
renovate[bot]
91e12798e4 chore(deps): update dependency @tauri-apps/api to v2.9.0 (#5142)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 22:19:00 +08:00
Sline
9ee4b067d0 fix(current-proxy-card): stabilize match rule lookup and dependencies (#5138)
- memoize policy name normalization and include it in hook deps
- guard MATCH rule checks against partial controller data
- register MATCH policy groups when rebuilding selector selectors
2025-10-20 17:59:21 +08:00
xmk23333
366deb2756 Merge branch 'dev' of https://github.com/clash-verge-rev/clash-verge-rev into dev 2025-10-20 16:48:41 +08:00
xmk23333
98778fe6a3 refactor: improve code formatting and enhance logging consistency across core and event handling modules 2025-10-20 16:47:26 +08:00
xmk23333
b9dd62e2e6 refactor: enhance error handling and logging in core components and server initialization 2025-10-20 16:34:38 +08:00
Tunglies
a1dcdd04a7 fix: improve TUN mode handling logic to prevent unnecessary state changes #5122 (#5124) 2025-10-20 16:09:29 +08:00
Slinetrac
8ebf915330 docs: README.md i18n 2025-10-20 15:56:38 +08:00
AltZed
5281449e26 Translate readme to russian (#5136)
* Add Russian translation README_ru.md and update README.md

* add language badges for Chinese and Russian README

* add language badges for Chinese and Russian README

* Update README.md

Co-authored-by: Sline <realakayuki@gmail.com>

* Update README_ru.md

---------

Co-authored-by: Sline <realakayuki@gmail.com>
2025-10-20 15:33:52 +08:00
renovate[bot]
b2f0bf2f69 chore(deps): update dependency vite to ^7.1.11 (#5134)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 13:44:30 +08:00
xmk23333
d6bba4f68c Merge branch 'dev' of https://github.com/clash-verge-rev/clash-verge-rev into dev 2025-10-20 13:27:57 +08:00
xmk23333
278ab30d40 refactor: improve code formatting and enhance logging in resolve_setup_async function 2025-10-20 13:27:01 +08:00
xmk23333
786c981fe0 refactor: improve error handling in AppDataProvider and enhance configuration update logic in CoreManager 2025-10-20 13:26:24 +08:00
xmk23333
b77cc012e1 refactor: streamline app initialization and enhance WebSocket cleanup logic 2025-10-20 13:15:51 +08:00
renovate[bot]
dc31ec524b chore(deps): update dependency eslint-plugin-unused-imports to ^4.3.0 (#5132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-20 12:54:57 +08:00
Slinetrac
a0ef64cda8 docs: UPDATELOG.md 2025-10-19 18:43:20 +08:00
oomeow
7be790c6fb chore: remove unused file and improve traffic monitor 2025-10-19 16:34:45 +08:00
Slinetrac
fbe6cefbdb fix: hover jump navigator 2025-10-19 16:00:45 +08:00
Tunglies
a60cab989d feat: add tracing support to logger initialization (#5120) 2025-10-18 22:57:51 +08:00
Tunglies
385ffafc67 fix: WindowProvider awful performance (#5119) 2025-10-18 22:49:55 +08:00
Tunglies
462b11d96a feat: implement caching for version and file hash to optimize prebuild process 2025-10-18 20:48:53 +08:00
oomeow
96ce529b16 refactor: react router (#5073)
* refactor: react router

* chore: update

* fix: router

* refactor: generate router children by navItems

* chore: set start page when create window

* docs: update UPDATELOG.md
2025-10-18 20:25:31 +08:00
Tunglies
8e20b1b0a0 feat: enhance profile update logic to include auto-update option handling 2025-10-18 17:40:55 +08:00
Tunglies
c2d7bf296a feat: add allow auto update option for profiles and update UI components 2025-10-18 17:04:03 +08:00
Slinetrac
98725bbecf fix: TS errors 2025-10-18 16:11:42 +08:00
Sline
c465000178 fix: update fallback (#5115)
* fix: update fallback

* test: introduce Vitest and add semver helper tests

* chore: merge vitest config into vite
2025-10-18 15:51:34 +08:00
Slinetrac
3d09cf0666 chore: remove unused imports 2025-10-18 14:51:27 +08:00
Tunglies
70770b3c13 refactor: optimize TUN mode cleanup process and improve task execution flow 2025-10-18 14:26:56 +08:00
Tunglies
0cdb9a05ce refactor: remove immediate window hide on quit for improved cleanup flow 2025-10-18 14:01:22 +08:00
Tunglies
c97c4cbd41 refactor: optimize async setup flow and add config verification 2025-10-18 14:01:21 +08:00
Sline
fecae38c63 refactor: Linux environment detection logic (#5108)
* fix: wayland framebuffer

* refactor(utils): move linux env heuristics into platform helper

* refactor(linux): let DMABUF override helper use resolved decision

* fix: clippy

* fix: clippy

* feat: NVIDIA detection

* fix: clippy
2025-10-18 12:13:00 +08:00
Tunglies
210c12a74e feat: implement CoreConfigValidator for configuration validation and enhance logging types (#5112) 2025-10-18 10:57:57 +08:00
Sline
a1c0a09423 refactor(core): elegant retry (#5113) 2025-10-18 10:12:36 +08:00
renovate[bot]
fc99f24802 chore(deps): update npm dependencies (#5111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-18 10:10:18 +08:00
Tunglies
28bcdc3706 feat: enhance ProxyControlSwitches with Tun Mode functionality and state management 2025-10-18 00:00:20 +08:00
wonfen
859d09ff8c fix: undefined is not an object on connection table 2025-10-17 21:48:58 +08:00
Sline
10f155da78 refactor: retry with backoff (#5104)
* Reapply "refactor: retry with backoff"

This reverts commit 4e31dc8728.

* fix: clippy

* fix: clippy
2025-10-17 20:43:06 +08:00
Slinetrac
4e31dc8728 Revert "refactor: retry with backoff"
This reverts commit 0b63bebb6c.
2025-10-17 20:14:15 +08:00
Tunglies
98a52c5c33 fix: remove dead code from event-driven proxy and handle modules (#5103)
* refactor: remove dead code from event-driven proxy and handle modules

* refactor: remove dead code for set_activation_policy_prohibited function
2025-10-17 20:12:03 +08:00
Slinetrac
0b63bebb6c refactor: retry with backoff 2025-10-17 19:48:50 +08:00
Tunglies
bccde5ef6d feat(locales): add "App Log Max Size" and "App Log Max Count" entries to English and Chinese localization files 2025-10-17 19:20:51 +08:00
Slinetrac
215ba4da63 perf(delay): cache latency updates and smooth proxy list refresh
- track delay as structured updates with TTL-backed cache
- batch listener notifications to avoid render storms during checks
- surface cached latency in proxy items for quicker, steadier UI feedback
2025-10-17 18:27:21 +08:00
Slinetrac
886d1a551a refactor: useLayoutEffect 2025-10-17 15:11:36 +08:00
Slinetrac
d05bcc17f7 fix: untested and testing sort 2025-10-17 15:01:38 +08:00
Slinetrac
c63584daca fix: timeout sort 2025-10-17 14:51:33 +08:00
renovate[bot]
c2f59ffc02 chore(deps): update dependency @mui/x-data-grid to ^8.14.1 (#5093)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-17 07:41:57 +08:00
oomeow
f90361f8e4 chore: temporarily allow clippy to pass 2025-10-16 20:22:46 +08:00
Slinetrac
67d254236d fix(profile): verify saved proxy exists before activation
- check selector-like groups’ all list before applying saved nodes
- warn and fall back when a stored proxy disappeared from the group
- keep existing auto-switch flow for matching nodes to avoid regressions
2025-10-16 19:29:19 +08:00
Slinetrac
fd5bddeb80 fix(backup): prevent immediate deletion before confirmation dialog 2025-10-16 16:54:25 +08:00
Slinetrac
4835d68222 docs: UPDATELOG.md 2025-10-16 16:17:13 +08:00
Slinetrac
fe78e2d5cd fix(windows): wait for service readiness before enabling TUN 2025-10-16 15:09:17 +08:00
Slinetrac
e73217ad5f fix(core): restart core when config reload fails
- add retry path that restarts Mihomo on connection-related reload errors
- guard runtime config state by discarding on repeated failures and returning rich errors
2025-10-16 14:30:57 +08:00
Slinetrac
88cde5d99d fix(proxy): place timeout nodes at the end when sorting by latency 2025-10-16 11:51:57 +08:00
Slinetrac
41bc0e62a1 fix(home): scope cached proxy selection to active profile to prevent fallback reset on profile switch
Previously, Home card used global localStorage keys for selected proxy/group
(`clash-verge-selected-proxy(-group)`), causing cached selections from other
profiles to override the current one and reset the fallback to Direct when switching.

Now the cache keys are namespaced per profile, with migration of legacy values
and unified helpers (src/components/home/current-proxy-card.tsx:110–147),
ensuring each profile restores its own proxy state independently.
2025-10-16 09:39:57 +08:00
Slinetrac
b05799cfae fix: clippy warnings 2025-10-16 09:01:16 +08:00
oomeow
592e7f846d fix: incorrect delay status 2025-10-15 23:44:38 +08:00
renovate[bot]
bcd54bf995 chore(deps): update rust crate gethostname to 1.1.0 (#5065)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 19:02:22 +08:00
Sline
0b4403b67b refactor: frontend (#5068)
* refactor: setting components

* refactor: frontend

* fix: settings router
2025-10-15 18:57:44 +08:00
renovate[bot]
a591ee1efc chore(deps): update dependency eslint-plugin-react-refresh to ^0.4.24 (#5070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 18:20:00 +08:00
Slinetrac
ef9ccafe61 refactor: proxy components 2025-10-15 09:00:03 +08:00
Tunglies
e6b7d512fb feat: implement draft management system for concurrent editing and committing of data 2025-10-15 08:32:52 +08:00
renovate[bot]
6113be3b6c chore(deps): update rust crate getrandom to 0.3.4 (#5064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 08:22:56 +08:00
Tunglies
7fab8eeaf6 feat: add "Prefer System Titlebar" localization to English and Chinese JSON files 2025-10-15 07:24:36 +08:00
renovate[bot]
15d5113729 chore(deps): update npm dependencies (#5060)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 23:52:56 +08:00
renovate[bot]
e5eaff37a4 chore(deps): update rust crate tokio to 1.48.0 (#5063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 23:50:37 +08:00
Slinetrac
4f2633a62b refactor: profile components 2025-10-14 23:45:12 +08:00
Slinetrac
5d114806f7 refactor: layout and log components 2025-10-14 22:13:14 +08:00
Slinetrac
06dc7a6ef4 refactor: home components 2025-10-14 21:57:33 +08:00
Slinetrac
8dbe3f8c48 refactor: connection components 2025-10-14 21:33:36 +08:00
Slinetrac
778d506be7 refactor: common components 2025-10-14 21:22:48 +08:00
Slinetrac
65cf6c387b refactor: base components 2025-10-14 21:13:10 +08:00
Slinetrac
2e3174baa7 feat(proxy-groups, current-proxy-card): auto-refresh delay sorting
- proxy-groups: recalculate active group head and reapply delay sort after tests so list reorders automatically when "按延迟排序" is active.
- current-proxy-card: add delaySortRefresh trigger after auto/manual latency checks to immediately refresh selector and proxy list ordering.
- current-proxy-card: listen for delaySortRefresh to keep displayed delay chips and option ordering aligned with latest measurements.
2025-10-14 20:25:52 +08:00
Tunglies
7c71d07ad2 refactor: convert synchronous file operations to asynchronous for improved performance (#5059)
* refactor: convert synchronous file operations to asynchronous for improved performance

* fix: update copy_icon_file to use asynchronous directory creation

* refactor: remove unnecessary variable assignments in shortcut management functions
2025-10-14 19:55:22 +08:00
Slinetrac
8760ed17dc feat(current-proxy-card): add toggle for automatic delay detection 2025-10-14 19:27:41 +08:00
Tunglies
02b44d83af chore: replace pre-commit hook with cargo alias 2025-10-14 18:21:25 +08:00
Tunglies
bb2059c76f fix: resolve issue with file deletion during subscription removal 2025-10-14 17:56:38 +08:00
Sline
f541464ff4 feat: tray enhance (#5058)
* feat: proxy group sorting for tray

* feat(tray): add inline proxy groups toggle
2025-10-14 17:03:37 +08:00
Slinetrac
98527d5038 feat: import profiles with enter 2025-10-14 15:54:26 +08:00
Slinetrac
2ba2f4d42c refactor: use logging 2025-10-14 15:10:06 +08:00
Sline
51b08be87e feat: local backup (#5054)
* feat: local backup

* refactor(backup): make local backup helpers synchronous and clean up redundant checks

- Converted local backup helpers to synchronous functions to remove unused async warnings and align command signatures.
- Updated list/delete/export commands to call the sync feature functions directly without awaits while preserving behavior.
- Simplified destination directory creation to always ensure parent folders exist without redundant checks, satisfying Clippy.
2025-10-14 14:52:04 +08:00
Tunglies
4dd811330b feat: add Clippy alias commands and improve build process for Clippy integration (#5055)
* feat: add Clippy alias commands and improve build process for Clippy integration

* fix(lint-clippy): update Clippy run command to use working directory for src-tauri
2025-10-14 14:43:03 +08:00
Tunglies
76ca24086b fix: specify type for mode and host variables to improve clarity and type safety (#5052)
* fix: specify type for mode and host variables to improve clarity and type safety

* fix: specify types for pac_url and host variables to enhance type safety

* fix: change type of pac_url from Url to String for consistency in handling PAC output
2025-10-14 13:16:11 +08:00
Tunglies
3d96a575c0 refactor: streamline profile import logic and enhance error handling (#5051) 2025-10-14 12:39:22 +08:00
Slinetrac
db091f5d2e feat(current-proxy-card): add automatic delay checks 2025-10-14 12:27:12 +08:00
Slinetrac
baebce4aad fix(connection-table): patch DataGrid event handling to prevent Safari crash
- Ensure api.publishEvent is patched only once, retrying until the API is ready.
- Normalize missing event objects for Safari to avoid crashes.
- Restore the original handler and clear timers on unmount to keep the grid stable.
2025-10-14 11:52:51 +08:00
Tunglies
fefc5c23fd fix: simplify error handling in change_clash_core and validate_dns_config functions 2025-10-14 11:48:53 +08:00
Tunglies
924e7d1022 Refactor string handling to use into() instead of to_string() for improved performance and consistency across the codebase. This change affects various modules including app.rs, clash.rs, config.rs, core.rs, service.rs, and others, ensuring that string conversions are streamlined and more idiomatic. 2025-10-14 09:26:20 +08:00
renovate[bot]
44eb781060 chore(deps): update npm dependencies (#5045)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 09:02:49 +08:00
renovate[bot]
3bd981d47b chore(deps): update cargo dependencies (#5048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 08:56:51 +08:00
Slinetrac
1d725b8bde feat: add claude, spotify and tiktok into unlock checker 2025-10-13 23:55:40 +08:00
Moon
15a0c30ccb fix: linux border render (#5046) 2025-10-13 22:42:25 +08:00
Slinetrac
537a3000b6 chore: rm success notice 2025-10-13 19:04:40 +08:00
Sline
965ee9844d refactor(unlock): restructure media unlock checker (#5044)
- Split the monolithic unlock checker into a module tree (mod.rs:9–133), wiring service-specific tasks while keeping exported Tauri commands untouched.
- Centralize shared data and helpers in types.rs (1–40) and utils.rs (1–21) for reusable timestamp and emoji logic.
- Move each provider’s logic into its own file (bilibili.rs, disney_plus.rs, netflix.rs, etc.), preserving behavior and making future additions or fixes localized.
2025-10-13 18:56:15 +08:00
Tunglies
fa39cfc41b fix: reorganize imports in logging.rs for clarity and consistency 2025-10-13 13:10:55 +08:00
Tunglies
902c8fcaf2 fix: update clash_verge_service_ipc to version 2.0.16 and improve log handling 2025-10-13 11:39:16 +08:00
renovate[bot]
5fb770c113 chore(deps): update dependency @eslint-react/eslint-plugin to ^2.1.1 (#5040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-13 11:24:43 +08:00
Tunglies
ca3fa869d5 Squashed commit of the following:
commit 2a9f2f20e9c6d88c2f96fd40589740e1f236f64a
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Mon Oct 13 11:07:31 2025 +0800

    fix: improve message handling in CommandEvent logging with CompactString

commit c77fc18accefeaf471594035d61bd13e235c87d6
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Mon Oct 13 10:47:16 2025 +0800

    fix: optimize shared writer locking in CommandEvent handling

commit d5286ee5f1612f17b7a97eead84d430669816d98
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Mon Oct 13 10:30:19 2025 +0800

    feat: integrate CompactString for improved logging and dependency management

commit 951fb2b120ce159c00dc57d43c5a519990f34cee
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Mon Oct 13 09:39:29 2025 +0800

    refactor: remove write_sidecar_log function and streamline logging in CommandEvent handling

commit fd48d66c55a2c62fd32741fd3c65cc06d4cc693f
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Mon Oct 13 09:38:05 2025 +0800

    Revert "refactor(core): stabilize 'static backing for sidecar logging"

    This reverts commit fe7eb59f18.
2025-10-13 11:08:44 +08:00
Slinetrac
51ba1d1e34 refactor(nsis): use tauri v2 installer template 2025-10-13 10:30:03 +08:00
Slinetrac
7e3804bf34 chore: issue template 2025-10-13 08:46:04 +08:00
oomeow
55e8582ee4 chore: bump clash_verge_service_ipc to 2.0.15 2025-10-13 00:09:12 +08:00
oomeow
0e9595f255 feat: add get clash logs from service
chore: log message
2025-10-13 00:02:46 +08:00
Sline
19246ac616 fix(profile): fix false failure notice after successful import (#5038)
- normalize profile urls so matching ignores casing/trailing slashes
- capture baseline profile state and confirm landing before showing success
- reuse shared success handler for normal and clash proxy retries
2025-10-12 23:21:32 +08:00
oomeow
b91087e175 feat: support for reopen app via desktop shortcuts (#5037)
* fix: singleton check

* docs: update UPDATELOG.md

---------

Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-12 22:55:40 +08:00
Slinetrac
7789d0bd5c Revert "chore: update ipc crate version"
This reverts commit 8e5c150a4f.
2025-10-12 21:26:45 +08:00
oomeow
1875e1b513 fix: incorrect maximize status on custom windows controller (#5033)
* fix: windows controller

* chore: update style

* chore: update style
2025-10-12 20:51:25 +08:00
Slinetrac
8e5c150a4f chore: update ipc crate version 2025-10-12 16:18:17 +08:00
oomeow
85f4afe2a1 perf: reduce reset scroller position 2025-10-12 15:09:20 +08:00
oomeow
0b8b3c5a1a feat: set clash log level default to info 2025-10-12 13:18:26 +08:00
oomeow
5ce95d74a9 chore: cleanup 2025-10-12 13:03:42 +08:00
Tunglies
d531432f4a fix: improve Service connection method and permissions for Windows and Unix 2025-10-11 23:41:24 +08:00
Tunglies
4f1d61a56e Revert "fix: improve Service connection method and permissions for Windows and Unix"
This reverts commit 601e99f0b5.

Revert "refactor: clash-verge-rev-service-ipc (#4841)"

This reverts commit 5370bd45ed.
2025-10-11 21:21:23 +08:00
oomeow
121b8c433b chore: update tauri-plugin-mihomo dep 2025-10-11 20:57:30 +08:00
Sline
3d2507430b fix(shutdown): mark shutdown as exiting to stop background tasks (#5024)
* fix(shutdown): mark shutdown as exiting to stop background tasks

- lib.rs:570 → Flag app as exiting on ExitRequested, notify proxy guard, start cleanup immediately, with fallback in Exit event
- tray/mod.rs:190 → Add unified exit checks around tray init/updates to prevent UI recreation during shutdown
- event_driven_proxy.rs:252 → Ensure proxy guard skips all restore/re-enable work (including sysproxy.exe calls) once exit flag is set

* fix(shutdown): refine exit handling and proxy guard notifications

* fix(shutdown): add guard to run shutdown routine only once per lifecycle
2025-10-11 16:49:47 +08:00
Tunglies
601e99f0b5 fix: improve Service connection method and permissions for Windows and Unix 2025-10-11 15:40:59 +08:00
Tunglies
5370bd45ed refactor: clash-verge-rev-service-ipc (#4841)
* feat: update service installation scripts and IPC integration

- Updated `Cargo.toml` to use version 2.0.8 of `clash_verge_service_ipc` with "client" feature.
- Renamed service installation and uninstallation scripts in `post-install.sh` and `pre-remove.sh`.
- Removed `service_ipc` module and refactored IPC handling in `service.rs` to use the new `clash_verge_service_ipc` directly.
- Adjusted service version checking and core management to align with the new IPC structure.
- Simplified directory checks in `dirs.rs` and updated logging configurations in `init.rs`.
- Updated Linux configuration file to reflect new script names.
- Enhanced service installer hook to manage state more effectively.

* refactor: simplify ClashConfig instantiation and remove unused service log file function

* feat: update clash_verge_service_ipc to version 2.0.9 and enhance service initialization logging

* chore: update clash_verge_service_ipc to version 2.0.10 and refactor async service manager initialization

* fix: update clash_verge_service_ipc to version 2.0.11 and improve service manager initialization

* fix: increase sleep duration for socket readiness check to improve stability

* fix: update clash_verge_service_ipc to version 2.0.12 and kode-bridge to version 0.3.4; refactor service management and IPC path checks

* fix: update clash_verge_service_ipc to version 2.0.13; refactor service connection and initialization logic
2025-10-11 15:35:26 +08:00
renovate[bot]
1246a66b35 chore(deps): update dependency lint-staged to ^16.2.4 (#5021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-11 15:17:53 +08:00
renovate[bot]
7d6fb54783 chore(deps): update npm dependencies (#5015)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-11 13:14:56 +08:00
renovate[bot]
79d14f1d51 chore(deps): update rust crate regex to 1.12.1 (#5017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-11 13:12:27 +08:00
Tunglies
59dd71ebaa refactor: simplify logging calls by removing unnecessary parameters 2025-10-10 13:46:26 +08:00
Tunglies
ea319e951c fix: update clippy command to include all features and targets 2025-10-10 13:05:59 +08:00
Tunglies
8c0af66ca9 Refactor logging macros to remove print control parameter
- Updated logging macros to eliminate the boolean parameter for print control, simplifying the logging calls throughout the codebase.
- Adjusted all logging calls in various modules (lib.rs, lightweight.rs, help.rs, init.rs, logging.rs, resolve/mod.rs, resolve/scheme.rs, resolve/ui.rs, resolve/window.rs, server.rs, singleton.rs, window_manager.rs) to reflect the new macro structure.
- Ensured consistent logging behavior across the application by standardizing the logging format.
2025-10-10 13:05:37 +08:00
Sline
a4d94c8bc9 refactor: enhance compositor detection logic (#5007)
* refactor: enhance compositor detection logic

* docs: UPDATELOG.md
2025-10-10 10:13:24 +08:00
renovate[bot]
ea8ca1b739 chore(deps): update dependency @mui/x-data-grid to ^8.14.0 (#5004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 08:38:22 +08:00
Slinetrac
e4f1bab8fb Reapply "fix: windows title bar only"
This reverts commit 7e05b8f13b.
2025-10-10 08:25:08 +08:00
Tunglies
7e05b8f13b Revert "fix: windows title bar and refactor old code (#4988)" this breaks UI page switch function
This reverts commit 03ab2410cc.
2025-10-10 07:38:52 +08:00
renovate[bot]
0a771bd67a chore(deps): update rust crate libc to 0.2.177 (#5003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-09 22:24:19 +08:00
renovate[bot]
2798e930ac chore(deps): update rust crate zip to v6 (#5000)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-09 22:17:45 +08:00
oomeow
1357913f8b fix: restart app failed (#4974)
* fix: failed to restart app

* chore: cleanup

* chore: cargo fmt

* chore: use AsyncHandler

* chore: clippy

* chore: update
2025-10-09 20:08:25 +08:00
❤是纱雾酱哟~
14b990ad9f Revert "build(tauri): add pkexec dependency for Linux packages (#4833)" (#4996)
- This reverts commit b608a38
- This may reopen issue #4831
- Issue #4992 may still remain unresolved

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-10-09 18:45:02 +08:00
Slinetrac
58bd2032f3 refactor(sidecar): inline Record construction for safer logging
- Build Record inline so fmt::Arguments temporary only lives through writer.write, avoiding dropped-temporary borrow.
- Add explicit 'static annotation on leaked string before reboxing for clarity.
2025-10-09 18:41:09 +08:00
Slinetrac
fe7eb59f18 refactor(core): stabilize 'static backing for sidecar logging
Introduced `write_sidecar_log` to prevent temporary `format_args!` values
from dropping early.

- src-tauri/src/core/core.rs:60 — adds `write_sidecar_log`, which temporarily
  leaks the message into a `Box<str>`, builds the `Record`, writes it, then
  immediately reclaims the boxed string. The `unsafe` block is limited to
  `Box::from_raw` needed to undo `Box::leak`.
- src-tauri/src/core/core.rs:794, 802, 806 — all three sidecar events now route
  through this helper, reusing the returned string for the in-memory log and
  avoiding extra UTF-8 decoding.
2025-10-09 16:46:11 +08:00
Sline
e3cd16189b fix: linux app theme (#4997) 2025-10-09 16:03:28 +08:00
Sline
bd9db1b4f7 fix: linux webkit error (#4995)
* fix: linux webkit error

* docs: UPDATELOG.md
2025-10-09 15:44:11 +08:00
Sline
5db4677ff8 fix: linux tun timeout (#4993)
* fix: linux tun timeout

* docs: UPDATELOG.md
2025-10-09 15:09:17 +08:00
Slinetrac
44280b23e4 Merge remote-tracking branch 'origin/dev' into dev 2025-10-09 14:05:37 +08:00
Slinetrac
7cfc31b6e5 docs: UPDATELOG.md 2025-10-09 14:05:05 +08:00
Sline
c7cd47fbdc fix: silent start (#4990) 2025-10-09 14:02:27 +08:00
renovate[bot]
a9d91a09c4 chore(deps): update dependency eslint-plugin-react-hooks to v7 (#4987)
* chore(deps): update dependency eslint-plugin-react-hooks to v7

* style: format

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-09 12:58:14 +08:00
Slinetrac
d18b98304b fix: windows title bar only 2025-10-09 12:34:36 +08:00
Slinetrac
a80bc10719 Revert "fix: windows title bar and refactor old code (#4988)"
This reverts commit 03ab2410cc.
2025-10-09 12:31:54 +08:00
Slinetrac
0f34d63b6d docs: up UPDATELOG.md 2025-10-09 11:44:52 +08:00
Tunglies
02c271dfb2 feat: update tauri-plugin-mihomo to version 0.1.1 with new source reference 2025-10-09 11:32:09 +08:00
Sline
03ab2410cc fix: windows title bar and refactor old code (#4988) 2025-10-09 10:53:20 +08:00
Slinetrac
f5c2b2a23d chore: light hook 2025-10-09 10:29:20 +08:00
Tunglies
4417fe6cd9 feat: update tray tooltip to include reassembled version format #4727 2025-10-09 05:53:49 +08:00
renovate[bot]
57c031a8f8 chore(deps): update dependency react-router-dom to v7.9.4 (#4985)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-09 05:10:48 +08:00
renovate[bot]
a9733d9746 chore(deps): update rust crate flexi_logger to 0.31.7 (#4986)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-09 05:10:32 +08:00
❤是纱雾酱哟~
936764e6ce feat: Enable git hooks with husky (#4984)
* build(deps): Adds husky for Git hooks

- Integrates the husky package as a development dependency.
- Enables the configuration and enforcement of pre-commit and pre-push Git hooks.
- Improves code quality and consistency by automating checks before commits.

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* feat: Add Husky prepare hook

- Automatically installs Git hooks for developers
- Ensures consistent code quality checks before commits or pushes
- Streamlines the developer setup process

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* ci: Avoid installing Git Hooks on GitHub Workflows

- Adds `HUSKY: 0` environment variable to all workflow definitions.
- Prevents local development hooks from executing in CI, which can cause unnecessary failures or overhead.
- See https://typicode.github.io/husky/how-to.html#ci-server-and-docker

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

---------

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-10-09 05:10:03 +08:00
Sline
9750cd3ce6 fix: multi-monitor-crash (#4980) 2025-10-08 22:02:17 +08:00
Tunglies
bfd1274a8c feat: Implement custom window controls and titlebar management (#4919)
- Added WindowControls component for managing window actions (minimize, maximize, close) based on the operating system.
- Integrated window decoration toggle functionality to allow users to prefer system titlebar.
- Updated layout styles to accommodate new titlebar and window controls.
- Refactored layout components to utilize new window management hooks.
- Enhanced layout viewer to include a switch for enabling/disabling window decorations.
- Improved overall window management by introducing useWindow and useWindowDecorations hooks for better state handling.
2025-10-08 20:23:26 +08:00
renovate[bot]
f195b3bccf chore(deps): update rust crate flexi_logger to 0.31.6 (#4979)
* chore(deps): update rust crate flexi_logger to 0.31.6

* chore: up lock

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-08 19:14:00 +08:00
Tunglies
5376d50cfb feat: add clash_verge_logger and clash_verge_service_ipc dependencies; refactor logging and process management 2025-10-08 18:06:11 +08:00
Slinetrac
0b6681436a style: lint 2025-10-08 14:19:07 +08:00
oomeow
7fc238c27b refactor: invock mihomo api by use tauri-plugin-mihomo (#4926)
* feat: add tauri-plugin-mihomo

* refactor: invock mihomo api by use tauri-plugin-mihomo

* chore: todo

* chore: update

* chore: update

* chore: update

* chore: update

* fix: incorrect delay status and update pretty config

* chore: update

* chore: remove cache

* chore: update

* chore: update

* fix: app freezed when change group proxy

* chore: update

* chore: update

* chore: add rustfmt.toml to tauri-plugin-mihomo

* chore: happy clippy

* refactor: connect mihomo websocket

* chore: update

* chore: update

* fix: parse bigint to number

* chore: update

* Revert "fix: parse bigint to number"

This reverts commit 74c006522e.

* chore: use number instead of bigint

* chore: cleanup

* fix: rule data not refresh when switch profile

* chore: update

* chore: cleanup

* chore: update

* fix: traffic graph data display

* feat: add ipc connection pool

* chore: update

* chore: clippy

* fix: incorrect delay status

* fix: typo

* fix: empty proxies tray menu

* chore: clippy

* chore: import tauri-plugin-mihomo by using git repo

* chore: cleanup

* fix: mihomo api

* fix: incorrect delay status

* chore: update tauri-plugin-mihomo dep

chore: update
2025-10-08 12:32:40 +08:00
Sline
72aa56007c feat(ui): implement profiles batch select and i18n (#4972)
* feat(ui): implement profiles batch select and i18n

* refactor: adjust button position and icon

* style: lint fmt
2025-10-08 12:02:55 +08:00
renovate[bot]
2bc720534d chore(deps): update rust crate flexi_logger to 0.31.5 (#4965)
* chore(deps): update rust crate flexi_logger to 0.31.5

* chore: up lock

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-08 08:34:41 +08:00
renovate[bot]
1e88f95b43 chore(deps): update dependency lint-staged to v16 (#4968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-08 08:34:03 +08:00
Slinetrac
9d47bc66c4 chore: unify hook behavior to prevent cross-platform CI failures 2025-10-08 08:12:16 +08:00
Slinetrac
10f250b7e7 Revert "fix(windows): show UAC prompt for TUN service install/uninstall (#4959)"
This reverts commit c05395c258.
2025-10-08 07:47:05 +08:00
oomeow
f492580864 chore: pretty lint-staged.config.js 2025-10-07 18:50:18 +08:00
Slinetrac
86b4712beb chore: more friendly lint 2025-10-07 18:28:32 +08:00
Slinetrac
0d12103085 chore: add lint-staged and edit pre-commit 2025-10-07 18:02:37 +08:00
Sline
bf4e1a3270 feat: url test button for proxy card and type safety (#4964)
* feat: url test button for proxy card and type safety

* fix: resolve ESLint hook dependency error in current-proxy-card.tsx
2025-10-07 16:39:22 +08:00
renovate[bot]
3f1f53434c chore(deps): update npm dependencies (#4962)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-07 16:38:32 +08:00
Sline
d3477159a8 fix: improve Linux tray support and add --no-tray option (#4958) 2025-10-07 10:02:11 +08:00
Sline
c05395c258 fix(windows): show UAC prompt for TUN service install/uninstall (#4959) 2025-10-07 10:01:35 +08:00
Sline
d25eb49bfe fix(tray): resolve "Restart App" failure on Windows (#4960)
* fix(tray): resolve "Restart App" failure on Windows

* style: rm useless comment
2025-10-07 10:01:15 +08:00
renovate[bot]
f3f8ea0481 chore(deps): update cargo dependencies (#4899)
* chore(deps): update cargo dependencies

* chore: up lock

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Slinetrac <realakayuki@gmail.com>
2025-10-07 08:22:35 +08:00
renovate[bot]
0af971b08a chore(deps): update npm dependencies (#4955)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-07 07:53:24 +08:00
Sline
a7fa63f054 fix: implement proper error handling for "Restart App" failures (#4951)
* fix: implement proper error handling for "Restart App" failures

* fix: make clippy happy
2025-10-07 07:32:01 +08:00
Sline
b20b30baad refactor(config): move verify_config_initialization with backoff retry (#4952) 2025-10-07 07:31:35 +08:00
Sline
cb15a38cb3 fix: restore periodic proxy guard checks removed in event-driven migration (#4954)
* fix: restore periodic proxy guard checks removed in event-driven migration

* style: cargo fmt
2025-10-07 07:18:07 +08:00
Sline
39673af46f fix: ensure frontend sync after profile create/delete (#4956) 2025-10-07 07:17:21 +08:00
wonfen
c6afbf6ee8 chore: resolve deprecation warnings and add missing translations 2025-10-06 23:40:12 +08:00
Tunglies
abb0df59df refactor: simplify auto proxy disabling logic in clean_async function 2025-10-06 18:26:01 +08:00
Sline
b0decf824e fix(webdav/app): reset client on errors and improve app restart (#4941)
* fix(webdav/app): reset client on errors and improve app restart

* refactor: rm unused function
2025-10-06 16:54:35 +08:00
Sline
5ec5fdcfc7 fix(init): ensure runtime config is ready before core manager startup (#4942)
* fix(init): ensure runtime config is ready before core manager startup

* refactor: simplify verify_config_initialization function
2025-10-06 16:51:47 +08:00
wonfen
f9bc739c51 feat: add system proxy cleanup on system shutdown & prevent DLL errors 2025-10-06 11:19:23 +08:00
Tunglies
a1b3f267de feat: enhance exit handling to prevent initialization and event processing during application exit 2025-10-05 18:07:47 +08:00
wonfen
dbcad24093 refactor: Uses tokio Command with CREATE_NO_WINDOW flag to avoid DLL initialization issues during shutdown 2025-10-05 11:11:14 +08:00
Tunglies
1176f8c863 feat: refactor app data provider and context for improved data management and performance 2025-10-04 21:20:31 +08:00
oomeow
90b98f695b fix: app freeze when core run by service mode and open app window (#4922)
* fix: app freeze when core run by service mode

* chore: update

* chore: update UPDATELOG

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-10-04 20:44:49 +08:00
renovate[bot]
600b0b52f4 chore(deps): update npm dependencies (#4939)
* chore(deps): update npm dependencies

* Refactor components to use function syntax instead of forwardRef for better type handling and clarity. Updated imports and adjusted prop types accordingly across multiple viewer components including TrafficGraph, ProfileViewer, BackupViewer, ClashCoreViewer, ControllerViewer, DnsViewer, LiteModeViewer, NetworkInterfaceViewer, ThemeViewer, TunViewer, UpdateViewer, and WebUIViewer.

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-10-04 20:26:10 +08:00
renovate[bot]
8b3bc18ea8 chore(deps): update dependency eslint-plugin-react-hooks to v6 (#4940)
* chore(deps): update dependency eslint-plugin-react-hooks to v6

* fix: update ESLint configuration to use correct imports and recommended settings

* chore: clean up unused code and improve readability across components

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-10-04 19:42:34 +08:00
Tunglies
9a9c9a2da1 feat: enhance versioning script to include latest Tauri commit hash in autobuild and deploytest tags 2025-10-04 17:03:05 +08:00
oomeow
c5023b4505 ci: use ubuntu-22.04 on dev bundle workflow 2025-10-02 12:46:56 +08:00
oomeow
18b79d3693 ci: add linux dev bundle 2025-10-02 12:33:48 +08:00
oomeow
982c8b4df2 fix: drag and drop (#4924) 2025-10-02 12:32:55 +08:00
Tunglies
8a4f2de887 Revert "Refactor components to remove forwardRef and simplify props handling"
This reverts commit 1cd013fb94.
2025-09-30 18:13:02 +08:00
Tunglies
14288568bf feat: optimize backend i18n resource usage and improve language loading 2025-09-30 15:22:08 +08:00
Tunglies
1cd013fb94 Refactor components to remove forwardRef and simplify props handling
- Updated multiple components to remove the use of forwardRef, simplifying the props structure.
- Adjusted imports and component definitions accordingly.
- Ensured consistent handling of refs and props across various viewer components.
- Improved readability and maintainability of the codebase.
2025-09-30 14:26:40 +08:00
Sukka
0c88568cd7 chore: make eslint happy (part 1) (#4890) 2025-09-30 14:19:49 +08:00
Tunglies
ecdeadfe1e feat: enhance CI workflows with paths filtering for Rust and web changes 2025-09-30 03:35:38 +08:00
Junkai W.
d86bdea127 feat: add Quick navigation bar in the rule mode agent group (#4889) 2025-09-29 11:51:53 +08:00
renovate[bot]
40f0e1bb19 chore(deps): update dependency @types/react to v19.1.15 (#4888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-28 19:55:08 +08:00
renovate[bot]
78496312ec chore(deps): update npm dependencies (#4857)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-28 19:54:58 +08:00
renovate[bot]
3e23609b68 chore(deps): update cargo dependencies (#4842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-28 19:51:25 +08:00
renovate[bot]
8488a92026 chore(deps): update npm dependencies (#4843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-28 19:51:10 +08:00
wonfen
1b4691d0ac chore: update log 2025-09-27 18:40:59 +08:00
wonfen
fae2c27648 refactor: remove duplicate and inconsistent isTunAvailable definitions 2025-09-26 14:08:32 +08:00
wonfen
7a14e90802 feat: unify TUN mode availability checks across components 2025-09-26 14:00:57 +08:00
Tunglies
c8c79d9baa feat: group all GitHub Actions updates into a single PR 2025-09-25 19:24:26 +08:00
Tunglies
a2d33c5447 fix: update rust-toolchain action to use master branch for consistency 2025-09-25 19:21:06 +08:00
Sukka
fb5d5a7d37 chore(eslint): replace eslint-plugin-react w/ eslint-react (#4844)
* chore(eslint): replace `eslint-plugin-react` w/ `eslint-react`

* chore(eslint): replace `eslint-plugin-import` w/ `import-x`
2025-09-24 13:25:22 +08:00
❤是纱雾酱哟~
b608a389c5 build(tauri): add pkexec dependency for linux packages (#4833)
* build(tauri): add pkexec dependency for linux packages

- Include pkexec in deb package dependencies
- Include pkexec in rpm package dependencies
- Update dependency arrays formatting in tauri linux config

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* refactor(tauri): Prettify configurations according to suggestions

- Format `src-tauri/tauri.linux.conf.json` using Prettier

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>

* feat: add pkexec dependency for Linux .deb and .rpm packaging

---------

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-09-24 08:42:14 +08:00
Hank
9de90200f5 fix: main thread block by sidecar launching. (#4795)
* fix: main thread block by sidecar launching.

#4791

* Refactor async runtime spawn to use AsyncHandler::spawn

for unify debugging.

* Fix compile error on non-windows platform

by remove Windows-specific configuration import.
2025-09-24 08:38:06 +08:00
renovate[bot]
860f154d54 chore(deps): update cargo dependencies (#4796)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-23 14:02:43 +08:00
renovate[bot]
f7d4040ac7 chore(deps): update npm dependencies (#4783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-23 14:02:37 +08:00
Thomas
b3075cce24 recommit #4765 overwritten by #4815 (#4834) 2025-09-23 13:59:41 +08:00
Junkai W.
909c4028f1 添加链式代理下规则适配 2025-09-22 18:16:17 +08:00
Tunglies
620922f82e feat: add configurable log size and count options in settings 2025-09-22 16:31:38 +08:00
Tunglies
22e1d329cb fix: breaks the behavior of entering lightweight mode from tray menu #4815 2025-09-21 21:34:47 +08:00
Tunglies
33fdcc38b5 Revert "还原轻量模式的进入和退出行为 (#4817)"
This reverts commit 8f88270cdf.
2025-09-21 21:33:01 +08:00
infinite-illusion
fef2728a7c remove incorrect setupCloseListener from _layout.tsx (#4818) 2025-09-21 15:05:37 +08:00
Junkai W.
8f88270cdf 还原轻量模式的进入和退出行为 (#4817)
同时把轻量模式系统托盘id改为lightweight_mode
2025-09-21 15:02:55 +08:00
Junkai W.
3493580236 修复win下系统托盘代理组与gui顺序不一致 (#4815) 2025-09-21 09:45:26 +08:00
Tunglies
7f2729fd0f fix: restore LogLineFilter import for proper logging functionality 2025-09-21 01:59:02 +08:00
Tunglies
b8c82320d3 refactor: enhance logging system with NoExternModule for better log filtering 2025-09-21 01:31:08 +08:00
Tunglies
94ec25c193 feat: add logging for ClashVergeRev version in async setup 2025-09-20 23:24:43 +08:00
Tunglies
2366530622 refactor: change lto option to "thin" for improved build performance 2025-09-20 22:54:52 +08:00
Tunglies
1cf8e2384e fix: Cargo.toml dependencies option (#4805)
* chore: update cargo lock

* refactor: streamline dependency declarations in Cargo.toml

* refactor: reorder import statements and comment out Cargo.toml version update

* fix: enable Cargo version update in release script and update tauri-plugin-devtools dependency
2025-09-20 15:15:24 +08:00
Tunglies
d9a5c11d6a refactor: improve code readability and consistency in proxy-chain and uri-parser utilities
refactor: add keys to icons in routers for improved rendering and performance
refactor: optimize RegExp polyfill by using Object.prototype.hasOwnProperty.call
refactor: reorder imports in chain-proxy-provider for consistency
refactor: remove unused "obfs-opts" property from IProxySnellConfig interface

refactor: reorganize imports and enhance refresh logic in app data provider

refactor: re-enable prop-types linting for better type safety in BaseDialog component

refactor: update dependencies in effect hooks for improved stability and performance
2025-09-20 11:19:36 +08:00
Tunglies
7811714f89 refactor: enhance logging system and add new development commands (#4803)
* refactor: enhance logging system and add new development commands

* refactor: add cfg-if dependency and improve logging configuration
2025-09-20 00:04:46 +08:00
Tunglies
e869da8d4c refactor: remove unused HTTP-specific structs to streamline service code 2025-09-19 00:04:51 +08:00
Tunglies
e414b49879 Refactor imports across multiple components for consistency and clarity
- Reorganized import statements in various components to ensure consistent ordering and grouping.
- Removed unnecessary imports and added missing ones where applicable.
- Improved readability and maintainability of the codebase by standardizing import styles.
2025-09-19 00:01:04 +08:00
Tunglies
627119bb22 Refactor imports and improve code organization across multiple components and hooks
- Consolidated and reordered imports in various files for better readability and maintainability.
- Removed unused imports and ensured consistent import styles.
- Enhanced the structure of components by grouping related imports together.
- Updated the layout and organization of hooks to streamline functionality.
- Improved the overall code quality by following best practices in import management.
2025-09-18 23:34:38 +08:00
Tunglies
74ade3ee41 refactor: update ESLint configuration and improve lint command with cache 2025-09-18 23:13:13 +08:00
Tunglies
324628dd3d refactor: replace 'let' with 'const' for better variable scoping and immutability 2025-09-18 23:07:18 +08:00
Tunglies
9d96ac0f6a feat: Integrate HTTP plugin and update IP detection to use fetch API #4712 2025-09-18 19:35:14 +08:00
Tunglies
409571f54b refactor: remove unused notification permission hook and related code 2025-09-18 19:13:23 +08:00
TianHua Liu
a995a13163 chore: use jsx-runtime presets of eslint-plugin-react (#4794) 2025-09-18 19:04:12 +08:00
Tunglies
7848d6b1de refactor: window handle usage (#4788)
* refactor: Remove unused UI reset function and streamline window creation logic

* refactor: Remove debug print statements and streamline lightweight mode initialization

* fix: Ensure tray status refresh during silent startup and lightweight mode entry is independent of window creation

* refactor: Simplify window creation process and remove debug print statements
2025-09-18 10:22:43 +08:00
Tunglies
5d2e114b4d fix: Update tray menu event handling to toggle lightweight mode based on current state #4785 2025-09-18 00:46:49 +08:00
Tunglies
c207516b47 refactor: clash-verge-service management (#4674)
* refactor: clash-verge-service management

* fix: correct service state checks in ProxyControlSwitches component
refactor: improve logging in service state update functions

* fix: add missing async handler for Windows and adjust logging import for macOS

* fix: streamline logging imports and add missing async handler for Windows

* refactor: remove unused useServiceStateSync hook and update imports in _layout

* refactor: remove unused useServiceStateSync import and clean up code in ProxyControlSwitches and _layout

* refactor: simplify service status checks and reduce wait time in useServiceInstaller hook

* refactor: remove unnecessary logging statements in service checks and IPC connection

* refactor: extract SwitchRow component for better code organization and readability

* refactor: enhance service state management and update related mutations in layout

* refactor: streamline core stopping logic and improve IPC connection logging

* refactor: consolidate service uninstallation logic and improve error handling

* fix: simplify conditional statements in CoreManager and service functions

* feat: add backoff dependency and implement retry strategy for IPC requests

* refactor: remove redundant Windows conditional and improve error handling in IPC tests

* test: improve error handling in IPC tests for message signing and verification

* fix: adjust IPC backoff retry parameters

* refactor: Remove service state tracking and related logic from service management

* feat: Enhance service status handling with logging and running mode updates

* fix: Improve service status handling with enhanced error logging

* fix: Ensure proper handling of service operations with error propagation

* refactor: Simplify service operation execution and enhance service status handling

* fix: Improve error message formatting in service operation execution and simplify service status retrieval

* refactor: Replace Cache with CacheProxy in multiple modules and update CacheEntry to be generic

* fix: Remove unnecessary success message from config validation

* refactor: Comment out logging statements in service version check and IPC request handling
2025-09-17 22:59:02 +08:00
Tunglies
6724f1ae35 feat: Implement caching mechanism with Cache struct and update related commands 2025-09-17 19:37:42 +08:00
Tunglies
1787d5372e fix: Update OS_PLATFORM definition to reflect the current platform 2025-09-17 16:10:22 +08:00
Tunglies
4c41144dd0 fix: Update error message to include details of accumulated startup errors 2025-09-17 16:10:01 +08:00
Tunglies
27636c848f fix: update changelog to reflect removal of hidden groups in tray node switching #4765 2025-09-17 13:39:38 +08:00
Tunglies
8060d699f0 fix: enhance prebuild script to support shorthand for force update #4777 2025-09-17 13:36:31 +08:00
renovate[bot]
f36f31a636 chore(deps): update npm dependencies (#4686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-17 12:45:57 +08:00
renovate[bot]
d300fac3d9 chore(deps): update cargo dependencies (#4687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-17 12:45:50 +08:00
Thomas
8c2262dd95 stop showing hidden groups in the tray menu (#4765)
托盘菜单不显示隐藏代理组
2025-09-17 12:45:35 +08:00
wonfen
c438e916ca perf: remove system-level unlock test timeout notice 2025-09-15 22:16:13 +08:00
ZShab Niba
0855bd4896 fix: Fix icon to RGBA/sRGB Colorspace (#4753)
* fix: Fixed icon pixel size

* fix: fix icon to RGBA/sRGB Colorspace

* chore: update UPDATELOG

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-09-15 12:29:30 +08:00
Junkai W.
f2073a2f83 Add Func 链式代理 (#4624)
* 添加链式代理gui和语言支持
在Iruntime中添跟新链式代理配置方法
同时添加了cmd

* 修复读取运行时代理链配置文件bug

* t

* 完成链式代理配置构造

* 修复获取链式代理运行时配置的bug

* 完整的链式代理功能
2025-09-15 07:44:54 +08:00
Tunglies
a1f468202f Revert "fix: Fixed icon pixel size (#4698)"
revert due to runtime error [[Setup]] Error: failed to process image: Format error decoding Ico: The PNG is not in RGBA format!

This reverts commit a24bf4042c.
2025-09-15 00:56:59 +08:00
ZShab Niba
a24bf4042c fix: Fixed icon pixel size (#4698) 2025-09-13 10:56:07 +08:00
❤是纱雾酱哟~
15d22b4bf6 chore(issue template): disable blank issue template in GitHub config (#4731)
- Prevent users from creating issue without a template
- Always use a template for guiding users to provide necessary information for us

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-09-13 10:11:40 +08:00
Tunglies
231d264652 fix: update alpha version description in README 2025-09-12 18:45:40 +08:00
Tunglies
67ac353fd5 chore: update cron schedule for auto build workflow 2025-09-12 18:43:13 +08:00
Tunglies
1c5534ad36 fix: remove deprecated updater for alpha endpoints in tauri configuration 2025-09-11 17:14:57 +08:00
Tunglies
251678493c edition 2024 (#4702)
* feat: update Cargo.toml for 2024 edition and optimize release profiles

* feat: refactor environment variable settings for Linux and improve code organization

* Refactor conditional statements to use `&&` for improved readability

- Updated multiple files to combine nested `if let` statements using `&&` for better clarity and conciseness.
- This change enhances the readability of the code by reducing indentation levels and making the conditions more straightforward.
- Affected files include: media_unlock_checker.rs, profile.rs, clash.rs, profiles.rs, async_proxy_query.rs, core.rs, handle.rs, hotkey.rs, service.rs, timer.rs, tray/mod.rs, merge.rs, seq.rs, config.rs, proxy.rs, window.rs, general.rs, dirs.rs, i18n.rs, init.rs, network.rs, and window.rs in the resolve module.

* refactor: streamline conditional checks using `&&` for improved readability

* fix: update release profile settings for panic behavior and optimization

* fix: adjust optimization level in Cargo.toml and reorder imports in lightweight.rs
2025-09-10 09:49:06 +08:00
Tunglies
ccbffa14f0 fix: replace toggle with show for main window in lightweight mode exit #4697 2025-09-09 21:25:38 +08:00
Tunglies
dfc1f736af fix: resolve from lightweight cause crash (#4682)
* refactor: streamline lightweight mode handling and improve window management

* refactor: replace mutex-based window creation lock with atomic operations for improved performance

* refactor: remove startup completed event handling and simplify initialization logic

* refactor: remove conditional compilation for emit_update_event function

* refactor: simplify return statements and clean up commented code in lightweight and window manager modules

* refactor: streamline lightweight mode handling by consolidating window management calls

* refactor: prevent unnecessary window toggle when exiting lightweight mode

* refactor: reorder imports for consistency in lightweight module

* refactor: move macOS specific logging_error import for clarity
2025-09-09 18:50:24 +08:00
Tunglies
c54d89a465 feat: add support for Windows ARM64 in development workflow 2025-09-09 16:55:46 +08:00
Tunglies
55b95a1985 Revert "feat: update Cargo.toml for 2024 edition and optimize release profiles (#4681)"
This reverts commit 31e3104c7f.
2025-09-08 21:48:09 +08:00
Tunglies
31e3104c7f feat: update Cargo.toml for 2024 edition and optimize release profiles (#4681)
* feat: update Cargo.toml for 2024 edition and optimize release profiles

* feat: refactor environment variable settings for Linux and improve code organization

* Refactor conditional statements to use `&&` for improved readability

- Updated multiple files to combine nested `if let` statements using `&&` for better clarity and conciseness.
- This change enhances the readability of the code by reducing indentation levels and making the conditions more straightforward.
- Affected files include: media_unlock_checker.rs, profile.rs, clash.rs, profiles.rs, async_proxy_query.rs, core.rs, handle.rs, hotkey.rs, service.rs, timer.rs, tray/mod.rs, merge.rs, seq.rs, config.rs, proxy.rs, window.rs, general.rs, dirs.rs, i18n.rs, init.rs, network.rs, and window.rs in the resolve module.

* refactor: streamline conditional checks using `&&` for improved readability
2025-09-08 13:57:32 +08:00
wonfen
58a0089b19 fix: workflow file name 2025-09-07 15:24:14 +08:00
Tunglies
043ed4cb31 feat: add known issues section and update lightweight mode handling 2025-09-07 13:00:51 +08:00
Tunglies
f64c01044c feat: bump version to 2.4.3 and update changelog for macOS intel Mihomo compatibility 2025-09-07 12:06:33 +08:00
Tunglies
5dca724017 feat: update Vite configuration for improved chunking and build options 2025-09-06 21:24:46 +08:00
Tunglies
579f9bd1f8 feat: add path and process dependencies; remove unused SCSS preprocessor options 2025-09-06 21:04:58 +08:00
Tunglies
7c9104a5b9 feat: optimize home page loading with lazy loading and improve card rendering logic 2025-09-06 20:38:33 +08:00
renovate[bot]
14d1531469 chore(deps): update npm dependencies (#4567)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-06 14:11:30 +08:00
renovate[bot]
74e1e92607 chore(deps): update rust crate zip to v5 (#4653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-06 14:11:09 +08:00
renovate[bot]
f7a56c0eb3 chore(deps): update cargo dependencies (#4586)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-06 14:10:35 +08:00
Tunglies
e2fa76332a fix: remove unused ProxyRequestCache import and improve proxy update error handling 2025-09-06 14:10:09 +08:00
Tunglies
0daa8720cd feat: implement i18n lazy loading optimization
🚀 Performance improvements:
- Replace static language imports with dynamic imports
- Load only current language on startup instead of all 13 languages
- Implement on-demand loading when switching languages

📦 Bundle optimization:
- Reduce initial bundle size by avoiding preloading all language files
- Add resource caching to prevent reloading same language
- Support all 13 languages: en, ru, zh, fa, tt, id, ar, ko, tr, de, es, jp, zhtw

🔧 Technical changes:
- Convert i18n.ts to use dynamic import() for language resources
- Add async initializeLanguage() for app startup
- Create useI18n hook for language management with loading states
- Update main.tsx for async language initialization
- Fix language display labels in settings dropdown
- Maintain backward compatibility with existing language system

 Fixed issues:
- Resolve infinite loop in React components
- Fix missing language labels in settings UI
- Prevent circular dependencies in language loading
- Add proper error handling and fallback mechanisms
2025-09-06 14:05:36 +08:00
Tunglies
f70b8b1213 Revert "fix: auto-detect KDE/Plasma and switch to X11 as backend to fix titlebar button freeze (#4523)"
This reverts commit d58c0a7df5.
2025-09-06 11:59:33 +08:00
wonfen
feb3dfbe86 chore: use UTF+8 time to build 2025-09-05 11:21:34 +08:00
Tunglies
f38e4a6cac fix: refactor proxy fetching to use command methods and improve error handling 2025-09-04 15:32:46 +08:00
Tunglies
893188d693 fix: add basic authorization header support for URL parsing in NetworkManager #4618 2025-09-03 01:07:45 +08:00
Tunglies
b989aeb7b0 refactor: clean up imports and remove unused initialization in NetworkManager 2025-09-02 23:48:27 +08:00
Tunglies
40f87c834d fix: update ClientConfig settings for improved connection management 2025-09-02 23:21:05 +08:00
Tunglies
0bb9cb5097 fix: enhance startup speed and fix connection issues during initialization 2025-09-02 23:10:02 +08:00
Tunglies
b51797e238 fix: update logging types and clean up ProxyRequestCache usage 2025-09-02 22:19:22 +08:00
Tunglies
926c095409 perf: update ProxyRequestCache to use boxed CacheEntry for improved memory management 2025-09-02 19:09:44 +08:00
Tunglies
0c65f8ebad fix: remove macOS specific conditional compilation for logging_error import 2025-09-02 18:36:13 +08:00
Tunglies
63f4295063 fix: update required service version to 1.1.2 2025-09-02 16:09:21 +08:00
Tunglies
d2b38a8a3c fix: optimize async handler usage in singleton checks and resource initialization #4576, #4590, #4609 2025-09-02 13:37:14 +08:00
Tunglies
45ddb15d56 fix: remove redundant service stop call in CoreManager and clean up unused Mutex import 2025-09-02 12:12:19 +08:00
Tunglies
7aef9d2a5a fix: resolve lightweight mode state detection issues and improve logging #3814 2025-09-02 08:00:53 +08:00
wonfen
45fdebeaca style: simplify and improve proxy settings UI 2025-09-01 13:57:04 +08:00
wonfen
0ea875f7f7 fix: unify homepage node selection 2025-09-01 11:30:27 +08:00
Guanghui Qin
1b54c9fc1b fix rpm/deb package naming issues (#4582)
* fix arm64 deb package name

* fix rpm package naming issue

* fix rpm package naming issue

---------

Co-authored-by: hiaoxui <hiaoxui@gmail.com>
2025-09-01 01:12:40 +08:00
Tunglies
89f3adcbef fix: add redirect policy to HTTP client builder 2025-09-01 00:45:39 +08:00
Tunglies
b13fef5ad9 fix: add missing allow(dead_code) attribute to block_on method 2025-08-31 16:22:35 +08:00
Tunglies
9110955b63 fix: streamline service availability checks and improve logging for core startup 2025-08-31 16:19:31 +08:00
Tunglies
4508d062f1 chore: bump version to 2.4.2 2025-08-31 15:53:50 +08:00
Junkai W.
bea0dde074 Win 下添加代理节点的系统托盘 (#4562)
* add proxy memu in tray

* 添加win下系统托盘 节点
代理->代理组->nodes
同时添加了对应gui同步

* 添加win 系统托盘显示代理节点
且gui和托盘刷新机制

* rust format

* 添加 win下系统托盘节点延迟

* Squashed commit of the following:

commit 44caaa62c5
Merge: 1916e539 3939741a
Author: Junkai W. <129588175+Be-Forever223@users.noreply.github.com>
Date:   Sat Aug 30 02:37:07 2025 +0800

    Merge branch 'dev' into dev

commit 3939741a06
Author: Tunglies <tunglies.dev@outlook.com>
Date:   Sat Aug 30 02:24:47 2025 +0800

    refactor: migrate from serde_yaml to serde_yaml_ng for improved YAML handling (#4568)

    * refactor: migrate from serde_yaml to serde_yaml_ng for improved YAML handling

    * refactor: format code for better readability in DNS configuration

commit f86a1816e0
Author: Tunglies <tunglies.dev@outlook.com>
Date:   Sat Aug 30 02:15:34 2025 +0800

    chore(deps): update sysinfo to 0.37.0 and zip to 4.5.0 in Cargo.toml (#4564)

    * chore(deps): update sysinfo to 0.37.0 and zip to 4.5.0 in Cargo.toml

    * chore(deps): remove libnghttp2-sys dependency and update isahc features in Cargo.toml

    * chore(deps): remove sysinfo and zip from ignoreDeps in renovate.json

commit 9cbd8b4529
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Sat Aug 30 01:30:48 2025 +0800

    feat: add x86 OpenSSL installation step for macOS in workflows

commit 5dea73fc2a
Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Date:   Sat Aug 30 01:21:53 2025 +0800

    chore(deps): update npm dependencies (#4542)

    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

commit 01af1bea23
Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Date:   Sat Aug 30 01:21:46 2025 +0800

    chore(deps): update rust crate reqwest_dav to 0.2.2 (#4554)

    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

commit 1227e86134
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Sat Aug 30 01:12:03 2025 +0800

    Remove unnecessary "rustls-tls" feature from reqwest dependency in Cargo.toml

commit c6a6ea48dd
Author: Tunglies <tunglies.dev@outlook.com>
Date:   Fri Aug 29 23:51:09 2025 +0800

    refactor: enhance async initialization and streamline setup process (#4560)

    * feat: Implement DNS management for macOS

    - Added `set_public_dns` and `restore_public_dns` functions in `dns.rs` to manage system DNS settings.
    - Introduced `resolve` module to encapsulate DNS and scheme resolution functionalities.
    - Implemented `resolve_scheme` function in `scheme.rs` to handle deep links and profile imports.
    - Created UI readiness management in `ui.rs` to track and update UI loading states.
    - Developed window management logic in `window.rs` to handle window creation and visibility.
    - Added initial loading overlay script in `window_script.rs` for better user experience during startup.
    - Updated server handling in `server.rs` to integrate new resolve functionalities.
    - Refactored window creation calls in `window_manager.rs` to use the new window management logic.

    * refactor: streamline asynchronous handling in config and resolve setup

    * Revert "refactor: streamline asynchronous handling in config and resolve setup"

    This reverts commit 23d7dc86d5.

    * fix: optimize asynchronous memory handling

    * fix: enhance task logging by adding size check for special cases

    * refactor: enhance async initialization and streamline setup process

    * refactor: optimize async setup by consolidating initialization tasks

    * chore: update changelog for Mihomo(Meta) kernel upgrade to v1.19.13

    * fix: improve startup phase initialization performance

    * refactor: optimize file read/write performance to reduce application wait time

    * refactor: simplify app instance exit logic and adjust system proxy guard initialization

    * refactor: change resolve_setup_async to synchronous execution for improved performance

    * refactor: update resolve_setup_async to accept AppHandle for improved initialization flow

    * refactor: remove unnecessary initialization of portable flag in run function

    * refactor: consolidate async initialization tasks into a single blocking call for improved execution flow

    * refactor: optimize resolve_setup_async by restructuring async tasks for improved concurrency

    * refactor: streamline resolve_setup_async and embed_server for improved async handling

    * refactor: separate synchronous and asynchronous setup functions for improved clarity

    * refactor: simplify async notification handling and remove redundant network manager initialization

    * refactor: enhance async handling in proxy request cache and window creation logic

    * refactor: improve code formatting and readability in ProxyRequestCache

    * refactor: adjust singleton check timeout and optimize trace size conditions

    * refactor: update TRACE_SPECIAL_SIZE to include additional size condition

    * refactor: update kode-bridge dependency to version 0.2.1-rc2

    * refactor: replace RwLock with AtomicBool for UI readiness and implement event-driven monitoring

    * refactor: convert async functions to synchronous for window management

    * Update src-tauri/src/utils/resolve/window.rs

    * fix: handle missing app_handle in create_window function

    * Update src-tauri/src/module/lightweight.rs

* format
2025-08-31 14:20:57 +08:00
wonfen
3e674b186f fix: refine release workflow 2025-08-31 08:49:30 +08:00
Tunglies
92d9c94e87 fix: resolve crashes when exiting lightweight mode by ensuring async window operations 2025-08-30 20:04:21 +08:00
Tunglies
c09066c0a3 refactor: restructure async initialization and standardize logging system
### Major Improvements

- **Async initialization refactoring**: Complete async migration of init_config, improving app startup performance and stability
  - Change init_work_config from blocking to async execution
  - Optimize error handling for directory creation and config file initialization
  - Enhance structure and robustness of initialization process

- **Logging system standardization**: Unify usage of project's built-in logging! macro
  - Replace all log::info!/warn!/error!/debug! with logging!(level, Type::Setup, true, ...) format
  - Maintain consistency in log categorization and formatting
  - Improve convenience for log tracking and debugging

### Technical Optimizations

- **Error handling improvements**: Remove crate::log_err! macro, use standard Result error propagation
- **Directory management optimization**: Refactor ensure_directories function with clearer directory creation logic
- **Config initialization enhancement**: Separate initialize_config_files function for better code maintainability
- **Async task management**: Use AsyncHandler::spawn to optimize background log cleanup tasks

### Bug Fixes

- Fix potential race conditions in async config initialization
- Improve error feedback and logging during app startup
- Enhance error handling for DNS config and resource file initialization

### Updates

- Update wording in UPDATELOG.md issue descriptions
2025-08-30 17:58:26 +08:00
Tunglies
3a7be3dfb7 refactor: streamline resolve_scheme function calls and visibility in utils 2025-08-30 17:22:52 +08:00
Tunglies
09f14c23e4 fix: update required service version to 1.1.1 2025-08-30 11:02:58 +08:00
Tunglies
eaaae3b393 fix: improve stability during profile switching to prevent crashes 2025-08-30 07:40:31 +08:00
Tunglies
3939741a06 refactor: migrate from serde_yaml to serde_yaml_ng for improved YAML handling (#4568)
* refactor: migrate from serde_yaml to serde_yaml_ng for improved YAML handling

* refactor: format code for better readability in DNS configuration
2025-08-30 02:24:47 +08:00
Tunglies
f86a1816e0 chore(deps): update sysinfo to 0.37.0 and zip to 4.5.0 in Cargo.toml (#4564)
* chore(deps): update sysinfo to 0.37.0 and zip to 4.5.0 in Cargo.toml

* chore(deps): remove libnghttp2-sys dependency and update isahc features in Cargo.toml

* chore(deps): remove sysinfo and zip from ignoreDeps in renovate.json
2025-08-30 02:15:34 +08:00
Tunglies
9cbd8b4529 feat: add x86 OpenSSL installation step for macOS in workflows 2025-08-30 01:31:02 +08:00
renovate[bot]
5dea73fc2a chore(deps): update npm dependencies (#4542)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-30 01:21:53 +08:00
renovate[bot]
01af1bea23 chore(deps): update rust crate reqwest_dav to 0.2.2 (#4554)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-30 01:21:46 +08:00
Tunglies
1227e86134 Remove unnecessary "rustls-tls" feature from reqwest dependency in Cargo.toml 2025-08-30 01:12:03 +08:00
Tunglies
c6a6ea48dd refactor: enhance async initialization and streamline setup process (#4560)
* feat: Implement DNS management for macOS

- Added `set_public_dns` and `restore_public_dns` functions in `dns.rs` to manage system DNS settings.
- Introduced `resolve` module to encapsulate DNS and scheme resolution functionalities.
- Implemented `resolve_scheme` function in `scheme.rs` to handle deep links and profile imports.
- Created UI readiness management in `ui.rs` to track and update UI loading states.
- Developed window management logic in `window.rs` to handle window creation and visibility.
- Added initial loading overlay script in `window_script.rs` for better user experience during startup.
- Updated server handling in `server.rs` to integrate new resolve functionalities.
- Refactored window creation calls in `window_manager.rs` to use the new window management logic.

* refactor: streamline asynchronous handling in config and resolve setup

* Revert "refactor: streamline asynchronous handling in config and resolve setup"

This reverts commit 23d7dc86d5.

* fix: optimize asynchronous memory handling

* fix: enhance task logging by adding size check for special cases

* refactor: enhance async initialization and streamline setup process

* refactor: optimize async setup by consolidating initialization tasks

* chore: update changelog for Mihomo(Meta) kernel upgrade to v1.19.13

* fix: improve startup phase initialization performance

* refactor: optimize file read/write performance to reduce application wait time

* refactor: simplify app instance exit logic and adjust system proxy guard initialization

* refactor: change resolve_setup_async to synchronous execution for improved performance

* refactor: update resolve_setup_async to accept AppHandle for improved initialization flow

* refactor: remove unnecessary initialization of portable flag in run function

* refactor: consolidate async initialization tasks into a single blocking call for improved execution flow

* refactor: optimize resolve_setup_async by restructuring async tasks for improved concurrency

* refactor: streamline resolve_setup_async and embed_server for improved async handling

* refactor: separate synchronous and asynchronous setup functions for improved clarity

* refactor: simplify async notification handling and remove redundant network manager initialization

* refactor: enhance async handling in proxy request cache and window creation logic

* refactor: improve code formatting and readability in ProxyRequestCache

* refactor: adjust singleton check timeout and optimize trace size conditions

* refactor: update TRACE_SPECIAL_SIZE to include additional size condition

* refactor: update kode-bridge dependency to version 0.2.1-rc2

* refactor: replace RwLock with AtomicBool for UI readiness and implement event-driven monitoring

* refactor: convert async functions to synchronous for window management

* Update src-tauri/src/utils/resolve/window.rs

* fix: handle missing app_handle in create_window function

* Update src-tauri/src/module/lightweight.rs
2025-08-29 23:57:42 +08:00
wonfen
2080dbdc0f refactor: proxy control component and system settings UI
fix: handle tun toggle state after service uninstall
2025-08-29 20:46:45 +08:00
Tunglies
6eecd70bd5 fix(subscription): resolve issues causing import failures in some cases #4534, #4436, #4552, #4519, #4517, #4503, #4336, #4301 (#4553)
* fix(subscription): resolve issues causing import failures in some cases #4534, #4436, #4552, #4519, #4517, #4503, #4336, #4301

* fix(profile): update profile creation to include file data handling

* fix(app): improve singleton instance exit handling

* fix: remove unsued handle method
2025-08-29 17:46:46 +08:00
Tunglies
a9951e4eca refactor: replace AppHandleManager with handle::Handle for macOS activation policy management 2025-08-28 17:27:54 +08:00
Tunglies
53688f332f fix: replace tokio::runtime::Handle with tauri::async_runtime::handle 2025-08-28 04:58:24 +08:00
Tunglies
d23d1d9a1d fix: remove auto clean up profiles behavior in resolve process 2025-08-28 04:41:12 +08:00
Tunglies
51ff9e1851 fix: resolve issue with application not restoring after tray restart 2025-08-27 22:20:04 +08:00
Tunglies
824814da56 fix: unexpected restart behavior #4438 2025-08-27 22:04:44 +08:00
renovate[bot]
040fcd059f chore(deps): update npm dependencies (#4467)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-27 21:19:22 +08:00
renovate[bot]
f2339620a5 chore(deps): update cargo dependencies (#4468)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-27 21:19:13 +08:00
Sergey Kharenko
d58c0a7df5 fix: auto-detect KDE/Plasma and switch to X11 as backend to fix titlebar button freeze (#4523) 2025-08-26 01:50:44 +08:00
Tunglies
355a18e5eb refactor(async): migrate from sync-blocking async execution to true async with unified AsyncHandler::spawn (#4502)
* feat: replace all tokio::spawn with unified AsyncHandler::spawn

- 🚀 Core Improvements:
  * Replace all tokio::spawn calls with AsyncHandler::spawn for unified Tauri async task management
  * Prioritize converting sync functions to async functions to reduce spawn usage
  * Use .await directly in async contexts instead of spawn

- 🔧 Major Changes:
  * core/hotkey.rs: Use AsyncHandler::spawn for hotkey callback functions
  * module/lightweight.rs: Async lightweight mode switching
  * feat/window.rs: Convert window operation functions to async, use .await internally
  * feat/proxy.rs, feat/clash.rs: Async proxy and mode switching functions
  * lib.rs: Window focus handling with AsyncHandler::spawn
  * core/tray/mod.rs: Complete async tray event handling

-  Technical Advantages:
  * Unified task tracking and debugging capabilities (via tokio-trace feature)
  * Better error handling and task management
  * Consistency with Tauri runtime
  * Reduced async boundaries for better performance

- 🧪 Verification:
  * Compilation successful with 0 errors, 0 warnings
  * Maintains complete original functionality
  * Optimized async execution flow

* feat: complete tokio fs migration and replace tokio::spawn with AsyncHandler

🚀 Major achievements:
- Migrate 8 core modules from std::fs to tokio::fs
- Create 6 Send-safe wrapper functions using spawn_blocking pattern
- Replace all tokio::spawn calls with AsyncHandler::spawn for unified async task management
- Solve all 19 Send trait compilation errors through innovative spawn_blocking architecture

🔧 Core changes:
- config/profiles.rs: Add profiles_*_safe functions to handle Send trait constraints
- cmd/profile.rs: Update all Tauri commands to use Send-safe operations
- config/prfitem.rs: Replace append_item calls with profiles_append_item_safe
- utils/help.rs: Convert YAML operations to async (read_yaml, save_yaml)
- Multiple modules: Replace tokio::task::spawn_blocking with AsyncHandler::spawn_blocking

 Technical innovations:
- spawn_blocking wrapper pattern resolves parking_lot RwLock Send trait conflicts
- Maintain parking_lot performance while achieving Tauri async command compatibility
- Preserve backwards compatibility with gradual migration strategy

🎯 Results:
- Zero compilation errors
- Zero warnings
- All async file operations working correctly
- Complete Send trait compliance for Tauri commands

* feat: refactor app handle and command functions to use async/await for improved performance

* feat: update async handling in profiles and logging functions for improved error handling and performance

* fix: update TRACE_MINI_SIZE constant to improve task logging threshold

* fix(windows): convert service management functions to async for improved performance

* fix: convert service management functions to async for improved responsiveness

* fix(ubuntu): convert install and reinstall service functions to async for improved performance

* fix(linux): convert uninstall_service function to async for improved performance

* fix: convert uninstall_service call to async for improved performance

* fix: convert file and directory creation calls to async for improved performance

* fix: convert hotkey functions to async for improved responsiveness

* chore: update UPDATELOG.md for v2.4.1 with major improvements and performance optimizations
2025-08-26 01:49:51 +08:00
Tunglies
4598c805eb refactor: remove Oxlint workflow and update linting to use ESLint 2025-08-24 16:40:05 +08:00
Tunglies
aa204649fa fix: add web asset build step before running Clippy 2025-08-24 16:38:17 +08:00
Tunglies
fbaff3e90c fix: remove logLevel parameter from fetchLogsViaIPCPeriodically for consistency 2025-08-23 00:28:39 +08:00
Tunglies
0d070fb934 refactor: update AppHandle usage to use Arc<AppHandle> for improved memory management (#4491)
* refactor: update AppHandle usage to use Arc<AppHandle> for improved memory management

* fix: clippy ci

* fix: ensure default_latency_test is safely accessed with non-null assertion
2025-08-23 00:20:58 +08:00
Tunglies
c416bd5755 fix: reorder pnpm installation step in Clippy workflow 2025-08-23 00:15:25 +08:00
Tunglies
90406ae883 fix: clippy ci 2025-08-23 00:11:44 +08:00
wonfen
600b3dfbac fix: release workflow & refine telegram notify format 2025-08-22 20:47:02 +08:00
Tunglies
72e4491dc4 Implement code changes to enhance functionality and improve performance 2025-08-22 19:56:51 +08:00
Tunglies
76c3695567 feat: add Clippy and Oxlint workflows for enhanced linting 2025-08-22 19:20:35 +08:00
Tunglies
475a09bb54 feat: comprehensive oxlint cleanup - remove unused code
🧹 Cleanup Summary:
- Fixed 83 oxlint warnings across 50+ files
- Removed unused imports, variables, and functions
- Maintained all functional code and error handling
- Improved bundle size and code maintainability

📝 Key Changes:
- Cleaned unused React hooks (useState, useEffect, useClashInfo)
- Removed unused Material-UI imports (useTheme, styled components)
- Deleted unused interfaces and type definitions
- Fixed spread operator usage and boolean casting
- Simplified catch parameters where appropriate

🎯 Files Modified:
- React components: home.tsx, settings, profiles, etc.
- Custom hooks: use-*.ts files
- Utility functions and type definitions
- Configuration files

 Result: 0 oxlint warnings (from 83 warnings)
🔧 All functionality preserved
📦 Reduced bundle size through dead code elimination
2025-08-22 18:48:56 +08:00
Tunglies
6a1fce69e0 refactor: comment out includeUpdaterJson in autobuild jobs for clarity 2025-08-22 17:41:33 +08:00
Tunglies
485fd0169b chore: bump version to 2.4.1 2025-08-22 17:31:32 +08:00
wonfen
a9464ff776 chore: update release log & fix workflow2 2025-08-22 16:30:07 +08:00
Tunglies
335ca817d2 refactor: restrict AsyncHandler usage to Windows platform only 2025-08-22 04:18:21 +08:00
Tunglies
6d112c387d refactor: replace tokio::task::spawn_blocking with AsyncHandler::spawn_blocking for improved task management 2025-08-22 04:05:35 +08:00
Tunglies
e4c243de2d refactor: Replace tokio::spawn with AsyncHandler::spawn for better task management
- Replace direct tokio::spawn calls with AsyncHandler::spawn across multiple modules
- Improves task lifecycle management and error handling consistency
- Affected files:
  - src-tauri/src/cmd/network.rs
  - src-tauri/src/core/core.rs
  - src-tauri/src/core/event_driven_proxy.rs
  - src-tauri/src/enhance/tun.rs
  - src-tauri/src/ipc/logs.rs
  - src-tauri/src/ipc/memory.rs
  - src-tauri/src/ipc/monitor.rs
  - src-tauri/src/ipc/traffic.rs
  - src-tauri/src/utils/network.rs
  - src-tauri/src/utils/resolve.rs

This change provides better control over async task spawning and helps prevent
potential issues with unmanaged background tasks.
2025-08-22 03:41:14 +08:00
Tunglies
02f67961a9 feat: add tokio-stream dependency and refactor event loop handling in EventDrivenProxyManager 2025-08-22 03:16:59 +08:00
Tunglies
7d5fd295ed feat: add dev:trace script for enhanced debugging in development 2025-08-22 02:28:44 +08:00
Tunglies
daa0b1592d chore: bump version to 2.4.1 2025-08-22 00:29:42 +08:00
Tunglies
b411783bbe fix: enhance tag version check for consistency in release workflow 2025-08-22 00:15:56 +08:00
Tunglies
40a59bbc1a fix: disable automatic generation of release notes in workflow 2025-08-21 23:56:02 +08:00
wonfen
93fc4932ee Release 2.4.0 2025-08-21 22:45:55 +08:00
Tunglies
2277d7232e refactor: improve code formatting and readability in autobuild and telegram scripts 2025-08-21 21:23:47 +08:00
Tunglies
435318cf1d fix: simplify return statements in updateProxy method for clarity 2025-08-21 21:23:46 +08:00
wonfen
a9a9d8a78f fix(workflow): file version & format 2025-08-21 21:21:52 +08:00
❤是纱雾酱哟~
a2544d237e ci: improve commit checking and update release version script (#4471)
- Increase `fetch-depth` to 50 for more accurate commit history in CI
- Update `release-version.mjs` to use `bash` explicitly for improved compatibility
  - Also avoid errors when invoking the script

Signed-off-by: Dragon1573 <49941141+Dragon1573@users.noreply.github.com>
2025-08-21 21:16:15 +08:00
wonfen
9397ac0174 fix(workflow): download files name & release note 2025-08-21 19:49:17 +08:00
wonfen
4c719da096 chore(workflow): add release info & telegram notification 2025-08-21 18:33:54 +08:00
Tunglies
7613417c33 feat: enhance Tauri build steps with clearer naming and include updater JSON 2025-08-20 23:06:55 +08:00
renovate[bot]
a2a65cade7 chore(deps): update npm dependencies (#4461)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-20 22:54:47 +08:00
renovate[bot]
3a07402aa2 chore(deps): update npm dependencies (#4454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-20 22:49:45 +08:00
renovate[bot]
59b67f5d3f chore(deps): update cargo dependencies (#4451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-08-20 22:49:37 +08:00
Tunglies
e30cfc3a2f chore: update dependencies and improve IPC request handling 2025-08-20 22:48:08 +08:00
Tunglies
52655d9702 feat: add configuration options to IpcManager for improved client setup 2025-08-20 18:05:31 +08:00
Tunglies
e93846ddc1 refactor: improve log management by introducing a constant for max logs and simplifying log level handling 2025-08-19 22:43:36 +08:00
renovate[bot]
4cf2f6b1e6 chore(deps): update cargo dependencies (#4443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-19 16:36:36 +08:00
renovate[bot]
43a3cb74ac chore(deps): update npm dependencies (#4430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-19 16:36:24 +08:00
TianHua Liu
3360339c08 docs: move Windows ARM devices note to CONTRIBUTING.md (#4446)
* docs: how to develop locally

* docs: move Windows ARM devices note to CONTRIBUTING.md
2025-08-19 16:28:42 +08:00
Tunglies
f0dbe9fa60 feat: add console-subscriber for improved logging and tracing support 2025-08-18 23:40:25 +08:00
Tunglies
756751b765 refactor: simplify app restart logic and improve error handling 2025-08-18 22:33:29 +08:00
Tunglies
85a9f6c8d4 fix: correct log cleanup day mapping and update logging level #4434 2025-08-18 19:14:08 +08:00
Ahao
7fe0381850 renew: remove whether to enable_random_port (#4401)
* refactor: streamline clean old assets job by using reusable workflow

* refactor: update clean old assets job to include steps section

* refactor: add checkout step in clean_old_assets job for improved repository access

* fix: correct path to clean old assets workflow in autobuild.yml

* fix: update path to clean old assets workflow in autobuild.yml

* refactor: simplify clean_old_assets job by removing unnecessary steps

* refactor: enhance clean_old_assets job dependencies for improved execution flow

* Revert "refactor: enhance clean_old_assets job dependencies for improved execution flow"

This reverts commit 1a5108b5ad.

* feat: implement get_latest_tauri_commit script and update release versioning logic

* renew: remove whether to enable_random_port

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-08-18 02:03:06 +08:00
Tunglies
537d27d10b fix: clippy errors with new config (#4428)
* refactor: improve code quality with clippy fixes and standardized logging

- Replace dangerous unwrap()/expect() calls with proper error handling
- Standardize logging from log:: to logging\! macro with Type:: classifications
- Fix app handle panics with graceful fallback patterns
- Improve error resilience across 35+ modules without breaking functionality
- Reduce clippy warnings from 300+ to 0 in main library code

* chore: update Cargo.toml configuration

* refactor: resolve all clippy warnings
- Fix Arc clone warnings using explicit Arc::clone syntax across 9 files
- Add #[allow(clippy::expect_used)] to test functions for appropriate expect usage
- Remove no-effect statements from debug code cleanup
- Apply clippy auto-fixes for dbg\! macro removals and path statements
- Achieve zero clippy warnings on all targets with -D warnings flag

* chore: update Cargo.toml clippy configuration

* refactor: simplify macOS job configuration and improve caching

* refactor: remove unnecessary async/await from service and proxy functions

* refactor: streamline pnpm installation in CI configuration

* refactor: simplify error handling and remove unnecessary else statements

* refactor: replace async/await with synchronous locks for core management

* refactor: add workflow_dispatch trigger to clippy job

* refactor: convert async functions to synchronous for service management

* refactor: convert async functions to synchronous for UWP tool invocation

* fix: change wrong logging

* refactor: convert proxy restoration functions to async

* Revert "refactor: convert proxy restoration functions to async"

This reverts commit b82f5d250b.

* refactor: update proxy restoration functions to return Result types

* fix: handle errors during proxy restoration and update async function signatures

* fix: handle errors during proxy restoration and update async function signatures

* refactor: update restore_pac_proxy and restore_sys_proxy functions to async

* fix: convert restore_pac_proxy and restore_sys_proxy functions to async

* fix: await restore_sys_proxy calls in proxy restoration logic

* fix: suppress clippy warnings for unused async functions in proxy restoration

* fix: suppress clippy warnings for unused async functions in proxy restoration
2025-08-18 02:02:25 +08:00
renovate[bot]
a5fdd3f1a2 chore(deps): update npm dependencies (#4400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-16 15:43:15 +08:00
renovate[bot]
be8a632a09 chore(deps): update rust crate async-trait to 0.1.89 (#4404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-16 15:42:31 +08:00
ONEUI8
95c34f1df5 Update profile.rs (#4408)
Co-authored-by: ONEUI-7 <150009830+ONEUI-7@users.noreply.github.com>
2025-08-16 15:42:21 +08:00
TianHua Liu
8b53a7bd99 docs: how to develop locally (#4409) 2025-08-16 15:38:32 +08:00
Tunglies
b169ee8149 Revert "refactor: replace tokio Mutex with parking_lot Mutex for improved performance"
This reverts commit 9cc6dde999.
2025-08-16 04:24:03 +00:00
Tunglies
9cc6dde999 refactor: replace tokio Mutex with parking_lot Mutex for improved performance 2025-08-16 02:44:00 +08:00
Tunglies
cf1fbb63c4 refactor: replace log macros with logging utility for IPC monitoring 2025-08-15 20:41:45 +08:00
Tunglies
2aa629ff5d feat: refactor check_commit job to use new workflow inputs and streamline build checks
fix: update tag_name in check_commit job to use a static value

refactor: streamline latest.json handling and improve commit hash comparison logic

fix: update curl command to follow redirects when fetching latest.json
2025-08-14 20:42:26 +08:00
Tunglies
1e2b453c24 refactor: streamline clean old assets job by using reusable workflow
refactor: update clean old assets job to include steps section

refactor: add checkout step in clean_old_assets job for improved repository access

fix: correct path to clean old assets workflow in autobuild.yml

fix: update path to clean old assets workflow in autobuild.yml

refactor: simplify clean_old_assets job by removing unnecessary steps

refactor: enhance clean_old_assets job dependencies for improved execution flow

Revert "refactor: enhance clean_old_assets job dependencies for improved execution flow"

This reverts commit 1a5108b5ad.

feat: implement get_latest_tauri_commit script and update release versioning logic
2025-08-14 20:42:24 +08:00
renovate[bot]
331e4a4970 chore(deps): update cargo dependencies (#4360)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-13 16:27:14 +08:00
Tunglies
ee3ffaef1d refactor: simplify log warning message formatting and remove unused LogLevel enum 2025-08-13 16:25:36 +08:00
renovate[bot]
7cc3bc83a0 chore(deps): update npm dependencies (#4367)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-13 16:09:56 +08:00
Tunglies
558e28ddaf refactor: simplify log retrieval by removing level parameter and relying on server-side filtering #4293 2025-08-13 01:15:33 +08:00
Sergey Kharenko
45e69543b3 fix: auto-detect KDE/Plasma and disable GTK CSD to fix titlebar button freeze (#4380)
* fix: auto-detect KDE/Plasma and disable GTK CSD to fix titlebar button freeze

* chore: update UPDATELOG

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-08-12 19:27:46 +08:00
wonfen
67ee41c5ea fix: ensure TUN is disabled before core exit 2025-08-11 23:19:49 +08:00
wonfen
160ed05178 fix: unify TUN status detection logic 2025-08-11 20:45:23 +08:00
renovate[bot]
5ecfe121b3 chore(deps): update dependency swr to ^2.3.5 (#4359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-09 17:42:09 +08:00
Tunglies
a654137af9 fix: adjust cleanup function and reduce refresh interval to 1 second 2025-08-09 10:04:38 +08:00
Tunglies
cb591f19fb feat: add workflow to clean old release assets with versioning and dry run support 2025-08-08 23:50:52 +08:00
renovate[bot]
4823a348be chore(deps): update rust crate warp to 0.4.1 (#4342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-08 23:49:09 +08:00
renovate[bot]
32da6ae808 chore(deps): update npm dependencies (#4347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-08 23:48:55 +08:00
renovate[bot]
7eb70b0f0d chore(deps): update dependency @vitejs/plugin-react to v5 (#4348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-08 23:47:18 +08:00
Tunglies
52e8e45daf fix: correct log level hierarchy and enhance log filtering logic 2025-08-08 23:30:24 +08:00
Tunglies
319c5b84fa Revert "feat: enhance log filtering by adding support for debug level and updating log hierarchy #4293"
This reverts commit a9cfb2cfaa.
2025-08-08 15:17:46 +08:00
Tunglies
6a93ff1fc1 fix: streamline autobuild versioning by utilizing outputs from check_commit job 2025-08-08 15:15:27 +08:00
Tunglies
6069b654d1 fix: ensure app quit notification is sent before quitting 2025-08-08 14:57:47 +08:00
Tunglies
2af8c32497 Revert "add: home card drag (#4215)"
This reverts commit 84989e0ea3.
2025-08-07 20:05:36 +08:00
Tunglies
a3957289c8 fix: enhance asset cleanup and versioning logic in autobuild workflow 2025-08-07 19:47:31 +08:00
Tunglies
3f5cd6c26a fix: resolve system proxy status detection and display inconsistency
- Fixed getSystemProxyActualState logic to properly check actual system status
- Unified system proxy state display across all components
- Replaced systemProxyIndicator with actualState for consistent UI display
- Updated components: setting-system, ProxyControlSwitches, proxy-tun-card
- Added entry to v2.4.0 changelog
2025-08-07 02:18:50 +08:00
renovate[bot]
8046dad56d chore(deps): update npm dependencies (#4324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-06 22:47:01 +08:00
renovate[bot]
cdc1fd2d87 chore(deps): update cargo dependencies (#4329)
* chore(deps): update cargo dependencies

* fix: update warp dependency to include server feature

* fix: update return type of scheme_handler to String for consistency

* fix: add hyper-util dependency and update warp path handlers for response status

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-08-06 22:46:46 +08:00
Tunglies
499626b946 fix: resolve intermittent startup deadlock issues
- Optimize configuration access locks to prevent race conditions
- Enhance UI monitoring thread with non-blocking lock operations
- Improve window creation timing and synchronization
- Add comprehensive deadlock detection and debugging logs
- Simplify code structure with better error handling patterns
- Update changelog with user-friendly descriptions
2025-08-06 22:12:00 +08:00
Tunglies
a9cfb2cfaa feat: enhance log filtering by adding support for debug level and updating log hierarchy #4293 2025-08-06 20:49:54 +08:00
Tunglies
7b976c16eb feat: enhance autobuild logic to check for Tauri-related changes and manage versioning 2025-08-06 20:34:57 +08:00
Tunglies
44e8a035aa fix: improve profile import validation and handle async lock correctly
fix: refactor import_profile function for improved readability and maintainability
2025-08-05 23:23:11 +08:00
Tunglies
6b57607926 fix: update autobuild versioning logic and improve asset checking regex 2025-08-05 23:12:15 +08:00
Tunglies
c3675e48fd fix: update tauri.conf.json version to use full version information including build metadata 2025-08-05 22:56:34 +08:00
Tunglies
a66393c609 feat: enhance profile import functionality with timeout and robust refresh strategy 2025-08-05 20:29:36 +08:00
Tunglies
776abaf56d fix: update service messages to use PRODUCTNAME variable for consistency 2025-08-05 20:09:35 +08:00
Tunglies
18808004f4 fix: update Cargo.toml version handling to use the provided version directly 2025-08-05 20:02:47 +08:00
Tunglies
db8761946d feat: add autobuild check logic workflow for version and source changes 2025-08-05 06:31:49 +00:00
renovate[bot]
2194a96145 chore(deps): update npm dependencies (#4294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 14:57:24 +08:00
renovate[bot]
ecd396d70f chore(deps): update cargo dependencies (#4297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 14:46:54 +08:00
Tunglies
5ab0438397 fix: duplicated build version checks 2025-08-04 14:44:51 +08:00
Tunglies
bcde047695 refactor: enhance logging in autobuild workflow with emojis for better visibility 2025-08-03 18:52:26 +08:00
Tunglies
109f5f9648 fix: resolve macOS window management issues and improve logging during app reopen events 2025-08-03 18:40:19 +08:00
Tunglies
d16c691c0f fix: can not filiter log level as expected 2025-08-03 09:52:27 +08:00
Tunglies
3eb2a5b3ef refactor: optimize timer and network management with atomic operations 2025-08-01 23:02:11 +08:00
Tunglies
569e2d5192 refactor: enhance traffic monitoring system with unified data management
 New Features:
- Implement unified traffic monitoring hook with reference counting
- Add intelligent data sampling and compression for better performance
- Introduce enhanced canvas traffic graph with mouse hover tooltips
- Add Y-axis labels and improved time axis display strategies
- Support multiple time ranges (1, 5, 10 minutes) with adaptive formatting

🚀 Performance Improvements:
- Smart data compression reduces memory usage by 80%
- Reference counting prevents unnecessary data collection when no components need it
- Debounced data updates reduce UI thrashing
- Optimized canvas rendering with controlled frame rates

🔧 Technical Improvements:
- Consolidate traffic monitoring logic into single hook (use-traffic-monitor.ts)
- Remove duplicate hook implementations
- Improve error handling with fallback to last valid data
- Add comprehensive traffic statistics and monitoring diagnostics
- Enhance tooltip system with precise data point highlighting

🐞 Bug Fixes:
- Fix connection speed display issues after IPC migration
- Improve data freshness indicators
- Better handling of network errors and stale data
- Consistent traffic parsing across all components

📝 Code Quality:
- Add TypeScript interfaces for better type safety
- Implement proper cleanup for animation frames and references
- Add error boundaries for traffic components
- Improve component naming and organization

This refactoring provides a more robust, performant, and feature-rich traffic monitoring system while maintaining backward compatibility.
2025-07-31 20:38:11 +08:00
renovate[bot]
0077157d28 chore(deps): update cargo dependencies (#4275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-31 14:43:09 +08:00
renovate[bot]
9e19bab5a7 chore(deps): update dependency zustand to ^5.0.7 (#4286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-31 14:42:45 +08:00
Tunglies
b1e2940db6 refactor: optimize singleton macro usage with Default trait implementations (#4279)
* refactor: implement DRY principle improvements across backend

Major DRY violations identified and addressed:

1. **IPC Stream Monitor Pattern**:
   - Created `utils/ipc_monitor.rs` with generic `IpcStreamMonitor` trait
   - Added `IpcMonitorManager` for common async task management patterns
   - Eliminates duplication across traffic.rs, memory.rs, and logs.rs

2. **Singleton Pattern Duplication**:
   - Created `utils/singleton.rs` with `singleton\!` and `singleton_with_logging\!` macros
   - Replaces 16+ duplicate singleton implementations across codebase
   - Provides consistent, tested patterns for global instances

3. **macOS Activation Policy Refactoring**:
   - Consolidated 3 duplicate methods into single parameterized `set_activation_policy()`
   - Eliminated code duplication while maintaining backward compatibility
   - Reduced maintenance burden for macOS-specific functionality

These improvements enhance maintainability, reduce bug potential, and ensure consistent patterns across the backend codebase.

* fix: resolve test failures and clippy warnings

- Fix doctest in singleton.rs by using rust,ignore syntax and proper code examples
- Remove unused time::Instant import from ipc_monitor.rs
- Add #[allow(dead_code)] attributes to future-use utility modules
- All 11 unit tests now pass successfully
- All clippy checks pass with -D warnings strict mode
- Documentation tests properly ignore example code that requires full context

* refactor: migrate code to use new utility tools (partial)

Progress on systematic migration to use created utility tools:

1. **Reorganized IPC Monitor**:
   - Moved ipc_monitor.rs to src-tauri/src/ipc/monitor.rs for better organization
   - Updated module structure to emphasize IPC relationship

2. **IpcManager Singleton Migration**:
   - Replaced manual OnceLock singleton pattern with singleton_with_logging\! macro
   - Simplified initialization code and added consistent logging
   - Removed unused imports (OnceLock, logging::Type)

3. **ProxyRequestCache Singleton Migration**:
   - Migrated from once_cell::sync::OnceCell to singleton\! macro
   - Cleaner, more maintainable singleton pattern
   - Consistent with project-wide singleton approach

These migrations demonstrate the utility and effectiveness of the created tools:
- Less boilerplate code
- Consistent patterns across codebase
- Easier maintenance and debugging

* feat: complete migration to new utility tools - phase 1

Successfully migrated core components to use the created utility tools:

- Moved `ipc_monitor.rs` to `src-tauri/src/ipc/monitor.rs`
- Better organization emphasizing IPC relationship
- Updated module exports and imports

- **IpcManager**: Migrated to `singleton_with_logging\!` macro
- **ProxyRequestCache**: Migrated to `singleton\!` macro
- Eliminated ~30 lines of boilerplate singleton code
- Consistent logging and initialization patterns

- Removed unused imports (OnceLock, once_cell, logging::Type)
- Cleaner, more maintainable code structure
- All 11 unit tests pass successfully
- Zero compilation warnings

- **Lines of code reduced**: ~50+ lines of boilerplate
- **Consistency improved**: Unified singleton patterns
- **Maintainability enhanced**: Centralized utility functions
- **Test coverage maintained**: 100% test pass rate

Remaining complex monitors (traffic, memory, logs) will be migrated to use the shared IPC monitoring patterns in the next phase, which requires careful refactoring of their streaming logic.

* refactor: complete singleton pattern migration to utility macros

Migrate remaining singleton patterns across the backend to use standardized
utility macros, achieving significant code reduction and consistency improvements.

- **LogsMonitor** (ipc/logs.rs): `OnceLock` → `singleton_with_logging\!`
- **Sysopt** (core/sysopt.rs): `OnceCell` → `singleton_lazy\!`
- **Tray** (core/tray/mod.rs): Complex `OnceCell` → `singleton_lazy\!`
- **Handle** (core/handle.rs): `OnceCell` → `singleton\!`
- **CoreManager** (core/core.rs): `OnceCell` → `singleton_lazy\!`
- **TrafficMonitor** (ipc/traffic.rs): `OnceLock` → `singleton_lazy_with_logging\!`
- **MemoryMonitor** (ipc/memory.rs): `OnceLock` → `singleton_lazy_with_logging\!`

- `singleton_lazy\!` - For complex initialization patterns
- `singleton_lazy_with_logging\!` - For complex initialization with logging

- **Code Reduction**: -33 lines of boilerplate singleton code
- **DRY Compliance**: Eliminated duplicate initialization patterns
- **Consistency**: Unified singleton approach across codebase
- **Maintainability**: Centralized singleton logic in utility macros
- **Zero Breaking Changes**: All existing APIs remain compatible

All tests pass and clippy warnings resolved.

* refactor: optimize singleton macros using Default trait implementation

Simplify singleton macro usage by implementing Default trait for complex
initialization patterns, significantly improving code readability and maintainability.

- **MemoryMonitor**: Move IPC client initialization to Default impl
- **TrafficMonitor**: Move IPC client initialization to Default impl
- **Sysopt**: Move Arc<Mutex> initialization to Default impl
- **Tray**: Move struct field initialization to Default impl
- **CoreManager**: Move Arc<Mutex> initialization to Default impl

```rust
singleton_lazy_with_logging\!(MemoryMonitor, INSTANCE, "MemoryMonitor", || {
    let ipc_path_buf = ipc_path().unwrap();
    let ipc_path = ipc_path_buf.to_str().unwrap_or_default();
    let client = IpcStreamClient::new(ipc_path).unwrap();
    MemoryMonitor::new(client)
});
```

```rust
impl Default for MemoryMonitor { /* initialization logic */ }
singleton_lazy_with_logging\!(MemoryMonitor, INSTANCE, "MemoryMonitor", MemoryMonitor::default);
```

- **Code Reduction**: -17 lines of macro closure code (80%+ simplification)
- **Separation of Concerns**: Initialization logic moved to proper Default impl
- **Readability**: Single-line macro calls vs multi-line closures
- **Testability**: Default implementations can be tested independently
- **Rust Idioms**: Using standard Default trait pattern
- **Performance**: Function calls more efficient than closures

All tests pass and clippy warnings resolved.

* refactor: implement MonitorData and StreamingParser traits for IPC monitors

* refactor: add timeout and retry_interval fields to IpcStreamMonitor; update TrafficMonitorState to derive Default

* refactor: migrate AppHandleManager to unified singleton control

- Replace manual singleton implementation with singleton_with_logging\! macro
- Remove std::sync::Once dependency in favor of OnceLock-based pattern
- Improve error handling for macOS activation policy methods
- Maintain thread safety with parking_lot::Mutex for AppHandle storage
- Add proper initialization check to prevent duplicate handle assignment
- Enhance logging consistency across AppHandleManager operations

* refactor: improve hotkey management with enum-based operations

- Add HotkeyFunction enum for type-safe function selection
- Add SystemHotkey enum for predefined system shortcuts
- Implement Display and FromStr traits for type conversions
- Replace string-based hotkey registration with enum methods
- Add register_system_hotkey() and unregister_system_hotkey() methods
- Maintain backward compatibility with string-based register() method
- Migrate singleton pattern to use singleton_with_logging\! macro
- Extract hotkey function execution logic into centralized execute_function()
- Update lib.rs to use new enum-based SystemHotkey operations
- Improve type safety and reduce string manipulation errors

Benefits:
- Type safety prevents invalid hotkey function names
- Centralized function execution reduces code duplication
- Enum-based API provides better IDE autocomplete support
- Maintains full backward compatibility with existing configurations

* fix: resolve LightWeightState initialization order panic

- Modify with_lightweight_status() to safely handle unmanaged state using try_state()
- Return Option<R> instead of R to gracefully handle state unavailability
- Update is_in_lightweight_mode() to use unwrap_or(false) for safe defaults
- Add state availability check in auto_lightweight_mode_init() before access
- Maintain singleton check priority while preventing early state access panics
- Fix clippy warnings for redundant pattern matching

Resolves runtime panic: "state() called before manage() for LightWeightState"

* refactor: add unreachable patterns for non-macOS in hotkey handling

* refactor: simplify SystemHotkey enum by removing redundant cfg attributes

* refactor: add macOS conditional compilation for system hotkey registration methods

* refactor: streamline hotkey unregistration and error logging for macOS
2025-07-31 14:35:13 +08:00
Tunglies
4113cd619c feat: add devcontainer configuration for Docker and Codespaces support 2025-07-31 11:39:14 +08:00
Tunglies
1f78d576a3 feat: migrate logs API from REST to IPC streaming (#4277)
* feat: migrate logs API from REST to IPC streaming

- Replace REST API `/logs` calls with IPC streaming implementation
- Add new `src-tauri/src/ipc/logs.rs` with `LogsMonitor` for real-time log streaming
- Implement duplicate stream prevention with level tracking
- Add frontend-backend communication via Tauri commands for log management
- Remove WebSocket compatibility, maintain IPC-only mode
- Fix duplicate monitoring task startup when toggling log service
- Add proper task lifecycle management with JoinHandle cleanup

* refactor: remove dead code from logs.rs to fix clippy warnings

- Remove unused `timestamp` field from LogItem struct
- Remove unused `client` field from LogsMonitor struct
- Remove unused methods: `is_fresh`, `get_current_monitoring_level`, `get_current_logs`
- Simplify LogsMonitor initialization by removing client dependency
- All clippy warnings with -D warnings now resolved

* refactor: extract duplicate fmt_bytes function to utils module

- Create new utils/format.rs module with fmt_bytes function
- Remove duplicate fmt_bytes implementations from traffic.rs and memory.rs
- Update imports to use shared utils::format::fmt_bytes
- Add comprehensive unit tests for fmt_bytes function
- Ensure DRY principle compliance and code maintainability
2025-07-30 23:11:21 +08:00
Tunglies
e2a548f6a5 fix: update bzip2 and sysinfo versions, remove unused libbz2-rs-sys package 2025-07-30 23:00:46 +08:00
renovate[bot]
2956725e66 chore(deps): update cargo dependencies (#4231)
* chore(deps): update cargo dependencies

* chore(deps): update cargo dependencies

* fix: sysinfo crate use limit features

* chore(deps): update npm dependencies (#4254)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: update sysinfo and zip dependency versions in Cargo.toml; add ignored dependencies in renovate.json

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-07-30 21:22:33 +08:00
Dyna
5131d37d58 fix: the issue of home page port being out of sync (#4271)
* synchronize port 7897

* Update UPDATELOG.md
2025-07-30 19:59:11 +08:00
renovate[bot]
1dfba159e0 chore(deps): update npm dependencies (#4254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-29 20:12:54 +08:00
Tunglies
631718a138 feat: enhance autobuild workflow to check for existing assets before running 2025-07-29 20:09:55 +08:00
Tunglies
3172ab2d1c chore: update Mihomo version references in prebuild script 2025-07-29 19:55:25 +08:00
Dyna
6a6bde3764 refactor: external-controller-cors to always show (#4243)
* refactor: external-controller-cors to always show

* i18n: update translation

* Update UPDATELOG.md
2025-07-28 11:24:16 +08:00
wonfen
f756b37f97 i18n: add missing trans 2025-07-28 09:12:40 +08:00
Tunglies
a26c28517a chore: update dependencies and versions in Cargo files 2025-07-27 22:51:51 +08:00
Tunglies
894428642b fix: add sysinfo to ignored dependencies in renovate configuration 2025-07-27 08:42:44 +08:00
Tunglies
36d58d05b3 chore: downgrade sysinfo version 2025-07-27 08:30:23 +08:00
Tunglies
80de055fc2 fix: resolve connection speed display issues after IPC migration #4208 (#4229)
🐞 Bug Fixes:
- Fix missing upload/download rate display in connections page after IPC migration
- Implement real-time connection speed calculation based on data differences
- Add connection speed data types and calculation logic

🔧 Technical Improvements:
- Add connection speed calculation function in AppDataProvider
- Use useRef to store previous connection data for speed difference calculation
- Add curUpload and curDownload fields to connection data
- Optimize connection data processing flow for accurate speed calculations

📝 Changelog:
- Update relevant issue descriptions in UPDATELOG.md
2025-07-27 03:00:08 +08:00
Tunglies
4905b44c8a fix: resolve speed test functionality issue after IPC migration #4221, #4218 (#4228)
* chore(deps): update cargo dependencies

* fix: sysinfo crate use limit features

* fix: update headers-core dependency and kode-bridge version; enhance system monitor status validation

* fix: extend overall_status type in ISystemMonitorOverview to include 'healthy'

* refactor: update URL encoding strategy in IpcManager and cmdGetProxyDelay function

* fix: resolve speed test functionality issue after IPC migration

* fix: resolve speed test functionality issue after IPC migration #4221, #4218

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-27 02:07:00 +08:00
renovate[bot]
02e19bb132 chore(deps): update dependency cross-env to v10 (#4214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-26 22:55:16 +08:00
Dyna
84989e0ea3 add: home card drag (#4215)
* add home page control buttons

* Update UPDATELOG.md

* update zh en

* Revert "add home page control buttons"

This reverts commit e184843855.

* Update UPDATELOG.md

* Revert "update zh en"

This reverts commit cbaddf59fb.

* remove unnecessary code

* fix: home.tsx

* add  react-beautiful-dnd script

* add home page drag

* fix: react-beautiful-dndA setup problem was encountered

* Revert "fix: react-beautiful-dndA setup problem was encountered"

This reverts commit 81c34dd472.

* fix: react-beautiful-dndA setup problem was encountered

* Update types.d.ts

* Revert "Update types.d.ts"

This reverts commit 854046cf2f.

* update @types/react-beautiful-dnd

* Update home.tsx

* Update UPDATELOG.md

* remove unnecessary components

* Revert "add  react-beautiful-dnd script"

This reverts commit e84d569225.

* Reapply "add  react-beautiful-dnd script"

This reverts commit 2379fd27c4.

* fix: home page error
2025-07-26 22:13:44 +08:00
Dyna
9661c5fd82 fix: Windows installer parameter problem (#4213)
* repair and delete the startup item

* fix: parameter usage issues

* Update UPDATELOG.md

* Update UPDATELOG.md

* fix: install
2025-07-26 07:52:21 +08:00
Tunglies
c8dfdb7a5a feat: add shared cache key for autobuild workflows 2025-07-25 18:36:27 +08:00
Tunglies
df5897c908 Squashed commit of the following:
commit 8928e6438277995f7167e400d4d77657a0ab0113
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Fri Jul 25 18:25:13 2025 +0800

    feat: add release step to development workflow for versioning

commit 14085c4f7c8943669fdacae3bd2b6a07c0c0389a
Author: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date:   Fri Jul 25 18:19:36 2025 +0800

    feat: add release commands for autobuild and deploytest to package.json and update version script
2025-07-25 18:25:40 +08:00
renovate[bot]
8d0af75145 chore(deps): update npm dependencies (#4098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 17:58:20 +08:00
Mimi
36c6f0ca8d feat: unify switch component styles and BaseDialog behavior in the UI (#4183)
* feat: unify switch component styles in the UI

* fix: prettier

* feat: unify Item styles
2025-07-25 17:57:33 +08:00
Tunglies
3048a2ae08 feat: Implement configuration caching mechanism and force-refresh feature**
 **New Features**:

* Added API and frontend support for forcibly refreshing Clash configuration cache
* Implemented a configuration cache TTL mechanism (60 seconds) to reduce redundant requests
* Introduced `ProxyRequestCache` system to manage backend data caching
* Automatically refresh frontend state after core operations to enhance user experience

🚀 **Performance Optimizations**:

* Increased Clash configuration refresh interval from 5 seconds to 60 seconds
* Force refresh cache after configuration updates to resolve data inconsistency
* Automatically trigger state refresh after core switch, start, stop, and restart actions

🔧 **Technical Improvements**:

* Removed unused dependencies: `ab_glyph`, `owned_ttf_parser`, `ttf-parser`
* Simplified WebSocket dependency management, unified `tungstenite` version
* Refactored configuration save validation process, improved merge file handling
* Improved error handling and overall user experience
2025-07-24 01:59:25 +08:00
Tunglies
27535c7bb7 refactor: remove unused dependencies from Cargo.toml and Cargo.lock (#4179) 2025-07-24 00:51:36 +08:00
Tunglies
15a1770ee9 feat: migrate mihomo to use kode-bridge IPC on Windows and Unix (#4051)
* Refactor Mihomo API integration and remove crate_mihomo_api

- Removed the `mihomo_api` crate and its dependencies from the project.
- Introduced `IpcManager` for handling IPC communication with Mihomo.
- Implemented IPC methods for managing proxies, connections, and configurations.
- Updated `MihomoManager` to utilize `IpcManager` instead of the removed crate.
- Added platform-specific IPC socket path handling for macOS, Linux, and Windows.
- Cleaned up related tests and configuration files.

* fix: remove duplicate permission entry in desktop capabilities

* refactor: replace MihomoManager with IpcManager and remove Mihomo module

* fix: restore tempfile dependency in dev-dependencies

* fix: update kode-bridge dependency to use git source from the dev branch

* feat: migrate mihomo to use kode-bridge IPC on Windows

This commit implements a comprehensive migration from legacy service IPC to the kode-bridge library for Windows IPC communication. Key changes include:

Replace service_ipc with kode-bridge IpcManager for all mihomo communications
Simplify proxy commands using new caching mechanism with ProxyRequestCache
Add Windows named pipe (\.\pipe\mihomo) and Unix socket IPC endpoint configuration
Update Tauri permissions and dependencies (dashmap, tauri-plugin-notification)
Add IPC logging support and improve error handling
Fix Windows IPC path handling in directory utilities
This migration enables better cross-platform IPC support and improved performance for mihomo proxy core communication.

* doc: add IPC communication with Mihomo kernel, removing Restful API dependency

* fix: standardize logging type naming from IPC to Ipc for consistency

* refactor: clean up and optimize code structure across multiple components and services

- Removed unnecessary comments and whitespace in various files.
- Improved code readability and maintainability by restructuring functions and components.
- Updated localization files for consistency and accuracy.
- Enhanced performance by optimizing hooks and utility functions.
- General code cleanup in settings, pages, and services to adhere to best practices.

* fix: simplify URL formatting in test_proxy_delay method

* fix: update kode-bridge dependency to version 0.1.3 and change source to crates.io

* fix: update macOS target versions in development workflow

* Revert "fix: update macOS target versions in development workflow"

This reverts commit b9831357e4.

* feat: enhance IPC path handling for Unix systems and improve directory safety checks

* feat: add conditional compilation for Unix-specific IPC path handling

* chore: update cagro.lock

* feat: add external controller configuration and UI support

* Refactor proxy and connection management to use IPC-based commands

- Updated `get_proxies` function in `proxy.rs` to call the new IPC command.
- Renamed `get_refresh_proxies` to `get_proxies` in `ipc/general.rs` for consistency.
- Added new IPC commands for managing proxies, connections, and configurations in `cmds.ts`.
- Refactored API calls in various components to use the new IPC commands instead of HTTP requests.
- Improved error handling and response management in the new IPC functions.
- Cleaned up unused API functions in `api.ts` and redirected relevant calls to `cmds.ts`.
- Enhanced connection management features including health checks and updates for proxy providers.

* chore: update dependencies and improve error handling in IPC manager

* fix: downgrade zip dependency from 4.3.0 to 4.2.0

* feat: Implement traffic and memory data monitoring service

- Added `TrafficService` and `TrafficManager` to manage traffic and memory data collection.
- Introduced commands to get traffic and memory data, start and stop the traffic service.
- Integrated IPC calls for traffic and memory data retrieval in the frontend.
- Updated `AppDataProvider` and `EnhancedTrafficStats` components to utilize new data fetching methods.
- Removed WebSocket connections for traffic and memory data, replaced with IPC polling.
- Added logging for better traceability of data fetching and service status.

* refactor: unify external controller handling and improve IPC path resolution

* fix: replace direct IPC path retrieval with guard function for external controller

* fix: convert external controller IPC path to string for proper insertion in config map

* fix: update dependencies and improve IPC response handling

* fix: remove unnecessary unix conditional for ipc path import

* Refactor traffic and memory monitoring to use IPC stream; remove TrafficService and TrafficManager. Introduce new IPC-based data retrieval methods for traffic and memory, including formatted data and system overview. Update frontend components to utilize new APIs for enhanced data display and management.

* chore: bump crate rand version to 0.9.2

* feat: Implement enhanced traffic monitoring system with data compression and sampling

- Introduced `useTrafficMonitorEnhanced` hook for advanced traffic data management.
- Added `TrafficDataSampler` class for handling raw and compressed traffic data.
- Implemented reference counting to manage data collection based on component usage.
- Enhanced data validation with `SystemMonitorValidator` for API responses.
- Created diagnostic tools for monitoring performance and error tracking.
- Updated existing hooks to utilize the new enhanced monitoring features.
- Added utility functions for generating and formatting diagnostic reports.

* feat(ipc): improve URL encoding and error handling for IPC requests

- Add percent-encoding for URL paths to handle special characters properly
- Enhance error handling in update_proxy with proper logging
- Remove excessive debug logging to reduce noise
- Update kode-bridge dependency to v0.1.5
- Fix JSON parsing error handling in PUT requests

Changes include:
- Proper URL encoding for connection IDs, proxy names, and test URLs
- Enhanced error handling with fallback responses in updateProxy
- Comment out verbose debug logs in traffic monitoring and data validation
- Update dependency version for improved IPC functionality

* feat: major improvements in architecture, traffic monitoring, and data validation

* Refactor traffic graph components: Replace EnhancedTrafficGraph with EnhancedCanvasTrafficGraph, improve rendering performance, and enhance visual elements. Remove deprecated code and ensure compatibility with global data management.

* chore: update UPDATELOG.md for v2.4.0 release, refine traffic monitoring system details, and enhance IPC functionality

* chore: update UPDATELOG.md to reflect removal of deprecated MihomoManager and unify IPC control

* refactor: remove global traffic service testing method from cmds.ts

* Update src/components/home/enhanced-canvas-traffic-graph.tsx

* Update src/hooks/use-traffic-monitor-enhanced.ts

* Update src/components/layout/layout-traffic.tsx

* refactor: remove debug state management from LayoutTraffic component

---------
2025-07-24 00:49:55 +08:00
Dyna
f580409ade add: Verge Version copy button (#4164) 2025-07-23 11:11:34 +08:00
Tunglies
f209d17e3c chore: bump clash-verge-rev version to 2.4.0 2025-07-22 18:42:25 +08:00
Dyna
5047b0f614 fix: the problem of inconsistent color of system theme window (#4133)
* fix-title

* Update UPDATELOG.md
2025-07-22 11:01:23 +08:00
wonfen
ad623da86d chore: update i18n (#4128) 2025-07-22 08:41:02 +08:00
Tunglies
3ec7772e5d fix: update sysinfo and zip dependencies to specific versions in Cargo.toml 2025-07-22 08:05:19 +08:00
Tunglies
e6b57561e3 chore: update cargo.lock 2025-07-22 08:02:07 +08:00
Tunglies
3b1c2c95ec Revert "chore(deps): update rust crate zip to 4.3.0 (#4073)"
This reverts commit fed64bcd08.
2025-07-22 07:59:26 +08:00
Tunglies
364abafffe fix: update prerequisites link in CONTRIBUTING.md and update dependencies in Cargo.lock
- Updated the link for installing Rust and Node.js in CONTRIBUTING.md.
- Added new dependencies: wayland-backend, wayland-client, wayland-protocols.
- Updated versions for several dependencies including async-channel, async-io, async-process, and others.
- Removed deprecated dispatch2 version and added new dlib dependency.
- Updated various dependencies to their latest versions for improved stability and features.
2025-07-20 04:19:25 +08:00
Copilot
389281b96c Revert sysinfo dependency from 0.36.0 to 0.35.2 (#4086) 2025-07-16 09:34:03 +08:00
renovate[bot]
fed64bcd08 chore(deps): update rust crate zip to 4.3.0 (#4073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-15 22:25:25 +08:00
Tunglies
17a5c4d094 chore: update sysinfo dependency to version 0.36.0 (#4082)
* chore: update sysinfo dependency to version 0.36.0

* fix: update sysinfo dependency to enable specific features
2025-07-15 22:23:24 +08:00
Dyna
f2317c7816 fix: log levels will not display their respective logs correctly (#4074)
* fix-log levels will not display their respective logs correctly

* fix-logs

* Update UPDATELOG.md

* Update UPDATELOG.md
2025-07-15 18:55:53 +08:00
Tunglies
7fce7ca62f Revert "chore(deps): update cargo dependencies (#4023)" (#4072)
This reverts commit 2c9aa4bca7.
2025-07-14 23:55:39 +08:00
Tunglies
167bcb222d fix: add platform-specific input options for workflow dispatch in dev.yml 2025-07-14 20:14:35 +08:00
Tunglies
108a599666 fix: add platform input options for workflow dispatch in dev.yml 2025-07-14 20:09:46 +08:00
Tunglies
57476741cd fix: improve logging format for old shortcut removal failure 2025-07-14 19:31:19 +08:00
Tunglies
077f3e79f8 fix: unify startup shortcut name to "Clash Verge" on Windows 2025-07-14 04:22:06 +08:00
renovate[bot]
2c9aa4bca7 chore(deps): update cargo dependencies (#4023)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-11 23:34:47 +08:00
renovate[bot]
9cf0f1e0a7 chore(deps): update npm dependencies (#4014)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-11 23:34:38 +08:00
Dyna
660c03a564 optimization: (fix: the crash when inputting special characters in the search box (#4026)) (#4029)
* add a test rule

* add translation support
2025-07-10 21:09:02 +08:00
Dyna
1d49d79af2 fix: the crash when inputting special characters in the search box (#4026)
* add special character escapes

* update logs
2025-07-10 13:34:37 +08:00
Dyna
4ccb17dde6 fix: the problem that the DNS override nameserver-policy field cannot correctly recognize multiple writing methods (#4011)
* fix: the problem that the DNS override nameserver-policy field cannot correctly recognize multiple writing methods

* update logs

* fix-dns-viewer.tsx
2025-07-08 17:05:17 +08:00
renovate[bot]
8bc433711d chore(deps): update rust crate tokio to 1.46.1 (#3989)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-07 18:04:40 +08:00
renovate[bot]
2e82bd8624 chore(deps): update npm dependencies (#3986)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-07 18:04:32 +08:00
❤是纱雾酱哟~
4b57d513a2 Chore (Renovate): Disable Dependency Dashboard (#3999)
* Chore (Renovate): Disable Dependency Dashboard

- Close #3658

* Fix (Renovate): Prettify JSON format according to "prettier"
2025-07-07 18:02:29 +08:00
Dyna
d36c3a83a9 fix:DNS override server support is left blank by default (#3997)
* fix:DNS server support being left blank by default

* update logs
2025-07-06 11:01:05 +08:00
Tunglies
ac3afe4dee fix: manage setup Mutex crash (#3995)
* Revert "Revert "refactor: Replace std::sync::Mutex with parking_lot::Mutex for improved performance and consistency in multiple files" (#3990)"

This reverts commit 667844aa12.

* refactor: Manage lightweight state in the app setup and clean up unused proxy client code

* refactor: Move macOS-specific Manager import under conditional compilation
2025-07-06 02:14:48 +08:00
Dyna
667844aa12 Revert "refactor: Replace std::sync::Mutex with parking_lot::Mutex for improved performance and consistency in multiple files" (#3990) 2025-07-05 12:17:02 +08:00
Tunglies
6d192233d1 refactor: Replace std::sync::Mutex with parking_lot::Mutex for improved performance and consistency in multiple files 2025-07-05 00:33:53 +08:00
Tunglies
764ef48fd1 refactor(Draft): Replace latest() with latest_ref() and data() with data_mut() in multiple files for improved mutability handling and consistency across the codebase (#3987)
* feat: add benchmarking for draft operations and new draft management structure

* Refactor Config Access: Replace `latest()` with `latest_ref()` and `data()` with `data_mut()` in multiple files for improved mutability handling and consistency across the codebase.

* refactor: remove DraftNew implementation and related benchmarks for cleaner codebase
2025-07-04 22:43:23 +08:00
renovate[bot]
3f95c81243 chore(deps): update rust crate tokio to 1.46.0 (#3943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 18:51:25 +08:00
renovate[bot]
7c385d329d chore(deps): update npm dependencies (#3944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 18:51:18 +08:00
Dyna
553438d219 fix windows installer (#3979)
* add loop detection Clash Verge Lnk

* add delete the window-state.json file .window-state.json file

* add cycle through the registry and delete useless registry entries

* add delete the specified registry path

* update logs
2025-07-04 12:28:15 +08:00
rebecca554owen
941921904c fix: remove unused redir-port and tproxy-port on Windows (#3969)
Directly remove redir-port and tproxy-port configurations on Windows platform
2025-07-04 12:27:59 +08:00
wonfen
7d808ed798 fix: prevent freeze caused by enabling Proxy Guard 2025-07-04 12:22:22 +08:00
❤是纱雾酱哟~
7704072a65 Chore (ISSUE_TEMPLATE): 进一步优化问题反馈模板 (#3975)
- 当前模板强依赖于用户把日志贴到正确的位置上
- 参考 WinGet 的问题模板,放弃日志折叠功能,强制用户以代码块形式粘贴日志
2025-07-03 18:41:46 +08:00
❤是纱雾酱哟~
9076baf1c8 Chore (ISSUE_TEMPLATE): 修复错误的 YAML 语法 (#3951)
- 修改「OS」分类的类型:"dropdown" -> "checkbox"
  - 一个问题可能不只影响一个特定的操作系统
- 修改「软件版本」分类,增加 "render" 属性
  - 这能让 GFM 直接把这部分内容渲染为 render 指定语法的代码片段
2025-07-03 14:30:46 +08:00
Sukka
954ff53d9b refactor: use React in its intended way (#3963)
* refactor: replace `useEffect` w/ `useLocalStorage`

* refactor: replace `useEffect` w/ `useSWR`

* refactor: replace `useEffect` and `useSWR`. clean up `useRef`

* refactor: use `requestIdleCallback`

* refactor: replace `useEffect` w/ `useMemo`

* fix: clean up `useEffect`

* refactor: replace `useEffect` w/ `useSWR`

* refactor: remove unused `useCallback`

* refactor: enhance performance and memory management in frontend processes

* refactor: improve pre-push script structure and readability

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-07-02 23:34:13 +08:00
Tunglies
37d268bb16 chore(deps): remove deprecated dependencies (#3960)
* chore(deps):  remove deprecated dependencies

* refactor: simplify string formatting in make_key function
2025-07-02 03:07:50 +08:00
Tunglies
5befa90f81 chore(deps): update dashmap to version 7.0.0-rc2 2025-07-01 02:02:14 +08:00
Tunglies
6e3313f00d chore: remove redundant bug fix section from UPDATELOG.md 2025-06-30 21:11:01 +08:00
Dyna
7b5afb7afe Add cors (#3909)
* add external `cors` control panel

* optimize format

* fix-script.rs

* fix-service.rs

* fix-rs

async_proxy_query.rs

event_driven_proxy.rs

service_ipc.rs

service.rs

sysopt.rs

* lower the prettier version number to 3.5.3

* Revert "lower the prettier version number to 3.5.3"

This reverts commit 0f1c3dfa8a.

* fix: prttier erros

* add developer environment detection and controlled the display of development environment URL

* submit required

* fix-external-controller-cors

* use the custom component ToggleButton to ensure a uniform button style

* fix-tsx

hotkey-viewer.tsx

external-controller-cors.tsx

* fix-bug_report.yml

* remove the annoying title

* fix-write overload problem

* Individual button settings

* fix-setting-clash.tsx

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-06-30 20:48:20 +08:00
renovate[bot]
fe13dad06f chore(deps): update rust crate ab_glyph to 0.2.30 (#3932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-30 20:22:43 +08:00
renovate[bot]
b41bad0ae2 chore(deps): update npm dependencies (#3918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-30 20:22:37 +08:00
Tunglies
18ef7f0272 feat: enhance proxy management with caching and refresh logic 2025-06-30 20:14:04 +08:00
❤是纱雾酱哟~
4435a5aee4 Chore (ISSUE_TEMPLATE): 修复错误的 YAML 缩进 (bug_report.yml) (#3933) 2025-06-29 19:27:13 +08:00
Tunglies
d9e3a47894 fix: adjust formatting of log content section in bug report template 2025-06-29 10:41:18 +08:00
❤是纱雾酱哟~
c96be18187 chore (ISSUE_TEMPLATE): 修改问题反馈模板 (#3927)
* chore (ISSUE_TEMPLATE): 修改问题反馈模板

- 修改 bug_report.yml
- 增加一段预置的格式模板,指引用户将日志粘贴在规范的 Code Block 中以保持日志原有的格式排版
- 使用 <details /> 块以压缩日志片段,对于非 Contributors / Collaborators 用户友好,规避日志霸屏效果,简化爬楼。

* 接受来自审查的建议

- 增加英语支持,以方便非中文母语用户

Co-authored-by: Tunglies <tunglies.dev@outlook.com>

---------

Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-06-28 21:23:46 +08:00
Tunglies
47416dd3f8 chore: update UPDATELOG 2025-06-28 20:03:30 +08:00
Tunglies
4486f734bb fix: correct traffic percentage calculation to handle zero total gracefully #3920 2025-06-28 20:00:49 +08:00
Tunglies
bea6a2c8f7 chore: update Prettier configuration and dependencies; refactor code formatting for consistency (#3926) 2025-06-28 18:37:53 +08:00
renovate[bot]
82af9ed78e chore(deps): update cargo dependencies (#3908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-27 23:48:42 +08:00
renovate[bot]
2b9e38d259 chore(deps): update npm dependencies (#3910)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-27 23:48:18 +08:00
Tunglies
7c4222aed2 chore: update Node.js setup steps in formatting workflow to use corepack for package management (#3914) 2025-06-27 23:46:51 +08:00
Tunglies
a574ced428 Refactor logging statements to use the new formatting syntax for improved readability and consistency across the codebase. This includes updating error, warning, and info logs in various modules such as system commands, configuration, core functionalities, and utilities. Additionally, minor adjustments were made to string formatting in backup and proxy features to enhance clarity. 2025-06-27 23:30:59 +08:00
wonfen
cf437e6d94 chore: reduce default auto clean log to 7 days 2025-06-27 09:29:55 +08:00
Tunglies
e1bb8aa125 chore(pre-push): update comments for clarity and refine format check condition 2025-06-27 00:36:00 +08:00
Tunglies
c11bdd81e9 chore(i18n): add "Saved Successfully" message to English and Chinese locales 2025-06-27 00:32:37 +08:00
Tunglies
f1192c95a8 feat: add notification system with hotkey events and permission handling (#3867)
* feat: add notification system with hotkey events and permission handling

* Add macOS-specific handling for AppHidden notification

Introduces conditional support for the AppHidden notification event,
enabling macOS-specific behavior. Updates the enum and notification
logic to include this platform-specific feature.

Improves macOS user experience by accommodating system-level
application hiding events.

* Implement feature X to enhance user experience and fix bug Y in module Z

* refactor(notification): update notification keys for consistency and clarity

* chore(deps): update dependencies to latest versions
2025-06-26 23:09:07 +08:00
renovate[bot]
ae187cc21a chore(deps): update npm dependencies (#3871)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-06-26 22:33:58 +08:00
renovate[bot]
a7875718f7 chore(deps): update rust crate tauri to 2.6.1 (#3906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-26 22:31:28 +08:00
renovate[bot]
5db1f7cda7 chore(deps): update cargo dependencies (#3896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-26 22:29:13 +08:00
renovate[bot]
cb98b17052 chore(deps): update npm dependencies to v7 (#3886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-26 01:09:50 +08:00
renovate[bot]
7aee1c6d6e chore(deps): update cargo dependencies (#3872)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-26 01:09:36 +08:00
TRH
f22199b7d9 chore(logging): 去除无用日志 (#3882)
* chore(logging): 去除无用日志

* chore: 删除相关计时代码
2025-06-24 16:49:06 +08:00
Tunglies
0a8d6e5147 fix: add validation for profile URL format during import 2025-06-23 23:30:33 +08:00
希亚的西红柿
6d519dac1e fix: auto light-weight mode doesn't take effect in silent-start mode (#3875)
* fix: auto light-weight mode does not take effect when silent-start mode is enabled

* refactor: streamline window state retrieval and hiding logic

* fix: add checks for remote name and existence before format check in pre-push hook

* fix: simplify remote checks in pre-push hook to enhance clarity and maintainability

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2025-06-23 23:13:31 +08:00
wonfen
d5a174c71b perf: improve proxy status indicator and toggle responsiveness 2025-06-23 12:59:24 +08:00
wonfen
628de70e89 chore: remove unused imports 2025-06-23 00:09:17 +08:00
wonfen
fee08f3826 fix: correct address display error caused by async system proxy retrieval 2025-06-22 23:19:11 +08:00
wonfen
bdfc383a18 refactor: enhance Windows proxy retrieval by using WinAPI for registry access 2025-06-22 21:05:50 +08:00
wonfen
f6b5524e0e refactor: replace shell command check with WinAPI call 2025-06-22 18:45:38 +08:00
Tunglies
e7461fccab refactor: remove unused macOS tray speed display and improve tray icon handling (#3862)
* refactor: remove unused macOS tray speed display and improve tray icon handling

* refactor: disable macOS specific logging during core initialization

* feat: add linux elevator function to determine privilege escalation command
2025-06-22 16:28:06 +08:00
wonfen
a92872c831 fix: resolve race condition freeze on rapid tray icon clicks in lightweight mode 2025-06-22 15:44:09 +08:00
Tunglies
094feb74ec feat: add new monochrome tray icons for system and tunnel 2025-06-22 15:32:33 +08:00
Tunglies
9b1c660306 feat: add new monochrome tray icons for system and tunnel 2025-06-22 15:31:59 +08:00
renovate[bot]
4b860ba897 chore(deps): update npm dependencies (#3831)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-22 13:24:25 +08:00
Tunglies
3d8b2cf35f fix: improve error handling for application handle retrieval (#3860)
* fix: improve error handling for application handle retrieval

* fix: correct argument passing for command execution and improve URL stripping logic
2025-06-22 01:16:57 +08:00
wonfen
41fc13cfe2 fix: format & update 2025-06-21 22:39:12 +08:00
wonfen
5fde5dcc7c feat: implement async proxy lookup and optimize system/auto proxy retrieval logic 2025-06-21 21:56:15 +08:00
wonfen
034885d810 feat: introduce event-driven proxy manager and optimize proxy config updates 2025-06-21 21:56:15 +08:00
Tunglies
3f7a7b8cd2 chore: add cargo deny config 2025-06-21 21:22:20 +08:00
Tunglies
98dc50a9ed refactor: remove redundant steps for cleaning old release assets 2025-06-21 20:42:27 +08:00
Tunglies
5dd820d12e feat: add job to clean old release assets before uploading new ones 2025-06-21 20:36:09 +08:00
renovate[bot]
bc30db2875 chore(deps): update rust crate libc to 0.2.174 (#3794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-21 18:41:06 +08:00
Dyna
abe914d446 fix the issue that CSS cannot customize background (#3854)
* fixed the issue that css background cannot be used

* update logs

* fix logs
2025-06-21 16:53:10 +08:00
wonfen
cc65ce6812 chore: update to 2.3.2 2025-06-21 10:09:22 +08:00
wonfen
1a6454ee79 perf: optimize profile switching logic with interrupt support to prevent freeze 2025-06-21 10:04:12 +08:00
Just want to protect you
b72f397369 fix the issue of system proxy port being out of sync (#3841)
* repair system proxy port real-time response

* update logs

* fix-logs
2025-06-21 10:03:06 +08:00
wonfen
e698fe8d18 feat: add cleanup for redundant mihomo processes 2025-06-21 08:13:12 +08:00
wonfen
c8cad1c295 chore: add funding button 2025-06-20 20:52:40 +08:00
wonfen
c423fe90e2 Release 2.3.1 2025-06-18 20:42:13 +08:00
Just want to protect you
623461b649 about tray and silent startup + automatic startup light repair and optimization (#3814)
* fixed the issue that the tray does not display in light mode

* add show main window after exiting light mode

* fix: the issue where other selections could not respond in real time

* Refactored the original silent + self-starting lightweight #3708

* update logs

* fix formatting issues

* fix

* fix nesting

* repair previous formatting issues

* fix: resolve issue with tray not restoring from lightweight mode

* remove the tray display that should not exist

* fix translation field issue

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
Co-authored-by: Tunglies <selenvow+github@gmail.com>
2025-06-18 20:00:33 +08:00
Tunglies
1f9ba4de5c feat: add translation for 'Already Using Latest Core' in English and Chinese locales 2025-06-18 19:10:08 +08:00
Tunglies
10f792b8bc fix: streamline pnpm installation steps in autobuild workflow (#3816)
* fix: streamline pnpm installation steps in autobuild workflow

* fix: format code for better readability in useCustomTheme and _layout components
2025-06-18 18:57:05 +08:00
Tunglies
357b64e9a0 feat: enhance pre-push hook to include remote URL check and improve format check messaging 2025-06-18 18:56:03 +08:00
Tunglies
f3ad6cee41 feat: add code format check in pre-push hook 2025-06-18 18:55:53 +08:00
Just want to protect you
972310ea4e fix:Linux displays white boxes, white dots and white bars (#3785)
Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
Co-authored-by: Tunglies <selenvow+github@gmail.com>
2025-06-18 08:28:54 +08:00
时雨
f5315fd737 fix: 修正Linux系统窗口下页面白边和顶部圆角白底 (#3778)
Co-authored-by: Tunglies <selenvow+github@gmail.com>
2025-06-18 08:28:40 +08:00
Tunglies
c40c1960ed feat: add window-state management and recovery functionality (#3792)
* feat: add window-state management and recovery functionality

* fix: correct file name reference for window-state.json in uninstall section

* fix: remove unused tauri_plugin_window_state import
2025-06-18 02:21:00 +08:00
Tunglies
c8ae37811c chore: add pnpm cache configuration to Node setup steps 2025-06-18 01:42:06 +08:00
Tunglies
15f05748a5 fix: update tauri-plugin-autostart to version 2.4.0 and change source to crates.io 2025-06-18 01:34:40 +08:00
renovate[bot]
0a0a25913b chore(deps): update npm dependencies (#3718)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-18 01:31:39 +08:00
renovate[bot]
945999889c chore(deps): update cargo dependencies (#3731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-18 01:31:24 +08:00
Tunglies
ce7e1d6456 chore: remove pnpm cache configuration from workflow 2025-06-18 01:30:38 +08:00
Tunglies
72c4b9de8a doc: clarify macOS Intel X86 architecture build error message 2025-06-18 01:30:05 +08:00
Tunglies
a8257e8cb2 fix: unexpected behavior while pulling resources (#3789)
fix: unexpected behavior while pulling resources

在 commit 25cfd162f6 中引入新的 pnpm prepare 执行脚本指令,而 prepare 关键字与包管理器的生命周期脚本冲突。导致在运行 Workflow 的时候被执行两次资源拉取,并且被当做生命周期脚本的时候没有携带预期的 \`${{ matrix.target }}\`。这一行为进一步影响 macOS Intel X86 平台上的构建。

所影响的 issues: #3753, #3771
2025-06-18 01:11:33 +08:00
Tunglies
15d3c765ac feat: add debug logging for matrix target and update prepare script invocation 2025-06-17 23:35:23 +08:00
wonfen
e7d3d7e0ae chore: update changelog 2025-06-17 22:05:03 +08:00
wonfen
c0f3d35e13 fix: resolve namespace issue 2025-06-17 19:47:24 +08:00
wonfen
fc30fab9cd feat: unify window manager and optimize window show/hide logic 2025-06-17 13:02:47 +08:00
wonfen
a67e8388a9 fix: restore window from tray when status bar icon is present 2025-06-17 12:59:05 +08:00
wonfen
ac7307b1f7 feat: enhance profile management and proxy refresh with improved event listening and state updates 2025-06-17 11:38:53 +08:00
Tunglies
4068e5ec9c fix: clippy error in 26acce94a4 (diff-3a1c371e65c9809233eadec0aed9dfc09813f06b4d622ffd5a613ae6020048c8R298) 2025-06-17 08:24:10 +08:00
Just want to protect you
ea71181692 fix : js script escape error issue introduced #3751 (#3759)
* refactoring fix js script is too strict

* fix:format

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-06-16 21:04:40 +08:00
wonfen
9b46c1a991 refactor: unify log output format 2025-06-16 21:03:45 +08:00
wonfen
26acce94a4 feat: add clash_core config validation & auto-fix to default; fixed "No such file or directory (os error 2)" 2025-06-16 20:27:02 +08:00
wonfen
2a0e1e206e Release 2.3.0 2025-06-16 12:01:14 +08:00
Tunglies
f83d1d1582 fix: unexpected workflow changes #3684 2025-06-16 00:57:53 +08:00
wonfen
77a090d5eb i18n: update en 2025-06-15 20:23:32 +08:00
陈生杂物房
a9561e0ded feat: 更新简体中文语言文件 (#3684)
* feat: 更新简体中文语言文件

* 报错照样上传文件
2025-06-15 19:38:55 +08:00
wonfen
dd505e4d58 perf: optimize layout initialization and enhance backend notification mechanism 2025-06-15 19:35:12 +08:00
wonfen
dd0e9d4e1b fix: enhance hotkey handling in lightweight mode and improve window management 2025-06-15 17:40:59 +08:00
希亚的西红柿
8bc451ff08 fix: proxy mode description displays incorrectly (#3719)
* fix: proxy mode description display incorrectly

* fix: update language json

---------

Co-authored-by: Tunglies <selenvow+github@gmail.com>
2025-06-15 05:19:30 +08:00
Tunglies
032e5bf32e fix: add macOS specific activation policy handling for silent start (#3740)
* fix: add macOS specific activation policy handling for silent start

* fix: resolve abnormal Dock icon launch during macOS silent startup
2025-06-15 05:10:15 +08:00
Tunglies
41ba8f6c7a fix: streamline pre-push hook to run clippy only for src-tauri changes 2025-06-14 02:47:15 +08:00
Tunglies
799783d3ef fix: ensure app exits gracefully when an instance is already running 2025-06-14 02:43:58 +08:00
Just want to protect you
77fb40506f fix the JS script error when escaping special characters to prevent special airport names from causing the script to fail to work (#3717)
* fix the JS script error

* update logs

* remove unused references

* update logs

* fix special escape test

* optimize:unescape of special characters in JS strings

* fix unaligned annotations

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-06-13 22:59:48 +08:00
wonfen
5858f05c13 perf: async app startup loading to prevent UI freeze 2025-06-13 22:59:16 +08:00
Tunglies
0432cad112 fix: disable node and pnpm auto update to prevent breaks build 2025-06-13 14:22:21 +08:00
rebecca554owen
47ec8a348c Revert "fix: update packageManager to pnpm@10.12.1" (#3728)
This reverts commit 9bd5950f60.
2025-06-13 14:21:07 +08:00
Tunglies
eef348b8dc fix: add conditional compilation for localhost URL in dev mode 2025-06-13 03:11:35 +08:00
Tunglies
e78a02d0ba fix: add function to retrieve short git commit hash and update timestamp format 2025-06-13 00:17:31 +08:00
希亚的西红柿
4e54b61380 fix: silent start does not take effect (#3708)
* fix: light mode error

* feat: optimize the logic

* fix: clippy issues
2025-06-12 23:39:03 +08:00
Tunglies
cc39b2734e fix: enhance system proxy toggle logic to account for autoproxy and sysproxy states 2025-06-12 22:42:33 +08:00
renovate[bot]
16eaccb10e chore(deps): update npm dependencies (#3714)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-12 21:55:54 +08:00
renovate[bot]
dbc6f54a77 chore(deps): update rust crate reqwest to 0.12.20 (#3715)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-12 21:32:03 +08:00
Tunglies
9bd5950f60 fix: update packageManager to pnpm@10.12.1 2025-06-12 21:27:23 +08:00
Tunglies
2c7c416f60 fix: simplify mutable reference handling in with_lightweight_status function 2025-06-12 21:26:22 +08:00
Tunglies
3eb0ab4197 fix: enable node/pnpm version updates in Renovate configuration 2025-06-12 21:23:31 +08:00
TianHua Liu
b7cb511032 perf(Notice): replace useState by useSyncExternalStore (#3682)
* fix: the first function call creates multiple axios instances

* perf(Notice): replace useState by useSyncExternalStore

* chore: prettier --check .

* fix: prettier format
2025-06-12 20:49:39 +08:00
wonfen
18850bb51a Update Crowdin configuration file 2025-06-12 10:57:33 +08:00
wonfen
4d718e0cea Update Crowdin configuration file 2025-06-12 10:51:21 +08:00
wonfen
3a2f567055 Update Crowdin configuration file 2025-06-12 10:48:58 +08:00
rebecca554owen
4f474e1098 feat: add proxy auto scroll toggle setting (#3674)
* feat: add proxy auto scroll toggle setting

* refactor: rename enable_proxy_auto_scroll to enable_hover_jump_navigator

* 参考 Unified Delay 调整式样
2025-06-11 13:21:24 +08:00
Tunglies
22eac1a832 refactor: comment out Rust cache step in Clippy workflow 2025-06-11 07:53:59 +08:00
Tunglies
07738dd82d feat: implement lightweight mode state management and initialization #3344, d05952e945 2025-06-11 04:20:50 +08:00
Tunglies
f07d508018 refactor: standardize casing for "HTTP Port" to "Http Port" in localization files 2025-06-11 03:40:16 +08:00
Tunglies
b591a90100 feat: add Linux-specific tray icon builder configuration 2025-06-11 01:04:56 +08:00
Tunglies
db3cfdf66f refactor: update icon variable naming for clarity and adjust macOS logging import 2025-06-11 00:51:34 +08:00
Tunglies
5cf3e1a817 refactor: streamline macOS-specific code by consolidating conditional imports and logic in sysopt, tray, lightweight, and mihomo modules 2025-06-11 00:19:06 +08:00
Tunglies
25cfd162f6 refactor: replace 'pnpm check' with 'pnpm prepare' in workflow files and update CONTRIBUTING.md 2025-06-10 23:43:04 +08:00
Tunglies
7001ef2030 feat: add Clippy linting workflow for pull requests
feat: add check step to Clippy workflow

feat: add build step for web assets in Clippy workflow

fix: set NODE_OPTIONS for web asset build to prevent memory issues
2025-06-10 23:37:10 +08:00
Tunglies
cbcab72a7c refactor: simplify version check logic in run_core_by_service and update tray menu function call 2025-06-10 23:37:09 +08:00
wonfen
d05b1c3130 feat: clean up redundant profiles files 2025-06-09 13:48:38 +08:00
renovate[bot]
fbdcda9a7f chore(deps): update npm dependencies (#3660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-08 20:37:49 +08:00
Tunglies
0ebc482698 refactor: update UPDATELOG.md for clarity and organization, enhance security recommendations, and improve known issues section 2025-06-07 10:42:43 +08:00
Tunglies
09969d95de feat: add rustfmt configuration and CI workflow for code formatting
refactor: streamline formatting workflow by removing unused taplo steps and clarifying directory change

refactor: remove unnecessary directory change step in formatting workflow
2025-06-06 22:13:11 +08:00
Tunglies
689042df60 refactor: use Box to store large config objects and add memory usage tests
- Refactored config-related structs to use Box for storing large objects (e.g., IRuntime, IProfiles, PrfItem) to reduce stack memory usage and improve performance.
- Updated related methods and assignments to handle Boxed types correctly.
- Added and improved unit tests to compare memory usage between Boxed and non-Boxed config objects, demonstrating the memory efficiency of Box.
- Test output now shows the size difference between stack-allocated and heap-allocated (Box) config objects.
2025-06-06 14:54:48 +08:00
Tunglies
564fe15df2 refactor(tests): update format_bytes_speed test cases for consistent output 2025-06-06 14:13:48 +08:00
Tunglies
30015dfd67 refactor(state/proxy): use Box<Value> for providers_proxies to reduce struct size
- Changed providers_proxies from Value to Box<Value> in CmdProxyState
- Reduces struct size from 32 bytes to 8 bytes, optimizing memory usage
2025-06-06 12:46:58 +08:00
Tunglies
698c47da69 Refactor workflow triggers in alpha.yml to clarify usage of git tags and remove commented-out sections 2025-06-06 11:58:58 +08:00
Tunglies
46b7a520cd Add I18N issue template for translation and internationalization requests
Fix I18N issue template description and update labels and type
2025-06-06 11:58:58 +08:00
Tunglies
cadd6c3497 Add Node.js and pnpm installation steps to cross-check workflow 2025-06-06 11:58:58 +08:00
wonfen
c4682ab6e9 revert translation to 8aa7b34197 2025-06-06 11:27:15 +08:00
Tunglies
59594855b8 chore: add cross-platform cargo check workflow and remove debug features 2025-06-06 11:27:15 +08:00
Tunglies
44b7af0c6e chore: publish tag alpha support
chore: update alpha and release workflows to include version consistency checks
2025-06-06 11:27:13 +08:00
Tunglies
80f550d67e refactor(proxy): enhance proxy state management and refresh logic 2025-06-05 20:10:28 +08:00
renovate[bot]
44f085604a chore(config): migrate config renovate.json (#3659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 19:34:28 +08:00
renovate[bot]
1144f8017a chore(deps): update cargo dependencies (#3653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 19:34:28 +08:00
renovate[bot]
d8fa17a3e7 chore(deps): update npm dependencies (#3654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 19:34:28 +08:00
Tunglies
bf868e0ae2 fix: update serde_yaml to deprecated version and adjust range strategy in renovate configuration 2025-06-05 19:34:28 +08:00
renovate[bot]
e1dac63f69 chore(deps): update rust crate zip to v4 (#3652)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 19:34:28 +08:00
renovate[bot]
2657234761 chore(deps): update npm dependencies (#3651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 19:34:27 +08:00
Tunglies
4a345fdd41 feat: add initial renovate configuration for dependency management
chore: update renovate configuration for improved dependency management

Revert "chore: update renovate configuration for improved dependency management"

This reverts commit dcfd5f95a5.

feat: add support for grouping cargo and npm dependencies into single PRs
2025-06-05 19:34:26 +08:00
Tunglies
fee6a586d7 feat: implement CmdProxyState for managing proxy refresh state and add state management module
refactor: remove unnecessary macOS conditional compilation directive
2025-06-05 19:34:24 +08:00
Tunglies
7c738483b7 feat: add desktop-windows capabilities configuration and permissions
feat: add identifier, description, and windows properties to desktop-windows capabilities

fix: correct desktop-windows capability name in configuration
2025-06-05 19:34:23 +08:00
Tunglies
c3d8ed28a2 fix: update fallback language to English in i18n configuration 2025-06-05 19:34:22 +08:00
Tunglies
f47b4b961b fix: update alpha and release workflows to trigger builds via git tags only
feat: update release workflow to trigger builds via git tags and add publish version script
2025-06-05 19:34:20 +08:00
Tunglies
7763abf6c2 Revert TCP concurrency
Revert "Added controller translation for TCP concurrency"

This reverts commit c9589fc75d.

Revert "add:tcp concurrency"

This reverts commit 6440f856a2.
2025-06-02 21:44:43 +08:00
Tunglies
9d9d078346 feat: enhance workflow configurations for alpha and autobuild processes 2025-06-02 18:51:58 +08:00
Tunglies
76cec7aa54 feat: add localization for "Already Using Latest Core Version" in English and Chinese 2025-06-02 16:09:05 +08:00
Tunglies
2223a99ed1 fix: remove old asset deletion step from autobuild workflow 2025-06-02 15:03:05 +08:00
Tunglies
4926d33849 fix: enable scheduled builds and improve asset deletion logic in autobuild workflow 2025-06-02 14:58:32 +08:00
Tunglies
9978182cae chore: update version to 2.3.0 and revise release notes 2025-06-02 14:24:02 +08:00
Tunglies
1d77bc57df feat: rename job and update release tag for autobuild process 2025-06-02 14:16:43 +08:00
Tunglies
1bcb6646c4 fix: unify default latency test URL and update workflows/backend logic
- All delay test logic, Rust MihomoManager, API, cmds, delay.ts, settings, and group editor now use the Cloudflare 204 test URL
- Fixed outdated URLs in docs and comments
- Fix Github Actions workflow: unexpected neeeds run
2025-06-02 14:07:54 +08:00
Tunglies
06130b95d2 chore: remove unused i18n-check workflow and comment out schedule in autobuild 2025-06-02 13:59:42 +08:00
Tunglies
0536a45959 feat: add autobuild version support and unify version update scripts
- Support autobuild version with timestamp (e.g. 2.3.0+autobuild.2506021530) via `pnpm release-version autobuild`
- Sync version to package.json, Cargo.toml, tauri.conf.json
- Improve version regex to support build metadata
- Remove old release_version.mjs and release-alpha_version.mjs, use release-version.mjs for all
- Fix script path issues
2025-06-02 13:57:18 +08:00
Tunglies
b150eb7e64 chore: update CHANGELOG formatting and improve clarity of known issues, fixes, features, optimizations, and removals 2025-06-02 12:50:03 +08:00
Tunglies
d5c0b09a2f fix: update default latency test URL to use HTTPS 2025-06-02 12:41:41 +08:00
wonfen
a36d2633c9 add promotion 2025-06-02 11:48:28 +08:00
wonfen
72783e3ff5 feat: add global mutex to prevent concurrent config updates 2025-06-01 20:54:14 +08:00
Tunglies
929abb3c04 feat: add "Update via proxy" translation to English and Chinese locales 2025-06-01 19:40:50 +08:00
wonfen
6810b1f221 fix: remove getProxyProviders refreshInterval 2025-06-01 19:33:49 +08:00
Tunglies
a96678caea fix: update Mihomo(Meta) kernel version to 1.19.10 and remove default window size setting 2025-05-31 17:05:55 +08:00
Tunglies
2d59177256 fix: update default window width to 940 pixels 2025-05-31 17:05:53 +08:00
Tunglies
62b743fa20 fix: add missing token parameter for create-pull-request action in i18n-check workflow 2025-05-31 00:12:42 +08:00
Tunglies
b85aaa816e feat: add workflow to check for missing i18n keys in translation files 2025-05-31 00:05:28 +08:00
Tunglies
74fc3dea33 fix: refine descriptions for Rule, Global, and Direct modes in Chinese locale 2025-05-31 00:00:37 +08:00
Tunglies
55167e75af feat: add mode descriptions for Rule, Global, and Direct modes in English and Chinese locales 2025-05-30 23:59:42 +08:00
Tunglies
63d39c24dc feat: add theme translation keys for light, dark, and system modes in multiple locales 2025-05-30 23:44:12 +08:00
Tunglies
1d4d8aeb2b chore: update UPDATELOG 2025-05-30 20:57:02 +08:00
Ahao
c9589fc75d Added controller translation for TCP concurrency 2025-05-30 19:05:46 +08:00
Ahao
d0c3a306bc close the Default DNS Enable button 2025-05-30 18:33:10 +08:00
Tunglies
1e3566ed7d fix: optimize asynchronous handling to prevent UI blocking in various components
fix: add missing showNotice error handling and improve async UI feedback

- Add showNotice error notifications to unlock page async error branches
- Restore showNotice for YAML serialization errors in rules/groups/proxies editor
- Ensure all user-facing async errors are surfaced via showNotice
- Add fade-in animation to layout for smoother theme transition and reduce white screen
- Use requestIdleCallback/setTimeout for heavy UI state updates to avoid UI blocking
- Minor: remove window.showNotice usage, use direct import instead
2025-05-30 17:53:40 +08:00
Tunglies
756d303f6a Remove unused translations from multiple locale files 2025-05-30 17:20:51 +08:00
Tunglies
a5b948a41c fix(locales): update success message translation for clarity 2025-05-30 16:32:04 +08:00
Ahao
6440f856a2 add:tcp concurrency 2025-05-30 14:05:59 +08:00
Tunglies
25acb8121f docs: contributing for ubuntu 2025-05-29 16:07:55 +08:00
Tunglies
c05bd31f6b fix(sysinfo): update verge_version retrieval to use package_info instead of config 2025-05-28 18:50:03 +08:00
Tunglies
9416de6442 fix(config): auto complete and patch secret field when loading config
- Ensure the 'secret' field is present and non-empty during config loading
- Auto-fill with default value if missing to improve compatibility and security
- Update config guard logic for robustness
2025-05-28 17:26:26 +08:00
Tunglies
c507c483fb refactor: update tauri-plugin-autostart source to use git repository and set macos launchagent name 2025-05-26 22:26:52 +08:00
Tunglies
32ee1b36d2 refactor: replace isServiceAvailable with getRunningMode for service status checks 2025-05-26 16:08:16 +08:00
Tunglies
2b89f07fe5 refactor: remove old window state file deletion and add compatibility for legacy shortcuts 2025-05-25 22:39:28 +08:00
Shuqiao Zhang
0621a17d17 feat: update Windows shortcut name (#2973)
* feat: update Windows shortcut name

* chore: UPDATELOG

---------

Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-05-25 22:17:06 +08:00
wonfen
4840e07da8 refactor: remove redundant logic 2025-05-25 21:56:04 +08:00
wonfen
af1689ee07 refactor: add debounce to optimize config updates and provider refresh handling 2025-05-25 21:34:48 +08:00
Ahao
d3dbc11b1b modify the port detection range to prevent the use of system ports (#3587)
Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-25 17:05:08 +08:00
Tunglies
10479b0936 chore: update UPDATELOG 2025-05-25 10:34:30 +08:00
Ahao
fa1f9875d9 fix dependency issues 2025-05-24 19:58:37 +08:00
Tunglies
7466139320 fix(ControllerViewer): remove isRestarting condition from button and input disabled states 2025-05-24 17:04:32 +08:00
Tunglies
7a5bcf67c5 refactor(ControllerViewer): replace manual core restart logic with service call to restartCore 2025-05-24 17:00:25 +08:00
Tunglies
10e3010324 feat(config): add new allowed origins for CORS in clash.rs (#3569)
Include "https://yacd.metacubex.one", "https://metacubex.github.io",
and "https://board.zash.run.place" to the list of allowed origins for
both HTTP and WebSocket configurations.
2025-05-24 16:56:35 +08:00
Tunglies
464f8095ab fix: update CORS allow-origins to support tauri local development
- Replaced 'http://localhost' and 'http://127.0.0.1' with 'tauri://localhost' and 'http://tauri.localhost' for enhanced compatibility with Tauri development environment.
- Ensures proper CORS configuration for local testing.
2025-05-22 19:18:48 +08:00
Tunglies
8b800f679b optimize and enforce external-controller-cors config for all users
- Refactored config guard logic to always inject secure defaults for external-controller-cors (allow-origins: ['http://localhost', 'http://127.0.0.1'], allow-private-network: true).
- Ensures both new and existing user configs are automatically upgraded for enhanced CORS security.
- Improves configuration migration and future maintainability.

fix: add http://localhost:3000 to CORS allow-origins for tauri dev server compatibility
2025-05-22 14:36:21 +08:00
Tunglies
5b2f946828 feat: restrict proxy group selection to Selector type in home node card
- Only Selector-type groups are available for selection in the group dropdown on the home page node card.
- Node (proxy) selection remains unrestricted.
- Improves user experience and avoids confusion with non-selector groups.
2025-05-22 11:38:26 +08:00
Tunglies
b1c31f7a6f Revert "fix: ensure app state is saved on exit and window events for better state management"
This reverts commit 9af0803e9b.

chore: update UPDATELOG
2025-05-22 11:19:38 +08:00
Tunglies
d49618786e chore: temporarily deprecate tauri-plugin-window-state integration
- Remove or disable usage of tauri-plugin-window-state due to compatibility or stability concerns.
- Will revisit and re-enable after further evaluation or upstream fixes.
2025-05-22 10:22:16 +08:00
Tunglies
866ec2720d Revert "feat: integrate window state management for improved window restoration and logging"
This reverts commit c9a9e934f4.
2025-05-22 10:17:42 +08:00
Tunglies
b4595d7886 fix: add fallback to first proxy in group if 'now' is missing and prioritize selector-type groups
- When the current group or its 'now' field is missing, fallback to the first proxy in the group's list to ensure a valid active node is always selected.
- When no current group is found, prioritize groups of type 'Selector' for selection, improving compatibility with custom or extended proxy groups.
2025-05-22 10:10:26 +08:00
Tunglies
9af0803e9b fix: ensure app state is saved on exit and window events for better state management 2025-05-22 09:54:25 +08:00
Tunglies
ebecabc0cc rm: deno.lock 2025-05-22 03:04:33 +08:00
Tunglies
c9a9e934f4 feat: integrate window state management for improved window restoration and logging 2025-05-22 03:02:02 +08:00
Ahao
544f63a2ff update log port settings 2025-05-21 15:29:46 +08:00
Ahao
1dbfc96ebf optimize port setting exit and save mechanism 2025-05-21 15:27:43 +08:00
Ahao
250dcf569c beradaptasi dengan bahasa terjemahan terbaru 2025-05-21 10:58:49 +08:00
Ahao
0ef552d384 optimize the icon of API controller 2025-05-21 10:31:13 +08:00
Tunglies
998ded5e0b refactor: remove unused imports and adjust button height in logs and rules pages 2025-05-21 10:25:50 +08:00
Tunglies
d60c3b4d64 feat: improve initialization logic to prevent duplicated initialization and improve logging in Layout component 2025-05-21 00:22:47 +08:00
Tunglies
b6db209670 docs: update CONTRIBUTING.md to include guidelines for Rust code formatting and quality checks 2025-05-20 23:09:50 +08:00
Ahao
29fd97e402 remove redundant fields 2025-05-20 23:07:50 +08:00
Tunglies
32ebc8d174 refactor: simplify event handling in CoreManager by removing unnecessary match statement 2025-05-20 23:01:32 +08:00
Tunglies
420b0a254a feat: add formatting command to package.json and update pre-commit hook for cargo fmt 2025-05-20 22:58:25 +08:00
Ahao
400efa00ec optimized the random port and key mechanism to prevent random freezing! optimized the save mechanism, using smooth functions to prevent the client from freezing! Optimized the translation problem! 2025-05-20 22:51:11 +08:00
Tunglies
4024b72954 feat: enhance auto log cleaning options with 1-day retention and update related configurations 2025-05-20 22:34:02 +08:00
Ahao
7cd1816866 optimized port settings and added one-click random API port and key/separate refresh button 2025-05-20 18:49:16 +08:00
Ahao
5983ac5449 Fix getDelayFix hook issue 2025-05-20 18:15:05 +08:00
wonfen
b70e202201 refactor: simplify frontend event dispatch by restructuring notification system 2025-05-18 20:58:59 +08:00
wonfen
cc5ebec0cb feat: add state management for core switching, upgrading and restart functionality 2025-05-18 18:37:09 +08:00
Ahao
1d2fd06507 synchronous Languag (#3534)
* fixed the issue of IP field assignment conflict

* updated the shuffling algorithm and added a deduplication detection mechanism

* fixed an issue with .window-state.json files not being deleted via the NSIS installer

* adaptation translation

* update language

* standardized the format

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-18 17:57:41 +08:00
wonfen
8d99af4c15 chore: simplify service logging 2025-05-18 17:53:57 +08:00
wonfen
861428d3bd fix: sidecar core log path 2025-05-18 09:58:33 +08:00
Tunglies
00e3f13bc9 fix: profile-view wrong type of http request timeout value 2025-05-18 00:52:59 +08:00
Ahao
2a897ecf8a adaptation translation (#3532)
* fixed the issue of IP field assignment conflict

* updated the shuffling algorithm and added a deduplication detection mechanism

* fixed an issue with .window-state.json files not being deleted via the NSIS installer

* adaptation translation

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-17 19:48:44 +08:00
wonfen
8448217bd4 refactor: move event dispatch logic into notifier thread to improve efficiency 2025-05-17 19:42:43 +08:00
wonfen
305a64c3e3 feat: optimize service initialization logic to fallback to Sidecar mode on installation failure 2025-05-17 19:13:24 +08:00
wonfen
e1d6c74e4f refactor: extract service installation logic to custom hook and optimize related component handling 2025-05-17 19:11:17 +08:00
Tunglies
7556758284 refactor: remove macOS window decoration setting during window creation 2025-05-17 14:28:34 +08:00
Ahao
3926288b7f fixed an issue with .window-state.json files not being deleted via the NSIS installer (#3530) 2025-05-17 13:15:04 +08:00
Tunglies
4d56a5cd8c Revert "feat: add application name and icon to macOS entitlements plist"
This reverts commit 6fe7aabe14.
2025-05-17 01:42:11 +08:00
Tunglies
d554679ee2 feat: remove system-in name plist 2025-05-17 01:21:08 +08:00
Tunglies
6fe7aabe14 feat: add application name and icon to macOS entitlements plist 2025-05-17 01:05:21 +08:00
wonfen
f4e57a2831 fix: retain traffic data when switching chart time range 2025-05-16 18:03:02 +08:00
wonfen
32008b9364 fix: update main window creation logic with improved logging and UI readiness handling 2025-05-16 17:22:53 +08:00
wonfen
9d89eeb974 perf: optimize event listeners in update viewer and test item components with proper cleanup on unmount
(cherry picked from commit 2e4e939e0b05040c8f38248f3663978a0212cd50)
2025-05-16 16:10:37 +08:00
wonfen
95c23730ef perf: async config handling with optimized port lookup and save logic 2025-05-16 13:47:12 +08:00
Ahao
7acbb5da4f updated the shuffling algorithm and added a deduplication detection mechanism (#3521) 2025-05-16 12:26:50 +08:00
wonfen
ddd85d4d87 perf & fix: optimize window state initialization & add missing permissions 2025-05-16 09:50:53 +08:00
Tunglies
53a46d0dc6 refactor: simplify proxy type handling and improve error handling in network commands 2025-05-16 00:09:47 +08:00
Tunglies
92ae277e3a chore: remove incorrect type comment 2025-05-15 22:34:09 +08:00
wonfen
dd190659ef fix: error typo 2025-05-15 18:12:50 +08:00
wonfen
6c5488be70 fix: theme color not following system preference 2025-05-15 16:51:35 +08:00
Ahao
316e1d4268 fixed the issue of IP field assignment conflict (#3513)
Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-14 23:13:52 +08:00
wonfen
c3c13ba6e6 chore: update lock file 2025-05-14 22:26:19 +08:00
wonfen
b0a82bc7ad feat: remove custom window button 2025-05-14 22:15:02 +08:00
wonfen
7f0ebbd83d feat: use OS default window manager 2025-05-14 21:32:26 +08:00
Ahao
4f86f3c0ec refactored IP detection and added zashboard redirect URL (#3510)
* Fixed the language display size issue and updated the translation synchronously!

* Fixed Russian language display issue

* refactored IP detection and added zashboard redirect URL

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-14 20:32:45 +08:00
Tunglies
c100b9c54d feat: log levels to 'warn' in mihomo default settings and verge default settings; 2025-05-14 16:06:02 +08:00
THR-hub
ebc9fc5eba Fix issue when reinstalled the DNS overwrite button may show a wrong status. (#3505) 2025-05-14 12:57:37 +08:00
Ahao
29ae70bbf6 Fixed the language display size issue and updated the translation synchronously! (#3507)
* Fixed the language display size issue and updated the translation synchronously!

* Fixed Russian language display issue

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-14 12:20:45 +08:00
wonfen
becc51bcd2 feat: replace traffic chart rendering component for performance improvement and React 19 compatibility 2025-05-14 12:16:59 +08:00
wonfen
1993e5dd51 chore: upgrade to react 19 2025-05-14 10:47:33 +08:00
wonfen
d1a2bd78d7 perf: improve install status detection to ensure frontend consistency 2025-05-13 23:34:30 +08:00
Ahao
a5521404b6 Added support for the Japanese language and improved multilingual translation in the Rev module. Note: This update affects various labels, descriptions, and messages throughout the entire file. (#3502)
* May 13, 2025, 15:30 – Added support for the Japanese language and improved multilingual translation in the Rev module. Note: This update affects various labels, descriptions, and messages throughout the entire file. If you encounter any issues, please report them via GitHub Issues. By: Ahaohaohao

* update

* bug fixes

---------

Co-authored-by: Ahao <108321411+xuanyuan0408@users.noreply.github.com>
2025-05-13 18:19:43 +08:00
Taiizor
8aa7b34197 feat(i18n): Add Turkish (tr-TR) localization (#3498)
* Add Turkish language support

Added Turkish (tr) translations to the application by creating a new locale file `tr.json` and updating the language options in `setting-verge-basic.tsx` and `i18n.ts` to include Turkish.

* Update Turkish translations for proxy terminology

Revised Turkish translations in `tr.json` to replace 'Proxy' with 'Vekil' for consistency and clarity. This change affects various labels, descriptions, and messages throughout the file.
2025-05-13 07:32:37 +08:00
Tunglies
1ddbe7c2cc feat: add service uninstall functionality and improve service operation flow 2025-05-13 01:56:19 +08:00
Tunglies
6578cd8c51 fix: TUN switch button logical bug 2025-05-13 01:11:20 +08:00
Tunglies
c2c46d1cae chore: update UPDATELOG 2025-05-13 00:27:13 +08:00
wonfen
95231e7cd3 fix: http request error 2025-05-12 22:10:46 +08:00
Tunglies
5b6c9be99f feat: better service status and TUN mode usable checks in Setting Page 2025-05-12 19:04:21 +08:00
wonfen
d587ed09a5 fix: # 3479, set all fontLigatures to false 2025-05-11 23:05:47 +08:00
wonfen
10576780ed feat: add hosts settings to DNS settings and enhance DNS config validation 2025-05-11 22:55:31 +08:00
wonfen
b37b121afb chore: disable tray speed by default 2025-05-11 19:25:32 +08:00
wonfen
2b69ed4915 fix: window tiitle bar 2025-05-11 13:27:42 +08:00
wonfen
9a666d807c fix: restore window on tray click after close on Windows 2025-05-10 17:25:42 +08:00
wonfen
050b363066 fix: resolve Windows build error 2025-05-10 01:45:39 +08:00
wonfen
8cae9d4e0a refactor: use async approach to restructure UI startup logic and resolve various freeze issues during launch 2025-05-10 01:26:03 +08:00
wonfen
b5b65ac8c5 fix: windows ipc errors 2025-05-09 01:29:10 +08:00
wonfen
7370f00857 feat: add authenticated service IPC communication 2025-05-08 00:14:58 +08:00
wonfen
dc798fe2dd chore: update deps & replace deprecated elements 2025-05-05 00:26:04 +08:00
derozan
eda8fc125f Add Korean language support (#3457)
thx
2025-05-04 22:51:23 +08:00
wonfen
8296675574 refactor: notification system 2025-05-04 22:17:08 +08:00
wonfen
e2ad2d23f8 feat: enhance WebSocket management with connection status logging, error handling, and improved data parsing 2025-05-04 20:47:50 +08:00
wonfen
d8df283e93 feat: make get system and auto proxy functions async, use spawn_blocking for blocking tasks 2025-05-04 20:35:04 +08:00
wonfen
ce42ca77a9 fix: timeout mechanism for sending notice messages 2025-05-04 16:47:10 +08:00
wonfen
cfe8328f9e feat: add sorting functionality to current node list on homepage 2025-05-04 16:27:44 +08:00
wonfen
ff5a2c6ca4 feat: add backend config change listener to update frontend state 2025-05-04 13:28:08 +08:00
wonfen
23b0493d0b perf: optimize network requests and update logic to support aborting 2025-05-04 11:25:48 +08:00
wonfen
779291151e fix: network request failure termination logic and add connection pool optimization 2025-05-04 10:14:52 +08:00
wonfen
ba0f4cdde0 refactor: separate notification thread in frontend to prevent UI freeze 2025-05-04 09:21:32 +08:00
wonfen
3983762202 feat: add more network control methods 2025-05-03 23:17:51 +08:00
wonfen
c72413cbe6 feat: enhance traffic monitoring, optimize data handling logic, and add error retry mechanism and timeout control 2025-05-03 09:53:44 +08:00
wonfen
73b9a71c84 feat: add retry mechanism to optimize network requests, improve async message handling and timeout for scheduled tasks 2025-05-03 09:38:25 +08:00
wonfen
e7bf997f8c chore: update deps 2025-05-01 10:00:05 +08:00
wonfen
dbfcc80afe perf: optimize system proxy settings update logic 2025-04-30 23:09:19 +08:00
wonfen
32b6821b8a feat: add network manager to optimize network request handling 2025-04-30 21:30:28 +08:00
Tunglies
3ce5d3bf2d fix: update required service version to 1.0.6 2025-04-28 06:16:14 +08:00
Tunglies
f6023dc618 fix: macOS-specific TUN device name on macOS 2025-04-27 16:33:15 +08:00
Tunglies
9d9dd73790 chore: remove fast-dev profile and enhance dev profile settings 2025-04-27 15:13:34 +08:00
tiegen
7383459b9a feat: clean proxy settings before exit (#3404) 2025-04-26 18:09:53 +08:00
wonfen
55cde38562 feat: improve core functionality to prevent main process blocking, enhance MihomoManager, and optimize window creation process 2025-04-25 18:24:16 +08:00
wonfen
d6a79316a6 feat: toggle next auto-update time on subscription card click and show update result feedback 2025-04-25 17:17:34 +08:00
wonfen
bd3231bfa8 perf: avoid reloading active config when editing inactive subscription 2025-04-25 14:37:50 +08:00
wonfen
8d62c0d521 feat: auto-fallback to Clash proxy on scheduled subscription updates; refactor fallback logic and add request timeout 2025-04-24 22:51:45 +08:00
wonfen
4d37e6870c feat: auto-refresh rule data when switching to rules page 2025-04-24 10:24:29 +08:00
wonfen
0bb042e085 feat: sysproxy guard can detect and recover from unexpected changes 2025-04-24 09:09:23 +08:00
Tunglies
65ed9cb5b2 chore: update UPDATELOG 2025-04-24 01:14:41 +08:00
逐雁南飛
ffc0693afc [修复]修改代理设置后,如果修改之前代理是开启状态,自动重新应用代理设置。 (#3391)
* [修复]修改代理设置后,如果修改之前代理是开启状态,自动重新应用代理设置。

* chore: update sysproxy version

---------

Co-authored-by: Tunglies <tunglies.dev@outlook.com>
2025-04-24 01:10:01 +08:00
wonfen
2622cc06eb feat: enhance Webdav backup directory check and file upload retry mechanism 2025-04-23 01:10:01 +08:00
wonfen
15b117dc15 feat: remove cross-platform restriction on WebDAV backup restore 2025-04-23 00:48:40 +08:00
wonfen
16846aefd3 feat: allow webdav directory redirect 2025-04-23 00:42:57 +08:00
wonfen
babc2c8f9b feat: add UA to webdav 2025-04-23 00:29:29 +08:00
Tunglies
a0b70f9c34 2.2.4-alpha.2 2025-04-22 08:04:24 +08:00
wonfen
dc46eb9d21 fix: add recovery lock to prevent concurrency issues during lightweight mode exit 2025-04-21 12:20:55 +08:00
Tunglies
824ad9fa29 feat: add tray menu indicator for lightweight mode #3386 2025-04-21 04:34:25 +08:00
Christine.
0646fa96a6 Fix:VLESS URL decoding with network type error, #3388 (#3390) 2025-04-21 00:50:32 +08:00
wonfen
d05952e945 fix: resolve lightweight mode recovery failure caused by white screen prevention 2025-04-21 00:15:02 +08:00
Tunglies
abe5cf1b84 2.2.4-alpha.1 2025-04-21 00:12:14 +08:00
Tunglies
07b424cb09 fix: cargo clippy errors 2025-04-21 00:06:37 +08:00
Tunglies
c7494de0a7 chore: update UPDATELOG 2025-04-20 23:51:05 +08:00
Tunglies
1a9a2ff9e0 fix: unexpected global hotkey regestion for windows 'Ctrl+Q' #3389 2025-04-20 23:49:06 +08:00
wonfen
4f15bdf74d feat: add IP info request retry mechanism to reduce network errors 2025-04-20 10:34:43 +08:00
wonfen
541b78ba6f fix: restart clash core after change it 2025-04-19 22:23:58 +08:00
wonfen
05b910dc17 feat: close all connections when disable sysporxy 2025-04-19 15:10:49 +08:00
wonfen
41629df189 feat: autolaunch via Startup folder on windows 2025-04-19 13:51:11 +08:00
wonfen
c718ef3058 chore: disable admin mode autolaunch limitation 2025-04-19 12:37:01 +08:00
Mozi
2b1d02f0cc fix(logs): make button's tooltip correspond to log setting (#3345) 2025-04-19 00:07:55 +08:00
Mozi
272a0c916d fix(layout): make app icon and name draggable (#3346)
The "the-newbtn" UpdateButton is still NOT draggable as expected.
2025-04-19 00:06:30 +08:00
StarHeart
16187858a3 fix: disable underline of startup script (#3357) 2025-04-19 00:00:39 +08:00
Tunglies
f6ea01238a chore: update UPDATELOG 2025-04-17 17:14:18 +08:00
逐雁南飛
ae4067aee6 [feat]取消使用默认绕过且当绕过设置为空的时候使用默认绕过填充绕过配置以便用户基于默认配置修改。 (#3365) 2025-04-17 17:12:58 +08:00
wonfen
d401a83c75 feat: check window render size and wait for completion to prevent white screen 2025-04-17 16:52:38 +08:00
Tunglies
41a662f784 chore: fix ci for alpha-for-linux-arm 2025-04-17 16:47:21 +08:00
Tunglies
1df9fff0a7 2.2.4-alpha.0 2025-04-17 16:47:21 +08:00
Tunglies
40de99e65d fix: wrong pnpm package version of plugin-window-state 2025-04-17 16:47:21 +08:00
Tunglies
76227770a4 chore: update UPDATELOG 2025-04-17 16:47:21 +08:00
逐雁南飛
b70cad537c 添加代理主机的设置,允许代理设置为其他IP(非127.0.0.1) (#2963)
允许下拉选择ip地址(支持IPv6)、localhost、以及当前系统的主机名,同时兼容手工输入
2025-04-17 16:47:21 +08:00
希亚的西红柿
1282cc56bf fix: auto enable light mode config does not take effect when silent s… (#3344)
* fix: auto enable light mode config does not take effect when silent start is enabled

* refactor: extract run_once_lightweight logic into lightweight.rs as a fn
2025-04-17 16:47:21 +08:00
wonfen
85d08fadd9 feat: check window render size and wait for completion to prevent white screen 2025-04-17 16:47:21 +08:00
wonfen
fad73a281a feat: manage windows with tauri window-state to address various window issues 2025-04-17 16:47:21 +08:00
wonfen
18d24d5952 chore: enable ipv6 by default 2025-04-12 23:16:31 +08:00
Tunglies
6e6462742c fix: resolve unexpected behavior during silent startup #3320, #3187 2025-04-12 18:09:27 +08:00
Tunglies
16381d1895 chore: patch alpha hash version 2025-04-12 17:54:58 +08:00
Tunglies
1970155c51 fix: macos use hotkey closing window can not entry auto-lightweight-mode #3326 2025-04-12 03:29:57 +08:00
Tunglies
51ef1329be Refactor async runtime usage with AsyncHandler wrapper 2025-04-11 18:00:35 +08:00
Tunglies
b6a6f5f434 Add AsyncHandler for wrapping task spawning 2025-04-11 17:30:30 +08:00
Tunglies
644fdc071f rm: unused tauri-plugin-window-state 2025-04-10 15:52:37 +08:00
Tunglies
25d66a4eee Update autostart capability permissions
Enable more precise control over autostart functionality and clean up
logging code by removing unnecessary boolean parameters.
2025-04-10 15:43:45 +08:00
Tunglies
9070ef1dbe v2.2.4-alpha begin 2025-04-10 11:40:38 +08:00
Tunglies
f700dc124e chore: update UPDATELOG 2025-04-10 11:37:58 +08:00
wonfen
5fcea4c684 fix: resolve freeze issue caused by rapid "Proxy Mode" switching on homepage 2025-04-10 11:34:41 +08:00
Tunglies
843f40d7d5 fix: unlock test error message to "Unsupported Country/Region" 2025-04-10 11:30:52 +08:00
wonfen
84fbccbfd9 release v2.2.3 2025-04-09 13:37:17 +08:00
TianHua Liu
49c81f6201 fix: the first function call creates multiple axios instances (#3273) 2025-04-07 16:50:53 +08:00
Tunglies
c894a15d13 chore: update UPDATELOG 2025-04-06 02:03:12 +08:00
Tunglies
196b887381 Adjust text and shadow colors in tray speed rate display with colorful
icon
2025-04-06 02:00:40 +08:00
Tunglies
2ad20ed239 Merge branch 'tunglies' into dev 2025-04-05 20:00:55 +08:00
Tunglies
98de91771e Simplify tray icon template logic and adjust text colors 2025-04-05 19:54:32 +08:00
Tunglies
9dfd9bad20 Remove color detection for tray icons
Always use white text with black shadow regardless of icon type
2025-04-05 16:07:16 +08:00
Tunglies
0b8d08d13b Update logging macros usage in timer module
Replace log macros with custom logging macros in timer module
2025-04-05 11:36:38 +08:00
Tunglies
0de304d4e3 Fix and Optimize
fix: #3187 and #3096, silent startup can not trigger lightweight mode
fix: optimize startup initializing processing
2025-04-05 10:28:27 +08:00
Tunglies
55f1766ebc Change logging level from info to debug for hotkeys 2025-04-05 09:19:44 +08:00
Langning Chen
6d1a8fb264 Fix traffic graph time mismatch (#3201) 2025-04-04 17:52:18 +08:00
wonfen
d3958594d9 fix: #2609, avoid URL encoding issues by directly parsing query parameters 2025-04-04 13:50:21 +08:00
wonfen
b5952f320b fix: #3244, remove test directory, simplify resource initialization 2025-04-04 13:18:17 +08:00
wonfen
98be9621a6 feat: retry subscription fetch using Clash proxy on failure 2025-04-03 14:55:28 +08:00
wonfen
e4eb13ce22 chore: update default DNS override configuration 2025-04-03 14:55:28 +08:00
Tunglies
ecf2da7c0a chore: update UPDATELOG 2025-04-03 07:35:37 +08:00
wonfen
7d7c8988d7 fix: resolve rendering issue caused by duplicate node names 2025-04-02 12:48:17 +08:00
Tunglies
5e11d36972 Remove real-time window position and size saving 2025-04-01 17:26:27 +08:00
wonfen
3039f39d40 fix: #3227 show traffic chart only when data is available 2025-04-01 13:51:35 +08:00
wonfen
7b5fd104de fix: #3227, use async operations to avoid blocking on 2025-04-01 12:52:59 +08:00
wonfen
30ea408019 feat: enhance system info card with combo mode display 2025-04-01 01:44:59 +08:00
Tunglies
3fa130695c rm: setup_window_state_monitor for temporary due to unkown window control behavior 2025-03-31 21:52:50 +08:00
Tunglies
fece31438a chore: update UPDATELOG 2025-03-31 21:47:06 +08:00
Tunglies
ad1f2bea3b fix: unused Result 2025-03-31 21:44:12 +08:00
Tunglies
cd4bfdd743 feat: change proxy mode to close connections if enable auto close connections 2025-03-31 21:43:29 +08:00
wonfen
cde8c4004f feat: add is_admin field to export_diagnostic_info 2025-03-31 10:34:11 +08:00
wonfen
c53514e060 feat: unify runtime mode detection; support TUN and service installation in admin mode 2025-03-31 08:16:14 +08:00
wonfen
8e99672265 feat: show node count in proxy groups 2025-03-31 04:35:27 +08:00
wonfen
5b9b5cb6a8 fix: add macos missing libc deps 2025-03-31 03:36:58 +08:00
wonfen
62141380d8 chore: update dependencies and bug report template 2025-03-31 03:24:36 +08:00
wonfen
52a15bb281 feat: detect admin mode and warn about auto-start unavailability 2025-03-31 03:22:24 +08:00
Tunglies
b092f74c88 fix(dir): wrong logs dir path 2025-03-30 13:12:42 +08:00
Tunglies
937f43c270 fix: unable to switch subscribtion profile 2025-03-30 12:53:16 +08:00
Tunglies
9b02088918 chore: update UPDATELOG 2025-03-30 12:49:07 +08:00
wonfen
1bd503a654 feat: add error prompt for initial config loading to prevent switching to invalid subscription 2025-03-30 10:56:30 +08:00
Tunglies
c6477dfda4 Update build target from esnext to es2020 2025-03-30 04:19:35 +08:00
Tunglies
4831d88467 rm(lightweight): unused logging 2025-03-29 13:05:58 +08:00
Tunglies
9ebde802d4 Update alpha workflow to trigger on src directory changes 2025-03-29 12:35:49 +08:00
wonfen
a9cccc7b97 feat: add error prompt for loading initial config file 2025-03-29 07:52:46 +08:00
Tunglies
d54a765bd6 chore: update UPDATELOG 2025-03-28 19:41:46 +08:00
Tunglies
5a2751162f fix(linux): can not connect to mihomo core 2025-03-28 19:39:11 +08:00
Tunglies
492a5a6de7 feat(cmd): service return message i18 language support 2025-03-28 11:51:52 +08:00
Tunglies
f6c0f144a6 fix(clippy): clippy warning codes 2025-03-28 11:43:21 +08:00
Tunglies
1c046f3ca3 fix(cmd): service error message return with shorter message 2025-03-28 11:35:50 +08:00
wonfen
4a47c5bb6f fix: unused code on non-MacOS platform 2025-03-28 05:58:02 +08:00
wonfen
b7e01aefb4 perf: optimize homepage traffic chart code, refine UI, and complete i18n 2025-03-28 05:53:18 +08:00
Tunglies
e8e16f7d57 refactor(logging): replace log_err! with structured logging_error! calls
refactor(cm-service): better error handling from Backend to Frontend
2025-03-28 03:39:34 +08:00
wonfen
59caa22431 feat: enhance service startup logic with user preference-based sidecar fallback 2025-03-28 03:20:13 +08:00
Tunglies
e2046f3e48 refact(profile+core): replace println with logging! macros for structured logging 2025-03-28 01:48:55 +08:00
Tunglies
8fdcffc731 refactor(CoreManager) combine duplicated logical 2025-03-28 00:58:34 +08:00
Tunglies
3ec77c6256 chore: update UPDATELOG 2025-03-27 20:52:50 +08:00
Tunglies
b09313756e refactor: optimize total width calculation and format bytes speed function 2025-03-27 20:45:51 +08:00
wonfen
f800e2e3b6 refactor: simplify graph code and adjust text margins 2025-03-27 13:11:39 +08:00
wonfen
daad623855 fix: resolve toggle flicker for "Auto Start" and "DNS Override" 2025-03-27 12:30:15 +08:00
Tunglies
7716e2bc87 rm: unused trait filed 2025-03-27 12:14:27 +08:00
Tunglies
70bd5ec03c refactor: simplify tray icon handling and update return types for icon functions
fix: custom tray icon with speedrate display large gap
2025-03-27 12:04:52 +08:00
Tunglies
ce5c86c3b0 fix: load custom tray icon failed due to #2886 2025-03-27 11:12:08 +08:00
Tunglies
a6a6d9d036 feat: initial and restart core checks service version if available
chore: update UPDATELOG.md
2025-03-27 09:20:15 +08:00
Tunglies
971dd6a2cf fea: optimize vite chunk splitting 2025-03-27 05:09:36 +08:00
Tunglies
42d0ea7e36 chore: remove unused dependencies and notification plugin from the project 2025-03-27 02:59:48 +08:00
Tunglies
006bcffe8c chore: update rust dependence and remove unused dependence, minimized feature requred 2025-03-27 01:04:43 +08:00
Tunglies
ff4101fa47 Revert "feat: front-end use RunningMode enum instead of string literals"
This reverts commit 7280635741.
2025-03-26 22:17:29 +08:00
Tunglies
7280635741 feat: front-end use RunningMode enum instead of string literals 2025-03-26 22:10:42 +08:00
Tunglies
7ede91599c fix: standardize RunningMode handling between frontend and backend
This commit improves the type consistency between the Rust backend and TypeScript frontend by:

1. Modifying the Rust `get_running_mode()` command to return a String instead of RunningMode enum directly
2. Removing the RunningMode enum and IRunningMode interface from TypeScript types
3. Using string literals for mode comparison in frontend components
4. Standardizing on capitalized mode names (e.g., "Sidecar" instead of "sidecar")

These changes ensure proper serialization/deserialization between backend and frontend,
making the code more maintainable and reducing potential inconsistencies.
2025-03-26 22:04:16 +08:00
Tunglies
6e40dd9862 fix: tray icon and tray rate display expression logic bug 2025-03-26 19:07:09 +08:00
Tunglies
42db9ea0bb chore: enable pre-commit for Rust formatting, pre-push for Rust linter check 2025-03-26 18:59:31 +08:00
Tunglies
ca0cf4552c add: RunningMode Display implementation and TypeScript enum 2025-03-26 17:01:48 +08:00
Tunglies
d91653b218 feat: add config log type and improve window logging 2025-03-26 16:43:26 +08:00
Tunglies
1ace560531 feat: add front-end system service management functions 2025-03-26 16:22:13 +08:00
Tunglies
81968a579d feat: reorganize service commands and implement logging for service management 2025-03-26 15:02:08 +08:00
wonfen
5a0eb56f70 feat: add AppDataProvider for centralized app data management and optimized refresh logic 2025-03-26 13:26:32 +08:00
wonfen
804fad6083 fix: reduce CPU usage caused by repeated refresh of "Current Proxy" card 2025-03-26 11:59:20 +08:00
Tunglies
98d3a48710 refactor: replace println with logging in core validation and tray quit function 2025-03-26 04:31:38 +08:00
Tunglies
0ec4f46052 chore: better install service prompt translation 2025-03-26 03:44:30 +08:00
Tunglies
a891341e35 fix: alpha version 2025-03-26 03:03:50 +08:00
Tunglies
10426af3ad chore: update UPDATELOG 2025-03-26 01:57:44 +08:00
Tunglies
5be1d604ee chore: fix release-alpha-version 2025-03-26 01:54:45 +08:00
Tunglies
1baa840160 v2.2.3-alpha begin 2025-03-26 01:51:19 +08:00
Tunglies
14347f60d5 Refactor hotkey logging with structured logging macro 2025-03-26 01:18:28 +08:00
Tunglies
df5424d55e feat: add logging module and update running mode terminology 2025-03-25 23:05:09 +08:00
wonfen
12065330e1 Release 2.2.2 2025-03-25 14:11:40 +08:00
wonfen
e054ac67fb feat: improve mihomo core and service keep-alive and reinstallation logic 2025-03-25 06:41:00 +08:00
Tunglies
31a7750482 chore: rename updater alpha release json names 2025-03-25 01:54:44 +08:00
Tunglies
2e38307f65 chore: updater channel logic 2025-03-25 01:49:51 +08:00
Tunglies
47accdd2b1 Revert "chore: updater channel combined"
This reverts commit cb0146573f.
2025-03-25 01:38:52 +08:00
Tunglies
cb0146573f chore: updater channel combined 2025-03-25 01:32:37 +08:00
wonfen
cf78bb3686 refactor: service reinstallation logic on detection failure 2025-03-25 00:51:38 +08:00
Tunglies
b5b5ae4e7b chore: remove update endpoints temporary 2025-03-25 00:28:28 +08:00
Tunglies
b99bc7fcd1 feat: add default update log resolution and improve error handling 2025-03-25 00:23:19 +08:00
Tunglies
f50fe9159d refactor: remove deprecated lightweight module and adjust macOS activation policy 2025-03-24 20:11:38 +08:00
Tunglies
09f6917638 fix: update lightweight mode implementation and fix MacOS dock icon visibility 2025-03-24 19:16:21 +08:00
Tunglies
e330d75a89 fix: correct spelling of "Lightweight" in tray menu 2025-03-24 18:54:39 +08:00
Skrepysh
4f0ce7458e Update russian translation (#3109) 2025-03-24 18:34:50 +08:00
wonfen
a2811c4803 chore: update required service version 2025-03-24 03:59:55 +08:00
Tunglies
1c233783a7 chore: alpha update cron 2025-03-23 23:04:40 +08:00
Tunglies
3e45cc4650 chore: update bug_report.yml 2025-03-23 22:56:42 +08:00
Tunglies
1a7c076e07 feat: add option to enable/disable tray icon display on MacOS 2025-03-23 16:37:27 +08:00
Tunglies
da4fddf150 chore: remove unused import 2025-03-23 14:28:28 +08:00
wonfen
970eb62aa6 perf: improve Clash mode switch responsiveness on home card 2025-03-23 04:54:18 +08:00
Tunglies
d669650758 feat: add lightweight mode entry and related hotkey support 2025-03-23 03:10:48 +08:00
wonfen
69347160e9 perf: simplify code logic and improve efficiency 2025-03-23 02:16:06 +08:00
wonfen
a345b54a77 chore: update required service version 2025-03-23 00:16:32 +08:00
Tunglies
8aabcd77a5 feat: enhance tray icon handling with caching and speed rate rendering 2025-03-22 23:00:45 +08:00
Tunglies
c30f54609d chore: update UPDATELOG 2025-03-22 17:23:10 +08:00
Tunglies
0830236a73 fix: update alpha workflow to correctly extract alpha logs from UPDATELOG.md 2025-03-22 17:21:45 +08:00
Tunglies
44f21444bb feat: update versioning in package.json, Cargo.toml, and tauri.conf.json to append '-alpha' 2025-03-22 17:19:11 +08:00
Tunglies
1d88d98ea1 feat: ensure Mihomo and Verge services are running before executing commands 2025-03-22 17:05:42 +08:00
wonfen
86f69fd574 feat: add singleton check after core startup in sidecar mode 2025-03-22 15:01:55 +08:00
wonfen
e21846a2ce chore: update preview img 2025-03-22 11:07:20 +08:00
wonfen
d5981ca94f fix: alpha workflow 2025-03-22 08:45:55 +08:00
wonfen
8c5eb3b550 chore: remove unused code of current proxy card 2025-03-22 06:25:10 +08:00
Tunglies
55dc416109 feat: add scripts for managing alpha versioning and update workflow 2025-03-22 05:11:32 +08:00
Tunglies
ec30b888d1 chore: update UPDATELOG 2025-03-22 04:53:27 +08:00
Tunglies
2a92755e65 fix: linux hanlding mihomo-core and verge-service communication 2025-03-22 04:51:38 +08:00
wonfen
6976ea3c09 perf: optimize proxy refresh mechanism for home page current proxy card 2025-03-22 04:34:19 +08:00
wonfen
b07ed2dbf5 fix: theme color on connection detail card
fix: home page clash info card proxy address
2025-03-22 04:26:28 +08:00
wonfen
2ab923da87 fix: port setting sync problem 2025-03-21 12:28:51 +08:00
wonfen
9799d4f747 chore: add missing i18n 2025-03-21 10:29:20 +08:00
wonfen
f739836891 refactor: auto-truncate long text on home profile card
fix: sync system proxy and TUN mode status indicators on home proxy mode card
2025-03-21 05:23:45 +08:00
Tunglies
a28887be8e fix: add libxslt1.1 dependency to Ubuntu installation in workflows 2025-03-20 23:36:51 +08:00
Tunglies
0f13691ae0 v2.2.1 2025-03-20 23:22:34 +08:00
Tunglies
ae72b83dbe v2.2.1-alpha.1 2025-03-20 23:20:07 +08:00
Tunglies
2e38404434 fix: homepage entry lightweight mode exiting Macos tray icon
fix: lightweight mode better handling and logging logic
2025-03-20 23:17:37 +08:00
Tunglies
11b8c8be45 chore: v2.2.1 2025-03-20 22:33:20 +08:00
Tunglies
a06597a3a6 fix: homepage proxy card handle direct mode 2025-03-20 21:51:12 +08:00
Tunglies
108840c4be feat: enhance alpha release workflow to fetch update logs and generate release notes 2025-03-20 19:42:04 +08:00
Tunglies
16c8672aeb fix: update workflow to delete old release assets instead of the release itself 2025-03-20 19:33:26 +08:00
Tunglies
167edcf8ef chore: update version to 2.2.1-alpha and add alpha update logs
refactor: simplify version change detection in alpha workflow

chore: alpha delete old release then release new one

fix: update alpha workflow to handle missing ALPHA_LOGS and improve release notes generation

fix: update job dependencies in alpha workflow to include delete_otld_release
2025-03-20 19:11:48 +08:00
Tunglies
d6dd89b674 fix: remove macOS application menu setup due to CMD+C/V/A issues 2025-03-20 18:14:18 +08:00
Tunglies
fac2ee6374 chore: bug report template remove os label 2025-03-20 16:39:29 +08:00
Tunglies
dd7876845a chore: UPDATELOG update 2025-03-20 15:49:00 +08:00
Tunglies
56e6139c2b fix: ensure main window title is set correctly on macOS 2025-03-20 15:43:59 +08:00
wonfen
04bdd48a2a release 2.2.0 2025-03-20 14:44:26 +08:00
Tunglies
5b47fe5b88 Revert "fix: update permission config with app icon and name"
This reverts commit 618ba52bca.
2025-03-20 14:17:41 +08:00
Tunglies
84a5cf6b89 feat(hotkey): macos support CMD+W to close window as default 2025-03-20 13:02:26 +08:00
wonfen
618ba52bca fix: update permission config with app icon and name 2025-03-20 12:43:22 +08:00
Tunglies
5c0cde517f fix: update system architecture retrieval method in PlatformSpecification 2025-03-20 06:20:19 +08:00
Tunglies
1b249564a3 fix: update service response check for correct status code and message 2025-03-20 06:18:14 +08:00
Tunglies
81b5501b0e feat: implement auto lightweight mode timer functionality
This commit implements the automatic lightweight mode feature with timer functionality:

- Rename configuration properties from auto_enter_lite_mode to enable_auto_light_weight_mode and auto_enter_lite_mode_delay to auto_light_weight_minutes for better clarity
- Add window event listeners to detect when window is closed or gets focus
- Implement timer system to automatically enter lightweight mode after configured time
- Remove exit_lightweight_mode function as it's no longer needed with the new implementation
- Update UI components to reflect the new property names
- Add logging for lightweight mode operations
- Initialize lightweight mode based on user configuration at startup

The feature now allows users to set a timer that will automatically enter lightweight mode
after closing the main window, which can be cancelled by focusing the window again.
2025-03-20 06:01:38 +08:00
Tunglies
91ccb3045c feat: implement lightweight mode functionality and update related settings 2025-03-20 03:23:14 +08:00
wonfen
e31f176c25 feat: lite mode settings 2025-03-20 01:44:43 +08:00
Tunglies
ad45485009 fix: hotkeys on windows crash 2025-03-19 18:41:26 +08:00
wonfen
25e5cf2ac2 chore: update deps 2025-03-19 11:07:57 +08:00
wonfen
bd58d935c6 feat: add up/down name to home traffic graph card 2025-03-19 10:38:21 +08:00
wonfen
da2705ff7d chore: change defaut start page to home 2025-03-19 05:48:20 +08:00
wonfen
61f019f194 fix: cannot detect service mode on home card 2025-03-19 05:25:38 +08:00
Tunglies
74e441df5b feat: add lite mode toggle to home page 2025-03-19 02:18:20 +08:00
Tunglies
772ecdd3b0 refactor: improve proxy retrieval and add window destruction method 2025-03-19 02:04:01 +08:00
Tunglies
baa535b609 feat: add macOS application menu integration 2025-03-18 18:40:53 +08:00
Tunglies
a2ff0a7e20 chore: remove tray icon configuration from webview JSON files 2025-03-18 15:31:23 +08:00
Tunglies
84732f9835 Revert "feat: add Rust installation step and configure alpha release details"
This reverts commit fe1227618a.
2025-03-18 14:37:56 +08:00
wonfen
dd17bcb0d6 chore: add missing colorful svg for home and unlock menu 2025-03-18 10:37:00 +08:00
wonfen
cab8e613a6 refactor: revise data retrieval for homepage traffic stats 2025-03-18 09:05:44 +08:00
Tunglies
fe1227618a feat: add Rust installation step and configure alpha release details 2025-03-18 01:08:46 +08:00
wonfen
596c52de87 feat: persist graph data after page reload 2025-03-18 00:37:10 +08:00
wonfen
ba5d5e9f86 feat: limit max url lenght on home profile card 2025-03-18 00:18:26 +08:00
wonfen
530669d288 fix: auto launch 2025-03-17 13:51:52 +08:00
wonfen
70b0f9a03a fix: resolve Netflix detection error 2025-03-17 11:57:12 +08:00
wonfen
105de99d06 perf: optimize all home page components 2025-03-17 11:47:02 +08:00
wonfen
6239f81f36 feat: sync auto-start status 2025-03-17 09:48:44 +08:00
wonfen
697d200ffe chore: update i18n for unlock test 2025-03-17 07:45:49 +08:00
wonfen
16d5077f55 perf: optimize CPU and memory usage of homepage traffic chart 2025-03-16 14:34:29 +08:00
wonfen
e0e1a05448 fix: sync proxy node selection 2025-03-16 14:24:58 +08:00
wonfen
bcaafa67a3 feat: unlock test page 2025-03-16 12:15:35 +08:00
Tunglies
36142656a4 refactor(timer): improve timer management with robust error handling
This commit improves the timer management system with the following enhancements:

Replace Mutex with RwLock for better read concurrency in timer state
Add structured TimerTask type to store task metadata
Use atomic boolean for initialization flag instead of mutex
Implement comprehensive error handling with detailed logging
Add rollback capability when task operations fail
Reduce lock contention by generating task diffs outside locks
Add timing metrics for task execution
Improve code organization and documentation
2025-03-15 18:58:12 +08:00
Tunglies
d6a48deb5a refactor(config): use bitflags for tracking update operations
Replace multiple boolean variables with a bitflag approach for tracking
required update operations in the patch_verge function. This improves
code maintainability and potentially performance by:

1. Using a single integer variable with bit operations instead of multiple booleans
2. Defining clear flags as enum variants for better code readability
3. Simplifying flag checks with bitwise operations

The UpdateFlags enum provides a clear and type-safe way to represent
different types of updates needed when patching Verge configuration.
2025-03-15 18:42:57 +08:00
Tunglies
e98ce0c2ae Optimize hotkey management to reduce lock contention and improve performance
- Minimize mutex lock durations in update() by processing data outside critical sections
- Pre-allocate collections to avoid unnecessary reallocations
- Replace forEach-style loops with more efficient for loops
- Add defensive null checks when accessing app_handle
- Improve error handling with more robust Option unwrapping
- Enhance code readability with descriptive comments
2025-03-15 17:52:14 +08:00
Tunglies
8118fc754c structure: move out crate_mihomo_api 2025-03-15 14:47:02 +08:00
Tunglies
1ec7a0f23c refactor: update request method handling to use reqwest::Method enum
fix: duplicated checks tray menu
2025-03-15 13:23:17 +08:00
Tunglies
488e8ef1d5 fix: optimize speed rate update logic for small values 2025-03-14 22:40:56 +08:00
wonfen
1f99cee78b feat: home page 2025-03-14 13:31:34 +08:00
Tunglies
c25015ed54 Revert "feat: add trigger updater workflow to GitHub actions for release and alpha workflows"
This reverts commit aaefc5b479.
2025-03-14 02:00:55 +08:00
Tunglies
aaefc5b479 feat: add trigger updater workflow to GitHub actions for release and alpha workflows 2025-03-14 01:31:19 +08:00
GKarbon
1c58816c73 chore: correct typo in src/locales/en.json (#2978)
This pull request corrects a typo in src/locales/en.json by replacing “than” with “then”, gives more accurate instructions.
2025-03-14 01:04:44 +08:00
Christine.
0fd99358aa fix: build failed due to vite unexpected output dir config. (#2981) 2025-03-14 00:57:17 +08:00
Tunglies
d4012bace9 chore: remove tray icon configuration from Linux app settings 2025-03-13 19:03:27 +08:00
Tunglies
af7660686d fix: increase request timeout to 60 seconds for better reliability 2025-03-13 15:16:54 +08:00
Tunglies
b57c6e408a chore: git hooks for linter and formatter 2025-03-13 12:51:20 +08:00
Mimi
124934b012 feat: additional macos tray event handling option for menu display (#2958) 2025-03-13 10:08:38 +08:00
MaqicXu
1bef6d085d refactor(timer): enhance timer initialization and task handling (#2956)
- Add initialization flag to prevent duplicate timer initialization
- Improve logging for better debugging and monitoring
- Refactor async task function with proper error handling
- Add more detailed log messages throughout the timer lifecycle
2025-03-12 22:36:25 +08:00
Christine.
c73927c5ba chore: Change default TUN stack from 'mixed' to 'gvisor' (#2967) 2025-03-12 21:45:14 +08:00
Tunglies
692deb6012 fix: windows unmatched tray 2025-03-12 13:55:11 +08:00
Tunglies
8ec499f631 fix: windows different tray icon display 2025-03-12 13:28:04 +08:00
Tunglies
2bcd653a56 feat: update systray creation to use TrayIconBuilder and pass app reference
fix: macos systray duplicated icon
2025-03-12 13:04:15 +08:00
Tunglies
0f10952979 feat: add alpha update endpoints to tauri configuration 2025-03-11 01:31:31 +08:00
Tunglies
58fa67100f feat: add support for alpha updates and enhance updater functionality
feat: improve release handling by adding creation logic for non-existent releases
2025-03-11 01:27:17 +08:00
Tunglies
8e294916c4 rm: label issues workflow 2025-03-10 01:01:12 +08:00
Tunglies
6877e0c95d chore: rename "DNS Settings" to "DNS Overwrite" in UI for consistency
This change updates the label for the DNS toggle setting from "DNS Settings" to "DNS Overwrite"
in the ClashVerge settings interface. The change provides better consistency with the translation
keys and more clearly communicates the function of the setting, which is to override system DNS.
The corresponding translation keys have been updated in both English and Chinese localization files.
2025-03-10 00:57:55 +08:00
Tunglies
37a333a023 feat: add scheduled workflow and commit change check to alpha build 2025-03-09 17:42:13 +08:00
Tunglies
48f1da963a refactor: update MihomoManager to handle traffic WebSocket URL and authorization 2025-03-09 14:44:15 +08:00
wonfen
e1905aced4 feat: enhance latency test logging and error handling 2025-03-09 04:22:34 +08:00
wonfen
f18202a3a4 refactor: improve webSocket connection handling and error recovery 2025-03-09 04:22:01 +08:00
wonfen
c1a9de4d66 feat: add icon file content check to prevent saving failed downloads 2025-03-09 02:34:57 +08:00
Tunglies
18f86874ee refactor: migrate clash client info retrieval to MihomoManager 2025-03-09 00:40:16 +08:00
Tunglies
e6686e0b82 rm: clash-api dead code 2025-03-09 00:29:14 +08:00
Tunglies
4bf166986d refactor: improve request handling and response processing in MihomoManager 2025-03-09 00:27:12 +08:00
Tunglies
0f60d84f6c refactor: streamline clash delay test and improve API interactions 2025-03-09 00:04:48 +08:00
Tunglies
15e54df67c refactor: streamline clash mode handling and improve API interactions 2025-03-08 22:41:14 +08:00
wonfen
4cb6ad7736 feat: optimize icon cache download and DNS view styling 2025-03-08 13:31:20 +08:00
wonfen
e27a32395a refactor: restructure DNS setting logic 2025-03-08 11:25:00 +08:00
wonfen
eddcf209c1 refactor: refine DNS handling to follow config and merge settings 2025-03-08 03:34:25 +08:00
wonfen
10a151d411 fix: regex for first character matching 2025-03-07 14:07:10 +08:00
wonfen
54d5586a60 perf: faster app exit 2025-03-07 13:44:07 +08:00
TianHua Liu
30ca547e50 fix: Notice @ts-ignore (#2896)
thx
2025-03-07 12:46:30 +08:00
0XE
a1944d1a90 feat: Add x-data-grid component localization (#2925)
thx
2025-03-07 12:45:56 +08:00
wonfen
c2b35fdaa5 test: remove entitlements.plist items 2025-03-07 06:49:24 +08:00
Tunglies
805b54d81e Update dependencies and refactor encryption logic
Updates multiple dependencies to their latest versions in Cargo.lock and Cargo.toml.
Refactors encryption logic to use updated getrandom API.
Improves tray speed rate display by using ab_glyph for font rendering.
2025-03-06 18:56:31 +08:00
wonfen
e3579dac65 feat: enable dns settings by default 2025-03-06 14:40:35 +08:00
wonfen
f80591242e feat: add dns settings 2025-03-06 14:30:43 +08:00
Christine.
69cb9769c1 add: missing i18n text. (#2917) 2025-03-05 22:28:28 +08:00
0XE
efd42d9da0 fix: ISSUES #2727 (#2913) 2025-03-05 14:20:07 +08:00
Christine.
21a6340095 workflow: remove renaming behavior. (#2909) 2025-03-05 11:41:15 +08:00
Tunglies
6c96724dce feat(mihomo): refactor MihomoManager for global access and improve proxy retrieval (#2906) 2025-03-05 10:58:54 +08:00
wonfen
ebb194d2a2 feat: add admin permission prompt for system service 2025-03-05 10:22:57 +08:00
Tunglies
1a51a92b70 test: crate_mihomo_api additional headers 2025-03-05 08:14:37 +08:00
Tunglies
5760f16272 fix: extern controler api secert with headers 2025-03-05 08:09:42 +08:00
Tunglies
4ed36f6223 refacture: Mihomo API integration (#2900)
* feat: add mihomo_api crate as a workspace member

Added a new mihomo_api crate to handle interactions with the Mihomo API. This modular approach provides a dedicated interface for fetching and managing proxy data from Mihomo servers. The implementation includes functionality to refresh and retrieve both proxies and provider proxies with proper error handling and timeouts. Added this crate as a workspace member and included it as a dependency in the main project.

* Refactors Mihomo API integration

Simplifies proxy fetching by removing the MihomoManager structure.

Updates the get_proxies and get_providers_proxies functions to directly use the mihomo_api module.

Removes unused Mihomo API related files and modules for cleaner codebase.

Enhances overall maintainability and performance.
2025-03-05 00:45:08 +08:00
0XE
7ea7ca1415 fix: issues #2838 (#2886) 2025-03-04 20:46:17 +08:00
Tunglies
1ee8786ab7 feat(sysinfo): Add diagnostic information enhancements (#2880)
Enhanced the PlatformSpecification struct with additional diagnostic information including:
- Added Verge version information to diagnostic output
- Added running mode information (Service/Sidecar/Not Running)
- Improved Debug implementation to display all diagnostic fields
- Implemented asynchronous detection of core running mode

This change helps users provide more complete system information when reporting issues.
2025-03-04 11:52:22 +08:00
wonfen
44ca513241 fix: sync system proxy status indicator with hotkey 2025-03-04 06:57:42 +08:00
wonfen
73310b466b fix: correct type declarations for getProxiesInner and getProxyProviders 2025-03-04 02:26:26 +08:00
Tunglies
1ba688727e feat(proxy): add proxy commands and integrate with API
Add new proxy.rs module with get_proxies and get_providers_proxies commands.
Update mod.rs and lib.rs to re-export and register proxy commands.
Update API.ts to use invoke for proxy commands.
Minor formatting improvements in module/mihomo.rs.
2025-03-04 01:01:24 +08:00
Tunglies
3b69465016 feat: add Mihomo API modules and manager (#2869)
• Introduce new API caller implementations for Mihomo in model and module layers.
• Add configuration and API integration files under /src-tauri/src/config/api and /src-tauri/src/model/api.
• Implement a singleton MihomoAPICaller with async API call support and integration tests.
• Create a new MihomoManager module to refresh and fetch proxies from the API.
• Update Cargo.lock and Cargo.toml with additional dependencies (async-trait, env_logger, mockito, tempfile, etc.) related to the Mihomo API support.
2025-03-03 19:31:44 +08:00
wonfen
3e53ea7209 Revert "refactor: improve proxy group UI and spacing (#2835)"
This reverts commit 520c33557e.
2025-03-03 14:47:05 +08:00
wonfen
07bdc108ed feat: show service mode installation prompts in user mode 2025-03-03 14:42:31 +08:00
Tunglies
a18efb0e71 fix: speed format runns by docs 2025-03-03 11:36:21 +08:00
Tunglies
de1c825ad3 Revert "style: update box styling in settings page for improved layout (#2857)"
This reverts commit de2cff824e.
2025-03-03 08:00:10 +08:00
Tunglies
de2cff824e style: update box styling in settings page for improved layout (#2857) 2025-03-03 06:38:32 +08:00
Tunglies
aff504bddc feat: add export diagnostic info functionality (#2856) 2025-03-03 05:58:12 +08:00
wonfen
277390e597 feat: Add sidecar mode as an alternative to service mode
- Auto-fallback to sidecar mode if service mode fails
2025-03-03 03:34:34 +08:00
Tunglies
fdcefe458e fix: windows/linux runtime crash 2025-03-03 02:27:45 +08:00
Christine.
9bb2160abe workflow: remove 32-bit platform (#2855)
* chore: build portable by self

* chore: remove 32bit platform

* Update CONTRIBUTING.md

* update alpha version
2025-03-03 01:16:33 +08:00
Tunglies
97d683541d Revert "chore: alpha ci should remove old builds"
This reverts commit 9f7ffb80e1.
2025-03-03 00:16:17 +08:00
Tunglies
9f7ffb80e1 chore: alpha ci should remove old builds 2025-03-02 23:46:20 +08:00
Tunglies
c957ea7b24 feat: fish env export support 2025-03-02 23:20:10 +08:00
Tunglies
181fce16b1 version: 2.1.3 a 2025-03-02 20:46:53 +08:00
Tunglies
825f023505 version: 2.1.3 alpha 2025-03-02 20:43:54 +08:00
Tunglies
347ea53b32 version: 2.1.3 alpha (#2851)
* version: 2.1.3 alpha
2025-03-02 19:08:27 +08:00
Tunglies
d525e0dd70 chore: automatically label issues (#2844) 2025-03-02 18:50:31 +08:00
Tunglies
365e844b83 docs: add fast build and clean commands to contributing guide (#2842)
docs: add fast build and clean commands to contributing guide

- Added documentation for the `pnpm build:fast` command which uses Rust's fast-release profile to reduce compilation time
- Added explanation that fast builds disable optimization and LTO, resulting in larger but quicker builds
- Added documentation for the `pnpm clean` command to clean Rust build files
2025-03-02 15:13:17 +08:00
Tunglies
44bdeb555a chore: fast-dev and fast-build profile (#2841)
* refactor: improve proxy group UI and spacing

- Increased spacing in proxy-groups.tsx by adjusting the right position
  of the alphabet selector to provide better visual separation
- Enhanced spacing in proxy-render.tsx with larger margins and padding
  - Increased group item margins from 8px to 10px with 16px horizontal spacing
  - Expanded border radius from 8px to 10px for smoother appearance
  - Improved ProxyHead component spacing with pl: 3, pr: 3.5
  - Enhanced grid spacing in proxy collection items from 1 to 1.5
  - Adjusted padding for better visual hierarchy

These changes create a more polished, spacious layout with improved
readability and touch targets.

* - Update package.json with improved dev and build scripts:
  - Add fast-dev profile to development scripts
  - Configure build:fast with fast-release profile
  - Add clean command for cargo cleaning
2025-03-02 14:58:59 +08:00
Tunglies
520c33557e refactor: improve proxy group UI and spacing (#2835)
- Increased spacing in proxy-groups.tsx by adjusting the right position
  of the alphabet selector to provide better visual separation
- Enhanced spacing in proxy-render.tsx with larger margins and padding
  - Increased group item margins from 8px to 10px with 16px horizontal spacing
  - Expanded border radius from 8px to 10px for smoother appearance
  - Improved ProxyHead component spacing with pl: 3, pr: 3.5
  - Enhanced grid spacing in proxy collection items from 1 to 1.5
  - Adjusted padding for better visual hierarchy

These changes create a more polished, spacious layout with improved
readability and touch targets.
2025-03-02 05:36:18 +08:00
Tunglies
bfad5ac091 fix: macos frameless title 2025-03-02 04:30:58 +08:00
wonfen
3ecf4bc238 feat: refactor logging system into a global service 2025-03-02 04:20:38 +08:00
wonfen
028e4012aa fix: remove macos window title 2025-03-02 04:09:50 +08:00
wonfen
dc6d429b9c fix: add bottom padding to prevent jitter 2025-03-02 04:08:13 +08:00
Tunglies
625cf1a803 feat: add fast compilation options for development and release (#2831)
- Added fast compilation profiles in Cargo.toml
  - fast-dev profile with max codegen units and disabled optimizations
  - fast-release profile with debugging support and faster build time
- Added new npm scripts for quick development iterations
  - dev:fast command for standard development without extra features
  - build:fast command for quick release builds
- Updated default dev command to use verge-dev feature flag
- Both profiles retain debug symbols and disable stripping for better debugging
2025-03-02 00:40:07 +08:00
Tunglies
9ee011514a refactor: rename cmds module to cmd for better consistency (#2830)
- Renamed `cmds` module to `cmd` for better naming consistency
- Reorganized command modules into separate files under src/cmd/
- Updated all imports and references to use the new module name
- Fixed missing dependency in webdav.rs to reference core::backup
- Updated tray module to use new cmd namespace
- Improved uwp.rs module structure using platform-specific implementations
- Removed unnecessary imports from various command files
2025-03-01 22:52:43 +08:00
Tunglies
184fd4a1ba refactor: reorganize feat.rs into modular structure (#2827)
Split the monolithic feat.rs file into specialized modules:
- backup.rs: WebDAV backup and restore functions
- clash.rs: Core management and testing functions
- config.rs: Configuration handling
- profile.rs: Profile management
- proxy.rs: Proxy and TUN mode controls
- window.rs: Dashboard window management

This improves code organization, readability, and maintainability
by grouping related functionality into logical modules.
2025-03-01 20:44:35 +08:00
Christine.
23dcfd9401 fix: build failed with Windows (#2825) 2025-03-01 19:52:42 +08:00
Tunglies
1cdba297fb add: issues type template 2025-03-01 19:12:12 +08:00
Tunglies
1ed6743bbb Issues label options template (#2820)
* fix: macos dock display icon and text

* add: issues label option template
2025-03-01 02:46:16 -08:00
Tunglies
41c42bba32 fix: macos dock display icon and text (#2818) 2025-03-01 02:29:40 -08:00
wonfen
8fb66ea32c perf: improve scrolling performance and interaction in proxy group list 2025-03-01 08:31:31 +08:00
wonfen
51d4c1c4a5 fix: v2 action file rename 2025-03-01 08:04:31 +08:00
wonfen
86e069994e chore: updatelog 2025-03-01 03:45:03 +08:00
wonfen
1cb923b6d8 feat: add exit status check in core config validation 2025-03-01 03:39:13 +08:00
wonfen
b1d003b073 Release - 2.1.2 真·臻 2025-03-01 01:49:01 +08:00
Christine.
0fb4254481 add: i18n text for settings page. (#2815) 2025-03-01 01:36:36 +08:00
Tunglies
ae7f456011 feat: better setting UI layout (#2814) 2025-03-01 01:29:23 +08:00
wonfen
cd4bec6bfd chore: v2 updater 2025-03-01 01:29:23 +08:00
Tunglies
5906e0126d feat: better setting layout ui (#2809) 2025-03-01 01:29:23 +08:00
Tunglies
dce1395af1 feat: quiting when enable tun mode no more blocking system network (#2805) 2025-03-01 01:29:23 +08:00
wonfen
e7db13af37 test updater 2025-03-01 01:29:23 +08:00
wonfen
2eee8cd7d3 chore: updater v2 Capabilities 2025-02-28 10:55:53 +08:00
wonfen
836a2abae1 fix: updater 2025-02-28 09:33:50 +08:00
wonfen
a68a86d6db chore: updatelog 2025-02-28 07:34:56 +08:00
wonfen
ee9f0990fd feat: add ability to check service version and auto-reinstall 2025-02-28 06:45:30 +08:00
wonfen
59d0629e3f feat: enhance updater script with comprehensive platform support and logging 2025-02-27 17:19:04 +08:00
Christine.
17af292761 fix: connection details (#2778) 2025-02-27 14:53:17 +08:00
wonfen
a4dd4bcc8a feat: enhance merge config validation and error handling 2025-02-27 14:49:55 +08:00
wonfen
1a9b0a476b style: UI tweak 2025-02-27 13:04:46 +08:00
wonfen
bb015506e7 Release - 2.1.1 臻fix 2025-02-27 03:18:23 +08:00
Tunglies
76be5d8469 feat: macos display colorful icon with speed rate (#2771) 2025-02-27 01:51:52 +08:00
wonfen
1258e187f5 feat: improve file type detection for better script recognition 2025-02-26 15:59:19 +08:00
wonfen
4056a4c35f chore: downgrade Tauri updater plugin and add i18n for core switching 2025-02-26 15:04:47 +08:00
wonfen
b6677f0f72 feat: optimize hotkey behavior and window management logic 2025-02-26 11:03:50 +08:00
wonfen
e8c1e6f241 fix: CI 2025-02-26 09:52:15 +08:00
wonfen
618595ac4c Release 2.1.0 - 臻 2025-02-26 08:36:02 +08:00
wonfen
d54ba48c11 feat: enhance script validation and error handling 2025-02-26 05:21:14 +08:00
wonfen
a489012a0c feat: Add window state monitoring and auto-save in real-time 2025-02-26 00:36:02 +08:00
wonfen
a5acdc04e3 perf: Improve config validation error messages and handling 2025-02-25 13:47:29 +08:00
wonfen
709a20ed7b chore: revise translation 2025-02-24 23:26:04 +08:00
wonfen
c88f2099c1 chore: Change default TUN stack from 'mixed' to 'gvisor' 2025-02-24 23:10:09 +08:00
Christine.
f72a2a943b add: i18n text for config check (#2750) 2025-02-24 22:23:42 +08:00
wonfen
c51199719d fix: remove node related group info when deleting a node 2025-02-24 11:40:28 +08:00
wonfen
bf374f2e85 fix: menu switching issue 2025-02-24 11:37:23 +08:00
wonfen
34f450fcdb feat: Improve core change configuration validation and error handling 2025-02-24 07:34:03 +08:00
wonfen
23f75598e5 feat: Enhance configuration validation and error handling during app startup 2025-02-24 06:21:32 +08:00
zhaoyuan
afc238d60e feat: 通过添加CLASH_VERGE_REV_IP环境变量的方式,修改复制环境变量按钮的IP (#2734)
Co-authored-by: zymouse <zymouse@pixmoving.net>
2025-02-24 03:42:40 +08:00
wonfen
1291c38d58 feat: Enhance configuration validation and error handling
- Improve config validation process with detailed logging and error tracking
- Add more robust error handling in profile updates and config patches
- Implement comprehensive config validation using clash core subprocess
2025-02-23 10:53:09 +08:00
Christine.
16caccde51 feat: auto rename alpha version (#2740) 2025-02-23 02:30:15 +08:00
wonfen
33f199fcd2 chore: Disable automatic alpha tag update in workflow 2025-02-20 14:25:58 +08:00
wonfen
2b534e0d51 refactor: Optimize proxy rendering and layout calculation 2025-02-20 14:21:55 +08:00
wonfen
23d1d210c7 refactor: Simplify tray icon event handling across platforms 2025-02-20 07:03:28 +08:00
wonfen
39a1d6202a chore: Update Node.js version and remove updater file generation 2025-02-20 02:55:47 +08:00
wonfen
f00a5af6c9 feat: Add system proxy status indicators 2025-02-19 13:56:22 +08:00
wonfen
48d68f5766 refactor: Simplify log data management and improve search functionality 2025-02-19 13:06:15 +08:00
wonfen
f948da748e fix: connections page traffic calculation 2025-02-19 02:24:21 +08:00
Tunglies
8b25d45109 rm dead code (#2718)
* rm: verge service takes full control of mihomo process. no more required.

* rm: dead code
2025-02-19 01:13:52 +08:00
wonfen
c4ddc35746 style: tweak 2025-02-18 11:40:41 +08:00
wonfen
0122e2bdcf feat: Add persistent column width settings for connection table & process filtering 2025-02-18 11:04:22 +08:00
wonfen
94b75f463b refactor: Remove unused routing select component from settings page 2025-02-18 09:04:23 +08:00
wonfen
3c2e04290c feat: Improve letter item hover interaction with debounce mechanism 2025-02-18 09:00:03 +08:00
wonfen
f0331ec2d9 feat: Add pause/resume functionality for connection tracking 2025-02-18 08:14:09 +08:00
wonfen
3b4013a1b0 fix: resolve deprecated warnings in console 2025-02-18 07:10:28 +08:00
wonfen
31ddccd3e1 perf: Improve proxy list interaction and UI responsiveness 2025-02-18 05:54:16 +08:00
wonfen
d29fe4cb6c feat: Enhance alphabet selector with dynamic tooltip and scrolling 2025-02-18 01:55:44 +08:00
wonfen
6763537f22 refactor: Improve proxy data update mechanism with optimistic UI and error handling 2025-02-18 00:37:55 +08:00
wonfen
8ab4bd6293 fix: Refine TypeScript types for proxy groups component 2025-02-17 16:27:06 +08:00
wonfen
31bc644763 feat: Enhance proxy groups with Initials navigation and performance optimizations 2025-02-17 16:07:46 +08:00
wonfen
fcd672abeb feat: Optimize tray speed rate rendering and update logic 2025-02-17 15:08:19 +08:00
wonfen
5f550da0bb feat: Improve Virtuoso list rendering for proxy groups 2025-02-17 14:30:21 +08:00
wonfen
e865a86eef feat: Add persistent scroll position for proxy groups 2025-02-17 14:24:33 +08:00
wonfen
80ee2e4289 fix: alpha build win webview pack rename issue 2025-02-17 12:06:57 +08:00
wonfen
4d327594d3 chore: Update updater artifacts configuration 2025-02-17 11:22:14 +08:00
Akioe Yu
3363c37457 fix: check script error (#2453)
(cherry picked from commit 97bde64fd6516019a190d52f05af54ade623d57c)
2025-02-17 03:10:19 +08:00
wonfen
cee9be81bf chore: Add macOS-specific test for format_bytes_speed function 2025-02-17 03:10:03 +08:00
wonfen
932d36462f Revert "perf: Improve kernel management logic & add more dev mode logs"
This reverts commit ff2cf30238.
2025-02-15 05:51:46 +08:00
Christine.
75c930f7ef add: i18n text for lightweight mode (#2692) 2025-02-13 14:27:12 +08:00
Tunglies
bdb178d893 fix: build front cannot find IvergeConfig.enable_lite_mode and macos port switching causes crash (#2691)
* fix: macos switch protocol port or enable protocol port causes crash

* fix: build time front cannot find IVergeConfig attribute enable_lite_mode
2025-02-12 18:14:13 -08:00
wonfen
3b0635e8a1 feat: add lightweight mode 2025-02-13 02:18:17 +08:00
wonfen
f5760784bf fix(macos): add missing required dependencies 2025-02-12 15:06:42 +08:00
wonfen
67f3554095 fix: remove unused imports to resolve compile warnings 2025-02-12 14:35:49 +08:00
wonfen
3bb3872e38 refactor: improve hotkey management, logging, and error handling; fix tray freeze and hotkey failure on silent startup 2025-02-12 14:23:42 +08:00
wonfen
c98330ea1f fix(tray): resolve blank icon issue on Windows and optimize creation logic 2025-02-12 13:56:33 +08:00
Christine.
d895b68f04 fix: use remoteDestination replace DestinationIP in connection page, #2668 (#2679)
* fix: use remoteDestination replace DestinationIP  in connection page, #2668

* add: missing i18n text

* fix: display the target address details in connection page
2025-02-11 14:52:27 +08:00
wonfen
e230981ac4 refactor: Improve tray icon and event handling across platforms & unify click behavior 2025-02-11 14:48:31 +08:00
wonfen
20763a741a fix: app crash without a default global_hotkey vaule 2025-02-11 01:50:48 +08:00
wonfen
4babcd9442 fix: deprecated CLI warnings 2025-02-11 01:05:51 +08:00
wonfen
d75f36066a feat: Add independent alpha update channel 2025-02-11 00:53:44 +08:00
wonfen
26ca4670ad fix: try to fix linux CI updater problem 2025-02-11 00:53:44 +08:00
Christine.
c4d6c167a2 add: i18n text (#2675) 2025-02-10 00:29:43 -08:00
wonfen
e5af9541da perf: Optimize kernel shutdown speed & logic 2025-02-10 13:18:00 +08:00
wonfen
89d9f47191 fix: crash caused by global_hotkey 2025-02-10 12:39:07 +08:00
wonfen
ff2cf30238 perf: Improve kernel management logic & add more dev mode logs 2025-02-09 14:19:15 +08:00
Tunglies
ebe0899eb1 perf: imporve clash mode switching performance on the main window (#2667) 2025-02-09 07:45:46 +08:00
Tunglies
a3d0a38b1e feat: option to enable global hotkey (#2665) 2025-02-09 07:45:22 +08:00
Tunglies
63bd0c87b2 fix: duplicate checked tray menu when profile name are same (#2660) 2025-02-08 09:36:04 +08:00
wonfen
db593fb188 feat: Optimize UI layout and page hierarchy 2025-02-07 09:13:30 +08:00
wonfen
67ae10b593 perf: optimize node latency refresh rate for faster updates 2025-02-06 07:58:42 +08:00
wonfen
c8d91c9e14 chore: update deps 2025-02-05 14:19:43 +08:00
Tunglies
6c54f5e9b4 Feature: Switch Proxy Profile from Tray Menu (#2644) 2025-02-05 08:52:47 +08:00
wonfen
8749648d97 fix: restore hotkey functionality after silent startup 2025-02-02 11:37:10 +08:00
wonfen
0b75b5ef26 feat: allow users to customize enhanced-mode and fakeip-range in tun mode by wonfen 2025-02-02 05:12:16 +08:00
wonfen
fbcadd0493 style: refine tray speed display 2025-02-02 03:43:15 +08:00
wonfen
75bb7a4dd7 fix: windows rounded corners 2025-01-19 09:47:43 +08:00
wonfen
4604fe4841 add donation 2025-01-18 16:08:24 +08:00
wonfen
e8badb0c0f release 2.0.3 2025-01-16 03:30:07 +08:00
白铭骢 (Mingcong Bai)
8906a8f3c6 fix(locales): clean up typesetting (#2539)
Following localisation guidelines from 《大陆简中自由软件本地化工作指南》
1.5.4 版 (Simplified Chinese - Mainland China FOSS Localization
Guidelines, version 1.5.4).

Link: https://repo.aosc.io/aosc-l10n/zh_CN_l10n_1.5.4.pdf
2025-01-14 13:00:30 +08:00
huzibaca
4e32990a5d chore: update 2025-01-14 12:56:08 +08:00
huzibaca
9f2583d1f2 revert: update deps 2025-01-14 12:41:52 +08:00
huzibaca
a9b3d8885d chore: avoid duplicate updates when tray rate is off 2025-01-14 11:48:43 +08:00
huzibaca
29ec4dc546 feat: maoos tray speed can be closed 2025-01-13 20:48:25 +08:00
huzibaca
d0d5204cbc fix: fix: try to fix the language pack issue(2) 2025-01-13 17:09:38 +08:00
huzibaca
3d84acd7ac fix: windows tray icon color not updated 2025-01-13 13:49:56 +08:00
huzibaca
5057221f59 chore: update husky/pre-commit 2025-01-13 13:03:46 +08:00
huzibaca
3ddfbc5d2f fix: tray tooltip not updating 2025-01-13 13:01:12 +08:00
huzibaca
362270e3ea chore: update 2025-01-13 12:41:07 +08:00
huzibaca
db91177e90 chore: update deps 2025-01-12 23:10:15 +08:00
huzibaca
d2f51ce509 fix: try to fix the language pack issue 2025-01-12 22:22:06 +08:00
huzibaca
146a66fb09 Merge branch 'languagefixes' into dev
# Conflicts:
#	src-tauri/Cargo.lock
#	src-tauri/Cargo.toml
#	src-tauri/src/core/tray/mod.rs
2025-01-11 15:07:30 +08:00
huzibaca
03305f03c1 fix: fixes #2502 2025-01-11 12:55:20 +08:00
lucidhz
82e76bc58e fix: put_configs response add detail error message (#2492)
感谢pr
2025-01-05 01:27:12 -08:00
huzibaca
e8ff6c785a fix: modify the external control access key, the tray rate display is abnormal 2025-01-02 15:27:28 +08:00
huzibaca
a8fafb469a chore: update deps 2025-01-02 15:02:07 +08:00
huzibaca
b9a220cb63 chore: update 2025-01-01 08:25:31 +08:00
huzibaca
0b44d40b39 feat: the tray displays the shortcut keys that have been set 2025-01-01 08:14:15 +08:00
huzibaca
6b349eda45 chore: update 2024-12-31 11:11:29 +08:00
huzibaca
ad335ba005 fix: unused code 2024-12-31 08:08:52 +08:00
huzibaca
04d766884a fix: syntax issues 2024-12-31 04:50:12 +08:00
huzibaca
44d1ec433d Merge branch 'feat-macos-spped-rate-icon' into dev 2024-12-31 04:43:54 +08:00
huzibaca
97864e8df3 feat: macos system tray addition rate display 2024-12-31 04:42:55 +08:00
blagodaren
3916293e8f fix: small refactor 2024-12-28 13:57:30 +03:00
blagodaren
a527177b67 fix: add more lang and lang fix for tray 2024-12-28 10:05:30 +03:00
blagodaren
9c027b10b2 fix: add system language sup 2024-12-28 08:12:46 +03:00
huzibaca
5da7086475 fix: fixes #2460 2024-12-28 06:05:09 +08:00
huzibaca
0006012ae7 chore:add macos entitlements.list 2024-12-27 04:38:34 +08:00
huzibaca
a3f46ec037 chore: update 2024-12-27 02:42:35 +08:00
huzibaca
bfea52f9dd chore: secret is empty and no parameters are passed 2024-12-25 02:15:06 +08:00
huzibaca
53334f05b8 chore: update 2024-12-24 06:03:23 +08:00
huzibaca
ba195c41b6 refactor: when updating the tray, the logic is split to improve performance. 2024-12-24 04:52:14 +08:00
huzibaca
cca2f1ce61 chore: after saving the configuration file, restart the core 2024-12-24 02:22:46 +08:00
huzibaca
a51191c661 chore: update default_bypass
1. add 172.29.0.0/16
2024-12-23 06:06:46 +08:00
huzibaca
4cdb5f93b9 fix: turn off window shadow fixer, fixes #2425 2024-12-23 04:36:41 +08:00
huzibaca
fae658c9c2 chore: update 2024-12-15 01:14:16 +08:00
huzibaca
886a469634 fix: fixer #2346 2024-12-14 17:30:58 +08:00
huzibaca
c3c1394e86 chore: update deps 2024-12-14 16:21:16 +08:00
Langning Chen
6a00255fff Fix l10n issues (#2315)
* Complete the missing translation

* Match the Chinese language file order with others
2024-12-11 01:02:21 +08:00
huzibaca
4f0aae0879 chorea: update deps 2024-12-10 22:36:13 +08:00
huzibaca
4f4fe4c41c feat: improve system bypass settings 2024-12-10 14:37:11 +08:00
huzibaca
2a4a3c8250 chore: enable default proxy bypass and hide custom bypass settings 2024-12-10 13:59:13 +08:00
huzibaca
7864acbadb chore: update deps(tauri-plugin-autostart) 2024-12-08 22:10:15 +08:00
huzibaca
ba18e64be0 chore: deeplink uses the latest API 2024-12-08 15:54:46 +08:00
huzibaca
ba8c1e5eb2 chore: update deps 2024-12-08 09:58:59 +08:00
huzibaca
2737fb2d87 fix: when the window is hidden, close the websocket connection, reduce the risk of memory leaks 2024-12-07 16:47:41 +08:00
wonfen
899285735f chore: change fakeip range 2024-12-06 15:34:41 +08:00
huzibaca
f561d12d35 chore:set the sysproxy_rs version to a fixed version 2024-12-06 15:03:04 +08:00
huzibaca
be258b13e0 fix: extension script dns is overwritten fixer #2235 2024-12-06 12:35:09 +08:00
Myles Mo
dbce6b5f1a feat: add nullshell env variable (#2285) 2024-12-04 19:01:13 +08:00
huzibaca
30f0c99a58 fix: shift hotkey conversion fixer #2278 2024-12-04 13:19:56 +08:00
huzibaca
49880c05d9 chore: update version 2024-12-04 00:30:46 +08:00
huzibaca
dc2fc84f58 fix: set fontLigatures to false fixer #2267 2024-12-04 00:28:33 +08:00
lollapalooza
78c2a1694f feat: add bypass check feature (#2272) 2024-12-03 16:18:07 +08:00
Christine.
baf34dd0d3 fix: #2126 (#2233) 2024-12-03 16:03:21 +08:00
wonfen
48f9dede7b release 2.0.2 2024-12-01 11:00:09 +08:00
huzibaca
a1f2a621ef fix: resource file initialization failed 2024-12-01 09:38:29 +08:00
huzibaca
a1e8ddb461 fix: resolve service permission failed(2) 2024-11-30 10:45:53 +08:00
huzibaca
d33d90a36e chore: update 2024-11-30 10:38:15 +08:00
huzibaca
c3114b876f fix: resolve service permission failed 2024-11-30 10:29:16 +08:00
huzibaca
50285aebde feat: user uploaded icons can use templates, provided they are monochrome icons fixer #2213 2024-11-30 09:49:43 +08:00
huzibaca
0eb5ee6ea8 chore: update 2024-11-30 07:04:09 +08:00
huzibaca
16c9c95e19 refactor: update_core_config, simplify logic and delete invalid notifications 2024-11-30 05:43:59 +08:00
yyhhyy
3bc4da3e85 🐛 fix: Dynamically set IPv6 DNS configuration based on existing config (#2198)
thanks
2024-11-30 00:55:15 +08:00
wonfen
a028a2e1cc chore: change mac tun dns 2024-11-29 11:10:41 +08:00
huzibaca
9675a35dff chore: update 2024-11-29 03:46:37 +08:00
huzibaca
c1546fdd64 chore: remove debug code 2024-11-28 14:44:13 +08:00
Yu-Haifeng
a109efc1d6 fix: macOS tray icon not changed when use system proxy or tun mode (#2176) 2024-11-28 14:42:05 +08:00
huzibaca
0782b25830 fix: the deadlock caused by incorrect call of window_state due to document error 2024-11-28 12:54:55 +08:00
huzibaca
0041ff13b8 chore: clean startup registry keys for older versions(2) 2024-11-28 06:40:44 +08:00
huzibaca
4693a25aa0 chore: clean startup registry keys for older versions 2024-11-28 05:34:56 +08:00
wonfen
609df5b4a6 chore: set tun default stack 2024-11-28 04:22:13 +08:00
huzibaca
6df8140cb1 chore: update 2024-11-27 14:27:16 +08:00
wonfen
65b4cb3191 release 2.0.2 2024-11-27 12:41:51 +08:00
huzibaca
e1de481349 chore: update 2024-11-27 11:34:52 +08:00
huzibaca
6e1cc80b91 fix: when tun is closed, the full profile configuration is not restored 2024-11-27 10:35:42 +08:00
huzibaca
b658ce7e75 refactor: backup implementation
1. timeouts can be set for different operations
2. performance optimization
2024-11-27 07:34:34 +08:00
huzibaca
f91f374dfa chore: update 2024-11-27 07:09:03 +08:00
huzibaca
56f6de5410 fix: linux build failed 2024-11-27 05:54:48 +08:00
huzibaca
94d22ecfc3 fix: fixer #2158 2024-11-27 05:47:08 +08:00
huzibaca
e25d71c6c8 chore: update version 2024-11-27 05:09:46 +08:00
huzibaca
bb1b156d2f fix: build failed. #2156 2024-11-27 05:07:02 +08:00
huzibaca
1b80ddf1e9 chore: timeout adjusted to 15 seconds 2024-11-26 15:09:58 +08:00
huzibaca
66d2fe9074 fix: add scroll bar and scroll to top button to the test page . fixer #2118 2024-11-26 14:44:43 +08:00
wonfen
6e36910734 style: adjust 2024-11-26 12:11:20 +08:00
huzibaca
a553a33c46 chore: remove window title 2024-11-26 10:11:55 +08:00
huzibaca
2a6f8b401b fix: kernel-caused silent mode failure to start windows 2024-11-26 09:00:01 +08:00
huzibaca
fa30567140 chore: update 2024-11-26 05:46:34 +08:00
huzibaca
243f685b83 refactor: Implement using third-party libraries 2024-11-26 04:51:19 +08:00
huzibaca
6cf2373b34 chore: update 2024-11-26 03:30:15 +08:00
huzibaca
e842ea745a fix: file drag and drop import cannot be used 2024-11-26 03:07:25 +08:00
wonfen
9696c7cec0 style: Increased light color contrast to prevent blurring on some displays 2024-11-26 01:05:30 +08:00
huzibaca
c4986eec50 chore: replace mui grid with mui grid2 2024-11-25 12:51:13 +08:00
wonfen
61079e769e update change log 2024-11-25 06:46:29 +08:00
huzibaca
00d2c915d1 fix: Try to fix vcruntime duplicate installation 2024-11-25 06:33:47 +08:00
huzibaca
6ad975c420 fix: update failed(updater.install called before updater.download) 2024-11-25 05:27:26 +08:00
huzibaca
1cd1a2d907 fix: when restoring webdav, the current username, password and url are not preserved 2024-11-25 03:41:35 +08:00
huzibaca
39a3c3d3a7 fix: password failed due to character escaping 2024-11-25 02:48:56 +08:00
huzibaca
dfefcf03ad fix: remove comments from svg icons to prevent front-end crashes. fixer #2093 2024-11-25 01:58:02 +08:00
wonfen
825b00e618 fix: fakeip dns 2024-11-25 01:50:30 +08:00
huzibaca
ae562e1e92 chore: replace mui grid with mui grid2 2024-11-25 01:34:18 +08:00
huzibaca
21c7888595 fix: tun allocates the wrong private network segment, causing conflicts. 2024-11-25 01:06:51 +08:00
wonfen
3b87a4f9d0 release 2.0.1 2024-11-24 09:00:20 +08:00
huzibaca
8564a58eab fix: If an older version of the executable exists, delete it(2) 2024-11-24 08:25:46 +08:00
huzibaca
c5d009c2cd feat: try to use vscode first, if not found then use system default app 2024-11-24 08:20:00 +08:00
huzibaca
c2e165d825 fix: If an older version of the executable exists, delete it 2024-11-24 01:24:51 +08:00
huzibaca
922020c57a Merge branch 'fix-migrate-tauri2-errors'
* fix-migrate-tauri2-errors: (288 commits)

# Conflicts:
#	.github/ISSUE_TEMPLATE/bug_report.yml
2024-11-24 00:14:46 +08:00
huzibaca
8cdc33beab fix: windows cannot open yaml file 2024-11-23 19:46:53 +08:00
wonfen
23eafdfe00 fix: release workflow 2024-11-23 12:36:16 +08:00
wonfen
e72e8ea631 release 2.0.0 2024-11-23 11:34:17 +08:00
huzibaca
a610a43db0 chore: set the request timeout to 3 seconds 2024-11-23 06:50:28 +08:00
huzibaca
4a90ffe619 chore: remove notes 2024-11-23 06:47:43 +08:00
huzibaca
18e8357b6a chore: update 2024-11-23 06:42:05 +08:00
huzibaca
df39347b19 fix: restore the window state first, then set the window size 2024-11-23 06:39:25 +08:00
huzibaca
a36261d705 chore: update 2024-11-23 06:22:46 +08:00
huzibaca
f133d22124 chore: add debug codes & logs(2) 2024-11-23 06:20:13 +08:00
huzibaca
6ba276b43f chore: add debug codes & logs 2024-11-23 05:43:13 +08:00
huzibaca
44db98f260 chore: set the request timeout to 5 seconds 2024-11-22 14:15:31 +08:00
huzibaca
8873526619 feat: added scroll top button for agent and rule pages 2024-11-22 09:22:44 +08:00
huzibaca
37c2599754 chore: remove debug code 2024-11-22 09:08:25 +08:00
huzibaca
a079b470b8 fix: macOS DNS restore failed 2024-11-22 03:09:39 +08:00
huzibaca
0f9ed02bf0 chore: hide DNS cache file 2024-11-22 02:42:55 +08:00
huzibaca
9aeb68205c fix: husky - install command is DEPRECATED 2024-11-21 12:06:52 +08:00
huzibaca
82b4cf259c chore: remove unused code 2024-11-21 11:44:19 +08:00
huzibaca
566fd3e88b chore: remove unused code 2024-11-21 11:24:19 +08:00
huzibaca
fbecf4f47b fix: password should not be trimmed 2024-11-21 11:14:40 +08:00
huzibaca
52899d4def chore: remove unused code 2024-11-21 11:13:11 +08:00
huzibaca
a89a828b35 fix: serde::json passing IVerge to the front end without deserialization 2024-11-21 06:01:56 +08:00
huzibaca
4d0dbdaced chore: update 2024-11-20 07:37:30 +08:00
huzibaca
8003f9902e chore: remove notes 2024-11-20 07:37:03 +08:00
huzibaca
15bd7324fe feat: encryption configuration properties 2024-11-20 07:27:42 +08:00
huzibaca
bb44fc51bd fix: auto launch does not worki 2024-11-20 03:52:19 +08:00
huzibaca
67a32e60c7 chore: update 2024-11-20 01:15:03 +08:00
huzibaca
960725777c fix: exit_app does not work 2024-11-20 01:04:55 +08:00
huzibaca
98c6e0311b fix: windows cannot save window state(2) 2024-11-20 00:27:53 +08:00
huzibaca
95b7641f9c fix: windows cannot save window state 2024-11-19 23:32:32 +08:00
huzibaca
18b0c3f7aa chore: update deps 2024-11-19 13:35:57 +08:00
huzibaca
49d3644d6a chore: format 2024-11-19 13:28:17 +08:00
wonfen
ee9d12d933 feat: improve set dns logic 2024-11-19 11:38:23 +08:00
huzibaca
5d37015f4d chore: update web:build comman, use tsc --noEmit 2024-11-19 04:42:37 +08:00
huzibaca
dca25637c9 feat: add logger highlighting, support regular and case matching 2024-11-19 04:10:10 +08:00
huzibaca
a7020fd46c feat: add logger highlighting 2024-11-19 03:29:44 +08:00
huzibaca
1ef2b1aaf1 fix: log pause button not working 2024-11-19 02:56:58 +08:00
huzibaca
a7a661e60f feat: logger support all level filters 2024-11-19 01:40:45 +08:00
huzibaca
2a9e2d47f5 chore: update deps 2024-11-18 23:51:43 +08:00
huzibaca
e33b3043df chore: remove unused code 2024-11-18 23:48:02 +08:00
Christine.
3f41618aa1 fix: field error, #2044 (#2045) 2024-11-18 07:34:57 -08:00
huzibaca
a507d7567f refactor: remove useSWRSubscription and use useEffect 2024-11-18 16:41:17 +08:00
huzibaca
62a6f58705 chore: remove unused code 2024-11-18 08:16:31 +08:00
huzibaca
77dd074fc3 feat: Log level status is saved to local storage 2024-11-18 08:14:21 +08:00
huzibaca
e8c0051be3 refactor: use zustand store, rewrite log clearing logic 2024-11-18 06:48:23 +08:00
huzibaca
b3923eafc7 chore: typo warn -> warning 2024-11-18 06:01:51 +08:00
huzibaca
9ebd96611a refactor: logger fetch logic 2024-11-18 05:58:06 +08:00
huzibaca
824325a2eb fix: the CJS build of Vite's Node API is deprecated, part 2 2024-11-18 01:21:00 +08:00
huzibaca
e8b3bd5bdc fix: the CJS build of Vite's Node API is deprecated 2024-11-18 01:07:16 +08:00
Christine.
a59fda512c chore: Replace test URL to support iPv4&iPv6 (#2033) 2024-11-18 00:20:21 +08:00
huzibaca
ae181f6835 fix: webdav list interface compatibility issue 2024-11-17 23:57:28 +08:00
huzibaca
67bb242778 fix: webdav refreshes data and clears the original data when an error occurs. 2024-11-17 23:50:34 +08:00
huzibaca
2028c189aa chore: update 2024-11-17 01:01:36 +08:00
huzibaca
ba0dc4fb81 chore: update 2024-11-17 00:46:35 +08:00
huzibaca
c40db417d2 fix: fixes #1968 2024-11-16 23:09:10 +08:00
wonfen
0eb776cdd3 release rc.7 2024-11-16 10:15:50 +08:00
huzibaca
c79a7a7f6f chore: remove debug code 2024-11-16 07:35:34 +08:00
huzibaca
1e3c995e6a fix: fixes #1940 2024-11-16 06:08:49 +08:00
huzibaca
3f79e42628 fix: When the shortcut key closes the window, the window is minimized 2024-11-16 04:46:20 +08:00
huzibaca
c16ae89a3d fix: windows arm64 vsruntime is not installed 2024-11-16 03:12:11 +08:00
huzibaca
7132eaeb11 Merge branch 'fix-tray-menu-flash-on-windows' into fix-migrate-tauri2-errors
* fix-tray-menu-flash-on-windows:
  chore: update
2024-11-16 02:54:24 +08:00
Chenx Dust
aef96f0d27 feat: support mptcp and smux display (#1995)
Corresponding pull request in mihomo: https://github.com/MetaCubeX/mihomo/pull/1646
2024-11-16 01:35:22 +08:00
huzibaca
b20a56f1de chore: update 2024-11-15 17:19:14 +08:00
huzibaca
3073b4e48e chore: unified code format 2024-11-14 03:21:18 +08:00
huzibaca
7b53752ccd fix: call parameter error 2024-11-14 03:16:32 +08:00
wonfen
03eedf6175 chore: update info & i18n 2024-11-14 03:01:37 +08:00
huzibaca
2330a4bc93 chore: update dep(tauri-bubild) 2024-11-13 21:49:53 +08:00
huzibaca
36afae50b1 chore: update deps 2024-11-13 21:39:55 +08:00
huzibaca
272ee7577c feat: add refresh button 2024-11-13 00:53:52 +08:00
huzibaca
7f34073da6 fix: InputProps is deprecated 2024-11-13 00:30:30 +08:00
huzibaca
f46ee2a0a3 fix: mui grid has been deprecated 2024-11-13 00:21:22 +08:00
huzibaca
4a79f0c75d fix: application restart, window status not saved 2024-11-12 22:49:08 +08:00
huzibaca
27a78af269 fix: syntax issues caused by upgrading mui5 2024-11-12 20:05:28 +08:00
huzibaca
586af67829 chore: update 2024-11-12 19:44:57 +08:00
huzibaca
575d8c4240 fix: import error caused by dependency upgrade 2024-11-12 19:35:56 +08:00
huzibaca
d32734214b fix: undefined error 2024-11-12 19:34:53 +08:00
huzibaca
22ce5aab25 chore: update deps 2024-11-12 19:06:04 +08:00
wonfen
9f90a1c58e release rc.6 2024-11-12 03:49:21 +08:00
huzibaca
b5e0374946 feat: add webdav backup 2024-11-12 02:55:02 +08:00
huzibaca
44cb1c7f3e chore: update 2024-11-09 12:13:50 +08:00
huzibaca
80aba859e7 Merge branch 'feat-webdav-backup' of ssh://github.com/clash-verge-rev/clash-verge-rev into feat-webdav-backup
# Conflicts:
#	src/locales/fa.json
#	src/locales/ru.json
#	src/locales/zh.json
2024-11-09 11:54:33 +08:00
wonfen
08360edd26 update: Readme 2024-11-09 09:00:53 +08:00
wonfen
6e69b3f032 fix: translation 2024-11-09 08:59:30 +08:00
huzibaca
19bb9c7f50 chore: update 2024-11-09 06:56:58 +08:00
huzibaca
f5dee51e9c chore: update 2024-11-09 05:50:51 +08:00
huzibaca
bd37fef720 chore: update 2024-11-08 23:42:00 +08:00
huzibaca
c22e4e5e2c chore: update 2024-11-08 21:46:15 +08:00
huzibaca
2887a2b6d3 Merge branch 'feat-add-unified-delay' into fix-migrate-tauri2-errors 2024-11-06 13:56:36 +08:00
huzibaca
01bde19701 chore: update 2024-11-06 13:52:36 +08:00
huzibaca
792f1826ee chore: update 2024-11-06 10:07:02 +08:00
huzibaca
c16795dce9 fix: @use rules must be written before any other rules. 2024-11-06 09:48:31 +08:00
huzibaca
c1597a0968 fix: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. 2024-11-06 09:46:17 +08:00
huzibaca
590aa950df chore: update 2024-11-05 21:40:02 +08:00
huzibaca
402018b95c chore: update 2024-11-05 21:35:17 +08:00
huzibaca
d5101ac2f3 chore: update 2024-11-05 18:38:50 +08:00
huzibaca
251942c91d chore: update 2024-11-05 18:30:28 +08:00
huzibaca
fe86b812cd chore: add tooltip 2024-11-05 17:39:59 +08:00
huzibaca
cb3bff589f feat: add unified delay 2024-11-05 16:24:58 +08:00
huzibaca
ec7d7ec559 fix: wrong window state save point 2024-11-04 09:53:40 +08:00
huzibaca
24c7a5b805 chore: update deps 2024-11-02 10:25:38 +08:00
huzibaca
0a4ecb1507 chore: update 2024-11-02 07:27:08 +08:00
huzibaca
d736dace50 chore: update (+1 squashed commit)
Squashed commits:
[78899ef] fix: bbr2 not working in windows 11(24H2)
2024-11-02 07:10:47 +08:00
huzibaca
70bbab909f chore: update 2024-11-01 06:03:01 +08:00
The1111mp
6625f78e4f chore: added support for compiling linux arm architecture (#1945)
* chore: added support for compiling linux arm architecture

Signed-off-by: The1111mp <The1111mp@outlook.com>

* chore: remove debug code

Signed-off-by: The1111mp <The1111mp@outlook.com>

---------

Signed-off-by: The1111mp <The1111mp@outlook.com>
2024-10-31 17:20:16 +08:00
downer
da2b4c8858 fix: fix TUN icon is overwritten by system proxy icon (#1961)
Co-authored-by: 周晓亮 <zhouxl@jiyitech.com>
2024-10-31 09:07:21 +08:00
huzibaca
12df415dfd feat: use tauri_plugin_window_state 2024-10-30 18:52:53 +08:00
huzibaca
2493f463f3 revert: feat: use tauri-plugin-persisted-scope 2024-10-30 18:28:55 +08:00
huzibaca
f4238b1fb9 feat: use tauri-plugin-persisted-scope 2024-10-30 16:37:47 +08:00
huzibaca
794783ab4e chore: window hide replaces window minimize 2024-10-30 13:51:58 +08:00
wonfen
02634622a5 release: rc.5 2024-10-30 13:08:37 +08:00
wonfen
ac24501e76 chore: update bug report template 2024-10-30 12:59:19 +08:00
huzibaca
e40ea38112 chore: remove useless hooks
the window is not closed, it is minimized, so the position still exists
2024-10-30 10:06:54 +08:00
huzibaca
b809b9bb80 fix: linux file permissions problem
check-config configuration file moved from temp_dir to home_dir, resolved
2024-10-30 09:08:44 +08:00
huzibaca
73bad8f355 chore: restore linux custom close button 2024-10-30 06:30:49 +08:00
huzibaca
ac884da56b fix: performance issues caused by closing windows on mac 2024-10-30 06:27:29 +08:00
huzibaca
c35ab2e1cd chore: update 2024-10-29 10:15:07 +08:00
huzibaca
ed3907c273 chore: update 2024-10-29 10:13:53 +08:00
huzibaca
5e00287045 chore: disable websocket logging by default to reduce performance consumption. 2024-10-29 09:19:21 +08:00
huzibaca
95c6578911 fix incorrect usage of useCustomTheme 2024-10-29 09:07:08 +08:00
huzibaca
d22097ee33 chore: optimised the logic of dns processing 2024-10-28 13:09:55 +08:00
huzibaca
74251af163 fix: dns not restored when exiting the app 2024-10-28 00:24:57 +08:00
Christine.
7c1b11851f add more contribution details for Windows (#1939)
* doc: add more building details

Some friends said the build failed.

* chore: replace test url

replace default delay check URL, some user say that the delay numbers seen in CVR are very different from those in other software, and this default test result is not a valid reference.
2024-10-27 13:00:47 +08:00
huzibaca
f8724c4cb9 fix: unused variable 2024-10-27 10:19:42 +08:00
huzibaca
3baac034e5 chore: update 2024-10-27 06:47:16 +08:00
huzibaca
114f1426f3 feat: macos service installation query, can't avoid it, add service run check, if installation not confirmed, exit automatically after 10 seconds 2024-10-27 06:32:25 +08:00
huzibaca
7de63cea5c Revert "chore: update resource"
This reverts commit da907d0eea.
2024-10-27 05:10:26 +08:00
huzibaca
34e3af2b38 chore: update 2024-10-27 05:06:42 +08:00
huzibaca
da907d0eea chore: update resource 2024-10-27 04:46:24 +08:00
huzibaca
9cbc2d9206 chore: update deps 2024-10-27 01:24:13 +08:00
huzibaca
db2e466d60 chore: update 2024-10-26 19:23:49 +08:00
wonfen
e5cdbf7361 release rc.4 2024-10-26 12:05:09 +08:00
huzibaca
a919f493d6 fix:public DNS not set in macos, tun+fake-ip 2024-10-26 08:55:00 +08:00
huzibaca
3660298683 chore: update 2024-10-26 01:44:06 +08:00
huzibaca
c845efe475 chore: update 2024-10-25 21:25:06 +08:00
huzibaca
38eb47132d chore: update 2024-10-25 14:13:30 +08:00
huzibaca
b1f097f32b chore: update 2024-10-25 14:12:27 +08:00
huzibaca
d3123253b3 fix: the tray icon does not display the correct colours on macos. 2024-10-25 13:58:22 +08:00
wonfen
7b1ec1ec22 chore: add mac sun ico 2024-10-25 12:27:22 +08:00
wonfen
4cefacfe73 release 2.0rc3 2024-10-24 12:52:20 +08:00
huzibaca
978acfa471 chore: update 2024-10-24 11:14:18 +08:00
huzibaca
fb2d138cbf Revert "chore: global mode doesn't show proxy groups, use placeholder images instead"
This reverts commit 0edd63edb5.
2024-10-24 07:44:21 +08:00
huzibaca
0edd63edb5 chore: global mode doesn't show proxy groups, use placeholder images instead 2024-10-24 07:30:30 +08:00
huzibaca
97b730668c chore: update 2024-10-24 06:58:21 +08:00
huzibaca
26b8cf6d52 fix: proxy view display error 2024-10-24 06:54:27 +08:00
huzibaca
a979638368 refactor: the logic of profiles activation 2024-10-24 05:02:47 +08:00
huzibaca
97f434ad4a fix: restart app failure 2024-10-24 02:54:57 +08:00
huzibaca
34af040c48 fix: tun mode switch is not effective 2024-10-24 02:16:28 +08:00
huzibaca
cc81b443be refactor: IRuntime::patch_config() 2024-10-23 10:34:14 +08:00
huzibaca
d44f3c22c7 chore: update 2024-10-23 09:26:14 +08:00
huzibaca
3795b537f6 chore: update 2024-10-23 05:48:01 +08:00
huzibaca
ecb5f0885c fix: failed to install service on macos 2024-10-23 04:46:47 +08:00
huzibaca
86d2234713 feat: add windows uninstall script 2024-10-22 04:46:08 +08:00
huzibaca
62ddf26150 feat: add linux uninstall script 2024-10-22 03:17:04 +08:00
huzibaca
ec14b7c52f fix: debian executable file has no permissions 2024-10-22 02:37:36 +08:00
huzibaca
5f9cc38e82 chore: update 2024-10-22 01:34:26 +08:00
huzibaca
f48c58f299 fix: change the window close to minimize the window.
there is currently an error in the tauri library.
2024-10-21 23:16:45 +08:00
huzibaca
c2843f3c4b fix: pac url error ,fixes #1889 2024-10-21 22:52:10 +08:00
wonfen
5d33df4e12 chore: update bug_report template 2024-10-21 11:30:07 +08:00
huzibaca
c030fb47ca Merge branch 'fix-migrate-tauri2-errors' of ssh://github.com/clash-verge-rev/clash-verge-rev into fix-migrate-tauri2-errors
* 'fix-migrate-tauri2-errors' of ssh://github.com/clash-verge-rev/clash-verge-rev:
  chore: update to 2.0 rc2
2024-10-21 04:35:42 +08:00
huzibaca
964daadb18 chore: update 2024-10-21 04:35:21 +08:00
wonfen
71a5698ac7 chore: update to 2.0 rc2 2024-10-21 03:15:02 +08:00
huzibaca
d41d74d0f8 chore: replace sudo with pkexec execution 2024-10-21 02:31:43 +08:00
huzibaca
f6c7a611a3 chore: update 2024-10-21 02:17:41 +08:00
huzibaca
06f4e79e5c chore: update 2024-10-21 01:35:28 +08:00
huzibaca
154cf44f0a chore: update 2024-10-21 01:30:13 +08:00
huzibaca
f6e2ff0e44 chore: update 2024-10-21 01:12:52 +08:00
huzibaca
2aba616f7f chore: update 2024-10-21 00:50:43 +08:00
huzibaca
95e21386b8 chore: update deps 2024-10-21 00:45:06 +08:00
huzibaca
250e908d9a chore: update 2024-10-21 00:34:28 +08:00
huzibaca
9742fb296c fix: failed to start system proxy with PAC mode 2024-10-20 23:13:23 +08:00
huzibaca
9ff3c2c0d4 chore: update deps 2024-10-20 22:35:16 +08:00
huzibaca
9dd7bd9530 Merge branch 'fix-linux-errors' into fix-migrate-tauri2-errors
* fix-linux-errors:
  chore: try to fix service not started on linux
2024-10-20 21:57:41 +08:00
huzibaca
6f477b7147 fix: mac commad+q global hijack is not released 2024-10-20 06:06:47 +08:00
huzibaca
8389826e30 chore: try to fix service not started on linux 2024-10-20 04:48:42 +08:00
huzibaca
aa31fb7470 chore: update 2024-10-18 22:50:03 +08:00
huzibaca
a013fe663c fix: try to fix service not started on linux 2024-10-18 07:08:34 +08:00
wonfen
89ce497431 chore: adjust translation 2024-10-17 05:09:00 +08:00
huzibaca
60c0b649e8 chore: update deps 2024-10-16 22:49:24 +08:00
huzibaca
2bbb5ea23b chore: update 2024-10-16 02:55:23 +08:00
huzibaca
4f9c1533c1 fix: system proxy cannot be closed on mac 2024-10-16 02:52:48 +08:00
huzibaca
a6a3847e30 chore: update 2024-10-16 01:55:22 +08:00
huzibaca
118f38dba3 chore : update version 2024-10-16 01:53:33 +08:00
huzibaca
879f946b28 chore: t emporarily cancel window closure and change to minimize 2024-10-16 01:53:16 +08:00
huzibaca
6acb8a5a91 Merge branch 'fix-migrate-tauri2-errors' of ssh://github.com/clash-verge-rev/clash-verge-rev into fix-migrate-tauri2-errors 2024-10-15 02:38:57 +08:00
huzibaca
a38f1e92e3 fix: path escape issue 2024-10-15 02:35:50 +08:00
wonfen
4ca977466e chore: update changelog and texts 2024-10-15 02:32:25 +08:00
huzibaca
ec45dc56fb chore: remove windows esc shortcut key 2024-10-14 13:45:26 +08:00
huzibaca
5686302653 chore: update 2024-10-13 03:01:32 +08:00
huzibaca
6322773513 chore: update deps 2024-10-13 02:55:35 +08:00
huzibaca
8e845fc919 chore: adjust tun default parameters 2024-10-13 02:42:37 +08:00
huzibaca
f90c8f2ae5 fox: external-controller cors error 2024-10-11 22:01:57 +08:00
huzibaca
b5af06529f chore: complete field identifier 2024-10-11 14:33:11 +08:00
huzibaca
fac3669f8e Merge branch 'main' into fix-migrate-tauri2-errors 2024-10-11 02:56:30 +08:00
Lvc Revincx
28ff8d6dcc fix: task bar icon misssing under linux wayland (#1816) 2024-10-11 02:52:57 +08:00
huzibaca
d0e7f6673c fix: installation service error 2024-10-11 00:59:34 +08:00
huzibaca
800dc21202 chore: update 2024-10-10 23:34:55 +08:00
huzibaca
f52089a674 chore:update 2024-10-10 18:52:20 +08:00
huzibaca
82543de95e chore: update 2024-10-10 18:40:39 +08:00
huzibaca
12db69407e chore: update 2024-10-10 02:21:22 +08:00
huzibaca
9b2b447b8b feat: Modify startup logic and install services by default 2024-10-10 00:34:36 +08:00
huzibaca
35f5e4ca41 chore: update 2024-10-09 01:14:03 +08:00
huzibaca
8a69713f6c refactor: core logic 2024-10-08 02:39:17 +08:00
huzibaca
efd8ef0380 chore: update 2024-10-06 02:03:32 +08:00
huzibaca
c5eacd1627 chore: revert 2024-10-06 01:09:59 +08:00
huzibaca
5fdb52d8d0 refactor: tun mode is turned on and off, does not depend on services, and does not affect other configurations 2024-10-05 22:45:59 +08:00
huzibaca
7869ce060f refactor: init_log 2024-10-05 12:19:44 +08:00
huzibaca
e0d96c0ce1 refactor: get_bypass func 2024-10-05 02:58:41 +08:00
huzibaca
30678904ee chore: update 2024-10-05 00:03:11 +08:00
huzibaca
953be61d89 chore: update deps 2024-10-04 23:56:50 +08:00
huzibaca
d8c85007d4 feat: add color to log 2024-10-04 22:38:06 +08:00
huzibaca
591c1cb454 chore: update 2024-10-04 05:37:53 +08:00
huzibaca
0ca90ed082 chore: update 2024-10-04 05:27:59 +08:00
huzibaca
4c963b3978 chore: update 2024-10-03 14:31:40 +08:00
huzibaca
071665f0c3 chore: update 2024-10-03 12:01:06 +08:00
huzibaca
9a7826752f feat: windows uses sysproxy.exe for system proxy 2024-10-03 02:09:22 +08:00
huzibaca
44b4187365 refactor: simplify sysproxy logic
1. close all proxies directly when reset_proxy
2. init_sysproxy and update_sysproxy combined into one
3. optimize lock usage
4 ptimize the thread loop of guard_sysproxy,
2024-10-03 01:31:37 +08:00
huzibaca
148807543f chore: replace sysproxy-rs repo 2024-10-02 17:43:14 +08:00
huzibaca
2b9fa09293 feat: test item, when icon is svg, add svg format check 2024-10-01 20:49:03 +08:00
huzibaca
10211d1d03 chore: optimize lock 2024-10-01 00:27:08 +08:00
huzibaca
46811f33ad chore: remove the manual release lock 2024-09-30 23:07:46 +08:00
wonfen
32b16790d3 chore: add service mode info 2024-09-30 01:04:15 +08:00
huzibaca
10592ca5a8 chore: update 2024-09-28 20:20:40 +08:00
huzibaca
dc5cb2e1b8 refactor: logic optimization 2024-09-28 12:37:01 +08:00
huzibaca
c10d782524 ,fix: when updating the verge configuration, notification error 2024-09-27 22:25:23 +08:00
wonfen
d73366984f chore: update bug report template 2024-09-27 14:08:50 +08:00
huzibaca
60b1e47ae6 chore: update 2024-09-27 10:05:31 +08:00
huzibaca
9591fb2c21 chore: remove compatibility code 2024-09-27 10:04:23 +08:00
huzibaca
c3cba03ac6 refactor: logic optimization 2024-09-27 00:24:05 +08:00
huzibaca
ce7818c436 chore: update 2024-09-26 19:47:25 +08:00
huzibaca
f367a81e44 chore: remove compatibility code 2024-09-26 19:47:00 +08:00
huzibaca
de507f7ec9 chore: update 2024-09-26 19:23:16 +08:00
huzibaca
0a8be603c8 chore: update 2024-09-26 12:20:57 +08:00
huzibaca
d7f033bd46 chore: update 2024-09-25 21:20:36 +08:00
huzibaca
1fb3b87697 chore: update 2024-09-25 21:07:01 +08:00
huzibaca
b9c8fa61b2 Revert "chore: cover panic error"
This reverts commit 0bacfa9286.
2024-09-25 20:22:49 +08:00
huzibaca
99ea6d5080 chore: unified hotkey registration 2024-09-25 15:45:12 +08:00
huzibaca
0bacfa9286 chore: cover panic error 2024-09-25 15:44:05 +08:00
huzibaca
b350b605a8 fix: the save_indow_size_position method has been triggered twice, at the same time
1. remove windowEvent::destoryed  hook
2024-09-25 13:54:05 +08:00
huzibaca
d1eeeab7b1 chore: remove useless exit codes 2024-09-25 11:47:01 +08:00
huzibaca
54296ba84a fix: code lint 2024-09-24 20:11:33 +08:00
huzibaca
f82b0f259c fix: code lint 2024-09-24 20:09:30 +08:00
huzibaca
57f1c005e6 fix: code lint 2024-09-24 20:06:25 +08:00
huzibaca
d9e5387bff chore: add cross-env dev dependency 2024-09-24 16:35:19 +08:00
huzibaca
3154b8ce55 chore: update 2024-09-23 23:57:08 +08:00
huzibaca
45b48ede44 refactor: unify and simplify the call of app_handle(2) 2024-09-23 23:15:51 +08:00
huzibaca
961b86dcd2 chore: update 2024-09-23 17:15:28 +08:00
huzibaca
4d57c64b0d chore: update 2024-09-23 16:53:00 +08:00
huzibaca
1c894f3cfa refactor: unify and simplify the call of app_handle 2024-09-23 16:31:58 +08:00
huzibaca
3d6faecaed chore: update 2024-09-22 22:15:36 +08:00
huzibaca
2263ade187 chore: rename method 2024-09-22 20:29:43 +08:00
huzibaca
2cdf33d8a1 Revert "chore: update"
This reverts commit f6fce6bd31.
2024-09-22 16:46:24 +08:00
huzibaca
f6fce6bd31 chore: update 2024-09-22 15:59:59 +08:00
huzibaca
f9f1721d66 chore: update 2024-09-22 15:39:52 +08:00
huzibaca
0792ac7de8 chore: update 2024-09-22 14:08:08 +08:00
huzibaca
98edb048b7 Revert "chore: remove useless exit codes and hooks"
This reverts commit d9671faca7.
2024-09-22 00:41:20 +08:00
huzibaca
52fcdf28fa fix: remove unused variable 2024-09-22 00:32:40 +08:00
huzibaca
d9671faca7 chore: remove useless exit codes and hooks 2024-09-21 21:05:34 +08:00
huzibaca
f456004543 chore: try adjusting the triggering of the tray mouse button 2024-09-21 15:38:14 +08:00
huzibaca
a38040d0ea chore : update 2024-09-20 18:02:19 +08:00
huzibaca
f18cd92318 fix: tray menu text was not aligned 2024-09-20 17:59:24 +08:00
huzibaca
06e1d0f8da chore: update 2024-09-20 17:49:31 +08:00
huzibaca
dffd663d7a Fix: Custom tray icon not working
1. Contains potential deadlock
2024-09-20 16:26:23 +08:00
huzibaca
414f9e9e96 fix: function parameter call error 2024-09-20 08:27:06 +08:00
Sukka
c17ea74856 chore: drop fs-extra (#1739)
nb!
2024-09-20 02:01:36 +08:00
huzibaca
9a08740e5b chore: update dev dependencis 2024-09-18 21:34:20 +08:00
huzibaca
8bea0db843 fix: exit hotkey conflict 2024-09-18 15:16:43 +08:00
huzibaca
2c612e371f fix: whether the window starts as fullscreen or not. 2024-09-18 13:23:27 +08:00
huzibaca
2f61dc9bc6 chore: revert 2024-09-18 12:24:52 +08:00
huzibaca
d18b78c11c refactor: exit app 2024-09-18 02:48:55 +08:00
huzibaca
95fb4f2e50 fix: the shortcut key to exit cannot be used 2024-09-18 01:41:46 +08:00
huzibaca
f31fe1440d fix: hotkey status not accurately processed, resulting in two triggers 2024-09-17 10:59:39 +08:00
huzibaca
10cd0a1f30 chore: update 2024-09-17 08:28:13 +08:00
huzibaca
659f854f62 chore: update 2024-09-17 08:02:29 +08:00
huzibaca
4a7f8dbe09 chore: add window to allow full screen configuration 2024-09-16 15:25:01 +08:00
huzibaca
3e19e574e6 chore: update 2024-09-16 07:08:22 +08:00
huzibaca
2af2d3664f chore: update 2024-09-16 06:43:25 +08:00
huzibaca
7dad46adb4 chore: update 2024-09-16 06:37:39 +08:00
huzibaca
b6fc6a751a chore: update 2024-09-16 06:17:22 +08:00
huzibaca
934674a8d7 chore: update 2024-09-16 05:50:05 +08:00
huzibaca
c66986f065 chore: modify application description definition 2024-09-16 05:38:52 +08:00
huzibaca
fc49e4a0da fox: try to restore the processing logic of windows custom scheme 2024-09-16 05:30:29 +08:00
huzibaca
b6e1d71b81 chore: update dev workflow 2024-09-15 07:57:34 +08:00
huzibaca
b3626a786d chore: add log 2024-09-15 07:03:04 +08:00
huzibaca
a398e28ac0 chore: follow official standards and adjust the main file 2024-09-15 06:24:53 +08:00
wonfen
892d4e597e chore: update change log and texts 2024-09-15 00:33:54 +08:00
huzibaca
e8311dd306 fix: when importing subscriptions, force the window to open 2024-09-14 10:03:19 +08:00
huzibaca
a0b266fef8 fix: after importing a subscription, it cannot be automatically switched to the current subscription. 2024-09-13 18:17:14 +08:00
huzibaca
983d1ea361 chore: update action(rust-toolchain) 2024-09-13 14:21:51 +08:00
huzibaca
db615b932c chore: update action(rust-toolchain) 2024-09-13 14:14:27 +08:00
wonfen
07415e512f chore: change folder name 2024-09-13 12:03:28 +08:00
huzibaca
0c6d417d8c feat: Added web notification of successful subscription import 2024-09-13 11:24:49 +08:00
huzibaca
772e01ad40 fix: when the service is not installed, the tray hides the Tun mode 2024-09-13 04:12:25 +08:00
huzibaca
1b2509d5bc refactor: url scheme implementation 2024-09-13 03:21:55 +08:00
huzibaca
fd963a8e66 chore: delete useless emebd server api 2024-09-12 19:01:08 +08:00
huzibaca
3c17fca369 fix:tray click event 2024-09-12 17:02:17 +08:00
huzibaca
4a76997044 feat: Optimize kernel startup logic
1. tun mode startup logic
2. Remove invalid creation process PID logic
2024-09-12 15:35:08 +08:00
huzibaca
894960ef5a feat: log panic 2024-09-12 07:59:51 +08:00
huzibaca
3c24d4bc4e chore: update deps 2024-09-12 06:14:23 +08:00
huzibaca
ed7e6a3495 fix: missing items in system tray 2024-09-12 05:45:15 +08:00
huzibaca
07de032e62 feat: migrate tauri 2.0 2024-09-11 08:15:03 +08:00
huzibaca
c07165531a chore: update 2024-09-04 07:53:16 +08:00
huzibaca
b1a22d4412 chore: update capabilities 2024-09-04 05:57:37 +08:00
wonfen
6734e5ef57 chore: 2.0.0 beta release 2024-09-03 00:00:12 +08:00
huzibaca
6cc81fe6b8 chore: update 2024-09-02 19:33:17 +08:00
wonfen
ad80d21e89 chore: use in-house update proxy 2024-08-24 02:02:17 +08:00
wonfen
97689c6cbb Style: fix macos new version btn position 2024-08-22 07:33:51 +08:00
wonfen
41c83dabde Release 1.7.7 2024-08-22 03:47:33 +08:00
wonfen
f909f0dcf9 chore: Shorten text to prevent Windows tooltip truncation. 2024-08-22 03:41:16 +08:00
wonfen
5c9bf30c79 fix: profiles will not be selected after import 2024-08-22 00:57:04 +08:00
wonfen
6efc518eed Release 1.7.6 2024-08-18 00:49:23 +08:00
tony-sung
198bd3a3dc Update web-ui-viewer.tsx Fix yacd parameter hostname error (#1484) 2024-08-18 00:23:24 +08:00
MystiPanda
7b1055702b feat: auto select profile 2024-07-30 09:06:12 +08:00
MystiPanda
d21bcce3c4 chore: prepend new added rules 2024-07-24 14:25:06 +08:00
MystiPanda
b5a26941ef fix: wrap the password in quotes
#1460
2024-07-24 14:22:23 +08:00
Avan
6ab7131378 style: AddressDisplay padding (#1457) 2024-07-23 22:17:51 +08:00
nhsmw
22bcc2e438 fix: update test url 2024-07-19 10:32:41 +08:00
MystiPanda
32edc0f1fe chore: remove unnecessary console log 2024-07-18 23:37:54 +08:00
MystiPanda
8faa0ce2c2 fix: use group testUrl
#1384
2024-07-18 15:04:55 +08:00
MystiPanda
bf05e5999b fix: windows x86 updater url 2024-07-18 14:38:31 +08:00
MystiPanda
3d7bdded31 fix: error command status 2024-07-16 18:37:56 +08:00
MystiPanda
7507182097 fix: MacOS service install error 2024-07-16 13:01:27 +08:00
MystiPanda
6853b3c531 fix(#1335): support cidr 2024-07-16 12:22:11 +08:00
MystiPanda
f2372a13e8 fix: try to fix install service 2024-07-16 12:07:23 +08:00
MystiPanda
3f321c8801 chore: disable okBtn 2024-07-15 23:38:49 +08:00
MystiPanda
8b47107df8 ci: fix winget uploader 2024-07-15 23:27:38 +08:00
MystiPanda
97e7136293 Release 1.7.5 2024-07-15 22:35:33 +08:00
MystiPanda
c8db58150e ci: fix winget uploader 2024-07-15 22:33:57 +08:00
MystiPanda
5e1067df59 fix: copy necessary files 2024-07-15 22:25:04 +08:00
MystiPanda
175444c59f Release 1.7.4 2024-07-15 20:56:18 +08:00
MystiPanda
b09d5ff3c9 fix: unified switch style 2024-07-15 20:42:00 +08:00
MystiPanda
43fc97137e feat: optimize the service mode interaction logic. 2024-07-15 20:02:05 +08:00
MystiPanda
c67eee57d6 Revert "fix: try to fix abnormal stuck"
This reverts commit 7edbae7b4c.
2024-07-14 12:49:06 +08:00
Sukka
607aa78059 fix(#1387): avoid catastrophic backtracking (#1396) 2024-07-14 12:26:02 +08:00
MystiPanda
7edbae7b4c fix: try to fix abnormal stuck
#1387
2024-07-13 21:41:04 +08:00
MystiPanda
232ff38084 chore: update locale 2024-07-13 19:15:07 +08:00
MystiPanda
d9d9ca67cd chore: unified icon style 2024-07-13 19:01:16 +08:00
MystiPanda
57fa48aef4 feat: display network interface 2024-07-13 14:15:13 +08:00
Avan
5a8e0749c2 feature: copy clash env (#1391)
* feat: copy clash env

* style: use ContentCopyRounded replace CopyAll
2024-07-13 01:03:46 +08:00
Avan
f834f069cd style: EditorViewer title align center (#1390) 2024-07-12 23:29:55 +08:00
MystiPanda
9b2dc10da2 fix: service install failed on macos 2024-07-12 20:54:31 +08:00
dongchengjie
c3730b7efd chore: checkbox items' title & button icons 2024-07-12 18:24:19 +08:00
dongchengjie
23499497a3 chore: editor resizing debounce 2024-07-08 23:18:06 +08:00
dongchengjie
3b78d609b7 chore: remove dialog overflow-scroll 2024-07-08 22:07:43 +08:00
dongchengjie
65529c3356 fix: editor fails to resize after toggling on macos 2024-07-08 21:40:56 +08:00
MystiPanda
899849d4dc fix dev.yml 2024-07-08 16:17:23 +08:00
MystiPanda
52393206e6 ci: add dev workflow 2024-07-08 13:20:36 +08:00
Akioe Yu
2cd1fa6601 fix: dnd box z-index (#1353)
* fix: dnd box z-index

* fix: dnd boxes
2024-07-08 10:49:57 +08:00
MystiPanda
e371bbedc0 perf: optimized response speed 2024-07-08 00:29:49 +08:00
dongchengjie
9dde385073 chore: group types locale 2024-07-07 21:56:20 +08:00
❤是纱雾酱哟~
afa3d39cb3 ci: Integrate "Winget Releaser" (#1326) 2024-07-07 20:42:17 +08:00
MystiPanda
fe41817f25 perf: change port too slow 2024-07-07 18:22:02 +08:00
MystiPanda
a865465514 feat: get network interface 2024-07-07 18:13:10 +08:00
dongchengjie
9278e74e9e fix: usage percent style 2024-07-07 18:08:02 +08:00
MystiPanda
689a1f739f fix: trojan uri parser 2024-07-07 11:47:49 +08:00
MystiPanda
19dee57b7e fix: tray icon size
#1341
2024-07-07 11:18:22 +08:00
MystiPanda
8690b91632 chore: disable browser autocomplete 2024-07-07 11:16:59 +08:00
MystiPanda
fa31cab11b Release 1.7.3 2024-07-06 18:48:25 +08:00
MystiPanda
46ee783f99 fix: bypass reg error
#1335
2024-07-06 18:23:23 +08:00
MystiPanda
199bba5da4 fix: limite cipher types 2024-07-06 10:49:42 +08:00
MystiPanda
16e8791472 fix: rule parser 2024-07-06 10:35:29 +08:00
MystiPanda
1728442d62 Revert "chore: add base64 decode step"
This reverts commit 4727d613c0.
2024-07-06 10:12:51 +08:00
MystiPanda
22f7f059ce chore: decode base64 2024-07-06 10:12:40 +08:00
MystiPanda
97629c1fc3 fix: some error 2024-07-06 09:54:16 +08:00
MystiPanda
4727d613c0 chore: add base64 decode step 2024-07-06 00:57:38 +08:00
MystiPanda
9ed138ea2b fix: style 2024-07-06 00:45:21 +08:00
MystiPanda
2cbd998941 fix: type 2024-07-06 00:23:52 +08:00
MystiPanda
806d70c243 chore: Improve URI parser 2024-07-05 22:44:05 +08:00
MystiPanda
74a1c7d489 feat: finish rpoxies editor 2024-07-05 19:49:32 +08:00
MystiPanda
f6ed5dc126 fix: groups config type error
feat(unfinished): add proxy editor
2024-07-05 00:38:50 +08:00
MystiPanda
e25185b9b8 feat: add profile name param for script 2024-07-04 23:11:54 +08:00
MystiPanda
5e6d8873b9 build: remove unused resource file 2024-07-04 22:34:48 +08:00
MystiPanda
951b48c337 chore: disable unnecessary ports by default 2024-07-04 18:58:34 +08:00
MystiPanda
7f209b76bf feat: support cache for groups editor 2024-07-04 18:53:39 +08:00
MystiPanda
890bfbe02d chore: unified style 2024-07-04 18:50:21 +08:00
MystiPanda
70f8c28ca6 fix: useseq error 2024-07-04 14:30:34 +08:00
MystiPanda
47bacdaed0 fix: locale typo 2024-07-04 14:18:21 +08:00
MystiPanda
bcd8eb2a09 feat: support visual edit for proxy group 2024-07-04 14:13:19 +08:00
MystiPanda
e4855d0143 fix: rules editor get groups error 2024-07-04 11:03:51 +08:00
MystiPanda
94f0ff1ed1 feat: support get merged rule-set name 2024-07-03 22:13:24 +08:00
dongchengjie
b5f0243a89 fix: remove rule condition where is not required 2024-07-03 17:03:12 +08:00
MystiPanda
17e59b8783 Release 1.7.2 2024-07-03 13:26:06 +08:00
MystiPanda
ffdf308b40 fix: Insertion order
#1300
2024-07-03 13:13:54 +08:00
MystiPanda
cdadc80945 fix: dialog styles 2024-07-03 13:13:29 +08:00
MystiPanda
294e1f5b10 fix: panic 2024-07-03 12:49:29 +08:00
MystiPanda
1c5eab6055 feat: support edit rules file 2024-07-03 12:37:08 +08:00
MystiPanda
f74f06e403 fix: edit groups error 2024-07-03 10:58:57 +08:00
MystiPanda
f04ee0baf2 Release 1.7.1 2024-07-03 09:52:19 +08:00
MystiPanda
689273fc24 fix: rules drag error 2024-07-03 09:45:14 +08:00
MystiPanda
6f4c59a15c fix: compatibility 2024-07-03 08:15:13 +08:00
dongchengjie
dc87097dfe fix: search-box takes no effect in rule-editor #1288 2024-07-03 03:08:01 +08:00
dongchengjie
24f4ab7597 fix: sub usage percent fails to display when number is too small #1290 2024-07-03 02:59:32 +08:00
MystiPanda
ad94f0a292 Release 1.7.0 2024-07-03 00:32:14 +08:00
MystiPanda
695613a063 perf: optimize performance of the rule editor 2024-07-02 23:55:29 +08:00
dongchengjie
6f1828eabc feat: editor add tool-tar buttons 2024-07-02 23:24:44 +08:00
dongchengjie
bf158b3bf0 refactor: editor-viewer using react-monaco-editor 2024-07-02 21:02:29 +08:00
dongchengjie
13618e6a0a chore: bump schema to 1.18.5-alpha7 2024-07-02 19:38:44 +08:00
MystiPanda
c424e9dec8 chore: disable autocomplete 2024-07-02 19:02:05 +08:00
MystiPanda
a2e9523707 fix: default value of global extend config 2024-07-02 18:46:23 +08:00
dongchengjie
606817ae06 chore: add rule list search-box 2024-07-02 17:32:49 +08:00
dongchengjie
7124d326fc chore: rule types locale 2024-07-02 17:04:22 +08:00
MystiPanda
f9f4653e33 chore: check the validity of the rule content 2024-07-02 13:11:54 +08:00
MystiPanda
bf8eebe537 chore: Adjust the chain processing execution order and default value 2024-07-02 12:40:28 +08:00
MystiPanda
bd9eef6502 build: update depends 2024-07-02 12:21:17 +08:00
MystiPanda
e343b1790e chore: update locale 2024-07-01 23:30:14 +08:00
MystiPanda
d81ef1d67c feat: allow set bypass without using default value 2024-07-01 22:53:32 +08:00
Sukka
6e374bcd4e ci: speed up cargo install by enabling cache (webview2) (#1283) 2024-07-01 14:23:21 +08:00
MystiPanda
fb4648d2af feat: global merge and script 2024-07-01 08:25:03 +08:00
MystiPanda
a63fc25f14 feat: drag to reorder rules 2024-06-30 23:16:21 +08:00
MystiPanda
5e20e9ae1c chore: select rule-set name 2024-06-30 22:46:11 +08:00
MystiPanda
7d5d604ea6 feat: display rules list 2024-06-30 22:34:26 +08:00
MystiPanda
a722581868 fix: editor init error 2024-06-30 18:05:38 +08:00
Sukka
28f3044bdd ci: speed up cargo install by enabling cache (#1279) 2024-06-30 17:21:55 +08:00
MystiPanda
497804434d feat: rules editor 2024-06-30 17:17:04 +08:00
MystiPanda
d2d6ee806d chore: locale 2024-06-30 13:03:36 +08:00
MystiPanda
2e106265f9 feat(unfinished): rules editor 2024-06-30 12:46:31 +08:00
MystiPanda
28fb0b433b refactor: pure merge 2024-06-30 07:58:44 +08:00
MystiPanda
171bd6b327 fix: delete logic 2024-06-30 07:37:52 +08:00
MystiPanda
198e215d54 chore: update locale 2024-06-30 07:18:10 +08:00
MystiPanda
4d424e70bc feat: support seq editor 2024-06-30 00:22:05 +08:00
MystiPanda
3efef52398 refactor: Associate Profile with Merge/Script. 2024-06-29 23:07:44 +08:00
MystiPanda
b85929772e refactor: use async instead of block_on 2024-06-29 19:02:37 +08:00
dongchengjie
041522f94e fix: do not reactive when changed profile is not current 2024-06-29 11:22:11 +08:00
dongchengjie
80d3c9e96f feat: reactive after save when profile content changes 2024-06-29 09:21:50 +08:00
dongchengjie
6ee5e560cc fix: #1261 2024-06-29 05:02:06 +08:00
wonfen
2be9eb4bae chore: add TG link & descriptions 2024-06-29 04:55:43 +08:00
dongchengjie
0a8935686a chore: add descriptions for Miscellaneous 2024-06-28 15:54:27 +08:00
MystiPanda
0109d9148b fix: unset dns when exit 2024-06-28 12:18:18 +08:00
MystiPanda
212518c682 feat: set dns by service 2024-06-28 11:45:44 +08:00
dongchengjie
59b4f1ebab chore: remove duplicate locales 2024-06-26 19:11:39 +08:00
dongchengjie
ee9462c221 fix: await compatibility in #c648dc6 2024-06-26 18:29:50 +08:00
dongchengjie
c648dc6c99 feat: support manual memory cleanup when running in debug mode 2024-06-26 17:44:42 +08:00
dongchengjie
4f1b8094a3 chore: cleanup 2024-06-26 08:24:43 +08:00
dongchengjie
c89ccf7185 refactor: extract tooltip icon as component 2024-06-26 08:10:18 +08:00
dongchengjie
753395965a chore: tooltips and locales 2024-06-26 05:33:06 +08:00
dongchengjie
04be747d52 chore: fix connection table bg 2024-06-23 20:40:09 +08:00
dongchengjie
f828ed3edf fix: update_interval won't save when creating local profile while updating does & number input locales 2024-06-23 06:47:51 +08:00
MystiPanda
b98d9c2932 feat: handle break change update 2024-06-22 21:05:46 +08:00
dongchengjie
aba2ce8390 chore: hotkeys display delimiter 2024-06-21 18:24:58 +08:00
MystiPanda
8bd8e149cf chore: hide delay for preset outbound 2024-06-21 00:16:41 +08:00
MystiPanda
e7c359a2e7 revert: just kill 2024-06-20 14:27:13 +08:00
MystiPanda
d64d25380a feat: custom dmg background 2024-06-20 13:50:28 +08:00
dongchengjie
6cba6166fb chore: fix table header bg in connections 2024-06-20 02:01:51 +08:00
dongchengjie
e66f5fe253 chore: disable shortcuts #1239 2024-06-20 01:39:51 +08:00
MystiPanda
1d4388d444 fix: runtime error 2024-06-19 11:10:40 +08:00
MystiPanda
28ab08a7ca refactor: change core binary name 2024-06-19 10:04:28 +08:00
MystiPanda
6fa0f92ceb refactor: kill core by process name 2024-06-18 12:36:58 +08:00
MystiPanda
3083ab74a6 fix: reg error 2024-06-17 16:38:30 +08:00
Sukka
b6ea73af83 fix(#1226): missing conn unsub (#1228) 2024-06-17 13:36:35 +08:00
Sukka
1fa3ffb1ff refactor(connections): use swr subscription (#1226) 2024-06-17 13:14:36 +08:00
dongchengjie
af89630095 fix: resizing reset when data changes 2024-06-17 13:03:47 +08:00
Sukka
18f0177fce refactor(log): use swr subscription (#1220) 2024-06-17 10:48:37 +08:00
MystiPanda
d89eecacba chore: update depends 2024-06-17 10:46:18 +08:00
Sukka
a9149fb92e feat: add a wrapper around sockette w/ error retry (#1219)
* feat: add a wrapper around sockette w/ error retry

* chore: use import path alias

* perf: reduce retry
2024-06-16 18:25:33 +08:00
MystiPanda
9a04208a11 Revert "feat: disable running with admin permission and check service mode"
This reverts commit 481e473b60.
2024-06-16 12:06:23 +08:00
Sukka
6cdf199531 ci(alpha): avoid race by cancel non-latest concurrent runs (#1213) 2024-06-16 01:10:30 +08:00
Sukka
44dc7fe24a fix: hide save button in readonly editor view (#1208) 2024-06-15 19:24:26 +08:00
Sukka
455892b414 fix(#1203): correct types (#1207) 2024-06-15 19:23:58 +08:00
Sukka
4f5227782a perf: replace Array#map Array#filter chain w/ Array#reduce (#1203) 2024-06-15 12:22:33 +08:00
MystiPanda
481e473b60 feat: disable running with admin permission and check service mode 2024-06-14 23:15:49 +08:00
MystiPanda
2c2a1f638b build: downgrade auto-launch 2024-06-14 21:26:30 +08:00
MystiPanda
973e269f46 fix: fix bypass check regex 2024-06-14 21:23:58 +08:00
Sukka
9f76e0e056 chore: use swr subscription for layout traffic / memory (#1202)
* chore: update swr to 2

* refactor: use swr subscription for memory & traffic

* refactor: introduce `sockette`
2024-06-14 18:23:29 +08:00
dongchengjie
3a5f1b41a4 chore: update metacubexd #1200 2024-06-14 17:09:12 +08:00
dongchengjie
e2d8369daf feat: local profile name autofill #1191 2024-06-13 16:29:25 +08:00
MystiPanda
a20d4959bf refactor: remove grant logic 2024-06-13 16:07:56 +08:00
MystiPanda
7b887e4cdd fix: check service 2024-06-13 12:58:47 +08:00
MystiPanda
bc9cbd2993 ci: fix release 2024-06-12 12:25:12 +08:00
MystiPanda
9baa0e247f chore: update publisher 2024-06-12 11:51:44 +08:00
MystiPanda
2df8d2bc69 Release 1.6.6 2024-06-12 10:33:20 +08:00
MystiPanda
b8165fb06e fix: start param error 2024-06-12 10:19:23 +08:00
MystiPanda
c698b24e01 chore: update & fmt & clippy 2024-06-12 10:00:22 +08:00
dongchengjie
e70249cb2e chore: missing locale 2024-06-11 16:19:25 +08:00
dongchengjie
8a9bfe8281 chore: locale "Invalid Bypass Format" 2024-06-09 20:02:20 +08:00
MystiPanda
8c2a4e627e fix: start param error 2024-06-09 20:00:17 +08:00
MystiPanda
bf35c92c14 feat: check bypass format 2024-06-09 13:37:47 +08:00
MystiPanda
019293a034 feat: keep default bypass 2024-06-09 12:45:57 +08:00
dongchengjie
46dc40149e chore: missing locale 2024-06-09 11:16:13 +08:00
dongchengjie
444643eb6f chore: locale reorganization 2024-06-09 09:12:14 +08:00
Eric Huang
2913b911e3 feat(settings page): add loading state (#1157)
* feat(settings page): add loading state

* fix: type
2024-06-09 06:26:07 +08:00
wonfen
ca323371a7 chore: update ci with apple notarization 2024-06-09 02:01:33 +08:00
MystiPanda
a06cb39777 ci: fix error 2024-06-08 20:58:57 +08:00
MystiPanda
b0ec8767a2 ci: update 2024-06-08 20:45:28 +08:00
MystiPanda
353fb49a87 feat: add download button on updater dialog
#1129
2024-06-08 20:35:23 +08:00
MystiPanda
e453b40e0b fix: run app as normal user 2024-06-08 20:20:47 +08:00
MystiPanda
0c6f8ce77d build: update depends 2024-06-08 20:02:25 +08:00
MystiPanda
c0219662bb build: remove appimage 2024-06-08 19:36:58 +08:00
MystiPanda
aae71d375c ci: codesign 2024-06-08 18:52:34 +08:00
dongchengjie
b6228e4c59 chore: disbale Meta+Q on macOS 2024-06-08 13:12:24 +08:00
Sukka
3a9a1439d9 refactor: simplify useConnectionSetting (#1141) 2024-06-07 17:23:53 +08:00
wonfen
7cf256dc7c fix: apple sign error again 2024-06-07 17:19:44 +08:00
MystiPanda
c3c26998bf fix: sign error 2024-06-07 16:39:06 +08:00
MystiPanda
02e860480b fix: sign error 2024-06-07 16:37:58 +08:00
Eric Huang
7737b8b596 feat: make SettingItem clickable (#1138)
* feat: make `SettingItem` clickable

* clean up
2024-06-07 15:51:51 +08:00
Sukka
2725322fd5 refactor: replace recoil (#1137) 2024-06-07 12:27:37 +08:00
wonfen
6c6ccda6b3 Style: modify proxy pages 2024-06-07 10:32:27 +08:00
MystiPanda
d71269e223 fix: sign error 2024-06-06 16:06:58 +08:00
wonfen
36266d2b10 chore: apple developer sign test 2024-06-06 15:21:53 +08:00
dongchengjie
acae62de87 chore: test_delay trace 2024-06-05 19:17:43 +08:00
dongchengjie
9fe4197cae chore: theme colors to uppercase 2024-06-05 14:20:24 +08:00
dongchengjie
7fa1a8d54a build: no legacy chunks 2024-06-05 09:04:08 +08:00
Sukka
2333271c20 fix(#1126): add Object.hasOwn polyfill (#1127) 2024-06-05 00:12:06 +08:00
dongchengjie
5b83149567 fix: csp missing asset: 2024-06-04 15:26:39 +08:00
MystiPanda
250a35baab build: update depends 2024-06-04 12:16:42 +08:00
MystiPanda
d60ba95532 Release 1.6.5 2024-06-04 12:11:38 +08:00
MystiPanda
c901472198 fix: package error 2024-06-04 10:47:17 +08:00
MystiPanda
2a5b70fb13 feat: support rpm package 2024-06-04 10:16:25 +08:00
MystiPanda
dc6db6e4b3 build: use latest tauri 2024-06-04 10:09:04 +08:00
Zhenfu Shi
8df6f32314 chore: Enable Ad Hoc signing on macOS (#1117)
Closes #1116
2024-06-03 09:01:33 +08:00
wonfen
a2d8c894fe Revert "chore: change default test url"
This reverts commit a7cf968d04.
2024-06-03 08:25:06 +08:00
dongchengjie
a1996768f1 chore: use icons files instead of hard coding 2024-06-03 07:21:40 +08:00
dongchengjie
205587cb9e fix: group selected be overwritten when saving test 2024-06-03 06:38:20 +08:00
dongchengjie
224b2ef952 chore: improve UI in connections page 2024-06-02 21:52:31 +08:00
aixiao0621
90a83dc753 fix: a display error on the connections page 2024-06-02 17:26:23 +08:00
MystiPanda
a7cf968d04 chore: change default test url 2024-06-01 23:14:47 +08:00
MystiPanda
80ff72bae1 build: update depends 2024-06-01 23:01:27 +08:00
dongchengjie
5320fc8111 refactor: polyfills review 2024-05-30 20:27:12 +08:00
dongchengjie
8753531e82 fix: research when search box mode changes 2024-05-30 10:45:24 +08:00
dongchengjie
03a845f2b3 chore: Content-Security-Policy 2024-05-29 10:20:56 +08:00
dongchengjie
25b05f127d ci: fix heap oom 2024-05-29 09:49:11 +08:00
dongchengjie
073beb0135 build: polyfills 2024-05-29 09:39:26 +08:00
dongchengjie
ef7659691b build: import babel 2024-05-28 09:59:41 +08:00
dongchengjie
e69c0c079e fix: try to fix #1084 2024-05-27 23:19:44 +08:00
dongchengjie
dc31269a06 typo: inconsistent style in layout-viewer 2024-05-27 16:37:48 +08:00
MystiPanda
df9eccabea Release 1.6.4 2024-05-26 22:07:53 +08:00
MystiPanda
7788f5ae4c Revert "refactor: use axios tauri adapter"
This reverts commit 8092e5c3a8.
2024-05-26 21:18:02 +08:00
dongchengjie
ff5456c178 chore: %mixed-port% hint for PAC script 2024-05-26 19:53:42 +08:00
MystiPanda
40ed702437 Release 1.6.3 2024-05-26 19:43:26 +08:00
MystiPanda
65924e9a5d chore: add content type 2024-05-26 19:26:57 +08:00
MystiPanda
a88d149dad fix: auto proxy changed by guard 2024-05-26 19:07:14 +08:00
MystiPanda
b9ec94d835 feat: Support PAC Mode 2024-05-26 17:59:39 +08:00
dongchengjie
fc1675575a chore: emoji display support in editor 2024-05-25 18:02:32 +08:00
farzadhallaji
2f7229720f Update fa.json (#1060) 2024-05-24 19:39:40 +08:00
MystiPanda
0187fc7b22 ci: use rust 1.77.0 2024-05-23 11:47:41 +08:00
dongchengjie
540e1a9650 fix: no snippets and warnings in runtime config editor 2024-05-21 06:18:09 +08:00
dongchengjie
a371cd1d79 chore: update locale in connection 2024-05-20 13:42:45 +08:00
dongchengjie
16b11fee31 chore: text overflow word-wrap & cleanup 2024-05-20 12:38:41 +08:00
MystiPanda
1bc46f22b4 build: use compatible 2024-05-19 19:30:53 +08:00
MystiPanda
554c8fe163 fix: installer package error 2024-05-19 19:13:21 +08:00
MystiPanda
8f6bf6e002 build: use latest core 2024-05-19 13:00:27 +08:00
dongchengjie
d5dd8e9346 chore: schema 1.18.5-alpha 2024-05-19 12:37:18 +08:00
dongchengjie
4a67e1021a chore: fix select component bg in connection 2024-05-18 18:42:51 +08:00
dongchengjie
c97061770a chore: fix search-box bg 2024-05-18 18:20:05 +08:00
MystiPanda
55b331511e chore: support more asset scope 2024-05-18 15:47:45 +08:00
oomeow
4b9b5e861f perf: memoize the proxy col items (#1029) 2024-05-18 15:14:22 +08:00
oomeow
b8599a0642 fix: clipboard doesn't work and set_shadow method is not supported in Linux (#1030) 2024-05-18 15:14:00 +08:00
dongchengjie
ae6530585a feat: editor import PAC definition 2024-05-18 14:59:17 +08:00
dongchengjie
39aa1fa2a4 chore: hint for canceling fixed #840 2024-05-17 20:44:18 +08:00
dongchengjie
4f740acabd chore: use search-box in logs and connections 2024-05-17 19:44:42 +08:00
dongchengjie
2cc9b91895 chore: component base-search-box 2024-05-17 19:13:33 +08:00
dongchengjie
4eedc39e97 chore: fix editor dialog scroll overflow 2024-05-17 04:03:49 +08:00
dongchengjie
b99e8d7f46 fix: missing locale 2024-05-15 23:27:31 +08:00
dongchengjie
a8a27aeadd chore: current bypass wrap 2024-05-15 22:59:53 +08:00
MystiPanda
21176d2fd3 feat: support monochrome tray icon 2024-05-15 14:50:10 +08:00
dongchengjie
224c65438f chore: logo svg 2024-05-14 16:53:39 +08:00
dongchengjie
f1c21b642f feat: doc reference link on settings header 2024-05-14 14:40:47 +08:00
dongchengjie
030d1f374a chore: use coding fonts in editor 2024-05-14 14:20:50 +08:00
dongchengjie
0b29fa2288 fix: switch missing break 2024-05-14 01:24:23 +08:00
dongchengjie
b721f148f0 chore: @ts-ignore schema check 2024-05-14 01:21:28 +08:00
dongchengjie
63434a2f87 chore: revert schema to beta4 2024-05-14 00:59:05 +08:00
dongchengjie
0d6f0e66be chore: palette locale 2024-05-13 23:12:29 +08:00
dongchengjie
fb3f1365c5 typo: unused import 2024-05-13 22:59:24 +08:00
dongchengjie
8de7d5d377 feat: css injection editor 2024-05-13 22:58:25 +08:00
Remember
952d7494ac Update 172.16.0.0/12 on Windows (#1013) 2024-05-13 18:28:41 +08:00
MystiPanda
9aeba20086 fix: use default bypass when empty 2024-05-13 18:27:19 +08:00
MystiPanda
9150c9c40e chore: Adapt Mac icon 2024-05-13 13:11:05 +08:00
MystiPanda
3e75897154 docs: Update README 2024-05-12 22:17:05 +08:00
MystiPanda
b0aa4402c2 chore: Change HomePage Logo 2024-05-12 21:17:21 +08:00
MystiPanda
41f80bcafd chore: Try a new icon 2024-05-12 19:31:06 +08:00
dongchengjie
c67359c49d chore: ru locale 2024-05-12 16:18:49 +08:00
RikudouPatrickstar
2f7c3cf21e chore: update notification message and zh translation (#1011) 2024-05-12 14:40:18 +08:00
MystiPanda
9731c8a750 perf: Disable Tun mode before shutting down 2024-05-12 11:06:44 +08:00
MystiPanda
8092e5c3a8 refactor: use axios tauri adapter 2024-05-11 21:54:56 +08:00
MystiPanda
f7ab8cc471 feat: Allow disable unused ports 2024-05-09 09:22:32 +08:00
MystiPanda
b593f62c4f chore: Update locale 2024-05-08 23:45:55 +08:00
MystiPanda
6905b7a410 perf: Limit drawing frame rate 2024-05-08 22:33:13 +08:00
MystiPanda
402f27b2a3 fix: bundle error 2024-05-08 14:52:38 +08:00
MystiPanda
c9c46d05d0 build: fix bundle error 2024-05-08 14:20:30 +08:00
MystiPanda
6591575d22 fix: depend error 2024-05-08 13:24:34 +08:00
MystiPanda
6064119779 Release 1.6.2 2024-05-08 13:14:00 +08:00
MystiPanda
00cd9b581d feat: support upgrade for release core 2024-05-08 12:48:27 +08:00
MystiPanda
a3d7b72485 docs: Update FAQ URL 2024-05-08 11:44:57 +08:00
MystiPanda
88c73be2f4 ci: update ci 2024-05-08 11:12:06 +08:00
MystiPanda
39a9181cdd refactor: remove prepend and append for provider 2024-05-08 00:22:14 +08:00
MystiPanda
0e5c6f56a0 feat: deep merge
#983
2024-05-08 00:13:32 +08:00
MystiPanda
5147a070a1 build: Add portable for fixed webview2 2024-05-06 19:13:08 +08:00
MystiPanda
b11be1838a ci: debug ci 2024-05-06 16:16:47 +08:00
MystiPanda
be99768a32 ci: fix ci script 2024-05-06 15:30:00 +08:00
MystiPanda
fe439a0cb6 ci: update release body 2024-05-06 15:15:07 +08:00
MystiPanda
87f49ec879 docs: update url 2024-05-06 15:05:56 +08:00
MystiPanda
20f2730125 build: try support fixed webview2 runtime 2024-05-06 14:18:12 +08:00
MystiPanda
bc5b34db6b ci: try resupport x86 2024-05-06 13:04:29 +08:00
dongchengjie
bcf9df3744 fix: non-ascii character secret causes controller link error
https://github.com/clash-verge-rev/clash-verge-rev/issues/973#issuecomment-2094839700
2024-05-05 23:04:33 +08:00
MystiPanda
4d3674ee0a fix: enhance when change tun config 2024-05-04 16:12:10 +08:00
dongchengjie
28567e4629 chore: profile template typo 2024-05-04 14:24:11 +08:00
MystiPanda
1180a4fb0b fix: try to set env 2024-05-03 18:00:55 +08:00
dongchengjie
71928d2c9f fix: #974 2024-05-03 12:50:04 +08:00
MystiPanda
3853072a2e chore: update locale 2024-05-02 23:44:09 +08:00
dongchengjie
0cf630ef23 chore: add service mode locale 2024-05-02 22:16:05 +08:00
MystiPanda
202015fe34 feat: Support drag and drop local files 2024-05-02 20:41:43 +08:00
MystiPanda
ae43e5cae4 fix: change script execution path 2024-05-01 11:39:09 +08:00
MystiPanda
67b67bae6a Release 1.6.1 2024-04-30 23:43:51 +08:00
MystiPanda
dbb8fe15cf fix: MacOS tray click 2024-04-30 23:21:25 +08:00
lxk955
56efa10f64 feat: Support for using regular expressions on the log page #707 (#959) 2024-04-30 22:59:42 +08:00
MystiPanda
5ff776f90d fix: service install path 2024-04-30 20:20:39 +08:00
MystiPanda
a25b072bf6 build: Restore core version 2024-04-30 09:42:25 +08:00
dongchengjie
c95951c0e4 fixup: wrong version 2024-04-30 02:13:24 +08:00
dongchengjie
4c8193b801 chore: update pnpm-lock.yaml (#952)
* chore: update schema version

* Update pnpm-lock.yaml
2024-04-30 01:44:05 +08:00
dongchengjie
598a544ff8 chore: update schema version (#950) 2024-04-29 22:46:29 +08:00
MystiPanda
465ef3fa9a chore: Config issue template 2024-04-29 15:43:43 +08:00
MystiPanda
2f876d93e3 docs: Update FAQ URL 2024-04-28 20:04:03 +08:00
MystiPanda
84e8c44e4f build: cargo update 2024-04-28 19:59:46 +08:00
MystiPanda
855d794bdb fix: Open the link with browser 2024-04-28 18:46:49 +08:00
dongchengjie
a3333f8fe1 fixup: can't edit file (#943) 2024-04-28 17:00:33 +08:00
dongchengjie
2e64d62ca4 chore: disable WebView keyboard shortcuts (#942) 2024-04-28 16:19:13 +08:00
lxk955
26a3dbcbe1 feat: support display current profile when the mouse is placed on the tray icon #782 (#938) 2024-04-27 20:54:02 +08:00
PlayerNeo
fa2e86df29 fix: disable left click menu on macOS (#930) 2024-04-27 20:52:29 +08:00
LiuTianYu
b4f0ece78f fix: #730 icon not change when the window is opened maximized (#924)
Co-authored-by: tyliu9 <tyliu9@toycloud.com>
2024-04-24 22:36:15 +08:00
wonfen
630b319a37 Release 1.6.0 2024-04-23 14:25:09 +08:00
MystiPanda
4a37e49798 feat: support ico format for tray icon (#911) 2024-04-22 20:43:15 +08:00
dongchengjie
cfbe98a39a fix: #907 (#908) 2024-04-22 01:40:25 +08:00
dongchengjie
91f097d514 chore: update locale (#904)
* chore: missing locale

* chore: External Controller locale
2024-04-21 14:10:34 +08:00
dongchengjie
c545521cd9 chore: Proxy Bypass placeholder (#901) 2024-04-20 19:27:17 +08:00
dongchengjie
11e0f49ada fix: minor glitches (#900)
* feat: show actual proxy name instead of proxy group when hovering on a group outbound

* fix: open empty edit form and save will cause `UID not found`

* chore: tauri.conf.json json schema

* chore: missing locales
2024-04-20 18:02:15 +08:00
MystiPanda
19ce53128b fix: startup script blocking 2024-04-20 17:52:54 +08:00
MystiPanda
deccff623a fix: default value for tun 2024-04-20 17:42:36 +08:00
MystiPanda
b2a210ec0d build: add depends 2024-04-19 15:55:46 +08:00
MystiPanda
bdb5169a6f chore: update lock file 2024-04-19 15:38:32 +08:00
dongchengjie
0865b702a3 fix: 使用npm安装meta-json-schema (#895)
* feat: allow manual selection of url-test group

* feat: fixed proxy indicator

* fix: try to fix traffic websocket no longer updating

* fixup: group delay test use defined url

* feat: connections sorted by start by default

* feat: Connection details show the full path of the process

* fix: editor no hints and add yaml support

* feat: quick suggestions

* chore: use monaco-editor

* chore: update schema url

* chore: change default merge config content

* fix: load schema via npm

* feat: runtime config viewer style auto adjust

* feat: adjust fixed proxy style

* fix: headState "showType" won't toggle hover text

* chore: switch version

* chore: Update pnpm lockfile
2024-04-19 13:54:16 +08:00
MystiPanda
d13b8fd486 refactor: change default value of mtu 2024-04-18 10:27:09 +08:00
dongchengjie
494911805e chore: 修改Merge配置文件默认内容 (#889) 2024-04-17 22:56:54 +08:00
MystiPanda
cba3a2be24 chore: Update pnpm lockfile 2024-04-17 22:16:50 +08:00
dongchengjie
0686781359 feat: Clash配置、Merge配置提供JSON Schema语法支持、[连接]界面调整 (#887) 2024-04-17 21:19:37 +08:00
MystiPanda
e5b82dca4d fix: SymbolicLink
#750
2024-04-13 15:46:11 +08:00
MystiPanda
2144a42a22 fix: service install path 2024-04-13 15:12:41 +08:00
汐殇
07a989e004 fix: Allow core files in specific directories to be upgraded normally (#857) 2024-04-12 01:16:57 +08:00
dongchengjie
4f7e8116cb feat: url-test支持手动选择、节点组fixed节点使用角标展示 (#840)
* feat: allow manual selection of url-test group

* feat: fixed proxy indicator

* fix: try to fix traffic websocket no longer updating

* fixup: group delay test use defined url
2024-04-09 13:15:45 +08:00
MystiPanda
c0f650d7dc fix: Update the home while updating profile 2024-04-04 15:07:55 +08:00
MystiPanda
d4a0136504 fix: Use System Browser 2024-04-04 14:56:10 +08:00
Damian Johnson
5f25e027c4 style: adjust confirm dialog & web ui settings dialog (#821) 2024-04-03 23:19:00 +08:00
Damian Johnson
9610dcce20 fix: service mode install script download not found (#822) 2024-04-03 23:18:10 +08:00
dongchengjie
3ee3e7c17b feat: support URL Schema 'profile-web-page-url' (#816) 2024-04-01 19:28:28 +08:00
HZ is not Chatty
98536250bd fixup! feat: Service Mode for Linux (#804) (#815)
* fixup! feat: Service Mode for Linux (#804)

* fixup! feat: Service Mode for Linux (#804)

* Partially revert "fixup! feat: Service Mode for Linux (#804)"

This reverts commit e6a5a2b496.
2024-04-01 19:25:58 +08:00
MystiPanda
e95808e6be feat: Try support service mode for MacOS 2024-03-31 23:16:47 +08:00
MystiPanda
9fc819a410 fix: script error 2024-03-31 16:37:33 +08:00
HZ is not Chatty
b0f1ce1fa0 feat: Service Mode for Linux (#804) 2024-03-31 16:16:23 +08:00
wonfen
503579a638 Sytle: fix mac logo padding 2024-03-30 16:31:17 +08:00
Damian Johnson
3ad216751a fix: icon not change when toggle window maxinized (#799) 2024-03-30 01:16:40 +08:00
cismous
ca8e3179bb Style filter input (#724)
* refactor: reduce duplicate code

* style: add a white background to the light color theme to avoid the gray text being too light
2024-03-30 01:14:03 +08:00
Damian Johnson
fd84e56c00 fix: missing proxy group delay check animations (#788)
* fix: missing proxy group delay check animation

* chore: cleanup

* chore: adjust content style
2024-03-29 08:20:31 +08:00
wonfen
8b67fb7290 Release 1.5.11 2024-03-28 12:06:41 +08:00
MystiPanda
2d1fdb319d feat: Support Persian
#715
2024-03-21 20:51:33 +08:00
MystiPanda
c200e18434 fix: Duplicate icon display error
#719
2024-03-21 20:29:16 +08:00
MystiPanda
b3ffcd020f fix: The update button cannot be clicked
#716
2024-03-21 19:56:30 +08:00
MystiPanda
9258a3dcd4 fix: Check if the install directory is empty when uninstall 2024-03-21 15:24:12 +08:00
MystiPanda
57f5478731 chore: fix typo 2024-03-21 14:09:59 +08:00
MystiPanda
973d75ebdd Release 1.5.10 2024-03-21 13:47:39 +08:00
MystiPanda
33519b27c8 chore: Change a little 2024-03-21 12:55:22 +08:00
MystiPanda
7da7ff4a69 build: Update depends 2024-03-21 11:53:25 +08:00
MystiPanda
dbd2f697f9 fix: a little 2024-03-21 11:43:16 +08:00
MystiPanda
f435762b88 feat: Confirm before deletion
#703
2024-03-21 11:39:01 +08:00
MystiPanda
ae46332e42 feat: Support config redir port and tproxy port 2024-03-21 10:54:56 +08:00
MystiPanda
d003883de9 chore: limit port config
#699
2024-03-20 21:23:10 +08:00
MystiPanda
4e438a44f1 fix: Limit icon width
#697
2024-03-20 20:38:45 +08:00
MystiPanda
02e19b3d44 fix: service logs are not cleared
#695
2024-03-20 20:31:00 +08:00
MystiPanda
ccc19512e7 docs: Improve the issue template 2024-03-20 18:06:02 +08:00
MystiPanda
c34539e389 feat: Optimize Linux tray menu 2024-03-18 11:11:18 +08:00
MystiPanda
f8aeacb949 Revert "fix: remove activation policy" 2024-03-18 09:53:48 +08:00
MystiPanda
9940190679 Release 1.5.9 2024-03-17 11:25:25 +08:00
MystiPanda
e2498b3e91 fix: drag error
#643
2024-03-16 20:37:39 +08:00
MystiPanda
82246fd9c7 fix: drag error 2024-03-16 17:06:59 +08:00
MystiPanda
11538552eb fix: Try to fix touch drag
#456
2024-03-16 10:54:19 +08:00
MystiPanda
4ce28f54de build: Update to Tauri 1.6.1 2024-03-16 00:03:34 +08:00
MystiPanda
e887ed74a3 ci: update alpha script 2024-03-15 21:52:56 +08:00
MystiPanda
28c086e97c ci: remove 2024-03-15 21:42:55 +08:00
MystiPanda
11465e89a3 feat: Try to support more architecture 2024-03-15 21:14:05 +08:00
MystiPanda
b2197187c1 refactor: Try to migrate to boa_engine
#634
2024-03-15 19:58:22 +08:00
MystiPanda
2b26a10745 fix: Avoid empty user-agent 2024-03-15 18:27:24 +08:00
MystiPanda
daf726ebbf feat: Try to cache remote images
#603
2024-03-15 16:43:39 +08:00
screw-hand
88dd886687 fix: mac setting theme font-famil not working (#632) 2024-03-15 15:17:05 +08:00
MystiPanda
609da457f7 fix: remove activation policy
#592
2024-03-15 12:44:25 +08:00
xkww3n
363e28ff69 fix: Set REJECT-DROP policy the same text color as REJECT (#622) 2024-03-14 18:54:26 +08:00
MystiPanda
bdd6bf9020 Release 1.5.8 2024-03-13 14:17:06 +08:00
wonfen
5c3dab3466 Sytle: A little tweak 2024-03-13 14:09:08 +08:00
MystiPanda
9b2c8fa25d feat: Add border-radius for window on linux 2024-03-13 13:58:29 +08:00
Amnesiash
df2f102d9e update profile ui (#594) 2024-03-13 10:53:39 +08:00
MystiPanda
95ebb0e6d2 fix: Try to fix #577 again 2024-03-11 22:52:29 +08:00
MystiPanda
e5d03652a9 fix: script 2024-03-11 22:10:20 +08:00
MystiPanda
56b53e2dd8 fix: typo 2024-03-11 22:05:56 +08:00
MystiPanda
cf0b7b213f fix: Try to fix #577 2024-03-11 22:03:45 +08:00
MystiPanda
d214c8e01b feat: Allow open devtools 2024-03-11 20:19:21 +08:00
MystiPanda
fba0f362a5 docs: Update Readme 2024-03-11 18:38:58 +08:00
MystiPanda
ec05d0857c Release 1.5.7 2024-03-11 17:09:01 +08:00
MystiPanda
54b744b7de fix: display error 2024-03-11 16:18:39 +08:00
MystiPanda
1a76780fff chore: Change IP 2024-03-11 16:05:09 +08:00
MystiPanda
58f5c44533 fix: a little 2024-03-11 15:02:41 +08:00
MystiPanda
d085da4dbf fix: Change DNS for MacOS Tun Mode
#568
2024-03-11 14:55:00 +08:00
MystiPanda
c4a5c356f7 fix: default value 2024-03-11 13:17:45 +08:00
MystiPanda
18fdc5c6a2 fix: Try to fix touch drag
#456
2024-03-11 12:36:20 +08:00
MystiPanda
35dabaab9c feat: Allow to control whether auto check update 2024-03-11 12:17:46 +08:00
MystiPanda
9bf31b10bb style: fix a little 2024-03-10 23:56:04 +08:00
MystiPanda
7186575cb1 style: fix styles 2024-03-10 23:47:12 +08:00
MystiPanda
2ecae40130 fix styles 2024-03-10 22:13:25 +08:00
MystiPanda
778ed62a90 chore: proxy group header height 2024-03-10 21:56:49 +08:00
MystiPanda
5e863a87dc chore: adjust proxy group font style 2024-03-10 21:52:40 +08:00
MystiPanda
7ce8597c25 chore: Adjust Profile Style 2024-03-10 21:37:52 +08:00
MystiPanda
1992237ce5 chore: Add Default value 2024-03-10 21:15:22 +08:00
MystiPanda
8f247b0f73 style: Adjust icon color 2024-03-10 20:48:13 +08:00
Amnesiash
e2159d80af style: Adjust colorful icon (#558)
Co-authored-by: MystiPanda <mystipanda@proton.me>
2024-03-10 20:37:00 +08:00
MystiPanda
057023531e chore: i18n 2024-03-10 20:33:27 +08:00
MystiPanda
dfed65bf9f chore: Update Icon 2024-03-10 20:14:51 +08:00
MystiPanda
739161849a feat: Add option to control menu icon 2024-03-10 19:54:47 +08:00
MystiPanda
c65b280020 chore: Adjust styles 2024-03-10 13:24:38 +08:00
MystiPanda
d3bcf25ef0 Revert "chore: Adjust secondary text style (#545)"
This reverts commit f6bd3340e7.
2024-03-10 13:08:09 +08:00
Amnesiash
f6bd3340e7 chore: Adjust secondary text style (#545) 2024-03-10 12:54:34 +08:00
MystiPanda
6a7c09bfe3 style: Adjust delay fontSize
#544
2024-03-10 12:51:53 +08:00
MystiPanda
8b9f294a5d docs: update preview 2024-03-10 12:32:08 +08:00
MystiPanda
4a282d9629 chore: Change Default Font 2024-03-10 12:23:11 +08:00
MystiPanda
909b88864f chore: delete debug output 2024-03-10 11:47:55 +08:00
MystiPanda
1346a7992c Release 1.5.6 2024-03-10 11:43:37 +08:00
MystiPanda
bba607e987 feat: Add default webui
#530
2024-03-10 11:41:22 +08:00
MystiPanda
f9cc490c35 Adjust styles 2024-03-10 11:21:17 +08:00
MystiPanda
a5aec2d9fa Adjust styles 2024-03-10 11:12:54 +08:00
wonfen
c0df368dc6 Sytle: UI improvement & Update Readme 2024-03-10 07:00:24 +08:00
MystiPanda
aa77433523 fix: fix a little 2024-03-10 00:41:18 +08:00
black23eep
44ad99f693 Update layout-traffic.tsx (#528) 2024-03-10 00:35:26 +08:00
MystiPanda
b7f7a82ea9 chore: update 2024-03-10 00:34:22 +08:00
MystiPanda
c69978c9fd fix: fontSize and some styles 2024-03-10 00:22:22 +08:00
Amnesiash
6174aa6ee1 fix settings.svg (#526) 2024-03-10 00:04:06 +08:00
MystiPanda
74b8d2e908 chore: center 2024-03-09 23:38:03 +08:00
Charles
63a515944f tweak(ui): menu icon use svg component (#524) 2024-03-09 23:13:08 +08:00
MystiPanda
5b5db7b860 fix: img path error 2024-03-09 22:43:53 +08:00
MystiPanda
b3bbacf2ef Release 1.5.5 2024-03-09 22:02:36 +08:00
Amnesiash
3a0429d049 refactor: Upgrade to the new UI (#521)
Co-authored-by: MystiPanda <mystipanda@proton.me>
2024-03-09 21:37:21 +08:00
wonfen
ab539081fa UI: change paste icon, delete default profile name 2024-03-09 02:34:33 +08:00
Pylogmon
f0d88d4e73 feat: Merge Providers (#508) 2024-03-08 11:37:52 +08:00
MystiPanda
772cbd6ffd feat: Add animation for provider update 2024-03-02 13:52:48 +08:00
MystiPanda
17b9dbe9d7 chore: fix style 2024-02-28 18:25:50 +08:00
MystiPanda
75e5d42d8b feat: Try to support touch drag 2024-02-27 23:41:52 +08:00
MystiPanda
031c15fd7d chore: Remove unnecessary hotkey 2024-02-27 11:18:52 +08:00
MystiPanda
de1924cefc fix: Image display failed on Linux 2024-02-26 13:31:51 +08:00
Cyenoch
66db0a4751 Feat: Provide a switch for allowing invalid certificates (#450) 2024-02-25 16:07:06 +08:00
MystiPanda
c309410965 chore: change style 2024-02-24 15:39:29 +08:00
MystiPanda
7f461b99e2 Release 1.5.4 2024-02-24 14:00:01 +08:00
MystiPanda
7bfe0eeae9 feat: Support Open/Close Dashboard Hotkey
#439
2024-02-24 13:39:30 +08:00
MystiPanda
8619bd5be3 feat: Show current proxy for group node
#444
2024-02-24 13:09:53 +08:00
MystiPanda
56011d37d4 feat: allow disable group icon 2024-02-24 12:38:17 +08:00
MystiPanda
c2852c8a82 refactor: Optimize implementation of Custom tray icon 2024-02-24 11:25:22 +08:00
MystiPanda
6f546a424e feat: Support Custom Tray Icon 2024-02-24 00:52:21 +08:00
MystiPanda
447f7530af Release 1.5.3 2024-02-22 00:23:56 +08:00
MystiPanda
6136f1206b feat: add reset button 2024-02-22 00:19:45 +08:00
MystiPanda
36a3c5b501 fix: Do not set autolaunch at init
#423 #424
2024-02-21 23:50:50 +08:00
MystiPanda
dcd6c1f522 chore: rm -m arg 2024-02-21 23:38:01 +08:00
MystiPanda
2b074bcdcb chore: change default value of dns hijack 2024-02-21 16:40:47 +08:00
MystiPanda
b20ec7f0eb chore: change default value of strict route 2024-02-21 11:32:51 +08:00
MystiPanda
58cf69a2fe chore: fix placeholder 2024-02-21 11:13:28 +08:00
MystiPanda
096c148228 chore: Add Translation 2024-02-21 11:06:32 +08:00
MystiPanda
a68005d4ab feat: Disable system stack when service mode is turned off 2024-02-21 10:52:03 +08:00
MystiPanda
bf3a281987 fix: Config data display error
#417
2024-02-21 10:02:28 +08:00
MystiPanda
2965a6827d Release 1.5.2 2024-02-21 00:04:11 +08:00
MystiPanda
9f43a73c36 chore: Auto Update config.yml 2024-02-20 23:54:02 +08:00
MystiPanda
7551b45da2 feat: Support Tun Config (#416) 2024-02-20 23:27:03 +08:00
MystiPanda
bca3685eda chore: Update patch file 2024-02-20 18:39:36 +08:00
MystiPanda
6d20175800 fix: Allow program run with administrator to start at startup 2024-02-20 18:35:39 +08:00
MystiPanda
a62dd4c020 chore: add tooltip for tun mode 2024-02-19 18:10:10 +08:00
MystiPanda
d1d9620a61 feat: Support custom delay timeout (#397) 2024-02-18 11:11:22 +08:00
MystiPanda
5106d77c77 build: Try restart windows service after install (#395) 2024-02-18 10:19:54 +08:00
MystiPanda
69cf237d7a fix: Merge profile unexpect behavior 2024-02-17 15:58:52 +08:00
MystiPanda
7d9d1c82b6 ci: Update Release Note 2024-02-15 20:05:00 +08:00
MystiPanda
228ff5edf4 ci: change tag 2024-02-15 19:45:37 +08:00
MystiPanda
2baac618a8 chore: update ci script 2024-02-15 19:14:35 +08:00
MystiPanda
e8f499a938 chore: Change CI Name 2024-02-15 18:45:13 +08:00
MystiPanda
96ca20d0b4 ci: Support alpha package 2024-02-15 18:43:20 +08:00
MystiPanda
54acdc86e7 chore: remove 32bit package 2024-02-15 18:22:15 +08:00
MystiPanda
0815e02895 chore: default show proxy detials 2024-02-15 18:17:21 +08:00
wonfen
30cbb72b57 doc: remove 32bit package 2024-02-12 02:25:18 +08:00
MystiPanda
0b91397709 fix: build error 2024-02-11 20:51:00 +08:00
MystiPanda
89934c17ca Release v1.5.1 2024-02-11 20:32:25 +08:00
MystiPanda
e4a38e62eb style: clear script 2024-02-11 20:03:14 +08:00
MystiPanda
5e1e09d7bf fix: Custom GLOBAL group display error 2024-02-11 18:27:27 +08:00
MystiPanda
51ce3a1e42 feat: Show proxies count for provider 2024-02-10 13:13:27 +08:00
MystiPanda
54b46dfad9 feat: Save window maximize state 2024-02-10 12:51:30 +08:00
MystiPanda
787917ac66 style: change config name
#350
2024-02-08 10:23:54 +08:00
MystiPanda
619b49bdc4 fix: Script profile invalid
#347
2024-02-06 08:55:44 +08:00
MystiPanda
4b3a73d440 Release 1.5.0 2024-02-06 00:41:12 +08:00
MystiPanda
54f9c59d6e refactor: Remove clash field filter 2024-02-05 17:28:36 +08:00
wonfen
1d123996f6 chore: enable clash field TLS fingerprint 2024-02-04 13:07:25 +08:00
MystiPanda
c4768f6138 fix: Try to fix traffic parse error
#337
2024-02-04 10:24:37 +08:00
wonfen
5f3551ff34 chore: update changelog 2024-02-03 16:14:26 +08:00
MystiPanda
d3985c2e3b fix: Copy Env Type Select Error 2024-02-02 17:57:56 +08:00
MystiPanda
3b1843f3a3 chore: typo 2024-02-02 17:47:28 +08:00
MystiPanda
2c36796362 chore: Update Changelog 2024-02-02 17:34:15 +08:00
MystiPanda
655ccba89b fix: prevent_exit 2024-02-02 17:26:31 +08:00
MystiPanda
150d72f0f8 Release 1.4.11 2024-02-02 16:56:39 +08:00
MystiPanda
6a316b34a2 fix: exit_app event 2024-02-02 16:32:19 +08:00
MystiPanda
8e6b600609 chore: fix styles 2024-02-02 16:15:23 +08:00
MystiPanda
5630a4dd67 chore: Remove prevent_close 2024-02-02 15:57:03 +08:00
MystiPanda
38ee8aedc1 fix: Fix Nisi Error 2024-02-02 15:53:28 +08:00
ycjcl868
d594615532 chore: unused clash core (#284) 2024-01-23 11:22:15 +08:00
MystiPanda
2739fa60be chore: fix style 2024-01-21 13:49:07 +08:00
MystiPanda
327301782d revert: some style 2024-01-21 13:49:07 +08:00
wonfen
8781c5db8d Sytle: UI improvement 2024-01-20 16:05:01 +08:00
Lai Zn
31c34ea158 fix: Solve the confliction issues on auto updater failure (#273) 2024-01-20 13:03:48 +08:00
MystiPanda
ef9bbaca19 revert: Support both registry and api for windows sysproxy 2024-01-20 12:16:46 +08:00
MystiPanda
02d89072bc build: Update lock file 2024-01-18 22:34:14 +08:00
MystiPanda
4e8bd640a7 Release v1.4.10 2024-01-18 22:26:23 +08:00
MystiPanda
8c71a00600 feat: Add exit button on setting page 2024-01-18 22:19:14 +08:00
MystiPanda
3d36c70d53 build: Update Depends 2024-01-18 16:26:38 +08:00
MystiPanda
c72479c4d6 feat: Support Custom Start Page 2024-01-18 15:37:02 +08:00
Lai Zn
4bb88d8e44 feat: Use url path name as fallback subscription name (#255) 2024-01-18 14:36:37 +08:00
MystiPanda
0ee0958539 feat: Show SubInfo for Proxy Provider
#211
2024-01-18 14:26:57 +08:00
Lai Zn
b6dd6f3a94 fix: make port change set to system proxy immediately (#256) 2024-01-18 09:37:46 +08:00
MystiPanda
d11c322e1f fix: use nanoid to compatible with old devices 2024-01-18 01:16:39 +08:00
MystiPanda
cd92b34ef1 feat: Optimizing Provider Support 2024-01-18 01:02:30 +08:00
Kiri
b6481cfcda feat: Add support for loong64 (#246) 2024-01-17 22:30:51 +08:00
Lai Zn
db7eb92638 docs: Add guidelines for windows development (#250) 2024-01-17 19:02:39 +08:00
MystiPanda
f2d0477550 fix: Do not use proxy when test on tun mode 2024-01-17 18:08:09 +08:00
MystiPanda
776e207f09 Release v1.4.9 2024-01-17 15:43:15 +08:00
MystiPanda
733e8a0043 feat: Support Startup Script 2024-01-17 15:06:16 +08:00
MystiPanda
4fa19006ad feat: Support proxy group icon 2024-01-17 13:32:56 +08:00
MystiPanda
73a597e3e5 fix: Fix connection table sort error
#108
2024-01-17 12:54:54 +08:00
MystiPanda
d776f1765d chore: Update I18n 2024-01-17 11:30:19 +08:00
MystiPanda
741b6f6f9a fix: csp error 2024-01-17 11:08:14 +08:00
MystiPanda
b6f4695bcd feat: Add Test Page 2024-01-17 11:02:17 +08:00
MystiPanda
b7d3b807d2 fix: fix column width 2024-01-16 19:02:38 +08:00
MystiPanda
0cc386bc28 Release v1.4.8 2024-01-16 15:36:04 +08:00
MystiPanda
cb155707cd feat: Support both registry and api for windows sysproxy 2024-01-16 15:11:53 +08:00
MystiPanda
9b6b250cbd fix: Can not use specify update time when create profile 2024-01-16 10:29:04 +08:00
MystiPanda
5b7e29b8ad refactor: rm theme blur 2024-01-15 17:13:55 +08:00
MystiPanda
b6d748b414 Revert Use Tauri Http Api 2024-01-15 10:18:04 +08:00
MystiPanda
8fc4b338c2 Revert Use Tauri Websocket 2024-01-15 10:17:00 +08:00
MystiPanda
6d3ea19ac5 fix: Fix connections sort issue and add total traffic info 2024-01-15 00:46:19 +08:00
MystiPanda
d01ef48bf0 refactor: Use Tauri Http API 2024-01-14 19:35:03 +08:00
MystiPanda
71103bb7b9 refactor: Use Tauri WebSocket 2024-01-14 17:30:18 +08:00
MystiPanda
1c9bc00acc fix patch error 2024-01-11 14:47:25 +08:00
MystiPanda
bed128e8cf Release v1.4.7 2024-01-11 13:19:05 +08:00
MystiPanda
b5c3f18f24 feat: Disable updater for portable 2024-01-11 12:44:30 +08:00
MystiPanda
cbccdf5d93 feat: Support hide group
#214
2024-01-11 12:34:05 +08:00
Morris Li
a46f3a31e1 Fix expired Tauri domain (#222) 2024-01-11 10:17:56 +08:00
MystiPanda
a808f7b04e build: Use old sysproxy 2024-01-10 19:24:14 +08:00
MystiPanda
3a883b9e41 refactor: cargo clippy 2024-01-10 17:36:35 +08:00
MystiPanda
17d8691300 refactor: Optimizing the implementation of Linux URL Scheme registration 2024-01-10 16:34:35 +08:00
MystiPanda
523ce1dbdd fix: resolve scheme error 2024-01-10 15:37:40 +08:00
MystiPanda
4a3a9bf62c fix: linux build error 2024-01-10 15:22:08 +08:00
MystiPanda
3b30177959 feat: Support URL Scheme for MacOS 2024-01-10 14:04:06 +08:00
MystiPanda
7e66f89260 feat: Support URL Scheme for Linux 2024-01-10 13:03:34 +08:00
MystiPanda
1a93ba634f build: fix macos build script 2024-01-09 22:49:11 +08:00
MystiPanda
d93f823fc6 fix patch error 2024-01-09 22:25:25 +08:00
MystiPanda
f2198bf938 Release v1.4.6 2024-01-09 22:17:29 +08:00
MystiPanda
965f10698b feat: Support URL Scheme for Windows
#165
2024-01-09 21:57:06 +08:00
MystiPanda
b71367cd2a feat: Optimize control button style 2024-01-09 16:04:56 +08:00
MystiPanda
abe18ac825 feat: Add pin button 2024-01-09 15:13:59 +08:00
MystiPanda
bb193d3768 fix: Fix some compile error 2024-01-09 14:52:43 +08:00
wonfen
7a7f5cd4a8 Style: UI improvement & 1.4.6 ready 2024-01-09 13:57:53 +08:00
wonfen
ac9f49f8c9 chore: UI adjustment 2024-01-08 19:32:21 +08:00
MystiPanda
8f53859e00 chore: Use Latest and compatible core 2023-12-23 12:09:19 +08:00
MystiPanda
bfb7ff88d9 fix: Cargo clippy 2023-12-21 16:49:21 +08:00
MystiPanda
c36425fd3a fix: Get filename error
#165
2023-12-19 19:52:13 +08:00
MystiPanda
981f9d0b01 fix: portable flag 2023-12-15 21:39:34 +08:00
MystiPanda
fa89fe3e87 chore: update service url 2023-12-15 20:38:17 +08:00
MystiPanda
d132357c20 fix: user-agent version error 2023-12-15 15:18:01 +08:00
MystiPanda
a719237556 fix: Subinfo parse error 2023-12-15 11:35:10 +08:00
MystiPanda
8955ca5216 Release 1.4.5 2023-12-14 17:40:48 +08:00
MystiPanda
f665762cc8 fix: Window control button icon issue
#136
2023-12-14 14:59:55 +08:00
MystiPanda
d16fc2b68b chore: Remove unsafe function 2023-12-14 13:56:51 +08:00
MystiPanda
e1df32c32d fix: icon size 2023-12-14 13:20:01 +08:00
MystiPanda
943c6f77dc feat: Update MacOS tray icon 2023-12-14 13:11:46 +08:00
MystiPanda
4964382966 chore: Optimize service path 2023-12-14 13:03:52 +08:00
MystiPanda
021c6fdbe2 chore: Optimize upgrade process 2023-12-14 11:24:26 +08:00
MystiPanda
711f9805c9 chore: default enable clash field filter 2023-12-14 10:49:58 +08:00
MystiPanda
0aaae3afd6 chore: Delete unnecessary drag area 2023-12-13 11:09:19 +08:00
MystiPanda
eadd1042fb chore: Change service path 2023-12-13 10:59:07 +08:00
MystiPanda
16fa2c9f5e fix: Save wrong window size 2023-12-12 16:42:19 +08:00
MystiPanda
d4ab1df870 Revert "fix: Change PID file path"
This reverts commit c5855119d8.
2023-12-12 15:59:00 +08:00
MystiPanda
4a5aa1bcc1 fix: Can't switch env type 2023-12-11 10:51:59 +08:00
MystiPanda
01a9cda99a build: fix update issue 2023-12-10 22:24:46 +08:00
MystiPanda
dcdf606ff6 build: fix patch 2023-12-10 21:40:57 +08:00
MystiPanda
ea021de5eb v1.4.4 2023-12-10 21:36:22 +08:00
MystiPanda
5cc3526f8f feat: Support windows aarch64 (#112) 2023-12-10 20:45:27 +08:00
MystiPanda
3060fc2af4 feat: Patch for windows aarch64 2023-12-10 19:50:01 +08:00
MystiPanda
e4395dfeb4 build: Update Depends 2023-12-10 17:14:48 +08:00
MystiPanda
f65dadf1d7 chore: Hide script mode for alpha core 2023-12-10 16:31:55 +08:00
MystiPanda
f048762fd9 Support upgrade alpha core 2023-12-10 15:57:10 +08:00
MystiPanda
bb985f826e feat: Support update geodata
#37
2023-12-10 15:22:04 +08:00
zclkkk
bb239cba2a chore: Allow user to choose where to install (#110) 2023-12-10 09:50:43 +08:00
MystiPanda
e7e66e580a chore: Remove script mode 2023-12-09 17:04:03 +08:00
MystiPanda
689d689d3b docs: Update ISSUE_TEMPLATE 2023-12-09 12:00:01 +08:00
MystiPanda
125c3d3e0d feat: Support different tray icon for macos 2023-12-09 11:22:02 +08:00
MystiPanda
ffaa06560e feat: Support different tray icon for linux 2023-12-09 11:03:19 +08:00
Pylogmon
f9b716201f feat: Optimize copy environment variable logic (#106) 2023-12-08 22:16:42 +08:00
MystiPanda
8b14a5f0d8 perf: Improves window creation speed 2023-12-08 13:10:35 +08:00
MystiPanda
c5855119d8 fix: Change PID file path
#99
2023-12-08 11:59:40 +08:00
MystiPanda
a036597f5f docs: Update README 2023-12-07 16:49:59 +08:00
MystiPanda
b8688e2e66 feat: Add AppImage for x86 linux 2023-12-07 16:38:39 +08:00
MystiPanda
d8b2e08717 ci: fix build script 2023-12-07 16:17:34 +08:00
MystiPanda
7da78d3312 chore: Fix build error 2023-12-07 16:02:29 +08:00
MystiPanda
2292b107dc ci: Fix Linux CI Script 2023-12-07 15:57:53 +08:00
MystiPanda
1fcc74c658 ci: Fix Linux Build Script 2023-12-07 15:34:49 +08:00
MystiPanda
73be027951 chore: change default port to 7897 2023-12-07 14:52:14 +08:00
MystiPanda
132d91c2ab refactor: fix depends 2023-12-07 14:44:44 +08:00
MystiPanda
f08ce82c3f refactor: Remove unnecessary changes 2023-12-07 13:43:53 +08:00
MystiPanda
8de2712652 Revert "chore: change default port to 7897"
This reverts commit 55835785c0.
2023-12-07 13:32:49 +08:00
wonfen
55835785c0 chore: change default port to 7897 2023-12-06 03:37:16 +08:00
MystiPanda
cb711b7758 docs: Update README 2023-12-05 17:02:54 +08:00
MystiPanda
19c75293bf docs: UPDATELOG 2023-12-05 16:47:42 +08:00
MystiPanda
33219f00d5 Release 1.4.3 2023-12-05 16:28:50 +08:00
MystiPanda
4aaedbb0e6 chore: fix appid 2023-12-05 15:41:13 +08:00
MystiPanda
ee1f14d4eb refactor: Change app_home to standard locations of app_data 2023-12-05 15:39:44 +08:00
MystiPanda
feac8085c9 fix: Stop core before install update 2023-12-05 15:01:15 +08:00
MystiPanda
0a5ec11b1b docs: Update README 2023-12-05 13:33:23 +08:00
MystiPanda
03937174e5 refactor: Remove page animation 2023-12-05 13:30:55 +08:00
MystiPanda
e00529c05f refactor: Change Tun Icon Color 2023-12-05 13:23:54 +08:00
MystiPanda
5dbf8e1d2b build: Dependency downgrade 2023-12-05 12:55:20 +08:00
Pylogmon
bebf672186 refactor: Change Portable Config Path (#66) 2023-12-05 12:52:26 +08:00
Pylogmon
6d4a8f2a5a refactor: Hide Clash Field Option when Disable Filter (#63) 2023-12-05 08:34:57 +08:00
MystiPanda
14db0ae663 Update README.md 2023-12-04 14:51:46 +08:00
MystiPanda
88d1c1d140 ci: fix updater 2023-12-04 13:51:46 +08:00
MystiPanda
9106055be1 chore: Use Nsis 2023-12-04 13:45:28 +08:00
Pylogmon
2cf52f15ab fix: Open File (#56) 2023-12-04 12:15:12 +08:00
Pylogmon
b7e9d61c72 fix: Get Profile Filename (#54) 2023-12-04 12:15:01 +08:00
MystiPanda
0bc22db296 chore: change linux meta core to compatible 2023-12-04 11:38:54 +08:00
wonfen
6a943acc70 chore: change windows meta core to compatible 2023-12-04 06:00:31 +08:00
WhizPanda
7c97416e7d fix: alpha core can't display memory 2023-12-03 18:55:38 +08:00
WhizPanda
dd75504a66 style: fix icon size 2023-12-03 18:28:41 +08:00
WhizPanda
04c4ab2289 docs: Update README.md 2023-12-03 16:42:49 +08:00
Pylogmon
310a2e2511 style: improve drag icon style (#51) 2023-12-03 16:27:13 +08:00
WhizPanda
f6314431f0 ci: Fix Portable Script 2023-12-03 15:36:39 +08:00
wonfen
89100d0ca0 docs: update readme 2023-12-03 15:25:33 +08:00
WhizPanda
2b646636c1 feat: Support Both Stable and Alpha Version (#47) 2023-12-03 14:26:03 +08:00
wonfen
b10c1d5006 release: 1.4.2, tweak UI, fix emoji on mac 2023-12-03 14:01:53 +08:00
WhizPanda
225b829c1a chore: Adjust style 2023-12-02 23:20:04 +08:00
WhizPanda
5f4c7076ab chore: Replace Repo Name 2023-12-02 23:04:04 +08:00
WhizPanda
61c9b304d7 build: Update Depends 2023-12-02 22:36:04 +08:00
WhizPanda
789d7000cf style: Improve Style 2023-12-02 16:23:53 +08:00
WhizPanda
d23ef2bd59 feat: Support New Clash Field
#46
2023-12-02 15:18:54 +08:00
WhizPanda
8a77f832a3 build: Update Cargo Depends 2023-12-01 15:52:49 +08:00
WhizPanda
5a6d318cfb build: Update Depends 2023-12-01 14:49:32 +08:00
WhizPanda
e9f14de05d feat: support random mixed port 2023-12-01 12:56:18 +08:00
WhizPanda
2d8da45bda fix: Fix Updater Script 2023-12-01 11:19:49 +08:00
WhizPanda
83de33f5b8 Remove unnecessary conditions 2023-12-01 11:11:20 +08:00
Pylogmon
e63844f786 feat: Add Windows x86 and Linux armv7 Support (#44)
* feat: Add Windows x86 and Linux armv7 Support

* ci: Remove Linux armv7 Support
2023-12-01 11:03:18 +08:00
Pylogmon
0a805c16fd feat: Use Latest Meta Core mihomo (#41) 2023-12-01 02:44:18 +08:00
Pylogmon
653c7d4430 feat: Support cross-compiling to aarch64 (#40)
#19
2023-11-30 22:46:09 +08:00
Pylogmon
306c3bea21 feat: Support Disable Tray Click Event (#38)
#21
2023-11-30 22:45:02 +08:00
Pylogmon
389ce60bc9 feat: Set different tray icon on tun mode (#33)
好看!
2023-11-30 01:29:11 +08:00
Pylogmon
2d453a1a6c feat: Add Download Progress for Updater (#34) 2023-11-30 01:28:46 +08:00
Pylogmon
0775560ad2 feat: Support Drag to Reorder the Profile (#29)
* feat: Support Drag to Reorder the Profile

* style: Remove unnecessary styles
2023-11-29 08:54:02 +08:00
wonfen
2680c1e8b3 Merge pull request #27 from Pylogmon/emoji-font
feat: Embed Emoji fonts
2023-11-28 10:41:35 +08:00
Pylogmon
50ba2e3ad4 feat: Embed Emoji fonts 2023-11-28 10:36:32 +08:00
wonfen
c16875d0de fix: Adjust font order 2023-11-28 10:03:01 +08:00
wonfen
a4205cd0c2 chore: update preview gif 2023-11-28 08:49:22 +08:00
wonfen
2fb3e373c6 Merge branch 'main' of github.com:wonfen/clash-verge-rev 2023-11-28 07:53:11 +08:00
wonfen
ac1fa7209c update clashmeta core, Imporve UI, merge PR, reset icons, fix CI 2023-11-28 07:49:44 +08:00
wonfen
fd820d6af8 Merge pull request #24 from Pylogmon/tray
fix: Tray Icon Tooltip is Empty
2023-11-28 01:46:41 +08:00
wonfen
b88486601b Merge pull request #21 from Pylogmon/tray-event
feat: Config Tray Click Event
2023-11-28 01:46:16 +08:00
Pylogmon
92e712a508 chore: fix style 2023-11-27 20:10:31 +08:00
Pylogmon
64a9079ce4 chore: Add Translation 2023-11-27 20:04:47 +08:00
Pylogmon
f18d0ab923 fix: Tray Icon Tooltip is Empty 2023-11-27 19:55:42 +08:00
Pylogmon
def49e6d20 chore: Remove Debug Info 2023-11-26 18:49:48 +08:00
Pylogmon
f142db3d49 feat: Config Tray Click Event 2023-11-26 18:35:21 +08:00
wonfen
e7b04a89e2 fix: portable CI again 2023-11-23 15:01:30 +08:00
wonfen
1cb59f46e3 chore: change preview gif and fix portable CI 2023-11-23 14:34:11 +08:00
wonfen
a604746e0b fix: CI portable 2023-11-23 13:42:16 +08:00
wonfen
aba706a293 Merge pull request #3 from Kuingsmile/main
fix: Downgrade runas to fix service install bug
2023-11-23 11:11:06 +08:00
wonfen
c1b9113347 chore: update clash.meta core to 2023.11.23, change win icons. 2023-11-23 11:10:32 +08:00
Kuingsmile
5e7db2807d fix: Downgrade runas to fix service install bug 2023-11-22 17:17:12 -08:00
wonfen
203f830a30 Merge pull request #2 from Kuingsmile/main
feat: Update DialogContent width in EditorViewer
2023-11-23 07:46:12 +08:00
Kuingsmile
3dbe9193e2 feat: Update DialogContent width in EditorViewer
component
2023-11-22 06:49:47 -08:00
wonfen
717cf29595 Merge pull request #1 from Kuingsmile/main
feat: add UWP loopback tools
2023-11-22 16:23:38 +08:00
Kuingsmile
72300fec5e feat: add UWP loopback tools 2023-11-22 00:15:41 -08:00
wonfen
ec50b1d67a chore: UI adjustment, add translation, fix CI 2023-11-22 14:52:14 +08:00
wonfen
408a4420c9 chore: update readme & fix updater issue 2023-11-22 07:31:38 +08:00
wonfen
568218204a chore: remove old updater CI 2023-11-22 07:06:08 +08:00
wonfen
bd39e98c66 Merge remote-tracking branch 'nyanpasu/main' 2023-11-22 06:48:30 +08:00
wonfen
01be65a624 chore: delete clash core, update CI, change profile name, change URL test link 2023-11-22 02:56:47 +08:00
keiko233
a59d8a6a17 chore: fix typos 2023-11-16 11:31:06 +08:00
keiko233
70b71aa4f9 chore: add updater workflow 2023-11-16 10:59:27 +08:00
keiko233
aaf7991139 chore: remove un supported platform
* I don't have the relevant equipment to test with
* May support in future
2023-11-16 10:56:03 +08:00
keiko233
265d579fd9 chore: no need for second build 2023-11-16 10:41:28 +08:00
keiko233
f6dd91e47c chore: fix missing assets type 2023-11-16 10:37:26 +08:00
keiko233
cdae552ab0 chore: remove un supported platform 2023-11-16 10:30:25 +08:00
keiko233
730e887454 chore: fix typos 2023-11-16 10:30:01 +08:00
keiko233
5a3852d82c docs: add preview gif 2023-11-15 15:17:51 +08:00
keiko233
5b35580d2d chore: clean up workflows 2023-11-15 14:37:10 +08:00
keiko233
4b0705fe36 Bump Version 1.4.0 2023-11-15 14:06:29 +08:00
keiko233
d219b4d12a chore: add release build 2023-11-15 13:52:56 +08:00
keiko233
6e38331328 fix: rust lint 2023-11-15 13:49:06 +08:00
keiko233
c4bc9aea22 chore: test: use pnpm 2023-11-13 14:49:28 +08:00
keiko233
6c692d9308 feat: minor tweaks 2023-11-12 00:10:23 +08:00
keiko233
7ce8bd8988 feat: Nyanpasu Misc 2023-11-12 00:09:32 +08:00
keiko233
b4ead4076a chore: switch updater endpoints 2023-11-12 00:08:23 +08:00
keiko233
052893bbf8 fix: valid with unified-delay & tcp-concurrent 2023-11-11 22:34:30 +08:00
keiko233
a319fe8632 chore: delete current release assets 2023-11-11 22:27:28 +08:00
keiko233
8a84e68c13 feat: add baseContentIn animation 2023-11-11 19:34:03 +08:00
keiko233
0ca7defe83 feat: add route transition 2023-11-11 18:32:11 +08:00
keiko233
b704706ee9 feat: Material You! 2023-11-11 17:12:57 +08:00
keiko233
23fb634847 fix: touchpad scrolling causes blank area to appear 2023-11-11 15:03:41 +08:00
keiko233
0bd37eb8f9 chore: drop upload-artifact & use prerelease 2023-11-11 15:00:54 +08:00
keiko233
b86294e9cc chore: fix: typos
* ↑ baka
2023-11-10 11:50:01 +08:00
keiko233
f11f968f99 fix: typos 2023-11-10 11:35:38 +08:00
keiko233
ad81642954 fix: download clash core from backup repo 2023-11-10 11:26:05 +08:00
keiko233
ea42103ae7 chore: add dev workflow 2023-11-10 10:38:41 +08:00
keiko233
82435e37be feat: default disable ipv6 2023-11-10 09:10:15 +08:00
keiko233
b61d29b22a feat: default enable unified-delay & tcp-concurrent with use meta core 2023-11-10 09:08:17 +08:00
keiko233
04392a6a4c refactor: copy_clash_env 2023-11-09 10:52:52 +08:00
keiko233
6e9798d596 feat: support copy CMD & PowerShell proxy env 2023-11-09 09:58:17 +08:00
keiko233
bef553c9ae fix: use meta Country.mmdb 2023-11-09 09:35:41 +08:00
keiko233
7a76efa7a0 feat: default use meta core
* :)
2023-11-09 09:34:03 +08:00
keiko233
c5f64374ed feat: update Clash Default bypass addrs
*Enabling TUN will cause the local address to go through the proxy
2023-11-09 09:33:38 +08:00
GyDi
b767caa704 chore: fix check 2023-11-03 16:00:34 +08:00
GyDi
63974f97ab chore: fix check script 2023-11-03 15:52:36 +08:00
MZhao
37764a7caa feat: new windows tray icons (#899) 2023-11-03 15:01:46 +08:00
Aromia
fb586f0043 chore: update download links in README.md (#896) 2023-11-03 11:21:20 +08:00
Goooler
9990f4d8cf chore: bump github actions (#868)
https://github.com/actions/checkout/releases/tag/v4.0.0
https://github.com/actions/setup-node/releases/tag/v4.0.0
2023-11-02 20:14:05 +08:00
neovali
80f73cc5d0 chore: add fedora linux install description (#874) 2023-11-02 20:13:24 +08:00
GyDi
8775f67416 feat: support auto clean log files 2023-11-02 20:12:46 +08:00
GyDi
2ce302f6f8 fix: latency url empty 2023-11-01 23:22:30 +08:00
GyDi
69b9944b8e feat: increase the concurrency of latency test 2023-11-01 20:52:38 +08:00
GyDi
37f35e8b2d fix: change default port 2023-10-31 14:56:19 +08:00
GyDi
8ad9531fa6 fix: csp 2023-10-31 12:00:57 +08:00
GyDi
5ec37c08bf v1.3.8 2023-10-31 01:29:20 +08:00
GyDi
84cb008421 chore: update log 2023-10-31 01:28:57 +08:00
GyDi
a744cca35a fix: add default valid key 2023-10-30 17:10:51 +08:00
GyDi
1950cf5f99 fix: page null exception, close #821 2023-10-30 00:53:24 +08:00
GyDi
fbf230cd01 feat: adjust the delay display interval and color, close #836 2023-10-29 23:01:05 +08:00
keiko233
05abf1e419 chore: update dependencies 2023-10-22 00:44:01 +08:00
keiko233
f0c13980ed chore: tsconfig: skip Lib Check 2023-10-21 23:53:57 +08:00
keiko233
d136207d2f feat: theme: change color 2023-10-21 17:30:50 +08:00
keiko233
b331ee5d93 chore: update README.md 2023-10-21 17:02:13 +08:00
keiko233
73cd6e981a feat: profiles: import btn with loading state 2023-10-21 16:50:46 +08:00
keiko233
6826be73c7 feat: profile-viewer: handleOk with loading state 2023-10-21 16:47:39 +08:00
keiko233
0a61a607c9 feat: base-dialog: okBtn use LoadingButton 2023-10-21 16:47:10 +08:00
keiko233
7444e1566b chore: import MUI Lab 2023-10-21 16:43:30 +08:00
keiko233
e401661cfc chore: Update dependencies 2023-10-21 16:43:16 +08:00
keiko233
89d32f7109 feat: Nyanpasu Misc 2023-10-20 11:52:40 +08:00
keiko233
5b4c88f933 feat: Theme support modify --background-color 2023-10-20 11:12:49 +08:00
keiko233
966bce973a feat: settings use Grid layout 2023-10-20 10:05:03 +08:00
keiko233
69cbcae7ed chore: Use your own update endpoints and public keys 2023-10-19 09:37:31 +08:00
keiko233
e26cf282d6 chore: readme remove ad 2023-10-18 13:38:58 +08:00
GyDi
6ec7d55cbc chore: fix rust lint 2023-10-18 13:38:03 +08:00
GyDi
9888f2a322 chore: fix rust lint 2023-10-11 14:55:20 +08:00
GyDi
15d29b2c79 chore: fix alpha ci 2023-10-11 14:31:44 +08:00
GyDi
7e768e0a17 fix: try fix csp 2023-10-11 14:21:56 +08:00
GyDi
affa41b5a9 chore: update readme 2023-10-11 00:04:56 +08:00
keiko233
c8cf179ed9 feat: add Connections Info to ConnectionsPage
*Add Upload Traffic, Download Traffic and Active Connections to ConnectionsPage.
*IConnections uploadTotal and downloadTotal data missing not displayed, add it to ConnectionsPage interface here.
2023-10-10 17:05:31 +08:00
Majokeiko
9ef7310fc2 feat: ClashFieldViewer BaseDialog maxHeight usage percentage (#813)
*The overall interface will be more intuitive when the content is longer.
2023-10-10 14:29:27 +08:00
GyDi
cdd7d0f4c5 chore: update readme 2023-10-10 10:25:57 +08:00
GyDi
813d706dac chore: update readme 2023-10-10 10:25:01 +08:00
GyDi
223d4133c5 chore: update clash meta 2023-10-08 21:45:12 +08:00
GyDi
bb62ebc23e chore: update readme 2023-09-11 10:24:44 +08:00
GyDi
a4c2adf69a chore: fix updater 2023-09-11 10:16:54 +08:00
GyDi
0baff0a1e1 chore: fix updater 2023-09-11 10:12:40 +08:00
GyDi
51766ad72c chore: fix clash map, close #736 2023-09-10 19:06:02 +08:00
GyDi
bf00b42941 v1.3.7 2023-09-10 19:02:10 +08:00
GyDi
56482acfc2 chore: update log 2023-09-10 19:01:59 +08:00
GyDi
8898b1a608 chore: update auto launch 2023-09-10 18:45:17 +08:00
GyDi
525bc37649 fix: i18n 2023-09-10 15:03:29 +08:00
GyDi
9d29450f47 feat: add Open Dashboard to the hotkey, close #723 2023-09-10 14:46:03 +08:00
GyDi
26c98bdace feat: add check for updates button, close #766 2023-09-10 14:30:31 +08:00
GyDi
19ccd35f3f fix: fix page undefined exception, close #770 2023-09-10 13:45:18 +08:00
GyDi
efa7529c5c feat: add paste and clear icon 2023-09-09 16:52:00 +08:00
Majokeiko
334c11ccd1 feat: Subscription URL TextField use multiline (#761)
*Subscription link that are too long can make reading difficult, so use multiline TextField.
2023-09-07 16:14:42 +08:00
GyDi
c318a5dd79 chore: update mmdb 2023-08-28 15:06:13 +08:00
GyDi
25d1a8957d fix: set min window size, close #734 2023-08-28 15:00:27 +08:00
GyDi
9f4853b9d6 chore: change ubuntu ci version 2023-08-28 14:44:09 +08:00
GyDi
ac58f50b0a chore: update clash 2023-08-28 14:22:50 +08:00
GyDi
36f22b660e chore: update release link 2023-08-14 11:11:15 +08:00
GyDi
398046eca6 chore: update clash meta 2023-08-14 11:09:19 +08:00
GyDi
a6f2ce4bdd fix: rm debug code 2023-08-12 19:16:20 +08:00
GyDi
950a8ea8df v1.3.6 2023-08-12 16:12:03 +08:00
GyDi
2b6b979f88 chore: update log 2023-08-12 16:11:50 +08:00
GyDi
4b80e5ff47 fix: use sudo when pkexec not found 2023-08-12 15:58:37 +08:00
GyDi
a14d18c6b6 chore: update ci 2023-08-12 15:41:26 +08:00
GyDi
fe88c7ce97 feat: show loading when change profile 2023-08-05 22:07:30 +08:00
GyDi
c54b00a701 fix: remove div 2023-08-05 21:43:58 +08:00
GyDi
4a4b8c2e12 fix: list key 2023-08-05 21:43:05 +08:00
GyDi
f1770711cb feat: support proxy provider update 2023-08-05 21:38:44 +08:00
GyDi
94757f0f0c feat: add repo link 2023-08-05 19:54:59 +08:00
GyDi
15cf9be90d feat: support clash meta memory usage display 2023-08-05 19:40:23 +08:00
GyDi
cb1955c217 fix: websocket disconnect when window focus 2023-08-05 17:21:15 +08:00
GyDi
2ce944034d feat: supports show connection detail 2023-08-05 16:52:14 +08:00
GyDi
53a207e859 chore: update geo data to meta, close #707 2023-08-05 13:42:37 +08:00
GyDi
dbdd2411c3 chore: fix faq 2023-08-05 13:41:30 +08:00
GyDi
4ac3fbd726 chore: add faq and download link 2023-08-05 13:38:19 +08:00
GyDi
8f8f62555c chore: add promotion 2023-08-05 12:57:48 +08:00
whitemirror33
73b980c6a9 feat: update connection table with wider process column and click to show full detail (#696) 2023-08-04 14:36:28 +08:00
GyDi
d2cce3cc40 feat: more trace logs 2023-08-04 14:15:15 +08:00
Andrei Shevchuk
4139360788 feat: Add Russian Language (#697)
* Add Russian Language

* Add Russian support

* Minor update

* Update Russian translation
2023-08-03 11:07:58 +08:00
GyDi
ca7bb50212 fix: try fix undefined error 2023-07-28 09:26:06 +08:00
GyDi
48ebf626b8 chore: alpha ci 2023-07-26 17:07:20 +08:00
GyDi
564eb802b1 feat: center window when out of monitor 2023-07-24 20:55:26 +08:00
GyDi
c968949f49 chore: fix test ci 2023-07-24 09:59:13 +08:00
GyDi
74268ecce6 chore: fix test ci 2023-07-24 09:47:05 +08:00
GyDi
93f9db3af4 chore: test ci 2023-07-24 09:28:54 +08:00
GyDi
4cc0a9d4a9 chore: test ci 2023-07-24 09:13:19 +08:00
GyDi
a04dfba16b v1.3.5 2023-07-23 13:31:51 +08:00
GyDi
7f83b58b92 chore: update log 2023-07-23 13:31:34 +08:00
GyDi
ca2e6353ae fix: blurry tray icon in Windows 2023-07-23 13:25:54 +08:00
GyDi
6bf7795529 chore: update clash core 2023-07-23 13:11:35 +08:00
GyDi
401f4828b6 chore: fix check script 2023-07-23 13:11:17 +08:00
GyDi
7a0ce1efe7 chore: update issue templates 2023-07-22 23:04:13 +08:00
GyDi
cdc2550e34 v1.3.4 2023-07-22 20:38:08 +08:00
GyDi
2d760241f3 chore: update log 2023-07-22 20:37:22 +08:00
GyDi
3748e420a0 fix: enable context menu in editable element 2023-07-22 17:21:04 +08:00
GyDi
031a253101 feat: support copy environment variable 2023-07-22 15:35:32 +08:00
GyDi
cfce6d548b fix: save window size and pos in Windows 2023-07-22 13:13:16 +08:00
GyDi
038e93ea6a feat: save window size and position 2023-07-22 10:58:16 +08:00
GyDi
8028e145f1 feat: app log level add silent 2023-07-22 09:25:54 +08:00
GyDi
ddfb9fd0cc feat: overwrite resource file according to file modified 2023-07-22 09:18:54 +08:00
GyDi
a36ed6ab1e feat: support app log level settings 2023-07-22 08:53:37 +08:00
Kimiblock Moe
0c7fe0664e feat: Use polkit to elevate permission instaed of sudo (#678) 2023-07-21 23:05:33 +08:00
GyDi
7ae2f1980b chore: update check script 2023-07-11 13:25:55 +08:00
GyDi
0c89583b1b fix: optimize traffic graph high CPU usage when hidden 2023-07-10 23:44:09 +08:00
GyDi
f5ec43276a fix: remove fallback group select status, close #659 2023-07-10 23:16:19 +08:00
GyDi
e55e46011c chore: update clash 2023-07-10 13:36:17 +08:00
GyDi
77c0304faf feat: add unified-delay field 2023-06-30 13:58:51 +08:00
GyDi
ea476e26ae v1.3.3 2023-06-30 09:38:33 +08:00
GyDi
2eb47aef62 chore: update log 2023-06-30 09:35:49 +08:00
GyDi
3e4084d99c fix: error boundary with key 2023-06-30 09:17:59 +08:00
GyDi
955ac92043 chore: update clash meta 2023-06-30 09:02:26 +08:00
GyDi
5a65a07a39 fix: connections is null 2023-06-30 09:02:17 +08:00
GyDi
554d73c6ee fix: font family not works in some interfaces, close #639 2023-06-29 14:21:14 +08:00
GyDi
7bc7bc7c49 fix: encodeURIComponent secret 2023-06-29 14:15:57 +08:00
GyDi
7b8d47cdeb chore: update clash & clash meta 2023-06-08 13:52:40 +08:00
GyDi
63a8509f1f feat: add error boundary to the app root 2023-06-08 13:50:45 +08:00
GyDi
4e69454f72 fix: encode controller secret, close #601 2023-06-08 13:48:58 +08:00
GyDi
ec3e237093 fix: linux not change icon 2023-05-28 18:14:11 +08:00
GyDi
edd224a185 fix: try fix blank error 2023-05-28 17:35:00 +08:00
GyDi
b5142b8ef5 fix: close all connections when change mode 2023-05-28 17:07:39 +08:00
GyDi
ddfdf1d49d fix: macos not change icon 2023-05-28 16:46:17 +08:00
GyDi
e7675c29da chore: update deps 2023-05-28 16:45:43 +08:00
GyDi
0bf3fef431 chore: update clash 2023-05-28 16:44:07 +08:00
w568w
8cb0e81e89 feat: show tray icon variants in different status (#537) 2023-05-28 10:55:39 +08:00
GyDi
d468cb051d fix: error message null 2023-05-19 10:53:11 +08:00
GyDi
0b24be7532 chore: update gh proxy 2023-05-19 09:44:31 +08:00
GyDi
6316a0ede9 v1.3.2 2023-05-19 00:57:22 +08:00
GyDi
3c9d0e02f6 chore: update log 2023-05-19 00:57:10 +08:00
GyDi
02d4360526 fix: profile data undefined error, close #566 2023-05-18 20:02:46 +08:00
GyDi
aedf80e382 chore: update clash core 2023-05-05 20:45:52 +08:00
GyDi
51b492e1e2 chore: update deps 2023-05-05 20:27:46 +08:00
yettera765
d283f236db fix: import url error (#543)
use rustls instead of depending user's system tls
2023-05-05 12:08:08 +08:00
GyDi
371e937a0e v1.3.1 2023-04-11 10:04:55 +08:00
GyDi
5778c25477 chore: update log 2023-04-11 10:04:28 +08:00
Tatius Titus
d2cd3ec879 chore: Upgrade to React 18 (#495)
* chore: Upgrade to React 18

* runfix: Add children type to FC components

* chore: Remove @types/react
2023-04-07 12:59:44 +08:00
Mr-Spade
ba0a59629b fix: linux DEFAULT_BYPASS (#503) 2023-04-07 12:47:13 +08:00
GyDi
03fea7558d chore: update deps 2023-04-02 11:20:18 +08:00
GyDi
4901673c4e fix: open file with vscode 2023-04-02 11:19:48 +08:00
GyDi
a4d84bd2e8 chore: update deps 2023-04-02 10:09:14 +08:00
GyDi
0289218c92 chore: update clash meta 2023-04-02 09:43:32 +08:00
Tatius Titus
c3d32e59e7 fix: Do not render div as a descendant of p (#494) 2023-04-02 09:37:09 +08:00
Srinivas Gowda
8cab08351b chore: update clash core version (#476) 2023-03-27 10:59:27 +08:00
GyDi
5de0e58d5d fix: use replace instead 2023-03-17 08:37:45 +08:00
GyDi
438106f42e fix: escape path space 2023-03-17 08:36:19 +08:00
John Smith
6b21f38047 fix: escape the space in path (#451) 2023-03-17 08:20:35 +08:00
GyDi
1b07a5f3c0 fix: add target os linux 2023-03-16 23:57:34 +08:00
GyDi
a39ec5a061 chore: fix ci 2023-03-16 23:54:14 +08:00
GyDi
015df9e6dd fix: appimage path unwrap panic 2023-03-16 23:45:48 +08:00
GyDi
bf95284b72 v1.3.0 2023-03-16 21:33:51 +08:00
GyDi
07c04f0c2f chore: update log 2023-03-16 21:33:14 +08:00
GyDi
b9976ee68e feat: auto restart core after grand permission 2023-03-16 21:32:39 +08:00
GyDi
c8d9951ae4 feat: add restart core button 2023-03-16 20:56:37 +08:00
GyDi
97339512e1 fix: remove esc key listener in macOS 2023-03-16 20:42:45 +08:00
GyDi
95682a7a0b feat: support update all profiles 2023-03-16 20:32:41 +08:00
GyDi
87038c4c75 chore: rm file 2023-03-16 20:31:48 +08:00
GyDi
1e5b5193fe fix: adjust style 2023-03-16 19:32:59 +08:00
hybo
9cc47678a2 chore: evaluate error context lazily (#447) 2023-03-16 17:06:52 +08:00
GyDi
198109cd43 fix: adjust swr option 2023-03-16 17:03:12 +08:00
GyDi
16490541e4 fix: infinite retry when websocket error 2023-03-16 17:03:00 +08:00
GyDi
6d5ca25e03 fix: type error 2023-03-16 13:51:46 +08:00
GyDi
0ca44bd859 chore: update deps 2023-03-16 13:42:27 +08:00
GyDi
124b5b0549 chore: fix ci 2023-03-16 13:18:05 +08:00
GyDi
fed62fae3c chore: fix ci 2023-03-16 13:16:30 +08:00
GyDi
9e2812d55c feat: support to grant permission to clash core 2023-03-16 11:16:54 +08:00
GyDi
fdcbc3904a fix: do not parse log except the clash core 2023-03-16 10:34:28 +08:00
GyDi
cc0114cd90 feat: support clash fields filter in ui 2023-03-15 08:43:24 +08:00
GyDi
f97753c1d0 fix: field sort for filter 2023-03-15 08:43:03 +08:00
boatrainlsz
fcdf545a3c chore: update README (#435) 2023-03-07 22:55:38 +08:00
GyDi
bf28f887eb chore: update deps 2023-03-07 00:10:49 +08:00
GyDi
5f1f04e486 chore: update clash 2023-03-06 23:35:30 +08:00
GyDi
2242174749 fix: add meta fields 2023-02-18 00:46:03 +08:00
GyDi
e8af077fe2 chore: update clash 2023-02-18 00:09:40 +08:00
GyDi
055252f746 feat: open dir on the tray 2023-02-17 00:15:21 +08:00
GyDi
8dc84d7c17 fix: runtime config user select 2023-02-17 00:00:23 +08:00
GyDi
f140c75fb9 feat: support to disable clash fields filter 2023-02-16 23:52:55 +08:00
GyDi
c63dd46bac fix: app_handle as_ref 2023-02-15 17:25:35 +08:00
GyDi
a23b0ba945 fix: use crate 2023-02-11 23:31:55 +08:00
GyDi
7e768aa6e9 fix: appimage auto launch, close #403 2023-02-11 23:19:08 +08:00
inRm3D
18765508c0 chore: add openssl depend (#395) 2023-02-02 10:54:15 +08:00
GyDi
efb3464ee2 v1.2.3 2023-02-01 22:11:34 +08:00
GyDi
f3319c5f75 chore: update log 2023-02-01 22:11:06 +08:00
GyDi
384623fbb7 chore: aarch script 2023-02-01 21:41:15 +08:00
GyDi
3bcccdf3dd chore: update clash 2023-01-30 20:50:08 +08:00
GyDi
d9b913fa69 chore: meta ci 2023-01-30 20:40:57 +08:00
GyDi
7b9a430e8a chore: fix ci 2023-01-22 13:31:34 +08:00
GyDi
4f3ab0dc69 chore: fix ci 2023-01-19 18:02:08 +08:00
GyDi
427caaf9aa chore: alpha ci 2023-01-18 23:39:27 +08:00
inRm3D
85eefdebbb chore: try fix missing libssl3 (#378)
* Update ci.yml

* use package from source
2023-01-18 23:36:18 +08:00
GyDi
b31b70302b fix: compatible with UTF8 BOM, close #283 2023-01-17 19:51:02 +08:00
GyDi
c830ea676f feat: adjust macOS window style 2023-01-16 22:57:53 +08:00
GyDi
9249059cb7 fix: use selected proxy after profile changed 2023-01-15 21:33:03 +08:00
GyDi
9fee228d1a fix: error log 2023-01-15 19:11:51 +08:00
GyDi
20718c6ec1 chore: ci 2023-01-14 22:22:18 +08:00
GyDi
b8754f3f44 v1.2.2 2023-01-14 22:01:28 +08:00
GyDi
6f598ae59e chore: update log 2023-01-14 21:56:27 +08:00
GyDi
ca81fcaf37 fix: adjust fields order 2023-01-14 14:57:55 +08:00
GyDi
75867da94f fix: add meta fields 2023-01-14 14:51:29 +08:00
GyDi
53c11701de chore: ci 2023-01-14 12:20:17 +08:00
GyDi
4741793bb6 chore: update clash meta 2023-01-14 12:16:09 +08:00
GyDi
ab161a42ee fix: add os platform value 2023-01-14 12:07:31 +08:00
GyDi
4642b79b5b feat: recover core after panic, close #353 2023-01-14 11:45:47 +08:00
GyDi
1cb43fe110 chore: allow unused 2023-01-13 23:11:48 +08:00
GyDi
0123135237 fix: reconnect traffic websocket 2023-01-13 23:02:45 +08:00
GyDi
1d77f91acc chore: update deps 2023-01-13 21:29:21 +08:00
GyDi
9b89333b1b feat: use decorations in Linux, close #354 2023-01-12 00:42:33 +08:00
GyDi
829361d767 fix: parse bytes precision, close #334 2023-01-11 14:05:49 +08:00
GyDi
d3fca26499 fix: trigger new profile dialog, close #356 2023-01-11 13:45:16 +08:00
GyDi
ff3460e100 fix: parse log cause panic 2023-01-11 13:30:14 +08:00
GyDi
1a209a54c6 chore: update clash meta 2023-01-09 21:55:03 +08:00
GyDi
3bf0ac087f v1.2.1 2022-12-23 22:44:27 +08:00
GyDi
96cf6215ce chore: update log 2022-12-23 22:44:00 +08:00
GyDi
71ce6120c3 fix: avoid setting login item repeatedly, close #326 2022-12-23 22:39:27 +08:00
GyDi
21e82d0daa fix: adjust code 2022-12-15 21:54:48 +08:00
GyDi
8c20bb003b fix: adjust delay check concurrency 2022-12-15 12:23:57 +08:00
GyDi
90913d2486 chore: adjust code 2022-12-15 12:22:20 +08:00
GyDi
ef0de04a0f fix: change default column to auto 2022-12-14 16:56:33 +08:00
GyDi
8879a0ce8a fix: change default app version 2022-12-14 16:15:53 +08:00
GyDi
18db46800e fix: adjust rule ui 2022-12-14 15:59:41 +08:00
GyDi
955c5b5605 fix: adjust log ui 2022-12-14 15:49:05 +08:00
GyDi
c3b2c88213 fix: keep delay data 2022-12-14 15:29:02 +08:00
GyDi
7412bb35ad fix: use list item button 2022-12-14 15:16:49 +08:00
GyDi
2a6fbc5c5d fix: proxy item style 2022-12-14 15:15:44 +08:00
GyDi
90c9b87f8d feat: auto proxy layout column 2022-12-14 15:07:51 +08:00
GyDi
ffe2557e84 chore: fix ci 2022-12-13 18:13:28 +08:00
GyDi
a77798e5b4 chore: fix ci 2022-12-13 18:11:43 +08:00
GyDi
c1fa7bfce6 chore: fix ci 2022-12-13 18:02:23 +08:00
GyDi
bf50da1e6b chore: alpha ci 2022-12-13 17:44:46 +08:00
GyDi
2cd4aac5ce chore: alpha ci 2022-12-13 17:41:53 +08:00
GyDi
208b96c092 feat: support to change proxy layout column 2022-12-13 17:34:39 +08:00
GyDi
36a53f8134 feat: support to open core dir 2022-12-13 00:44:24 +08:00
GyDi
e8d8a8737e chore: update deps 2022-12-12 00:00:45 +08:00
MoeShin
41b9f90a0b fix: Virtuoso no work in legacy browsers (#318) 2022-12-08 10:47:42 +08:00
GyDi
5e39493e89 chore: update deps 2022-12-04 20:54:43 +08:00
GyDi
31f3c60401 fix: adjust ui 2022-12-04 00:45:39 +08:00
GyDi
519c74e4dd feat: profile page ui 2022-11-28 22:29:58 +08:00
GyDi
4419770b15 chore: deps 2022-11-28 22:27:23 +08:00
GyDi
b7fa86c848 chore: update clash version 2022-11-26 13:25:52 +08:00
GyDi
4d620c3db9 fix: refresh websocket 2022-11-25 22:22:57 +08:00
GyDi
319c8cb54c fix: adjust ui 2022-11-24 18:24:34 +08:00
GyDi
868b6f141c feat: save some fields in the runtime config, close #292 2022-11-24 17:52:25 +08:00
GyDi
589fdd4cfe chore: alpha ci 2022-11-24 11:14:03 +08:00
GyDi
3f36dd9a14 fix: parse bytes base 1024 2022-11-24 11:11:31 +08:00
GyDi
0a6568bbab fix: add clash fields 2022-11-24 10:46:21 +08:00
GyDi
4e26d56746 chore: ci 2022-11-24 10:41:03 +08:00
GyDi
d4e363fbd7 chore: ci 2022-11-24 10:35:22 +08:00
GyDi
b721b822eb fix: direct mode hide proxies 2022-11-24 10:35:09 +08:00
GyDi
58d6985080 feat: add meta feature 2022-11-24 10:26:41 +08:00
GyDi
ee2abd415e fix: profile can not edit 2022-11-24 10:26:25 +08:00
GyDi
09c9321159 chore: ci 2022-11-23 23:46:32 +08:00
GyDi
0900a7cf80 v1.2.0 2022-11-23 23:15:39 +08:00
GyDi
d3ec7f65fb chore: ci 2022-11-23 23:15:20 +08:00
GyDi
b24a94d6ce chore: update log 2022-11-23 23:13:44 +08:00
GyDi
65769c7766 feat: display proxy group type 2022-11-23 18:27:57 +08:00
GyDi
cbeef9fe06 chore: rm dead code 2022-11-23 17:45:49 +08:00
GyDi
b199209d0d fix: parse logger time 2022-11-23 17:45:43 +08:00
GyDi
cb48545600 fix: adjust service mode ui 2022-11-23 17:45:22 +08:00
GyDi
5e626e2cc5 feat: add use clash hook 2022-11-23 17:44:40 +08:00
GyDi
2709d1ff6e fix: adjust style 2022-11-23 17:42:01 +08:00
GyDi
de3ca6e237 fix: check hotkey and optimize hotkey input, close #287 2022-11-23 17:30:19 +08:00
GyDi
c2253e868c fix: mutex dead lock 2022-11-23 16:04:25 +08:00
GyDi
3a77c6f7eb fix: adjust item ui 2022-11-23 15:29:42 +08:00
GyDi
8e3ff7670b fix: regenerate config before change core 2022-11-23 09:57:21 +08:00
GyDi
7870147c16 fix: close connections when profile change 2022-11-23 00:20:57 +08:00
GyDi
64a371e5d8 fix: lint 2022-11-22 23:02:18 +08:00
GyDi
f837736a20 chore: fix check script 2022-11-22 23:01:04 +08:00
GyDi
dec503da81 fix: windows service mode 2022-11-22 22:01:34 +08:00
GyDi
1328299fda fix: init config file 2022-11-22 22:01:19 +08:00
GyDi
05190a52f1 chore: fix mmdb url 2022-11-22 21:15:45 +08:00
GyDi
46cc3105c4 fix: service mode error and fallback to sidecar 2022-11-22 20:47:21 +08:00
GyDi
8ba5853cdd fix: service mode viewer ui 2022-11-22 20:45:17 +08:00
GyDi
e5fbcc4a8c chore: update check script 2022-11-22 20:44:44 +08:00
GyDi
e559194e8e fix: create theme error, close #294 2022-11-22 16:01:33 +08:00
GyDi
c0d2994b8e feat: guard the mixed-port and external-controller 2022-11-22 15:45:17 +08:00
GyDi
89009aa1f8 feat: adjust builtin script and support meta guard script 2022-11-22 12:00:48 +08:00
MoeShin
ee8b580a98 fix: matchMedia().addEventListener #258 (#296) 2022-11-22 09:25:39 +08:00
GyDi
f4656fa493 chore: alpha release add portable 2022-11-22 00:16:30 +08:00
GyDi
adf9405fd7 chore: alpha ci 2022-11-21 23:19:25 +08:00
GyDi
f46db7ce1a fix: check config 2022-11-21 23:11:56 +08:00
GyDi
f00d726347 fix: show global when no rule groups 2022-11-21 23:06:32 +08:00
GyDi
e8d8063ebc fix: service viewer ref 2022-11-21 23:02:48 +08:00
GyDi
b4bc4f5ddc fix: service ref error 2022-11-21 22:33:06 +08:00
GyDi
0d3ffe210f feat: disable script mode when use clash meta 2022-11-21 22:28:57 +08:00
GyDi
8eb88a161a feat: check config when change core 2022-11-21 22:27:55 +08:00
GyDi
346c964419 fix: group proxies render list is null 2022-11-21 22:10:24 +08:00
GyDi
bc8be2460f feat: support builtin script for enhanced mode 2022-11-21 21:05:00 +08:00
GyDi
a33f24d19c chore: update ci 2022-11-20 23:17:05 +08:00
GyDi
8f839fbf8e chore: update ci node version 2022-11-20 23:14:43 +08:00
GyDi
10dd9101cd fix: pretty bytes 2022-11-20 23:08:30 +08:00
GyDi
aa5d3af8a1 feat: adjust profiles page ui 2022-11-20 22:37:34 +08:00
GyDi
dace993c21 refactor: adjust base components export 2022-11-20 22:03:55 +08:00
GyDi
32b72f0ef6 refactor: adjust setting dialog component 2022-11-20 21:48:39 +08:00
GyDi
3dbc54c8ae fix: use verge hook 2022-11-20 20:12:58 +08:00
GyDi
9dd3b8fd68 feat: optimize proxy page ui 2022-11-20 19:46:16 +08:00
GyDi
5fb1afc681 chore: adjust type 2022-11-19 17:22:29 +08:00
GyDi
a4c985a219 fix: adjust notice 2022-11-19 01:24:07 +08:00
GyDi
a1f819a458 feat: add error boundary 2022-11-19 01:22:19 +08:00
GyDi
166d7ba1cf chore: rm polyfill 2022-11-19 01:22:00 +08:00
GyDi
a089accd23 feat: adjust clash log 2022-11-18 22:08:06 +08:00
GyDi
38546e557f fix: windows issue 2022-11-18 20:15:34 +08:00
GyDi
080dca7ee0 fix: change dev log level 2022-11-18 18:37:29 +08:00
GyDi
a89e433f3d fix: patch clash config 2022-11-18 18:37:17 +08:00
GyDi
f30ef61b06 fix: cmds params 2022-11-18 18:26:55 +08:00
GyDi
03a36c1100 Merge branch 'refactor' 2022-11-18 18:21:49 +08:00
GyDi
546eb6e73e chore: rm code 2022-11-18 18:19:26 +08:00
GyDi
bedd3abf8a refactor: done 2022-11-18 18:18:41 +08:00
GyDi
ce2d4498e1 refactor: adjust all path methods and reduce unwrap 2022-11-18 10:26:39 +08:00
GyDi
a786023160 fix: adjust singleton detect 2022-11-18 08:24:27 +08:00
GyDi
98cf8aa445 fix: change template 2022-11-18 08:04:26 +08:00
GyDi
d733d9fd4c refactor: rm code 2022-11-17 23:21:13 +08:00
GyDi
58e9cb8b93 refactor: fix 2022-11-17 22:53:41 +08:00
GyDi
bb669acf95 refactor: rm dead code 2022-11-17 22:52:22 +08:00
GyDi
4f3751b7ce refactor: for windows 2022-11-17 20:19:40 +08:00
GyDi
84c12dee80 refactor: wip 2022-11-17 17:07:13 +08:00
GyDi
f5f865a139 refactor: wip 2022-11-16 01:26:41 +08:00
GyDi
902aed671a refactor: wip 2022-11-15 01:33:50 +08:00
GyDi
1423fe7e16 refactor: rm update item block_on 2022-11-14 23:07:51 +08:00
GyDi
58ed2e6f33 refactor: fix 2022-11-14 22:50:47 +08:00
GyDi
a90939f46a fix: copy resource file 2022-11-14 21:11:42 +08:00
GyDi
db7456b9c5 chore: tmpl add clash core 2022-11-14 21:10:29 +08:00
GyDi
a964b30c34 feat: add draft 2022-11-14 19:31:22 +08:00
GyDi
d566629d51 refactor: fix 2022-11-14 01:45:58 +08:00
GyDi
837422fbb8 refactor: wip 2022-11-14 01:26:33 +08:00
GyDi
afc37c71a6 fix: MediaQueryList addEventListener polyfill 2022-11-13 10:27:26 +08:00
GyDi
e8b014ea6d chore: fix ci 2022-11-12 17:07:47 +08:00
GyDi
b124512020 chore: alpha ci 2022-11-12 17:06:26 +08:00
GyDi
158f352328 chore: lock version 2022-11-12 17:06:18 +08:00
GyDi
f1895e32fb chore: fix ci 2022-11-12 16:54:57 +08:00
GyDi
6c3be01093 chore: alpha ci 2022-11-12 16:47:27 +08:00
GyDi
ebe548438c fix: change default tun dns-hijack 2022-11-12 11:48:02 +08:00
GyDi
a45c61f19e chore: format rust code 2022-11-12 11:37:23 +08:00
GyDi
b07a4b95aa fix: something 2022-11-11 22:45:32 +08:00
GyDi
777b4e13e6 chore: update deps 2022-11-11 21:28:34 +08:00
GyDi
92cfc9324d feat: change default latency test url 2022-11-11 01:24:18 +08:00
GyDi
97dfa18b9b fix: provider proxy sort by delay 2022-11-11 01:21:23 +08:00
GyDi
515c07ea2b chore: rm dead code 2022-11-10 22:58:46 +08:00
GyDi
4d17e45f86 chore: clash meta compatible and geosite.dat 2022-11-10 22:58:34 +08:00
GyDi
32095daf90 feat: auto close connection when proxy changed 2022-11-10 01:27:05 +08:00
GyDi
aa23ed892b fix: profile item menu ui dense 2022-11-09 15:53:42 +08:00
GyDi
3f079c8501 fix: disable auto scroll to proxy 2022-11-09 11:44:09 +08:00
GyDi
0aaf4bfde8 feat: support to change external controller 2022-11-06 23:23:26 +08:00
GyDi
b967cfc775 feat: add sub-rules 2022-11-05 15:50:06 +08:00
GyDi
2ca0483bf4 feat(macOS): support cmd+w and cmd+q 2022-11-04 00:51:46 +08:00
GyDi
03cedc7b35 chore: update clash meta 2022-11-04 00:36:32 +08:00
GyDi
35049b5830 chore: fix ci 2022-11-03 01:34:23 +08:00
GyDi
b707dde4da chore: compatible ci 2022-11-03 01:32:16 +08:00
GyDi
1ec8339b13 chore: update ci 2022-11-03 01:15:50 +08:00
GyDi
8bbe04a174 chore: test ci 2022-11-03 00:51:49 +08:00
GyDi
0b6a173ba0 chore: test ci 2022-11-03 00:48:27 +08:00
GyDi
8b41dfe94f chore: add x 2022-11-02 00:57:27 +08:00
GyDi
a18b1ac99b v1.1.2 2022-11-02 00:54:51 +08:00
GyDi
e007bcb640 fix: check remote profile 2022-11-02 00:51:25 +08:00
GyDi
1090e7ceae chore: update log 2022-11-02 00:44:45 +08:00
GyDi
933035dd7e feat: add version on tray 2022-11-01 23:29:59 +08:00
GyDi
aaaac78170 feat: add animation 2022-10-29 23:36:10 +08:00
GyDi
b5d2392def fix: remove smoother 2022-10-29 20:05:55 +08:00
angrylid
b88a736735 feat: add animation to ProfileNew component (#252)
* chore: add .vscode to .gitignore

* feat: add animation to ProfileNew component
2022-10-29 20:02:51 +08:00
GyDi
f238da416b fix: icon button color 2022-10-29 19:22:15 +08:00
GyDi
10c7e75491 feat: check remote profile field 2022-10-28 13:00:52 +08:00
GyDi
60af0735f4 fix: init system proxy correctly 2022-10-28 01:33:21 +08:00
GyDi
273cbf333e fix: open file 2022-10-28 01:26:45 +08:00
GyDi
189b17ad8f fix: reset proxy 2022-10-28 01:06:54 +08:00
GyDi
1eecf26429 fix: init config error 2022-10-28 01:02:47 +08:00
GyDi
2f9a3fa942 feat: system tray support zh language 2022-10-28 00:40:29 +08:00
GyDi
f166fb132e fix: adjust reset proxy 2022-10-27 21:14:14 +08:00
GyDi
0adb69139e fix: adjust code 2022-10-27 21:13:27 +08:00
GyDi
ab309e4b90 fix: add https proxy 2022-10-26 17:11:54 +08:00
GyDi
532c6d4fa5 fix: auto scroll into view when sorted proxies changed 2022-10-26 01:24:06 +08:00
GyDi
14f627d0d3 feat: display delay check result timely 2022-10-26 01:11:02 +08:00
GyDi
947c38c124 fix: refresh proxies interval, close #235 2022-10-26 01:08:34 +08:00
GyDi
f991e49203 fix: style 2022-10-25 23:54:21 +08:00
GyDi
4fbb6ed4ff chore: update deps 2022-10-25 23:54:10 +08:00
GyDi
2fa49303de fix: fetch profile with system proxy, close #249 2022-10-25 23:45:24 +08:00
LooSheng
f9527e9d2d fix: The profile is replaced when the request fails. (#246) 2022-10-23 17:22:26 +08:00
GyDi
80c63cb9d6 fix: default dns config 2022-10-22 22:26:40 +08:00
GyDi
a2455eeade fix: kill clash when exit in service mode, close #241 2022-10-22 13:55:06 +08:00
GyDi
5d7ad4b3bd chore: update mmdb 2022-10-22 13:30:08 +08:00
GyDi
f46fa61cf3 feat: update profile with system proxy/clash proxy 2022-10-18 23:19:21 +08:00
GyDi
da24a9637b chore: adjust code 2022-10-17 23:26:25 +08:00
GyDi
2cdc11c2ad fix: icon button color inherit 2022-10-16 14:40:45 +08:00
GyDi
191cd3f25c fix: app version to string 2022-10-16 14:38:57 +08:00
GyDi
f158bce8bd fix: break loop when core terminated 2022-10-14 14:46:15 +08:00
GyDi
94eebb2dd6 feat: change global mode ui, close #226 2022-10-13 11:54:52 +08:00
GyDi
375b146690 feat: default user agent same with app version 2022-10-12 11:28:47 +08:00
GyDi
8c13214ff2 v1.1.1 2022-10-11 23:03:12 +08:00
GyDi
681dfadb57 chore: update log 2022-10-11 23:02:49 +08:00
GyDi
b8b5d1cb09 fix: api error handle 2022-10-11 22:51:18 +08:00
GyDi
e187dd86ed fix: clash meta not load geoip, close #212 2022-10-11 22:24:54 +08:00
GyDi
c380d6988c fix: sort proxy during loading, close #221 2022-10-11 22:06:55 +08:00
GyDi
444acc8ef5 fix: not create windows when enable slient start 2022-10-11 21:50:00 +08:00
GyDi
068f08aa45 fix: root background color 2022-10-11 20:49:03 +08:00
GyDi
bdc101f69c fix: create window correctly 2022-10-11 00:57:34 +08:00
GyDi
0ece530b9e fix: set_activation_policy 2022-10-10 22:15:21 +08:00
GyDi
5853a86091 chore: rm aarch64 ci 2022-09-28 18:50:33 +08:00
GyDi
20ba87bc88 chore: test ci 2022-09-28 17:26:32 +08:00
GyDi
be166ec158 chore: test ci 2022-09-28 17:12:27 +08:00
GyDi
02147891c2 chore: fix ci 2022-09-28 16:04:05 +08:00
GyDi
c08cd588eb chore: fix test ci 2022-09-28 15:19:50 +08:00
Particle_G
882bb564b1 chore: add support for windows arm64, close #216 (#209) 2022-09-28 15:13:24 +08:00
GyDi
18edf06a20 fix: disable spell check 2022-09-28 14:15:22 +08:00
苏业钦
68b52b6130 chore: add support linux arm64 (#215) 2022-09-28 10:40:41 +08:00
GyDi
3503f3eb4b chore: clash meta linux use compatible version 2022-09-27 00:16:22 +08:00
GyDi
a75706f329 feat: optimize config feedback 2022-09-26 20:46:29 +08:00
GyDi
29fe9d973c fix: adjust init launch on dev 2022-09-26 01:35:19 +08:00
GyDi
87d3320fa1 v1.1.0 2022-09-26 01:27:56 +08:00
GyDi
0b96dbc04c chore: update log 2022-09-26 01:27:32 +08:00
GyDi
55ed58c4a0 fix: ignore disable auto launch error 2022-09-26 01:09:05 +08:00
GyDi
8503e8c9ad fix(macos): set auto launch path to application 2022-09-25 23:36:55 +08:00
GyDi
fcdf783c40 fix: i18n 2022-09-25 01:41:46 +08:00
GyDi
008b92acb2 feat: show connections with table layout 2022-09-25 01:35:21 +08:00
GyDi
baf8ef8516 fix: style 2022-09-24 20:55:40 +08:00
GyDi
0cf89467e3 fix: save enable log on localstorage 2022-09-24 19:03:14 +08:00
Priestch
37d8a563c0 fix: typo in api.ts (#207) 2022-09-24 18:48:11 +08:00
GyDi
f3de93d73a chore: use ubuntu latest 2022-09-24 16:08:39 +08:00
GyDi
4de23bd160 feat: show loading on proxy group delay check 2022-09-24 15:31:09 +08:00
GyDi
29397ca04f fix: refresh clash ui await patch 2022-09-24 14:01:28 +08:00
Shun Li
6038a36532 feat: add chains[0] and process to connections display (#205)
* add chains[0] display

* add metadata.process to connections
2022-09-24 13:06:32 +08:00
GyDi
186a922d06 refactor(hotkey): use tauri global shortcut 2022-09-23 15:31:01 +08:00
GyDi
be1f9e66e3 feat: adjust connection page ui 2022-09-23 00:08:52 +08:00
GyDi
9ac015e550 Merge pull request #197 from FoundTheWOUT/main
Support ordering connection
2022-09-22 22:55:46 +08:00
GyDi
f7a9ac0ba2 feat: yaml merge key 2022-09-21 22:15:24 +08:00
GyDi
39a8ddcfec feat: toggle log ws 2022-09-20 22:15:28 +08:00
GyDi
3a9e28ba48 chore: update deps 2022-09-20 21:26:38 +08:00
GyDi
b6a479355e feat: add rule page 2022-09-18 23:19:02 +08:00
GyDi
a791c964e8 feat: hotkey viewer 2022-09-18 15:52:53 +08:00
GyDi
9686a7f9bf feat: refresh ui when hotkey clicked 2022-09-18 15:50:03 +08:00
FoundTheWOUT
6b65b89350 Support ordering connection 2022-09-15 15:52:12 +08:00
GyDi
09a1915ec6 feat: support hotkey (wip) 2022-09-14 01:19:02 +08:00
GyDi
3424c421a4 fix: remove dead code 2022-09-12 13:42:21 +08:00
GyDi
77b89b6841 fix: style 2022-09-12 13:42:13 +08:00
GyDi
09807cfcad fix: handle is none 2022-09-12 00:45:19 +08:00
GyDi
6ca81df40c fix: unused 2022-09-12 00:02:25 +08:00
GyDi
2d00ddad2b refactor: optimize 2022-09-11 20:58:55 +08:00
GyDi
04f4934adb fix: style 2022-09-11 18:38:51 +08:00
GyDi
0593007fd0 fix: windows logo size 2022-09-11 17:50:58 +08:00
GyDi
c07cbf9dbb feat: hide window on macos 2022-09-09 16:42:35 +08:00
GyDi
ddd60aa1ff fix: do not kill sidecar during updating 2022-09-09 16:33:04 +08:00
GyDi
b5ecdbbc48 fix: delay update config 2022-09-09 16:30:27 +08:00
GyDi
0cca613b04 fix: reduce logo size 2022-09-09 16:19:13 +08:00
GyDi
b254ad177a feat: system proxy setting 2022-09-07 01:51:43 +08:00
GyDi
4fd9213d2c fix: window center 2022-09-06 22:18:06 +08:00
GyDi
982d1e219c chore: update resource 2022-09-06 15:32:22 +08:00
GyDi
3923b8631d fix: log level warn value 2022-09-06 14:42:58 +08:00
GyDi
72dcdf4483 feat: change default singleton port and support to change the port 2022-09-06 00:45:01 +08:00
GyDi
5f3a71ed5f feat: log info 2022-09-05 20:30:39 +08:00
GyDi
000d6ebcd0 feat: kill clash by pid 2022-09-05 16:30:29 +08:00
GyDi
7f0a04e3e3 feat: change clash port in dialog 2022-09-05 02:12:25 +08:00
GyDi
005c6bb9f1 feat: add proxy item check loading 2022-09-04 23:53:48 +08:00
GyDi
59c856fc0e feat: compatible with proxy providers health check 2022-09-04 22:55:54 +08:00
GyDi
5bf26619ee v1.0.6 2022-09-03 00:40:50 +08:00
GyDi
676c1d560b chore: update log 2022-09-03 00:39:39 +08:00
GyDi
5afaa7c079 chore: update deps 2022-09-02 23:06:00 +08:00
GyDi
b0b49b72b8 chore: update deps 2022-09-02 01:35:06 +08:00
GyDi
e7600458a9 chore: use ubuntu 18.04 2022-09-02 01:27:06 +08:00
GyDi
e0fa308984 feat: add empty ui 2022-09-02 01:09:38 +08:00
GyDi
6ce6fed10d feat: complete i18n 2022-09-02 01:05:45 +08:00
GyDi
b23ca2e138 fix: increase delay checker concurrency 2022-09-02 00:41:43 +08:00
GyDi
2798dc3d42 fix: external controller allow lan 2022-09-02 00:24:19 +08:00
GyDi
0586d4d7a9 chore: update clash meta version 2022-09-02 00:11:52 +08:00
GyDi
d2b3a52424 fix: remove useless optimizations 2022-08-31 21:44:23 +08:00
GyDi
ffb97242d9 chore: test ci 2022-08-29 17:26:09 +08:00
GyDi
13ab400d6d chore: update clash 2022-08-29 11:11:55 +08:00
GyDi
db6d47b3f3 chore: add test ci os version 2022-08-29 11:02:14 +08:00
GyDi
393943bb9f Merge branch 'main' of github.com:zzzgydi/clash-verge 2022-08-24 22:41:36 +08:00
GyDi
4c72ac14e6 chore: update auto launch 2022-08-24 22:41:12 +08:00
GyDi
7156871412 fix: reduce unsafe unwrap 2022-08-23 15:19:04 +08:00
FoundTheWOUT
20665a49ed fix: timer restore at app launch 2022-08-23 10:35:36 +08:00
GyDi
ad1dfc3137 fix: adjust log text 2022-08-19 17:11:59 +08:00
GyDi
8de67411ac fix: only script profile can display console 2022-08-17 01:45:37 +08:00
GyDi
2e75c9951b v1.0.5 2022-08-16 23:56:29 +08:00
GyDi
77f66f44a4 chore: update log 2022-08-16 23:56:04 +08:00
GyDi
3278a397f4 fix: fill button title attr 2022-08-16 23:46:33 +08:00
GyDi
d1c2abbaf3 feat: windows portable version do not check update 2022-08-16 01:53:40 +08:00
GyDi
8a443013c0 fix: do not reset system proxy when consistent 2022-08-16 01:27:32 +08:00
GyDi
d3735c4763 fix: adjust web ui item style 2022-08-16 01:08:54 +08:00
GyDi
f9887434d1 fix: clash field state error 2022-08-16 00:48:06 +08:00
GyDi
12afa005d9 feat: adjust clash info parsing logs 2022-08-15 20:21:43 +08:00
GyDi
7c0129b911 fix: badge color error 2022-08-15 20:15:44 +08:00
GyDi
332f92d08e fix: web ui port value error 2022-08-15 20:14:33 +08:00
GyDi
281ac16dca fix: delay show window 2022-08-15 01:37:26 +08:00
GyDi
e8a2b9446d feat: adjust runtime config 2022-08-15 01:30:37 +08:00
GyDi
4e33f3e722 feat: support restart app on tray 2022-08-15 01:22:39 +08:00
GyDi
e46e60153d fix: adjust dialog action button variant 2022-08-15 00:55:35 +08:00
GyDi
d3559bb1b7 feat: optimize profile page 2022-08-14 23:10:19 +08:00
GyDi
c8a046996b fix: script code error 2022-08-12 23:41:25 +08:00
GyDi
6c85b8717f fix: script exception handle 2022-08-12 11:14:34 +08:00
GyDi
142a62e371 feat: refactor 2022-08-12 03:20:55 +08:00
GyDi
ff6abf08b7 feat: adjust tun mode config 2022-08-11 03:26:08 +08:00
GyDi
2fd921cd60 feat: reimplement enhanced mode 2022-08-11 02:55:10 +08:00
GyDi
1d7bd57357 feat: use rquickjs crate 2022-08-10 13:05:48 +08:00
GyDi
1a4d76b4c3 feat: reimplement enhanced mode 2022-08-09 21:15:55 +08:00
GyDi
853d869086 chore: format 2022-08-09 14:33:47 +08:00
GyDi
c99d669b06 fix: change fields 2022-08-09 14:31:59 +08:00
FoundTheWOUT
19d3921637 fix: silent start (#150) 2022-08-09 14:14:06 +08:00
GyDi
4ee716457f fix: save profile when update 2022-08-08 23:17:22 +08:00
GyDi
5fb19bb187 fix: list compare wrong 2022-08-08 23:16:28 +08:00
GyDi
8b83c5349d fix: button color 2022-08-08 23:15:05 +08:00
GyDi
ac91942452 chore: rm code 2022-08-08 22:30:13 +08:00
GyDi
5ef23ddc1d fix: limit theme mode value 2022-08-08 22:28:44 +08:00
GyDi
2ad6c66a8d feat: finish clash field control 2022-08-08 22:14:03 +08:00
GyDi
630f877e95 feat: clash field viewer wip 2022-08-08 01:51:30 +08:00
GyDi
7dd5ce1356 fix: add valid clash field 2022-08-07 20:52:50 +08:00
GyDi
54b18d15b6 feat: support web ui 2022-08-06 21:56:54 +08:00
GyDi
2b0880af80 feat: adjust setting page style 2022-08-06 03:48:03 +08:00
GyDi
786ea17f95 refactor: ts path alias 2022-08-06 02:35:11 +08:00
GyDi
c699bae99c fix: icon style 2022-08-06 01:44:33 +08:00
GyDi
588e8e019c fix: reduce unwrap 2022-07-30 23:32:52 +08:00
GyDi
1e7a86b7c0 feat: runtime config viewer 2022-07-25 01:20:13 +08:00
GyDi
2bb18b18b7 chore: fix updater script 2022-07-18 12:55:59 +08:00
GyDi
da77c549a7 v1.0.4 2022-07-17 17:56:07 +08:00
GyDi
fc707c157a chore: update log 2022-07-17 17:52:41 +08:00
GyDi
5be6f550be feat: improve log rule 2022-07-17 17:39:44 +08:00
GyDi
66abf27edd fix: import mod 2022-07-17 16:51:54 +08:00
GyDi
3d1b6d7de7 feat: theme mode support follows system 2022-07-17 16:02:17 +08:00
GyDi
115e604627 chore: update deps 2022-07-17 14:54:09 +08:00
GyDi
f9aeec8eb5 refactor: mode manage on tray 2022-07-13 02:26:54 +08:00
GyDi
acf4d15a8d chore: rm code 2022-07-13 01:07:29 +08:00
GyDi
e5e08d1762 fix: add tray separator 2022-07-13 01:05:53 +08:00
GyDi
178c7817fa Merge pull request #128 from Limsanity/main
feat: support switch proxy mode
2022-07-13 01:02:14 +08:00
limsanity
a93a428a89 style: resolve formatting problem 2022-07-13 00:54:47 +08:00
limsanity
d126a361e1 feat(system tray): support switch rule/global/direct/script mode in system tray 2022-07-13 00:43:27 +08:00
GyDi
9e42ec0c06 chore: update deps 2022-07-11 00:41:21 +08:00
GyDi
1f05654faa chore: update clash version 2022-07-08 01:42:14 +08:00
GyDi
3ddef6440a chore: update aarch rule 2022-07-07 02:54:20 +08:00
GyDi
036b47acbc chore: aarch upload script 2022-07-07 02:53:53 +08:00
GyDi
42e585e7a2 fix: instantiate core after init app, close #122 2022-07-06 15:14:33 +08:00
GyDi
93d066bef7 chore: update clash version 2022-07-06 00:54:01 +08:00
GyDi
580c6fca00 chore: update deps 2022-07-06 00:49:09 +08:00
GyDi
03300da93a fix: rm macOS transition props 2022-07-05 01:24:23 +08:00
GyDi
2a1fc38799 chore: update deps 2022-07-05 00:52:22 +08:00
GyDi
646afbfa36 chore: change tray icon 2022-06-22 01:26:25 +08:00
GyDi
45a1435ce7 v1.0.3 2022-06-20 02:09:12 +08:00
GyDi
f4d7d32fd7 chore: update log 2022-06-20 02:06:46 +08:00
GyDi
1b00f93091 chore: update clash version 2022-06-20 01:47:15 +08:00
GyDi
9c9e5a54a7 fix: improve external-controller parse and log 2022-06-20 01:36:56 +08:00
GyDi
4cf8c9c477 chore: update macos icon 2022-06-18 18:41:53 +08:00
GyDi
a78e1d7f2b fix: show windows on click 2022-06-18 17:28:37 +08:00
GyDi
00c1d6c42c chore: new logo for mac 2022-06-18 17:28:05 +08:00
GyDi
5d92f09449 chore: update alpha ci 2022-06-17 01:18:19 +08:00
GyDi
ac7d820e6f chore: update tauri 2022-06-17 01:16:46 +08:00
GyDi
7d752443ca fix: adjust update profile notice error 2022-06-15 02:42:04 +08:00
GyDi
3311b5a6e3 fix: style issue on mac 2022-06-15 02:41:37 +08:00
GyDi
3801443c9c chore: update version 2022-06-15 01:15:05 +08:00
GyDi
9b2a2eb229 feat: improve yaml file error log 2022-06-14 01:40:02 +08:00
GyDi
d165f66815 chore: update deps 2022-06-14 01:23:58 +08:00
GyDi
6715d52b81 Merge pull request #104 from FoundTheWOUT/main
fix: check script run on all OS
2022-06-12 22:25:05 +08:00
FoundTheWOUT
ae160556d0 fix: check script run on all OS 2022-06-05 23:55:41 +08:00
GyDi
c040e1f9b7 feat: save proxy page state 2022-06-04 18:55:39 +08:00
GyDi
db14a8ac1a chore: portable script 2022-06-02 00:56:05 +08:00
GyDi
9beafd03ee chore: updater script 2022-06-01 10:06:08 +08:00
GyDi
4f081c5e14 v1.0.2 2022-06-01 01:26:05 +08:00
GyDi
ff4e9e42e5 chore: update log 2022-06-01 01:25:39 +08:00
GyDi
d5e3e6f256 fix: macOS disable transparent 2022-06-01 01:04:46 +08:00
GyDi
cc9660c0e7 chore: rm some files 2022-06-01 00:49:52 +08:00
GyDi
90d92707c8 chore: rust cache 2022-06-01 00:47:04 +08:00
GyDi
fe77bc7c37 chore: adjust ci and script 2022-06-01 00:43:57 +08:00
GyDi
54a7d8291b chore: enable meta by default 2022-06-01 00:31:12 +08:00
GyDi
7bb924ce5b chore: rm file 2022-05-30 00:58:48 +08:00
GyDi
9f2e25309e chore: adjust code 2022-05-30 00:57:31 +08:00
GyDi
b32b39579e chore: update deps 2022-05-29 23:35:22 +08:00
GyDi
00513e66bc fix: window transparent and can not get hwnd 2022-05-25 19:06:06 +08:00
GyDi
8850867b82 fix: create main window 2022-05-25 16:45:18 +08:00
GyDi
d6dfbbf8dd chore: update deps 2022-05-25 16:12:48 +08:00
GyDi
6c4797bce4 chore: update clash core 2022-05-25 16:08:58 +08:00
ctaoist
2c97eb4115 feat: light mode wip (#96)
* 关闭窗口释放UI资源

* windows 还有左键点击事件

* 兼容enhance profile

* bug 修复
2022-05-25 16:06:39 +08:00
GyDi
54b0828c20 chore: update clash version 2022-05-18 14:14:37 +08:00
GyDi
0d241a4993 chore: alpha ci 2022-05-18 14:07:41 +08:00
GyDi
802b0d1a75 chore: error text 2022-05-18 09:58:20 +08:00
GyDi
e76a7716bc chore: ci 2022-05-17 12:35:42 +08:00
GyDi
a9cc0a61d9 chore: fix alpha ci 2022-05-17 12:34:30 +08:00
GyDi
fe50e47fc6 chore: alpha ci 2022-05-17 11:41:45 +08:00
GyDi
0006b286ca chore: meta 2022-05-17 02:46:15 +08:00
GyDi
17f99da45e chore: fix ci 2022-05-17 02:21:58 +08:00
GyDi
f7ce03a819 chore: test ci 2022-05-17 02:17:02 +08:00
GyDi
c073501ac0 chore: alpha 2022-05-17 02:11:29 +08:00
GyDi
d4a4747c08 feat: clash meta core supports 2022-05-17 01:59:49 +08:00
GyDi
e7b19a5f66 fix: adjust notice 2022-05-17 00:51:37 +08:00
GyDi
0070ec09a2 fix: label text 2022-05-16 20:26:13 +08:00
GyDi
b3ec62a3db feat: script mode 2022-05-16 20:18:56 +08:00
GyDi
34ca4ad3b0 chore: test ci 2022-05-16 17:55:14 +08:00
GyDi
e0909731a4 chore: update deps 2022-05-16 17:54:21 +08:00
GyDi
d8d1cb2eda feat: clash meta core support (wip) 2022-05-16 01:52:50 +08:00
GyDi
2a24fbadae fix: icon path 2022-05-13 12:28:36 +08:00
GyDi
85e1c4bd47 fix: icon issue 2022-05-13 02:46:06 +08:00
GyDi
09fcb0739d fix: notice ui blocking 2022-05-13 02:29:43 +08:00
GyDi
0882c2b5c7 fix: service mode error 2022-05-13 02:11:03 +08:00
GyDi
bb7763d72b chore: fix linux build ci 2022-05-11 12:39:41 +08:00
GyDi
b919d7364a chore: test ci 2022-05-11 12:20:20 +08:00
GyDi
942a37290c chore: test ci 2022-05-11 12:12:55 +08:00
GyDi
ef24c6cbbd chore: test ci fix deps 2022-05-11 11:30:19 +08:00
GyDi
cf05571f1c chore: test ci 2022-05-11 11:22:09 +08:00
GyDi
0fa038b4f2 chore: test ci 2022-05-11 10:51:28 +08:00
GyDi
10a33a2978 chore: continue on error 2022-05-11 01:26:11 +08:00
GyDi
60a88381cf chore: test linux 2022-05-11 00:52:20 +08:00
GyDi
48d83c7d44 chore: test ci 2022-05-11 00:31:19 +08:00
GyDi
b967b7ed6b v1.0.1 2022-05-10 21:40:33 +08:00
GyDi
b60ecb6171 chore: update log 2022-05-10 21:40:07 +08:00
GyDi
e8b80216e8 fix: win11 drag lag 2022-05-09 14:41:26 +08:00
GyDi
69a5472a16 chore: change default height 2022-05-09 14:01:46 +08:00
GyDi
bd6eb606ca fix: rm unwrap 2022-05-09 14:01:14 +08:00
GyDi
e7f1e83a43 feat: reduce gpu usage when hidden 2022-05-07 14:43:52 +08:00
GyDi
357fe3b793 feat: interval update from now field 2022-05-07 14:43:08 +08:00
GyDi
ad6c06409e feat: adjust theme 2022-05-06 14:04:39 +08:00
GyDi
2a7feba808 fix: edit profile info 2022-05-06 12:46:27 +08:00
GyDi
45b7e28db2 feat: supports more remote headers close #81 2022-05-06 10:52:59 +08:00
GyDi
daa9479352 feat: check the remote profile 2022-05-06 01:26:24 +08:00
GyDi
0f688bd71a fix: change window default size 2022-05-06 01:15:15 +08:00
GyDi
ffe0843bd6 chore: update deps 2022-05-06 01:14:13 +08:00
GyDi
0ee4039853 chore: change default user agent 2022-05-06 00:42:20 +08:00
GyDi
a3a6e8cdf6 chore: merge
feat: remove outdated config
2022-04-28 16:28:18 +08:00
tianyoulan
30f60f87f4 feat: fix typo 2022-04-28 15:35:17 +08:00
tianyoulan
0d91657557 feat: remove trailing comma 2022-04-28 15:05:10 +08:00
tianyoulan
ec9b80a64e feat: remove outdated config 2022-04-28 15:02:37 +08:00
GyDi
91909f8886 fix: change service installer and uninstaller 2022-04-27 15:46:44 +08:00
GyDi
cc335dae38 v1.0.0 2022-04-26 00:50:48 +08:00
GyDi
0d6ea03ac8 chore: update log 2022-04-26 00:49:07 +08:00
GyDi
e1370b75e8 fix: adjust connection scroll 2022-04-26 00:37:28 +08:00
GyDi
c2d0ccea3c fix: adjust something 2022-04-25 20:00:11 +08:00
GyDi
9319851118 fix: adjust debounce wait time 2022-04-25 19:39:21 +08:00
GyDi
d45ad76fbc feat: windows service mode ui 2022-04-25 16:12:04 +08:00
GyDi
d8b9c3b832 feat: add some commands 2022-04-24 21:03:47 +08:00
GyDi
9f2534af3d feat: windows service mode 2022-04-24 21:00:17 +08:00
GyDi
2c2978b93a chore: update check script 2022-04-24 15:35:30 +08:00
GyDi
c9b0f22a2e wip: windows service mode 2022-04-23 17:26:32 +08:00
GyDi
2959cd140b test: windows service 2022-04-21 21:28:44 +08:00
GyDi
7834cfe5f0 chore: adjust guard log 2022-04-21 19:51:20 +08:00
GyDi
2b9c5d0cff fix: adjust dns config 2022-04-21 19:50:22 +08:00
GyDi
cb3b51dcde feat: add update interval 2022-04-21 14:26:41 +08:00
GyDi
0c23fe96be chore: adjust 2022-04-21 14:24:35 +08:00
GyDi
9d0bd73ee6 chore: update clash version 2022-04-20 21:02:41 +08:00
GyDi
15f096f764 feat: refactor and supports cron tasks 2022-04-20 20:39:27 +08:00
GyDi
9dd41be608 feat: supports cron update profiles 2022-04-20 20:37:16 +08:00
GyDi
17f8703c71 refactor: verge 2022-04-20 11:17:54 +08:00
GyDi
5edfd7b6f7 refactor: wip 2022-04-20 01:44:47 +08:00
GyDi
4371772ec7 refactor: mutex 2022-04-19 14:38:59 +08:00
GyDi
8e4e08a828 fix: traffic graph adapt to different fps 2022-04-19 13:55:26 +08:00
GyDi
401e6b5a57 refactor: wip 2022-04-19 01:41:20 +08:00
GyDi
01dfe83fcd chore: check script proxy agent supports 2022-04-17 00:37:21 +08:00
GyDi
177c5700ff feat: optimize traffic graph quadratic curve 2022-04-16 22:32:44 +08:00
GyDi
5d401a4fbb feat: optimize the animation of the traffic graph 2022-04-16 17:28:30 +08:00
GyDi
c60ab97103 fix: optimize clash launch 2022-04-15 01:29:25 +08:00
GyDi
f3d7a90ac7 fix: reset after exit 2022-04-14 01:29:33 +08:00
GyDi
7b114f961a fix: adjust code 2022-04-14 01:29:02 +08:00
GyDi
8caaf13c84 v0.0.29 2022-04-13 01:30:08 +08:00
GyDi
0218da1ee6 chore: update log 2022-04-13 01:29:48 +08:00
GyDi
f4786755f1 chore: update dep 2022-04-13 01:21:49 +08:00
GyDi
b9b1fcb4e5 chore: rename green to portable 2022-04-13 01:17:40 +08:00
GyDi
5bfda557bc feat: system tray add tun mode 2022-04-13 01:09:51 +08:00
GyDi
6e53df403e fix: adjust log 2022-04-13 00:49:30 +08:00
GyDi
4a7246ec6e feat: supports change config dir 2022-04-12 23:09:32 +08:00
GyDi
f53a021c08 chore: update clash version 2022-04-12 23:04:19 +08:00
GyDi
8fa95d06e1 feat: add default user agent 2022-04-12 01:05:51 +08:00
GyDi
b34bd9ffd2 chore: rm console 2022-04-11 02:26:09 +08:00
GyDi
fd1a7e34a8 feat: connections page supports filter 2022-04-11 02:25:34 +08:00
GyDi
973653a690 feat: log page supports filter 2022-04-11 01:46:33 +08:00
GyDi
11e4dfe940 fix: check button hover style 2022-04-10 03:33:17 +08:00
GyDi
e7804d39b3 feat: optimize delay checker concurrency strategy 2022-04-10 02:58:48 +08:00
GyDi
6cfbde43ab feat: support sort proxy node and custom test url 2022-04-10 02:09:36 +08:00
GyDi
30421bf247 chore: update deps 2022-04-10 01:31:05 +08:00
GyDi
ab1b6b45a2 refactor: proxy head 2022-04-08 01:35:18 +08:00
GyDi
59366c04dd v0.0.28 2022-04-07 01:28:30 +08:00
GyDi
fac437c1ef chore: update log 2022-04-07 01:27:48 +08:00
GyDi
797f0d92b3 feat: handle remote clash config fields 2022-04-07 01:20:44 +08:00
GyDi
75f3fa5144 fix: icon button color inherit 2022-04-06 22:52:00 +08:00
GyDi
6ea1b5c7c3 fix: remove the lonely zero 2022-04-06 22:48:10 +08:00
GyDi
6a81cc0e83 chore: readme 2022-04-06 01:52:20 +08:00
GyDi
d3e2c7c51a v0.0.27 2022-04-06 01:21:33 +08:00
GyDi
1c930a2eb9 chore: update log 2022-04-06 01:19:13 +08:00
GyDi
fb1ea5b37c refactor: update profile menu 2022-04-06 01:13:06 +08:00
GyDi
e82f344a2c chore: add updater script 2022-04-05 23:24:52 +08:00
GyDi
10ba205f97 chore: updater json supports arch field 2022-04-05 23:19:54 +08:00
GyDi
fbc8b97c25 chore: add ci 2022-04-05 20:21:53 +08:00
GyDi
c6a31b21e3 refactor: enhanced mode ui component 2022-04-03 01:41:48 +08:00
GyDi
4aa8c4b79d feat: add text color 2022-04-02 17:18:38 +08:00
GyDi
04179ae833 fix: i18n add value 2022-04-02 13:49:48 +08:00
GyDi
205ecde505 fix: proxy page first render 2022-04-02 01:23:31 +08:00
GyDi
7cb467c960 feat: control final tun config 2022-04-01 23:55:44 +08:00
GyDi
cbe7c69154 chore: add debug feature 2022-04-01 23:43:35 +08:00
GyDi
c93cbb614d feat: support css injection 2022-04-01 02:08:42 +08:00
GyDi
42c570a6e2 fix: console warning 2022-04-01 01:16:23 +08:00
GyDi
aed47c1178 feat: support theme setting 2022-03-31 23:38:00 +08:00
GyDi
a1ac4784c8 feat: add text color 2022-03-31 23:34:36 +08:00
GyDi
d8b751d56b feat: add theme setting 2022-03-31 23:11:50 +08:00
GyDi
213eb2ae88 refactor: ui theme 2022-03-30 12:36:39 +08:00
GyDi
17b7265a9a chore: add api 2022-03-30 01:30:22 +08:00
GyDi
3afdf9571e fix: icon button title 2022-03-30 01:29:25 +08:00
GyDi
bb8a59d1db chore: update tauri 2022-03-29 23:05:32 +08:00
GyDi
d26830d81e fix: macOS transition flickers close #47 2022-03-29 01:39:54 +08:00
GyDi
1f2c703ddc chore: update deps 2022-03-29 01:33:14 +08:00
GyDi
dd51a6e4d1 fix: csp image data 2022-03-28 23:17:11 +08:00
GyDi
caa7597097 chore: readme 2022-03-28 01:33:58 +08:00
GyDi
409996cb29 v0.0.26 2022-03-28 01:30:54 +08:00
GyDi
a15b37d177 chore: update log 2022-03-28 01:18:18 +08:00
GyDi
a436ef2126 fix: close dialog after save 2022-03-28 01:09:34 +08:00
GyDi
4c53e6e89d refactor: optimize enhance mode strategy 2022-03-28 01:07:14 +08:00
GyDi
083eb98949 fix: change to deep copy 2022-03-28 00:56:48 +08:00
GyDi
418951415c feat: enhanced mode supports more fields 2022-03-27 20:36:13 +08:00
GyDi
bac0d0a175 chore: profile release 2022-03-27 01:38:40 +08:00
GyDi
7bde7ebc30 feat: supports edit profile file 2022-03-27 00:58:17 +08:00
GyDi
7b7e6555c1 feat: supports silent start 2022-03-26 18:56:16 +08:00
GyDi
ea8565d0ca feat: use crate open 2022-03-23 23:00:14 +08:00
GyDi
1ba2902618 fix: window style close #45 2022-03-23 21:43:13 +08:00
GyDi
e91e8d565a feat: enhance connections display order 2022-03-23 14:02:08 +08:00
GyDi
206e613ace chore: adjust style 2022-03-23 13:58:57 +08:00
GyDi
9a88dcf33e fix: manage global proxy correctly 2022-03-23 12:49:34 +08:00
GyDi
9fc9e8972f fix: tauri csp 2022-03-23 01:47:35 +08:00
GyDi
4fe6703dd4 feat: save global selected 2022-03-22 12:38:59 +08:00
GyDi
d613cbb68f v0.0.25 2022-03-22 01:51:06 +08:00
GyDi
be2247b36f chore: update log 2022-03-22 01:50:24 +08:00
GyDi
66d1f49116 chore: update clash core 2022-03-22 01:50:15 +08:00
GyDi
37d35bbbdb fix: windows style 2022-03-22 01:36:06 +08:00
GyDi
321d4ccc8e fix: update state 2022-03-22 01:27:22 +08:00
inRm3D
6e4338d13c chore: readme (#43) 2022-03-21 21:55:45 +08:00
GyDi
677d15d8a7 chore: tauri feature 2022-03-21 11:40:52 +08:00
GyDi
a7e978dc06 fix: profile item loading state 2022-03-21 11:40:27 +08:00
GyDi
67f5218a73 chore: tauri allowList 2022-03-20 13:16:50 +08:00
GyDi
c2d1329b8b chore: update clash version 2022-03-20 12:37:55 +08:00
GyDi
0530ec0651 v0.0.24 2022-03-20 01:50:39 +08:00
GyDi
8a6e18badc chore: update log 2022-03-20 01:50:15 +08:00
GyDi
1a144a7070 feat: system tray supports system proxy setting 2022-03-20 01:36:43 +08:00
GyDi
e115432e11 feat: prevent context menu on Windows close #22 2022-03-19 19:28:53 +08:00
GyDi
145f6e2d53 feat: create local profile with selected file 2022-03-19 19:21:55 +08:00
GyDi
9c62311b56 feat: reduce the impact of the enhanced mode 2022-03-19 16:02:47 +08:00
GyDi
a150d91c48 fix: adjust windows style 2022-03-19 15:35:59 +08:00
GyDi
4730a4e352 feat: parse update log 2022-03-19 15:31:58 +08:00
GyDi
67c57be830 chore: update log supports 2022-03-19 14:04:58 +08:00
GyDi
d98e72ca25 chore: updater proxy 2022-03-19 11:14:12 +08:00
GyDi
d81fa1e610 chore: ci support linux 2022-03-19 10:50:44 +08:00
GyDi
8c12de8b73 chore: readme 2022-03-18 19:02:53 +08:00
GyDi
9b5218f85b feat: fill i18n 2022-03-18 14:59:23 +08:00
GyDi
a6cf5c7667 feat: dayjs i18n 2022-03-18 14:45:24 +08:00
GyDi
4fca73ffbd feat: connections page simply support 2022-03-18 14:43:22 +08:00
GyDi
46a9023782 feat: add wintun.dll by default 2022-03-18 11:49:00 +08:00
GyDi
5fed443476 fix: change mixed port error 2022-03-18 11:39:02 +08:00
GyDi
0fab0f207c chore: add dev feature 2022-03-18 10:59:35 +08:00
GyDi
ee67358ee6 chore: rename temp dir 2022-03-18 10:20:24 +08:00
GyDi
cefd44304b chore: resolve wintun.dll 2022-03-17 19:29:30 +08:00
GyDi
2a88cdc76d fix: auto launch path 2022-03-16 18:44:25 +08:00
GyDi
4c39d37ad5 fix: tun mode config 2022-03-15 14:23:57 +08:00
GyDi
9b9865f717 fix: adjsut open cmd error 2022-03-15 12:51:39 +08:00
GyDi
3f0456322d chore: fix ci env 2022-03-15 00:00:20 +08:00
GyDi
16ac005fd6 v0.0.23 2022-03-14 01:34:26 +08:00
GyDi
003fcf446a feat: event emit when clash config update 2022-03-13 01:37:41 +08:00
GyDi
39703120a4 chore: fix ci 2022-03-13 00:59:42 +08:00
GyDi
656c0efc0d chore: update tauri action 2022-03-13 00:58:49 +08:00
GyDi
63f7c0ed69 chore: green version bundle 2022-03-13 00:52:31 +08:00
GyDi
5103463524 chore: rm then 2022-03-12 23:58:20 +08:00
GyDi
97254a1e3a feat: i18n supports 2022-03-12 23:07:45 +08:00
GyDi
9f171a01e8 fix: parse external-controller 2022-03-12 21:35:20 +08:00
GyDi
6c9b6007a3 fix: config file case close #18 2022-03-12 21:03:17 +08:00
GyDi
f4a7c4bd69 chore: merge 2022-03-12 18:45:07 +08:00
ttyS3
5abad18e51 chore: show open app and log dir failed message 2022-03-12 18:04:56 +08:00
GyDi
57f70a6d35 chore: adjust error log 2022-03-12 15:57:16 +08:00
GyDi
cb78f3a707 feat: change open command on linux
refactor(logging): refine open dir failed log message, add Linux support
2022-03-12 15:40:23 +08:00
ttyS3
b331db74ee feat: add Linux open dir support
refactor(logging): refine open dir failed log message
2022-03-12 03:18:25 +08:00
GyDi
8fb9ad3fe7 fix: patch item option 2022-03-11 19:56:56 +08:00
GyDi
d4b5c55169 fix: user agent not works 2022-03-11 19:50:51 +08:00
GyDi
a41438d779 v0.0.22 2022-03-10 02:27:00 +08:00
GyDi
0895d8a813 chore: rm dead code 2022-03-10 02:25:35 +08:00
GyDi
89310d7b7c fix: external-controller 2022-03-10 02:19:06 +08:00
GyDi
ca0e936f7c feat: support more options for remote profile 2022-03-10 02:03:55 +08:00
GyDi
afe767e28a chore: reduce icon size on macOS 2022-03-10 01:04:53 +08:00
GyDi
1481b011d9 chore: adjust icon 2022-03-10 00:04:59 +08:00
GyDi
5f1b968b60 chore: add linux link 2022-03-09 20:14:15 +08:00
GyDi
5a729043ce feat: linux system proxy 2022-03-09 19:48:32 +08:00
GyDi
2de0dfcef7 chore: update deps 2022-03-09 02:36:40 +08:00
GyDi
7cc83ed080 fix: change proxy bypass on mac 2022-03-09 02:36:03 +08:00
GyDi
31ec03f8e5 fix: kill sidecars after install still in test 2022-03-09 02:09:51 +08:00
GyDi
0d095c4cf1 fix: log some error 2022-03-09 02:00:56 +08:00
GyDi
dbde09d008 chore: rename productName 2022-03-09 01:53:34 +08:00
GyDi
43d33e21e6 chore: update tauri version 2022-03-09 01:50:37 +08:00
GyDi
c8cf43a255 fix: apply_blur parameter 2022-03-08 10:44:41 +08:00
GyDi
b2d05672b1 fix: limit enhanced profile range 2022-03-08 01:45:46 +08:00
GyDi
4123c789e6 chore: update deps 2022-03-08 01:18:20 +08:00
GyDi
c65f3c7b68 chore: add default bypass 2022-03-08 00:39:09 +08:00
GyDi
41e3642e02 fix: profile updated field 2022-03-07 01:41:42 +08:00
GyDi
eae7602f80 fix: profile field check 2022-03-07 01:30:32 +08:00
GyDi
fd12c73cf9 fix: create dir panic 2022-03-07 01:06:21 +08:00
GyDi
2ef9d70224 v0.0.21 2022-03-06 18:36:02 +08:00
GyDi
3861531fb7 chore: default release body 2022-03-06 18:34:38 +08:00
GyDi
aeff41ff41 chore: update deps 2022-03-06 18:04:44 +08:00
GyDi
b5c8283575 fix: only error when selected 2022-03-06 17:06:45 +08:00
GyDi
b31cdce073 feat: enhance profile status 2022-03-06 17:02:29 +08:00
GyDi
6040aae12a feat: menu item refresh enhanced mode 2022-03-06 15:46:16 +08:00
GyDi
6ba4afc5bb fix: enhanced profile consistency 2022-03-06 15:40:16 +08:00
GyDi
4707e2b02a feat: profile enhanced mode 2022-03-06 14:59:25 +08:00
GyDi
08dd73fd72 feat: profile enhanced ui 2022-03-05 22:54:39 +08:00
GyDi
83bf67b8ca feat: profile item adjust 2022-03-05 19:04:20 +08:00
GyDi
b758ead371 fix: simply compatible with proxy providers 2022-03-05 16:18:44 +08:00
GyDi
357a0db03e fix: component warning 2022-03-05 15:48:39 +08:00
GyDi
6a3219a5e8 chore: update copyright 2022-03-05 01:51:29 +08:00
GyDi
b7e7e82f85 fix: when updater failed 2022-03-04 02:10:27 +08:00
GyDi
e4c66c8b2b fix: log file 2022-03-04 02:08:26 +08:00
GyDi
4d4f8b5ee8 chore: update deps 2022-03-03 20:37:06 +08:00
GyDi
5ab75f7eb9 chore: enhance wip 2022-03-03 01:58:05 +08:00
GyDi
8ff22bc737 fix: result 2022-03-03 01:56:47 +08:00
GyDi
1d65287fbb feat: enhanced profile (wip) 2022-03-03 01:52:02 +08:00
GyDi
dc24993bf6 v0.0.20 2022-03-02 01:59:53 +08:00
GyDi
ef606d1365 feat: edit profile item 2022-03-02 01:58:16 +08:00
GyDi
e26ecec545 fix: cover profile extra 2022-03-02 01:45:00 +08:00
GyDi
28e8aa9111 chore: adjust log field 2022-03-02 01:13:31 +08:00
GyDi
a8ff67e3b8 chore: rm file 2022-03-02 00:58:07 +08:00
GyDi
c311b92ae2 feat: use nanoid 2022-03-02 00:56:05 +08:00
GyDi
b04e22cd2c feat: compatible profile config 2022-03-01 11:05:33 +08:00
GyDi
4903c70686 refactor: profile config 2022-03-01 08:58:47 +08:00
GyDi
04aa963b9a v0.0.19 2022-02-28 01:59:53 +08:00
GyDi
7fdd2e81cf wip: refactor profile 2022-02-28 01:59:13 +08:00
GyDi
38778c8cac refactor: use anyhow to handle error 2022-02-28 01:34:25 +08:00
GyDi
565851b113 fix: display menu only on macos 2022-02-27 01:47:56 +08:00
GyDi
cd216b0591 fix: proxy global showType 2022-02-27 01:33:22 +08:00
GyDi
031e2acc63 feat: native menu supports 2022-02-27 01:29:57 +08:00
GyDi
b3afa6b0a4 chore: update deps 2022-02-27 01:16:43 +08:00
GyDi
40fc2b78d3 feat: filter proxy and display type 2022-02-27 00:58:14 +08:00
GyDi
24e6c1ea36 feat: use lock fn 2022-02-26 17:39:36 +08:00
GyDi
275b4e2944 feat: refactor proxy page 2022-02-26 17:39:08 +08:00
GyDi
061c93cb7d feat: proxy group auto scroll to current 2022-02-26 01:21:39 +08:00
GyDi
3b91117724 v0.0.18 2022-02-25 02:13:41 +08:00
GyDi
eb4fac28c4 chore: ci 2022-02-25 02:12:55 +08:00
GyDi
acb5fc6393 feat: clash tun mode supports 2022-02-25 02:09:39 +08:00
GyDi
961ed728a1 feat: use enhanced guard-state 2022-02-25 01:22:33 +08:00
GyDi
678fcfc3a3 feat: guard state supports debounce guard 2022-02-25 01:21:13 +08:00
GyDi
79d60e6b4a feat: adjust clash version display 2022-02-24 23:04:18 +08:00
GyDi
858b2ff6da feat: hide command window 2022-02-24 22:46:12 +08:00
GyDi
ba3355c74c fix: use full clash config 2022-02-23 23:23:07 +08:00
GyDi
6e3028cf86 feat: enhance log data 2022-02-23 02:00:45 +08:00
GyDi
a28598630d chore: update readme 2022-02-22 21:54:33 +08:00
GyDi
36810b2d42 v0.0.17 2022-02-22 02:08:31 +08:00
GyDi
de9923f2e1 fix: reconnect websocket when restart clash 2022-02-22 02:05:22 +08:00
GyDi
716b1ac528 chore: enhance publish ci 2022-02-22 01:56:06 +08:00
GyDi
77663d64a0 fix: wrong exe path 2022-02-21 22:33:37 +08:00
GyDi
49540c7151 chore: use tauri cli 2022-02-21 22:31:00 +08:00
GyDi
03710bc6ba v0.0.16 2022-02-21 01:33:11 +08:00
GyDi
489ae6c9b6 feat: change window style 2022-02-20 23:46:13 +08:00
GyDi
3b54eeb1c5 feat: fill verge template 2022-02-20 20:12:55 +08:00
GyDi
a9bd753e38 feat: enable customize guard duration 2022-02-20 20:11:39 +08:00
GyDi
bf15580081 feat: system proxy guard 2022-02-20 18:53:21 +08:00
GyDi
5b5a299b55 feat: enable show or hide traffic graph 2022-02-19 18:14:40 +08:00
GyDi
051b529c11 fix: patch verge config 2022-02-19 17:32:23 +08:00
GyDi
fa5fb815fb feat: traffic line graph 2022-02-19 17:02:24 +08:00
GyDi
a4c0a61698 chore: update deps 2022-02-19 00:34:09 +08:00
GyDi
80d8a8190d feat: adjust profile item ui 2022-02-19 00:23:47 +08:00
GyDi
e69a62c41a feat: adjust fetch profile url 2022-02-19 00:09:36 +08:00
GyDi
46183d4d43 feat: inline config file template 2022-02-18 23:57:13 +08:00
GyDi
4f2d3cc250 chore: update check script 2022-02-18 23:49:39 +08:00
GyDi
79daf543b0 fix: fetch profile panic 2022-02-17 13:44:26 +08:00
GyDi
5b83fb496c feat: kill sidecars when update app 2022-02-17 02:10:25 +08:00
GyDi
3dfe7c27cd feat: delete file 2022-02-17 01:58:12 +08:00
GyDi
e50538c634 feat: lock some async functions 2022-02-17 01:42:25 +08:00
GyDi
92b6ecc4dd chore: tauri updater env 2022-02-16 11:02:00 +08:00
GyDi
588ade0ab2 chore: add pubkey 2022-02-16 10:59:31 +08:00
GyDi
4375aefb49 v0.0.15 2022-02-16 03:22:25 +08:00
GyDi
c5cba7775a feat: support open dir 2022-02-16 03:21:34 +08:00
GyDi
7cf8ec6d61 fix: spawn command 2022-02-16 02:43:52 +08:00
GyDi
46cbd3ae7b feat: change allow list 2022-02-16 02:42:56 +08:00
GyDi
678cf8a341 feat: support check delay 2022-02-16 02:22:01 +08:00
GyDi
3a0f1f6197 fix: import error 2022-02-15 01:36:19 +08:00
GyDi
902ff23a95 feat: scroll to proxy item 2022-02-15 01:34:10 +08:00
GyDi
7e2e9aa836 chore: update deps 2022-02-15 00:33:58 +08:00
GyDi
491ef4559f fix: not open file when new profile 2022-02-15 00:21:34 +08:00
GyDi
b7bad0f585 feat: edit system proxy bypass 2022-02-14 01:26:24 +08:00
GyDi
ce248bc169 feat: disable user select 2022-02-13 19:52:35 +08:00
GyDi
d599be7e7c fix: reset value correctly 2022-02-13 19:40:31 +08:00
GyDi
5b1fc0e6c0 feat: new profile able to edit name and desc 2022-02-13 19:33:24 +08:00
GyDi
aeece6c201 chore: adjust files 2022-02-13 19:27:24 +08:00
GyDi
d7a1b974cd feat: update tauri version 2022-02-13 18:45:03 +08:00
GyDi
0db1872bd2 fix: something 2022-02-12 21:12:39 +08:00
GyDi
4333bc7004 fix: menu without fragment 2022-02-10 01:42:52 +08:00
GyDi
f6caac749e feat: display clash core version 2022-02-10 01:35:55 +08:00
GyDi
723303e1b6 feat: adjust profile item menu 2022-02-10 01:14:57 +08:00
GyDi
0daf5bae96 v0.0.14 2022-02-09 02:11:01 +08:00
GyDi
6d59fe2a34 feat: profile item ui 2022-02-09 02:08:27 +08:00
GyDi
3ed0f005ee fix: proxy list error 2022-02-09 02:02:29 +08:00
GyDi
66b89ee817 feat: support new profile 2022-02-07 17:26:05 +08:00
GyDi
c596c875a6 feat: support open command for viewing 2022-02-07 16:45:20 +08:00
GyDi
08c1a29383 chore: add item template yaml 2022-02-02 20:56:06 +08:00
GyDi
ab078d1ea0 fix: something 2022-01-31 23:34:58 +08:00
GyDi
b028b09041 fix: macos auto launch fail 2022-01-31 23:32:41 +08:00
GyDi
44c3eb7b35 chore: update deps and app name 2022-01-31 23:27:11 +08:00
GyDi
f54052c320 chore: cargo update 2022-01-28 22:02:17 +08:00
GyDi
d23a055e3b chore: update clash version 2022-01-28 22:00:15 +08:00
GyDi
8f76f3184f v0.0.13 2022-01-25 02:11:00 +08:00
GyDi
619c4853fd feat: global proxies use virtual list 2022-01-25 02:08:10 +08:00
GyDi
58fb6ade7c feat: enable change proxy mode 2022-01-25 01:51:44 +08:00
GyDi
f2c0626c68 feat: update styles 2022-01-25 01:48:26 +08:00
GyDi
3956d2bd63 feat: manage clash mode 2022-01-24 23:13:13 +08:00
GyDi
1d851631d6 chore: update readme 2022-01-22 23:57:39 +08:00
GyDi
517e38e33f v0.0.12 2022-01-21 03:09:21 +08:00
GyDi
a2644a4ebf chore: update ci 2022-01-21 03:08:40 +08:00
GyDi
f7bf6a8080 fix: type error 2022-01-21 03:08:20 +08:00
GyDi
681c1d9e9a v0.0.12 2022-01-21 02:59:33 +08:00
GyDi
9ab2e69f4f refactor: rename profiles & command state 2022-01-21 02:57:15 +08:00
GyDi
9af2ab57d1 feat: change system porxy when changed port 2022-01-21 02:50:13 +08:00
GyDi
f14e4dc0be feat: enable change mixed port 2022-01-21 02:32:23 +08:00
GyDi
39bd9641f4 feat: manage clash config 2022-01-21 02:31:44 +08:00
GyDi
177c283011 chore: add ahooks 2022-01-21 02:29:45 +08:00
GyDi
62ff1421e7 fix: restart clash should update something 2022-01-21 00:29:33 +08:00
GyDi
2577cbe1ac feat: enable update clash info 2022-01-20 23:41:08 +08:00
GyDi
7542f065a1 feat: rename edit as view 2022-01-19 23:58:34 +08:00
GyDi
aa2abb92ef chore: adjust ci 2022-01-19 23:55:05 +08:00
GyDi
efc00c1610 fix: script error... 2022-01-19 00:49:23 +08:00
GyDi
7585893cf0 fix: tag error 2022-01-19 00:46:43 +08:00
GyDi
4fd9019c25 fix: script error 2022-01-19 00:42:37 +08:00
GyDi
f4990aaa95 feat: test auto gen update.json ci 2022-01-19 00:37:59 +08:00
GyDi
834fa77385 v0.0.11 2022-01-17 02:53:07 +08:00
GyDi
3acd20c04d fix: remove cargo test 2022-01-17 02:50:19 +08:00
GyDi
878859d7cc v0.0.11 2022-01-17 02:44:08 +08:00
GyDi
7038776ec5 feat: adjust setting typography 2022-01-17 02:42:52 +08:00
GyDi
a74001ef6a feat: enable force select profile 2022-01-17 02:28:23 +08:00
GyDi
0bad1794c4 feat: support edit profile item 2022-01-17 02:16:17 +08:00
GyDi
ceec72b869 fix: reduce proxy item height 2022-01-17 02:15:54 +08:00
GyDi
5c1ed0ec06 feat: adjust control ui 2022-01-17 02:15:06 +08:00
GyDi
ce00fc502b feat: update profile supports noproxy 2022-01-16 22:57:42 +08:00
GyDi
ab82d2af4f refactor: something 2022-01-16 18:30:25 +08:00
GyDi
2eb3e1aef6 fix: put profile request with no proxy 2022-01-16 18:20:01 +08:00
GyDi
32cb0388cf refactor: notice caller 2022-01-16 17:56:43 +08:00
GyDi
30f9039a2c chore: change ci 2022-01-16 16:03:53 +08:00
GyDi
8bad63f72d fix: ci strategy 2022-01-16 14:30:49 +08:00
GyDi
aec4d89550 chore: enhance ci 2022-01-16 14:27:41 +08:00
GyDi
e8639a37af feat: rename page 2022-01-16 03:25:50 +08:00
GyDi
a92ab2cbe3 refactor: setting page 2022-01-16 03:22:37 +08:00
GyDi
fb0bb6e7f3 feat: refactor and adjust ui 2022-01-16 03:11:07 +08:00
GyDi
8dbf870122 feat: rm some commands 2022-01-16 03:09:36 +08:00
GyDi
50dab48f25 feat: change type 2022-01-15 21:58:13 +08:00
GyDi
e0c6354ff3 feat: supports auto launch on macos and windows 2022-01-15 21:55:05 +08:00
GyDi
5b03d251fd chore: add auto-launch 2022-01-15 21:00:19 +08:00
GyDi
9c4b69d1ae v0.0.10 2022-01-13 02:53:29 +08:00
GyDi
feba220fff feat: adjust proxy page 2022-01-13 02:51:30 +08:00
GyDi
f9efa3bf8f feat: press esc hide the window 2022-01-13 02:11:50 +08:00
GyDi
6ebf333982 fix: version update error 2022-01-12 22:19:44 +08:00
GyDi
2c7d07d606 v0.0.9 2022-01-12 02:55:07 +08:00
GyDi
b05185e7cc feat: show system proxy info 2022-01-12 02:54:50 +08:00
GyDi
148547de95 feat: support blur window 2022-01-12 02:27:29 +08:00
GyDi
fb6a97789e chore: add macos startup todo 2022-01-11 23:14:43 +08:00
GyDi
271f34c7e3 chore: cargo update 2022-01-11 23:13:02 +08:00
GyDi
9309f877d1 v0.0.8 2022-01-11 02:27:04 +08:00
GyDi
88db5fb38e chore: update ci 2022-01-11 02:26:50 +08:00
GyDi
4ee0a1b8c5 feat: windows support startup 2022-01-11 02:24:43 +08:00
GyDi
7617d734e2 feat: window self startup 2022-01-11 02:21:51 +08:00
GyDi
a15ae9badb fix: text 2022-01-10 22:57:21 +08:00
GyDi
97b6fed909 chore: ignore update json 2022-01-10 22:08:57 +08:00
GyDi
ab653afae9 fix: update profile after restart clash 2022-01-10 22:08:18 +08:00
GyDi
df158a741a fix: get proxies multiple times 2022-01-10 21:25:41 +08:00
GyDi
fb1371ebfa docs: fix img width 2022-01-10 02:52:12 +08:00
GyDi
82d5494235 docs: update 2022-01-10 02:49:42 +08:00
GyDi
6b754723d9 v0.0.7 2022-01-10 02:17:35 +08:00
GyDi
e003113132 feat: use tauri updater 2022-01-10 02:15:38 +08:00
GyDi
dda492ff87 feat: support update checker 2022-01-10 02:05:35 +08:00
GyDi
2459699d27 v0.0.6 2022-01-09 21:36:43 +08:00
GyDi
989acec027 chore: ci add macos 2022-01-09 21:34:14 +08:00
GyDi
701ab8b24f feat: support macos proxy config 2022-01-09 21:19:35 +08:00
GyDi
ed6bfa5fa2 feat: custom window decorations 2022-01-08 22:23:48 +08:00
GyDi
2d2899b68a feat: profiles add menu and delete button 2022-01-08 16:52:18 +08:00
GyDi
2d8b80bfa9 fix: delete profile item command 2022-01-08 14:21:12 +08:00
GyDi
c1cc560458 chore: temp 2022-01-08 02:54:37 +08:00
GyDi
95fb562533 v0.0.5 2022-01-08 02:12:56 +08:00
GyDi
17853ac237 chore: enhance ci 2022-01-08 02:12:12 +08:00
GyDi
e064a8bbdb chore: rename script 2022-01-08 01:56:28 +08:00
GyDi
8b9e3f1b59 chore: update publish script 2022-01-08 01:51:24 +08:00
GyDi
1d38739016 refactor: rename 2022-01-08 01:27:25 +08:00
GyDi
3bb46eaa6f refactor: impl structs methods 2022-01-07 23:29:20 +08:00
GyDi
3b1561a99b chore: update clash version 2022-01-06 23:40:57 +08:00
GyDi
a61e5c7310 fix: initialize profiles state 2022-01-05 23:30:18 +08:00
GyDi
ef8d1ebc0e chore: fixed tauri rev 2022-01-05 23:27:26 +08:00
GyDi
348b3d3738 feat: delay put profiles and retry 2022-01-05 02:01:32 +08:00
GyDi
3550aa10ba refactor: impl as struct methods 2022-01-05 02:00:59 +08:00
GyDi
c29eadd9ee feat: Window Send and Sync 2022-01-04 21:29:04 +08:00
GyDi
aecefaee8d chore: update tauri 2022-01-04 21:25:00 +08:00
GyDi
3bab5ec3a7 feat: support restart sidecar tray event 2021-12-31 18:24:50 +08:00
GyDi
3c908963ae feat: prevent click same 2021-12-31 18:21:35 +08:00
GyDi
cba176cdc9 fix: item header bgcolor 2021-12-31 18:19:53 +08:00
GyDi
cfdc854409 feat: scroller stable 2021-12-31 18:19:17 +08:00
GyDi
1d87f78088 feat: compatible with macos(wip) 2021-12-29 18:49:38 +08:00
GyDi
63b01376d6 chore: change tauri to git repo 2021-12-29 18:47:29 +08:00
GyDi
010e518adb fix: null type error 2021-12-29 01:01:22 +08:00
GyDi
6570784b46 chore: dev support macos 2021-12-29 01:01:09 +08:00
GyDi
63b31f41a7 v0.0.4 2021-12-28 01:48:25 +08:00
GyDi
96eca59afc feat: record selected proxy 2021-12-28 01:47:43 +08:00
GyDi
25978bde8e feat: display version 2021-12-28 01:35:58 +08:00
GyDi
7691d2b5db chore: save lock file 2021-12-28 00:14:15 +08:00
GyDi
edb108322e chore: post version script 2021-12-27 23:07:56 +08:00
GyDi
af3936b68e v0.0.3 2021-12-27 23:06:46 +08:00
GyDi
e76c25f9d3 v0.0.3 2021-12-27 23:06:45 +08:00
GyDi
124f455be2 chore: update version 2021-12-27 10:21:49 +08:00
GyDi
f679eefe0a chore: update version 2021-12-27 10:21:10 +08:00
655 changed files with 112052 additions and 7569 deletions

9
.cargo/config.toml Normal file
View File

@@ -0,0 +1,9 @@
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[alias]
clippy-all = "clippy --all-targets --all-features -- -D warnings"
clippy-only = "clippy --all-targets --features clippy -- -D warnings"

2
.clippy.toml Normal file
View File

@@ -0,0 +1,2 @@
avoid-breaking-exported-api = true
cognitive-complexity-threshold = 25

View File

@@ -0,0 +1,101 @@
{
"name": "Clash Verge Rev Development Environment",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-22.04",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "20"
},
"ghcr.io/devcontainers/features/rust:1": {
"version": "latest",
"profile": "default"
},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
},
"customizations": {
"vscode": {
"extensions": [
"rust-lang.rust-analyzer",
"tauri-apps.tauri-vscode",
"ms-vscode.vscode-typescript-next",
"esbenp.prettier-vscode",
"bradlc.vscode-tailwindcss",
"ms-vscode.vscode-json",
"redhat.vscode-yaml",
"formulahendry.auto-rename-tag",
"ms-vscode.hexeditor",
"christian-kohler.path-intellisense",
"yzhang.markdown-all-in-one",
"streetsidesoftware.code-spell-checker",
"ms-vscode.vscode-eslint"
],
"settings": {
"rust-analyzer.cargo.features": ["verge-dev"],
"rust-analyzer.check.command": "clippy",
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[yaml]": {
"editor.defaultFormatter": "redhat.vscode-yaml"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
}
},
"forwardPorts": [1420, 3000, 8080, 9090, 7890, 7891],
"portsAttributes": {
"1420": {
"label": "Tauri Dev Server",
"onAutoForward": "notify"
},
"3000": {
"label": "Vite Dev Server",
"onAutoForward": "notify"
},
"7890": {
"label": "Clash HTTP Proxy",
"onAutoForward": "silent"
},
"7891": {
"label": "Clash SOCKS Proxy",
"onAutoForward": "silent"
},
"9090": {
"label": "Clash API",
"onAutoForward": "silent"
}
},
"postCreateCommand": "bash .devcontainer/post-create.sh",
"mounts": [
"source=clash-verge-node-modules,target=${containerWorkspaceFolder}/node_modules,type=volume",
"source=clash-verge-cargo-registry,target=/usr/local/cargo/registry,type=volume",
"source=clash-verge-cargo-git,target=/usr/local/cargo/git,type=volume"
],
"containerEnv": {
"RUST_BACKTRACE": "1",
"NODE_OPTIONS": "--max-old-space-size=4096",
"TAURI_DEV_WATCHER_IGNORE_FILE": ".taurignore"
},
"remoteUser": "vscode",
"workspaceFolder": "/workspaces/clash-verge-rev",
"shutdownAction": "stopContainer"
}

View File

@@ -5,3 +5,9 @@ charset = utf-8
end_of_line = lf
indent_size = 2
insert_final_newline = true
[*.rs]
charset = utf-8
end_of_line = lf
indent_size = 4
insert_final_newline = true

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: clash-verge-rev

73
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,73 @@
name: 问题反馈 / Bug report
title: "[BUG] "
description: 反馈你遇到的问题 / Report the issue you are experiencing
labels: ["bug"]
type: "Bug"
body:
- type: markdown
attributes:
value: |
## 在提交问题之前,请确认以下事项:
1. 请 **确保** 您已经查阅了 [Clash Verge Rev 官方文档](https://clash-verge-rev.github.io/guide/term.html) 以及 [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
2. 请 **确保** [已有的问题](https://github.com/clash-verge-rev/clash-verge-rev/issues?q=is%3Aissue) 中没有人提交过相似 issue否则请在已有的 issue 下进行讨论
3. 请 **务必** 给 issue 填写一个简洁明了的标题,以便他人快速检索
4. 请 **务必** 查看 [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) 版本更新日志
5. 请 **务必** 尝试 [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) 版本,确定问题是否仍然存在
6. 请 **务必** 按照模板规范详细描述问题以及尝试更新 AutoBuild 版本,否则 issue 将会被直接关闭
## Before submitting the issue, please make sure of the following checklist:
1. Please make sure you have read the [Clash Verge Rev official documentation](https://clash-verge-rev.github.io/guide/term.html) and [FAQ](https://clash-verge-rev.github.io/faq/windows.html)
2. Please make sure there is no similar issue in the [existing issues](https://github.com/clash-verge-rev/clash-verge-rev/issues?q=is%3Aissue), otherwise please discuss under the existing issue
3. Please be sure to fill in a concise and clear title for the issue so that others can quickly search
4. Please be sure to check out [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) version update log
5. Please be sure to try the [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) version to ensure that the problem still exists
6. Please describe the problem in detail according to the template specification and try to update the Alpha version, otherwise the issue will be closed
- type: textarea
id: description
attributes:
label: 问题描述 / Describe the bug
description: 详细清晰地描述你遇到的问题,并配合截图 / Describe the problem you encountered in detail and clearly, and provide screenshots
validations:
required: true
- type: textarea
attributes:
label: 软件版本 / CVR Version
description: 请提供 CVR 的具体版本,如果是 AutoBuild 版本,请注明下载时间(精确到小时分钟) / Please provide the specific version of CVR. If it is an AutoBuild version, please indicate the download time (accurate to hours and minutes)
render: text
validations:
required: true
- type: textarea
attributes:
label: 复现步骤 / To Reproduce
description: 请提供复现问题的步骤 / Steps to reproduce the behavior
validations:
required: true
- type: checkboxes
attributes:
label: 操作系统 / OS
options:
- label: Windows
- label: Linux
- label: MacOS
validations:
required: true
- type: input
attributes:
label: 操作系统版本 / OS Version
description: 请提供你的操作系统版本Linux请额外提供桌面环境及窗口系统 / Please provide your OS version, for Linux, please also provide the desktop environment and window system
validations:
required: true
- type: textarea
attributes:
label: 日志(勿上传日志文件,请粘贴日志内容) / Log (Do not upload the log file, paste the log content directly)
description: 请提供完整或相关部分的Debug日志请在“软件左侧菜单”->“设置”->“日志等级”调整到debugVerge错误请把“杂项设置”->“app日志等级”调整到debug并重启Verge生效。日志文件在“软件左侧菜单”->“设置”->“日志目录”下) / Please provide a complete or relevant part of the Debug log (please adjust the "Log level" to debug in "Software left menu" -> "Settings" -> "Log level". If there is a Verge error, please adjust "Miscellaneous settings" -> "app log level" to debug, and restart Verge to take effect. The log file is under "Software left menu" -> "Settings" -> "Log directory")
placeholder: |
日志目录一般位于 Clash Verge Rev 安装目录的 "logs/" 子目录中,请将日志内容粘贴到此处。
Log directory is usually located in the "logs/" subdirectory of the Clash Verge Rev installation directory, please paste the log content here.
render: log
validations:
required: true

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: 讨论交流 / Communication
url: https://t.me/clash_verge_rev
about: 在 Telegram 群组中与其他用户讨论交流 / Communicate with other users in the Telegram group

View File

@@ -0,0 +1,47 @@
name: 功能请求 / Feature request
title: "[Feature] "
description: 提出你的功能请求 / Propose your feature request
labels: ["enhancement"]
type: "Feature"
body:
- type: markdown
attributes:
value: |
## 在提交问题之前,请确认以下事项:
1. 请 **确保** 您已经查阅了 [Clash Verge Rev 官方文档](https://clash-verge-rev.github.io/guide/term.html) 确认软件不存在类似的功能
2. 请 **确保** [已有的问题](https://github.com/clash-verge-rev/clash-verge-rev/issues?q=is%3Aissue) 中没有人提交过相似 issue否则请在已有的 issue 下进行讨论
3. 请 **务必** 给issue填写一个简洁明了的标题以便他人快速检索
4. 请 **务必** 先下载 [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) 版本测试,确保该功能还未实现
5. 请 **务必** 按照模板规范详细描述问题,否则 issue 将会被关闭
## Before submitting the issue, please make sure of the following checklist:
1. Please make sure you have read the [Clash Verge Rev official documentation](https://clash-verge-rev.github.io/guide/term.html) to confirm that the software does not have similar functions
2. Please make sure there is no similar issue in the [existing issues](https://github.com/clash-verge-rev/clash-verge-rev/issues?q=is%3Aissue), otherwise please discuss under the existing issue
3. Please be sure to fill in a concise and clear title for the issue so that others can quickly search
4. Please be sure to download the [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) version for testing to ensure that the function has not been implemented
5. Please describe the problem in detail according to the template specification, otherwise the issue will be closed
- type: textarea
id: description
attributes:
label: 功能描述 / Feature description
description: 详细清晰地描述你的功能请求 / A clear and concise description of what the feature is
validations:
required: true
- type: textarea
attributes:
label: 使用场景 / Use case
description: 请描述你的功能请求的使用场景 / Please describe the use case of your feature request
validations:
required: true
- type: checkboxes
id: os-labels
attributes:
label: 适用系统 / Target OS
description: 请选择该功能适用的操作系统(至少选择一个) / Please select the operating system(s) for this feature request (select at least one)
options:
- label: windows
- label: macos
- label: linux
validations:
required: true

58
.github/ISSUE_TEMPLATE/i18n_request.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
name: I18N / 多语言相关
title: "[I18N] "
description: 用于多语言翻译、国际化相关问题或建议 / For issues or suggestions related to translations and internationalization
labels: ["I18n"]
type: "Task"
body:
- type: markdown
attributes:
value: |
## I18N 相关问题/建议
请用此模板提交翻译错误、缺失、建议或新增语言请求。
Please use this template for translation errors, missing translations, suggestions, or new language requests.
- type: textarea
id: description
attributes:
label: 问题描述 / Description
description: 详细描述你的 I18N 问题或建议 / Please describe your I18N issue or suggestion in detail
validations:
required: true
- type: input
id: language
attributes:
label: 相关语言 / Language
description: 例如 zh, en, jp, ru, ... / e.g. zh, en, jp, ru, ...
validations:
required: true
- type: textarea
id: suggestion
attributes:
label: 建议或修正内容 / Suggestion or Correction
description: 如果是翻译修正或建议,请填写建议的内容 / If this is a translation correction or suggestion, please provide the suggested content
validations:
required: false
- type: checkboxes
id: i18n-type
attributes:
label: 问题类型 / Issue Type
description: 请选择适用类型(可多选) / Please select the applicable type(s)
options:
- label: 翻译错误 / Translation error
- label: 翻译缺失 / Missing translation
- label: 建议优化 / Suggestion
- label: 新增语言 / New language
validations:
required: true
- type: input
id: verge-version
attributes:
label: 软件版本 / CVR Version
description: 请提供你使用的 CVR 具体版本 / Please provide the specific version of CVR you are using
validations:
required: true

574
.github/workflows/alpha.yml vendored Normal file
View File

@@ -0,0 +1,574 @@
name: Alpha Build
on:
# 因为 alpha 不再负责频繁构建,且需要相对于 autobuild 更稳定使用环境
# 所以不再使用 workflow_dispatch 触发
# 应当通过 git tag 来触发构建
# TODO 手动控制版本号
workflow_dispatch:
# inputs:
# tag_name:
# description: "Alpha tag name (e.g. v1.2.3-alpha.1)"
# required: true
# type: string
# push:
# # 应当限制在 dev 分支上触发发布。
# branches:
# - dev
# # 应当限制 v*.*.*-alpha* 的 tag 来触发发布。
# tags:
# - "v*.*.*-alpha*"
permissions: write-all
env:
TAG_NAME: alpha
TAG_CHANNEL: Alpha
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
HUSKY: 0
concurrency:
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
jobs:
check_alpha_tag:
name: Check Alpha Tag package.json Version Consistency
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Check tag and package.json version
id: check_tag
run: |
TAG_REF="${GITHUB_REF##*/}"
echo "Current tag: $TAG_REF"
if [[ ! "$TAG_REF" =~ -alpha ]]; then
echo "Current tag is not an alpha tag."
exit 1
fi
PKG_VERSION=$(jq -r .version package.json)
echo "package.json version: $PKG_VERSION"
if [[ "$PKG_VERSION" != *alpha* ]]; then
echo "package.json version is not an alpha version."
exit 1
fi
if [[ "$TAG_REF" != "v$PKG_VERSION" ]]; then
echo "Tag ($TAG_REF) does not match package.json version (v$PKG_VERSION)."
exit 1
fi
echo "Alpha tag and package.json version are consistent."
delete_old_assets:
name: Delete Old Alpha Release Assets and Tags
needs: check_alpha_tag
runs-on: ubuntu-latest
steps:
- name: Delete Old Alpha Tags Except Latest
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const tagPattern = /-alpha.*/; // 匹配带有 -alpha 的 tag
const owner = context.repo.owner;
const repo = context.repo.repo;
try {
// 获取所有 tag
const { data: tags } = await github.rest.repos.listTags({
owner,
repo,
per_page: 100 // 调整 per_page 以获取更多 tag
});
// 过滤出包含 -alpha 的 tag
const alphaTags = (await Promise.all(
tags
.filter(tag => tagPattern.test(tag.name))
.map(async tag => {
// 获取每个 tag 的 commit 信息以获得日期
const { data: commit } = await github.rest.repos.getCommit({
owner,
repo,
ref: tag.commit.sha
});
return {
...tag,
commitDate: commit.committer && commit.committer.date ? commit.committer.date : commit.commit.author.date
};
})
)).sort((a, b) => {
// 按 commit 日期降序排序(最新的在前面)
return new Date(b.commitDate) - new Date(a.commitDate);
});
console.log(`Found ${alphaTags.length} alpha tags`);
if (alphaTags.length === 0) {
console.log('No alpha tags found');
return;
}
// 保留最新的 tag
const latestTag = alphaTags[0];
console.log(`Keeping latest alpha tag: ${latestTag.name}`);
// 处理其他旧的 alpha tag
for (const tag of alphaTags.slice(1)) {
console.log(`Processing tag: ${tag.name}`);
// 获取与 tag 关联的 release
try {
const { data: release } = await github.rest.repos.getReleaseByTag({
owner,
repo,
tag: tag.name
});
// 删除 release 下的所有资产
if (release.assets && release.assets.length > 0) {
console.log(`Deleting ${release.assets.length} assets for release ${tag.name}`);
for (const asset of release.assets) {
console.log(`Deleting asset: ${asset.name} (${asset.id})`);
await github.rest.repos.deleteReleaseAsset({
owner,
repo,
asset_id: asset.id
});
}
}
// 删除 release
console.log(`Deleting release for tag: ${tag.name}`);
await github.rest.repos.deleteRelease({
owner,
repo,
release_id: release.id
});
// 删除 tag
console.log(`Deleting tag: ${tag.name}`);
await github.rest.git.deleteRef({
owner,
repo,
ref: `tags/${tag.name}`
});
} catch (error) {
if (error.status === 404) {
console.log(`No release found for tag ${tag.name}, deleting tag directly`);
await github.rest.git.deleteRef({
owner,
repo,
ref: `tags/${tag.name}`
});
} else {
console.error(`Error processing tag ${tag.name}:`, error);
throw error;
}
}
}
console.log('Old alpha tags and releases deleted successfully');
} catch (error) {
console.error('Error:', error);
throw error;
}
update_tag:
name: Update tag
runs-on: ubuntu-latest
needs: delete_old_assets
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Fetch UPDATE logs
id: fetch_update_logs
run: |
if [ -f "Changelog.md" ]; then
UPDATE_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' Changelog.md)
if [ -n "$UPDATE_LOGS" ]; then
echo "Found update logs"
echo "UPDATE_LOGS<<EOF" >> $GITHUB_ENV
echo "$UPDATE_LOGS" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
else
echo "No update sections found in Changelog.md"
fi
else
echo "Changelog.md file not found"
fi
shell: bash
- name: Set Env
run: |
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
shell: bash
- run: |
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found update logs"
fi
cat > release.txt << EOF
$UPDATE_LOGS
## 我应该下载哪个版本?
### MacOS
- MacOS intel芯片: x64.dmg
- MacOS apple M芯片: aarch64.dmg
### Linux
- Linux 64位: amd64.deb/amd64.rpm
- Linux arm64 architecture: arm64.deb/aarch64.rpm
- Linux armv7架构: armhf.deb/armhfp.rpm
### Windows (不再支持Win7)
#### 正常版本(推荐)
- 64位: x64-setup.exe
- arm64架构: arm64-setup.exe
#### 便携版问题很多不再提供
#### 内置Webview2版(体积较大仅在企业版系统或无法安装webview2时使用)
- 64位: x64_fixed_webview2-setup.exe
- arm64架构: arm64_fixed_webview2-setup.exe
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
Created at ${{ env.BUILDTIME }}.
EOF
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
body_path: release.txt
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
generate_release_notes: true
alpha-x86-windows-macos-linux:
name: Alpha x86 Windows, MacOS and Linux
needs: update_tag
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: windows-latest
target: aarch64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
- os: macos-latest
target: x86_64-apple-darwin
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@stable
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
save-if: false
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
- name: Install x86 OpenSSL (macOS only)
if: matrix.target == 'x86_64-apple-darwin'
run: |
arch -x86_64 brew install openssl@3
echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl@3)/include" >> $GITHUB_ENV
echo "OPENSSL_LIB_DIR=$(brew --prefix openssl@3)/lib" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig" >> $GITHUB_ENV
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
# - name: Release ${{ env.TAG_CHANNEL }} Version
# run: pnpm release-version ${{ env.TAG_NAME }}
- name: Tauri build
uses: tauri-apps/tauri-action@v0
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: ${{ env.TAG_NAME }}
releaseName: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
releaseBody: "More new features are now supported."
releaseDraft: false
prerelease: true
tauriScript: pnpm
args: --target ${{ matrix.target }}
alpha-arm-linux:
name: Alpha ARM Linux
needs: update_tag
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
arch: arm64
- os: ubuntu-22.04
target: armv7-unknown-linux-gnueabihf
arch: armhf
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@stable
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
save-if: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
# - name: Release ${{ env.TAG_CHANNEL }} Version
# run: pnpm release-version ${{ env.TAG_NAME }}
- name: Setup for linux
run: |
sudo ls -lR /etc/apt/
cat > /tmp/sources.list << EOF
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-security main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main multiverse universe restricted
EOF
sudo mv /etc/apt/sources.list /etc/apt/sources.list.default
sudo mv /tmp/sources.list /etc/apt/sources.list
sudo dpkg --add-architecture ${{ matrix.arch }}
sudo apt-get update -y
sudo apt-get -f install -y
sudo apt-get install -y \
linux-libc-dev:${{ matrix.arch }} \
libc6-dev:${{ matrix.arch }}
sudo apt-get install -y \
libxslt1.1:${{ matrix.arch }} \
libwebkit2gtk-4.1-dev:${{ matrix.arch }} \
libayatana-appindicator3-dev:${{ matrix.arch }} \
libssl-dev:${{ matrix.arch }} \
patchelf:${{ matrix.arch }} \
librsvg2-dev:${{ matrix.arch }}
- name: Install aarch64 tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu
- name: Install armv7 tools
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
run: |
sudo apt install -y \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf
- name: Build for Linux
run: |
export PKG_CONFIG_ALLOW_CROSS=1
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]; then
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/
elif [ "${{ matrix.target }}" == "armv7-unknown-linux-gnueabihf" ]; then
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/
fi
pnpm build --target ${{ matrix.target }}
env:
NODE_OPTIONS: "--max_old_space_size=4096"
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: Get Version
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
files: |
src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb
src-tauri/target/${{ matrix.target }}/release/bundle/rpm/*.rpm
alpha-x86-arm-windows_webview2:
name: Alpha x86 and ARM Windows with WebView2
needs: update_tag
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
arch: x64
- os: windows-latest
target: aarch64-pc-windows-msvc
arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
save-if: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
# - name: Release ${{ env.TAG_CHANNEL }} Version
# run: pnpm release-version ${{ env.TAG_NAME }}
- name: Download WebView2 Runtime
run: |
invoke-webrequest -uri https://github.com/westinyang/WebView2RuntimeArchive/releases/download/133.0.3065.92/Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -outfile Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab
Expand .\Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -F:* ./src-tauri
Remove-Item .\src-tauri\tauri.windows.conf.json
Rename-Item .\src-tauri\webview2.${{ matrix.arch }}.json tauri.windows.conf.json
- name: Tauri build
id: build
uses: tauri-apps/tauri-action@v0
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tauriScript: pnpm
args: --target ${{ matrix.target }}
- name: Rename
run: |
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe$", "_fixed_webview2-setup.exe"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*.nsis.zip"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.nsis\.zip$", "_fixed_webview2-setup.nsis.zip"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe.sig"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe\.sig$", "_fixed_webview2-setup.exe.sig"
Rename-Item $file.FullName $newName
}
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup*
- name: Portable Bundle
run: pnpm portable-fixed-webview2 ${{ matrix.target }} --${{ env.TAG_NAME }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -0,0 +1,133 @@
name: Autobuild Check Logic Test
on:
workflow_dispatch:
jobs:
check_autobuild_logic:
name: Check Autobuild Should Run Logic
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Check if version or source changed, or assets already exist
id: check
run: |
# # 仅用于测试逻辑,手动触发自动跳过
# if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
# echo "should_run=skip" >> $GITHUB_OUTPUT
# echo "🟡 手动触发,跳过 should_run 检查"
# exit 0
# fi
# 确保有 HEAD~1
if ! git rev-parse HEAD~1 > /dev/null 2>&1; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 没有前一个提交,默认需要构建"
exit 0
fi
# 版本号变更判断
CURRENT_VERSION=$(jq -r '.version' package.json)
PREVIOUS_VERSION=$(git show HEAD~1:package.json | jq -r '.version' 2>/dev/null || echo "")
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 版本号变更: $PREVIOUS_VERSION → $CURRENT_VERSION"
exit 0
fi
# 检查 src 变更(排除常见产物与缓存)
SRC_DIFF=$(git diff --name-only HEAD~1 HEAD -- src/ | grep -Ev '^src/(dist|build|node_modules|\.next|\.cache)' || true)
TAURI_DIFF=$(git diff --name-only HEAD~1 HEAD -- src-tauri/ | grep -Ev '^src-tauri/(target|node_modules|dist|\.cache)' || true)
if [ -n "$SRC_DIFF" ] || [ -n "$TAURI_DIFF" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 源码变更 detected"
exit 0
fi
# 找到最后一个修改 Tauri 相关文件的 commit
echo "🔍 查找最后一个 Tauri 相关变更的 commit..."
LAST_TAURI_COMMIT=""
for commit in $(git rev-list HEAD --max-count=50); do
# 检查此 commit 是否修改了 Tauri 相关文件
CHANGED_FILES=$(git show --name-only --pretty=format: $commit | tr '\n' ' ')
HAS_TAURI_CHANGES=false
# 检查各个模式
if echo "$CHANGED_FILES" | grep -q "src/" && echo "$CHANGED_FILES" | grep -qvE "src/(dist|build|node_modules|\.next|\.cache)"; then
HAS_TAURI_CHANGES=true
elif echo "$CHANGED_FILES" | grep -qE "src-tauri/(src|Cargo\.(toml|lock)|tauri\..*\.conf\.json|build\.rs|capabilities)"; then
HAS_TAURI_CHANGES=true
fi
if [ "$HAS_TAURI_CHANGES" = true ]; then
LAST_TAURI_COMMIT=$(git rev-parse --short $commit)
break
fi
done
if [ -z "$LAST_TAURI_COMMIT" ]; then
echo "⚠️ 最近的 commits 中未找到 Tauri 相关变更,使用当前 commit"
LAST_TAURI_COMMIT=$(git rev-parse --short HEAD)
fi
CURRENT_COMMIT=$(git rev-parse --short HEAD)
echo "📝 最后 Tauri 相关 commit: $LAST_TAURI_COMMIT"
echo "📝 当前 commit: $CURRENT_COMMIT"
# 检查 autobuild release 是否存在
AUTOBUILD_RELEASE_EXISTS=$(gh release view "autobuild" --json id -q '.id' 2>/dev/null || echo "")
if [ -z "$AUTOBUILD_RELEASE_EXISTS" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 没有 autobuild release需构建"
else
# 检查 latest.json 是否存在
LATEST_JSON_EXISTS=$(gh release view "autobuild" --json assets -q '.assets[] | select(.name == "latest.json") | .name' 2>/dev/null || echo "")
if [ -z "$LATEST_JSON_EXISTS" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 没有 latest.json需构建"
else
# 下载并解析 latest.json 检查版本和 commit hash
echo "📥 下载 latest.json 检查版本..."
LATEST_JSON_URL=$(gh release view "autobuild" --json assets -q '.assets[] | select(.name == "latest.json") | .browser_download_url' 2>/dev/null)
if [ -n "$LATEST_JSON_URL" ]; then
LATEST_JSON_CONTENT=$(curl -s "$LATEST_JSON_URL" 2>/dev/null || echo "")
if [ -n "$LATEST_JSON_CONTENT" ]; then
LATEST_VERSION=$(echo "$LATEST_JSON_CONTENT" | jq -r '.version' 2>/dev/null || echo "")
echo "📦 最新 autobuild 版本: $LATEST_VERSION"
# 从版本字符串中提取 commit hash (格式: X.Y.Z+autobuild.MMDD.commit)
LATEST_COMMIT=$(echo "$LATEST_VERSION" | sed -n 's/.*+autobuild\.[0-9]\{4\}\.\([a-f0-9]*\)$/\1/p' || echo "")
echo "📝 最新 autobuild commit: $LATEST_COMMIT"
if [ "$LAST_TAURI_COMMIT" != "$LATEST_COMMIT" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "🟢 Tauri commit hash 不匹配 ($LAST_TAURI_COMMIT != $LATEST_COMMIT),需构建"
else
echo "should_run=false" >> $GITHUB_OUTPUT
echo "🔴 相同 Tauri commit hash ($LAST_TAURI_COMMIT),不需构建"
fi
else
echo "should_run=true" >> $GITHUB_OUTPUT
echo "⚠️ 无法下载或解析 latest.json需构建"
fi
else
echo "should_run=true" >> $GITHUB_OUTPUT
echo "⚠️ 无法获取 latest.json 下载 URL需构建"
fi
fi
fi
- name: Output should_run result
run: |
echo "Result: ${{ steps.check.outputs.should_run }}"

611
.github/workflows/autobuild.yml vendored Normal file
View File

@@ -0,0 +1,611 @@
name: Auto Build
on:
workflow_dispatch:
schedule:
# UTC+8 12:00, 18:00 -> UTC 4:00, 10:00
- cron: "0 4,10 * * *"
permissions: write-all
env:
TAG_NAME: autobuild
TAG_CHANNEL: AutoBuild
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
HUSKY: 0
concurrency:
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
check_commit:
name: Check Commit Needs Build
uses: clash-verge-rev/clash-verge-rev/.github/workflows/check-commit-needs-build.yml@dev
with:
tag_name: autobuild
force_build: ${{ github.event_name == 'workflow_dispatch' }}
update_tag:
name: Update tag
runs-on: ubuntu-latest
needs: check_commit
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Fetch UPDATE logs
id: fetch_update_logs
run: bash ./scripts/extract_update_logs.sh
shell: bash
- uses: pnpm/action-setup@v4.2.0
name: Install pnpm
with:
run_install: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Release AutoBuild Version
run: pnpm release-version autobuild-latest
- name: Set Env
run: |
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
VERSION=$(jq -r .version package.json)
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "DOWNLOAD_URL=https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild" >> $GITHUB_ENV
shell: bash
- run: |
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found update logs"
fi
cat > release.txt << EOF
$UPDATE_LOGS
## 下载地址
### Windows (不再支持Win7)
#### 正常版本(推荐)
- [64位(常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64-setup.exe) | [ARM64(不常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64-setup.exe)
#### 内置Webview2版(体积较大仅在企业版系统或无法安装webview2时使用)
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64_fixed_webview2-setup.exe) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64_fixed_webview2-setup.exe)
### macOS
- [Apple M芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_aarch64.dmg) | [Intel芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64.dmg)
### Linux
#### DEB包(Debian系) 使用 apt ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_amd64.deb) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64.deb) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_armhf.deb)
#### RPM包(Redhat系) 使用 dnf ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.x86_64.rpm) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.aarch64.rpm) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.armhfp.rpm)
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
Created at ${{ env.BUILDTIME }}.
EOF
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
body_path: release.txt
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
generate_release_notes: false
clean_old_assets:
name: Clean Old Release Assets
needs: [check_commit, update_tag]
if: ${{ needs.check_commit.outputs.should_run == 'true' && needs.update_tag.result == 'success' }}
uses: clash-verge-rev/clash-verge-rev/.github/workflows/clean-old-assets.yml@dev
with:
tag_name: autobuild
dry_run: false
autobuild-x86-windows-macos-linux:
name: Autobuild x86 Windows, MacOS and Linux
needs: [check_commit, update_tag]
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: windows-latest
target: aarch64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
- os: macos-latest
target: x86_64-apple-darwin
- os: ubuntu-24.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.91.0"
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-24.04'
run: |
sudo apt-get update
sudo apt install \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Install x86 OpenSSL (macOS only)
if: matrix.target == 'x86_64-apple-darwin'
run: |
arch -x86_64 brew install openssl@3
echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl@3)/include" >> $GITHUB_ENV
echo "OPENSSL_LIB_DIR=$(brew --prefix openssl@3)/lib" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig" >> $GITHUB_ENV
- uses: pnpm/action-setup@v4.2.0
name: Install pnpm
with:
run_install: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
cache: "pnpm"
- name: Pnpm Cache
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: "pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
restore-keys: |
pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Release ${{ env.TAG_CHANNEL }} Version
run: pnpm release-version autobuild-latest
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri build for Windows-macOS-Linux
uses: tauri-apps/tauri-action@v0
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: ${{ env.TAG_NAME }}
releaseName: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
releaseBody: "More new features are now supported."
releaseDraft: false
prerelease: true
tauriScript: pnpm
args: --target ${{ matrix.target }}
# includeUpdaterJson: true
autobuild-arm-linux:
name: Autobuild ARM Linux
needs: [check_commit, update_tag]
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
include:
# It should be ubuntu-22.04 to match the cross-compilation environment
# ortherwise it is hard to resolve the dependencies
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
arch: arm64
- os: ubuntu-22.04
target: armv7-unknown-linux-gnueabihf
arch: armhf
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.91.0"
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install pnpm
uses: pnpm/action-setup@v4.2.0
with:
run_install: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
cache: "pnpm"
- name: Pnpm Cache
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: "pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
restore-keys: |
pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Release ${{ env.TAG_CHANNEL }} Version
run: pnpm release-version autobuild-latest
- name: "Setup for linux"
run: |-
sudo ls -lR /etc/apt/
cat > /tmp/sources.list << EOF
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-security main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main multiverse universe restricted
EOF
sudo mv /etc/apt/sources.list /etc/apt/sources.list.default
sudo mv /tmp/sources.list /etc/apt/sources.list
sudo dpkg --add-architecture ${{ matrix.arch }}
sudo apt update
sudo apt install -y \
libxslt1.1:${{ matrix.arch }} \
libwebkit2gtk-4.1-dev:${{ matrix.arch }} \
libayatana-appindicator3-dev:${{ matrix.arch }} \
libssl-dev:${{ matrix.arch }} \
patchelf:${{ matrix.arch }} \
librsvg2-dev:${{ matrix.arch }}
- name: Install aarch64 tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu
- name: Install armv7 tools
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
run: |
sudo apt install -y \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri Build for Linux
run: |
export PKG_CONFIG_ALLOW_CROSS=1
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]; then
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/
elif [ "${{ matrix.target }}" == "armv7-unknown-linux-gnueabihf" ]; then
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/
fi
pnpm build --target ${{ matrix.target }}
env:
NODE_OPTIONS: "--max_old_space_size=4096"
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: Get Version
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
files: |
target/${{ matrix.target }}/release/bundle/deb/*.deb
target/${{ matrix.target }}/release/bundle/rpm/*.rpm
autobuild-x86-arm-windows_webview2:
name: Autobuild x86 and ARM Windows with WebView2
needs: [check_commit, update_tag]
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
arch: x64
- os: windows-latest
target: aarch64-pc-windows-msvc
arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install pnpm
uses: pnpm/action-setup@v4.2.0
with:
run_install: false
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
cache: "pnpm"
- name: Pnpm Cache
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: "pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
restore-keys: |
pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Release ${{ env.TAG_CHANNEL }} Version
run: pnpm release-version autobuild-latest
- name: Download WebView2 Runtime
run: |
invoke-webrequest -uri https://github.com/westinyang/WebView2RuntimeArchive/releases/download/133.0.3065.92/Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -outfile Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab
Expand .\Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -F:* ./src-tauri
Remove-Item .\src-tauri\tauri.windows.conf.json
Rename-Item .\src-tauri\webview2.${{ matrix.arch }}.json tauri.windows.conf.json
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri build for Windows
id: build
uses: tauri-apps/tauri-action@v0
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tauriScript: pnpm
args: --target ${{ matrix.target }}
# includeUpdaterJson: true
- name: Rename
run: |
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe$", "_fixed_webview2-setup.exe"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*.nsis.zip"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.nsis\.zip$", "_fixed_webview2-setup.nsis.zip"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe.sig"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe\.sig$", "_fixed_webview2-setup.exe.sig"
Rename-Item $file.FullName $newName
}
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
files: target/${{ matrix.target }}/release/bundle/nsis/*setup*
- name: Portable Bundle
run: pnpm portable-fixed-webview2 ${{ matrix.target }} --${{ env.TAG_NAME }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
notify-telegram:
name: Notify Telegram
runs-on: ubuntu-latest
needs:
[
update_tag,
autobuild-x86-windows-macos-linux,
autobuild-arm-linux,
autobuild-x86-arm-windows_webview2,
]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Fetch UPDATE logs
id: fetch_update_logs
run: bash ./scripts/extract_update_logs.sh
shell: bash
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4.2.0
name: Install pnpm
with:
run_install: false
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Release AutoBuild Version
run: pnpm release-version autobuild-latest
- name: Get Version and Release Info
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "DOWNLOAD_URL=https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild" >> $GITHUB_ENV
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
- name: Generate release.txt
run: |
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found update logs"
fi
cat > release.txt << EOF
$UPDATE_LOGS
## 下载地址
### Windows (不再支持Win7)
#### 正常版本(推荐)
- [64位(常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64-setup.exe) | [ARM64(不常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64-setup.exe)
#### 内置Webview2版(体积较大仅在企业版系统或无法安装webview2时使用)
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64_fixed_webview2-setup.exe) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64_fixed_webview2-setup.exe)
### macOS
- [Apple M芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_aarch64.dmg) | [Intel芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64.dmg)
### Linux
#### DEB包(Debian系) 使用 apt ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_amd64.deb) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64.deb) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_armhf.deb)
#### RPM包(Redhat系) 使用 dnf ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.x86_64.rpm) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.aarch64.rpm) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.armhfp.rpm)
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
Created at ${{ env.BUILDTIME }}.
EOF
- name: Send Telegram Notification
run: node scripts/telegram.mjs
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
BUILD_TYPE: autobuild
VERSION: ${{ env.VERSION }}
DOWNLOAD_URL: ${{ env.DOWNLOAD_URL }}

View File

@@ -0,0 +1,159 @@
name: Check Commit Needs Build
on:
workflow_dispatch:
inputs:
tag_name:
description: "Release tag name to check against (default: autobuild)"
required: false
default: "autobuild"
type: string
force_build:
description: "Force build regardless of checks"
required: false
default: false
type: boolean
workflow_call:
inputs:
tag_name:
description: "Release tag name to check against (default: autobuild)"
required: false
default: "autobuild"
type: string
force_build:
description: "Force build regardless of checks"
required: false
default: false
type: boolean
outputs:
should_run:
description: "Whether the build should run"
value: ${{ jobs.check_commit.outputs.should_run }}
last_tauri_commit:
description: "The last commit hash with Tauri-related changes"
value: ${{ jobs.check_commit.outputs.last_tauri_commit }}
autobuild_version:
description: "The generated autobuild version string"
value: ${{ jobs.check_commit.outputs.autobuild_version }}
permissions:
contents: read
actions: read
env:
TAG_NAME: ${{ inputs.tag_name || 'autobuild' }}
jobs:
check_commit:
name: Check Commit Needs Build
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check.outputs.should_run }}
last_tauri_commit: ${{ steps.check.outputs.last_tauri_commit }}
autobuild_version: ${{ steps.check.outputs.autobuild_version }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 50
- name: Check if version changed or src changed
id: check
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Force build if requested
if [ "${{ inputs.force_build }}" == "true" ]; then
echo "🚀 Force build requested"
echo "should_run=true" >> $GITHUB_OUTPUT
exit 0
fi
CURRENT_VERSION=$(cat package.json | jq -r '.version')
echo "📦 Current version: $CURRENT_VERSION"
git checkout HEAD~1 package.json
PREVIOUS_VERSION=$(cat package.json | jq -r '.version')
echo "📦 Previous version: $PREVIOUS_VERSION"
git checkout HEAD package.json
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
echo "✅ Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
echo "should_run=true" >> $GITHUB_OUTPUT
exit 0
fi
# Use get_latest_tauri_commit.bash to find the latest Tauri-related commit
echo "🔍 Finding last commit with Tauri-related changes using script..."
# Make script executable
chmod +x scripts-workflow/get_latest_tauri_commit.bash
# Get the latest Tauri-related commit hash (full hash)
LAST_TAURI_COMMIT_FULL=$(./scripts-workflow/get_latest_tauri_commit.bash)
if [[ $? -ne 0 ]] || [[ -z "$LAST_TAURI_COMMIT_FULL" ]]; then
echo "❌ Failed to get Tauri-related commit, using current commit"
LAST_TAURI_COMMIT_FULL=$(git rev-parse HEAD)
fi
# Get short hash for display and version tagging
LAST_TAURI_COMMIT=$(git rev-parse --short "$LAST_TAURI_COMMIT_FULL")
echo "📝 Last Tauri-related commit: $LAST_TAURI_COMMIT"
# Generate autobuild version using autobuild-latest format
CURRENT_BASE_VERSION=$(echo "$CURRENT_VERSION" | sed -E 's/-(alpha|beta|rc)(\.[0-9]+)?//g' | sed -E 's/\+[a-zA-Z0-9.-]+//g')
MONTH=$(TZ=Asia/Shanghai date +%m)
DAY=$(TZ=Asia/Shanghai date +%d)
AUTOBUILD_VERSION="${CURRENT_BASE_VERSION}+autobuild.${MONTH}${DAY}.${LAST_TAURI_COMMIT}"
echo "🏷️ Autobuild version: $AUTOBUILD_VERSION"
echo "📝 Last Tauri commit: $LAST_TAURI_COMMIT"
# Set outputs for other jobs to use
echo "last_tauri_commit=$LAST_TAURI_COMMIT" >> $GITHUB_OUTPUT
echo "autobuild_version=$AUTOBUILD_VERSION" >> $GITHUB_OUTPUT
# Check if autobuild release exists
echo "🔍 Checking autobuild release and latest.json..."
AUTOBUILD_RELEASE_EXISTS=$(gh release view "${{ env.TAG_NAME }}" --json id -q '.id' 2>/dev/null || echo "")
if [ -z "$AUTOBUILD_RELEASE_EXISTS" ]; then
echo "✅ No autobuild release exists, build needed"
echo "should_run=true" >> $GITHUB_OUTPUT
else
# Check if latest.json exists in the release
LATEST_JSON_EXISTS=$(gh release view "${{ env.TAG_NAME }}" --json assets -q '.assets[] | select(.name == "latest.json") | .name' 2>/dev/null || echo "")
if [ -z "$LATEST_JSON_EXISTS" ]; then
echo "✅ No latest.json found in autobuild release, build needed"
echo "should_run=true" >> $GITHUB_OUTPUT
else
# Download and parse latest.json to check version and commit hash
echo "📥 Downloading latest.json to check version..."
LATEST_JSON_URL="https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild/latest.json"
LATEST_JSON_CONTENT=$(curl -sL "$LATEST_JSON_URL" 2>/dev/null || echo "")
if [ -n "$LATEST_JSON_CONTENT" ]; then
LATEST_VERSION=$(echo "$LATEST_JSON_CONTENT" | jq -r '.version' 2>/dev/null || echo "")
echo "📦 Latest autobuild version: $LATEST_VERSION"
# Extract commit hash from version string (format: X.Y.Z+autobuild.MMDD.commit)
LATEST_COMMIT=$(echo "$LATEST_VERSION" | sed -n 's/.*+autobuild\.[0-9]\{4\}\.\([a-f0-9]*\)$/\1/p' || echo "")
echo "📝 Latest autobuild commit: $LATEST_COMMIT"
if [ "$LAST_TAURI_COMMIT" != "$LATEST_COMMIT" ]; then
echo "✅ Tauri commit hash mismatch ($LAST_TAURI_COMMIT != $LATEST_COMMIT), build needed"
echo "should_run=true" >> $GITHUB_OUTPUT
else
echo "❌ Same Tauri commit hash ($LAST_TAURI_COMMIT), no build needed"
echo "should_run=false" >> $GITHUB_OUTPUT
fi
else
echo "⚠️ Failed to download or parse latest.json, build needed"
echo "should_run=true" >> $GITHUB_OUTPUT
fi
fi
fi

220
.github/workflows/clean-old-assets.yml vendored Normal file
View File

@@ -0,0 +1,220 @@
name: Clean Old Assets
on:
workflow_dispatch:
inputs:
tag_name:
description: "Release tag name to clean (default: autobuild)"
required: false
default: "autobuild"
type: string
dry_run:
description: "Dry run mode (only show what would be deleted)"
required: false
default: false
type: boolean
workflow_call:
inputs:
tag_name:
description: "Release tag name to clean (default: autobuild)"
required: false
default: "autobuild"
type: string
dry_run:
description: "Dry run mode (only show what would be deleted)"
required: false
default: false
type: boolean
permissions: write-all
env:
TAG_NAME: ${{ inputs.tag_name || 'autobuild' }}
TAG_CHANNEL: AutoBuild
jobs:
check_current_version:
name: Check Current Version and Commit
runs-on: ubuntu-latest
outputs:
current_version: ${{ steps.check.outputs.current_version }}
last_tauri_commit: ${{ steps.check.outputs.last_tauri_commit }}
autobuild_version: ${{ steps.check.outputs.autobuild_version }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 50
- name: Get current version and find last Tauri commit
id: check
run: |
CURRENT_VERSION=$(cat package.json | jq -r '.version')
echo "📦 Current version: $CURRENT_VERSION"
# Find the last commit that changed Tauri-related files
echo "🔍 Finding last commit with Tauri-related changes..."
# Define patterns for Tauri-related files
TAURI_PATTERNS="src/ src-tauri/src src-tauri/Cargo.toml Cargo.lock src-tauri/tauri.*.conf.json src-tauri/build.rs src-tauri/capabilities"
# Get the last commit that changed any of these patterns (excluding build artifacts)
LAST_TAURI_COMMIT=""
for commit in $(git rev-list HEAD --max-count=50); do
# Check if this commit changed any Tauri-related files
CHANGED_FILES=$(git show --name-only --pretty=format: $commit | tr '\n' ' ')
HAS_TAURI_CHANGES=false
# Check each pattern
if echo "$CHANGED_FILES" | grep -q "src/" && echo "$CHANGED_FILES" | grep -qvE "src/(dist|build|node_modules|\.next|\.cache)"; then
HAS_TAURI_CHANGES=true
elif echo "$CHANGED_FILES" | grep -qE "src-tauri/(src|Cargo\.(toml|lock)|tauri\..*\.conf\.json|build\.rs|capabilities)"; then
HAS_TAURI_CHANGES=true
fi
if [ "$HAS_TAURI_CHANGES" = true ]; then
LAST_TAURI_COMMIT=$(git rev-parse --short $commit)
break
fi
done
if [ -z "$LAST_TAURI_COMMIT" ]; then
echo "⚠️ No Tauri-related changes found in recent commits, using current commit"
LAST_TAURI_COMMIT=$(git rev-parse --short HEAD)
fi
echo "📝 Last Tauri-related commit: $LAST_TAURI_COMMIT"
echo "📝 Current commit: $(git rev-parse --short HEAD)"
# Generate autobuild version for consistency
CURRENT_BASE_VERSION=$(echo "$CURRENT_VERSION" | sed -E 's/-(alpha|beta|rc)(\.[0-9]+)?//g' | sed -E 's/\+[a-zA-Z0-9.-]+//g')
MONTH=$(TZ=Asia/Shanghai date +%m)
DAY=$(TZ=Asia/Shanghai date +%d)
AUTOBUILD_VERSION="${CURRENT_BASE_VERSION}+autobuild.${MONTH}${DAY}.${LAST_TAURI_COMMIT}"
echo "🏷️ Current autobuild version: $AUTOBUILD_VERSION"
# Set outputs for other jobs to use
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
echo "last_tauri_commit=$LAST_TAURI_COMMIT" >> $GITHUB_OUTPUT
echo "autobuild_version=$AUTOBUILD_VERSION" >> $GITHUB_OUTPUT
clean_old_assets:
name: Clean Old Release Assets
runs-on: ubuntu-latest
needs: check_current_version
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Clean old assets from release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: ${{ env.TAG_NAME }}
DRY_RUN: ${{ inputs.dry_run }}
run: |
# Use values from check_current_version job
CURRENT_AUTOBUILD_VERSION="${{ needs.check_current_version.outputs.autobuild_version }}"
LAST_TAURI_COMMIT="${{ needs.check_current_version.outputs.last_tauri_commit }}"
CURRENT_VERSION="${{ needs.check_current_version.outputs.current_version }}"
echo "📦 Current version: $CURRENT_VERSION"
echo "📦 Current autobuild version: $CURRENT_AUTOBUILD_VERSION"
echo "📝 Last Tauri commit: $LAST_TAURI_COMMIT"
echo "🏷️ Target tag: $TAG_NAME"
echo "🔍 Dry run mode: $DRY_RUN"
# Check if release exists
RELEASE_EXISTS=$(gh release view "$TAG_NAME" --json id -q '.id' 2>/dev/null || echo "")
if [ -z "$RELEASE_EXISTS" ]; then
echo "❌ Release '$TAG_NAME' not found"
exit 1
fi
echo "✅ Found release '$TAG_NAME'"
# Get all assets
echo "📋 Getting list of all assets..."
assets=$(gh release view "$TAG_NAME" --json assets -q '.assets[].name' || true)
if [ -z "$assets" ]; then
echo " No assets found in release '$TAG_NAME'"
exit 0
fi
echo "📋 Found assets:"
echo "$assets" | sed 's/^/ - /'
# Count assets to keep and delete
ASSETS_TO_KEEP=""
ASSETS_TO_DELETE=""
for asset in $assets; do
# Keep assets that match current autobuild version or are non-versioned files (like latest.json)
if [[ "$asset" == *"$CURRENT_AUTOBUILD_VERSION"* ]] || [[ "$asset" == "latest.json" ]]; then
ASSETS_TO_KEEP="$ASSETS_TO_KEEP$asset\n"
else
ASSETS_TO_DELETE="$ASSETS_TO_DELETE$asset\n"
fi
done
echo ""
echo "🔒 Assets to keep (current version: $CURRENT_AUTOBUILD_VERSION):"
if [ -n "$ASSETS_TO_KEEP" ]; then
echo -e "$ASSETS_TO_KEEP" | grep -v '^$' | sed 's/^/ - /'
else
echo " - None"
fi
echo ""
echo "🗑️ Assets to delete:"
if [ -n "$ASSETS_TO_DELETE" ]; then
echo -e "$ASSETS_TO_DELETE" | grep -v '^$' | sed 's/^/ - /'
else
echo " - None"
echo " No old assets to clean"
exit 0
fi
if [ "$DRY_RUN" = "true" ]; then
echo ""
echo "🔍 DRY RUN MODE: No assets will actually be deleted"
echo " To actually delete these assets, run this workflow again with dry_run=false"
else
echo ""
echo "🗑️ Deleting old assets..."
DELETED_COUNT=0
FAILED_COUNT=0
for asset in $assets; do
# Skip assets that should be kept
if [[ "$asset" == *"$CURRENT_AUTOBUILD_VERSION"* ]] || [[ "$asset" == "latest.json" ]]; then
continue
fi
echo " Deleting: $asset"
if gh release delete-asset "$TAG_NAME" "$asset" -y 2>/dev/null; then
DELETED_COUNT=$((DELETED_COUNT + 1))
else
echo " ⚠️ Failed to delete $asset"
FAILED_COUNT=$((FAILED_COUNT + 1))
fi
done
echo ""
echo "📊 Cleanup summary:"
echo " - Deleted: $DELETED_COUNT assets"
if [ $FAILED_COUNT -gt 0 ]; then
echo " - Failed: $FAILED_COUNT assets"
fi
echo " - Kept: $(echo -e "$ASSETS_TO_KEEP" | grep -v '^$' | wc -l) assets"
if [ $FAILED_COUNT -gt 0 ]; then
echo "⚠️ Some assets failed to delete. Please check the logs above."
exit 1
else
echo "✅ Cleanup completed successfully!"
fi
fi

67
.github/workflows/cross_check.yaml vendored Normal file
View File

@@ -0,0 +1,67 @@
name: Cross Platform Cargo Check
on:
workflow_dispatch:
# pull_request:
# push:
# branches: [main, dev]
permissions:
contents: read
env:
HUSKY: 0
jobs:
cargo-check:
# Treat all Rust compiler warnings as errors
env:
RUSTFLAGS: "-D warnings"
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
save-if: false
- name: Cargo Check (deny warnings)
working-directory: src-tauri
run: |
cargo check --target ${{ matrix.target }} --workspace --all-features

176
.github/workflows/dev.yml vendored Normal file
View File

@@ -0,0 +1,176 @@
name: Development Test
on:
workflow_dispatch:
inputs:
run_windows:
description: "运行 Windows"
required: false
type: boolean
default: true
run_macos_aarch64:
description: "运行 macOS aarch64"
required: false
type: boolean
default: true
run_windows_arm64:
description: "运行 Windows ARM64"
required: false
type: boolean
default: true
run_linux_amd64:
description: "运行 Linux amd64"
required: false
type: boolean
default: true
permissions: write-all
env:
TAG_NAME: deploytest
TAG_CHANNEL: DeployTest
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
HUSKY: 0
concurrency:
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
dev:
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
bundle: nsis
id: windows
input: run_windows
- os: macos-latest
target: aarch64-apple-darwin
bundle: dmg
id: macos-aarch64
input: run_macos_aarch64
- os: windows-latest
target: aarch64-pc-windows-msvc
bundle: nsis
id: windows-arm64
input: run_windows_arm64
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
bundle: deb
id: linux-amd64
input: run_linux_amd64
runs-on: ${{ matrix.os }}
steps:
- name: Skip job if not selected
if: github.event.inputs[matrix.input] != 'true'
run: echo "Job ${{ matrix.id }} skipped as requested"
- name: Checkout Repository
if: github.event.inputs[matrix.input] == 'true'
uses: actions/checkout@v6
- name: Install Rust Stable
if: github.event.inputs[matrix.input] == 'true'
uses: dtolnay/rust-toolchain@1.91.0
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-22.04' && github.event.inputs[matrix.input] == 'true'
run: |
sudo apt-get update
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
- uses: pnpm/action-setup@v4
name: Install pnpm
if: github.event.inputs[matrix.input] == 'true'
with:
run_install: false
- name: Install Node
if: github.event.inputs[matrix.input] == 'true'
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
cache: "pnpm"
- name: Pnpm Cache
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: "pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
restore-keys: |
pnpm-shared-stable-${{ matrix.os }}-${{ matrix.target }}
lookup-only: true
- name: Pnpm install and check
if: github.event.inputs[matrix.input] == 'true'
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Release ${{ env.TAG_CHANNEL }} Version
if: github.event.inputs[matrix.input] == 'true'
run: pnpm release-version ${{ env.TAG_NAME }}
- name: Add Rust Target
if: github.event.inputs[matrix.input] == 'true'
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri build
if: github.event.inputs[matrix.input] == 'true'
uses: tauri-apps/tauri-action@v0
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tauriScript: pnpm
args: --target ${{ matrix.target }} -b ${{ matrix.bundle }}
- name: Upload Artifacts (macOS)
if: matrix.os == 'macos-latest' && github.event.inputs[matrix.input] == 'true'
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/bundle/dmg/*.dmg
if-no-files-found: error
- name: Upload Artifacts (Windows)
if: matrix.os == 'windows-latest' && github.event.inputs[matrix.input] == 'true'
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/bundle/nsis/*.exe
if-no-files-found: error
- name: Upload Artifacts (Linux)
if: matrix.os == 'ubuntu-22.04' && github.event.inputs[matrix.input] == 'true'
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/bundle/deb/*.deb
if-no-files-found: error

75
.github/workflows/frontend-check.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: Frontend Check
on:
pull_request:
workflow_dispatch:
env:
HUSKY: 0
jobs:
frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check frontend changes
id: check_frontend
uses: dorny/paths-filter@v3
with:
filters: |
frontend:
- 'src/**'
- '**/*.js'
- '**/*.ts'
- '**/*.tsx'
- '**/*.css'
- '**/*.scss'
- '**/*.json'
- '**/*.md'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'eslint.config.ts'
- 'tsconfig.json'
- 'vite.config.*'
- name: Skip if no frontend changes
if: steps.check_frontend.outputs.frontend != 'true'
run: echo "No frontend changes, skipping frontend checks."
- name: Install pnpm
if: steps.check_frontend.outputs.frontend == 'true'
uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v6
if: steps.check_frontend.outputs.frontend == 'true'
with:
node-version: "24.13.0"
cache: "pnpm"
- name: Restore pnpm cache
if: steps.check_frontend.outputs.frontend == 'true'
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: "pnpm-shared-stable-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}"
restore-keys: |
pnpm-shared-stable-${{ runner.os }}-
- run: pnpm install --frozen-lockfile
if: steps.check_frontend.outputs.frontend == 'true'
- name: Run Prettier check
if: steps.check_frontend.outputs.frontend == 'true'
run: pnpm format:check
- name: Run ESLint
if: steps.check_frontend.outputs.frontend == 'true'
run: pnpm lint
- name: Run TypeScript typecheck
if: steps.check_frontend.outputs.frontend == 'true'
run: pnpm typecheck

84
.github/workflows/lint-clippy.yml vendored Normal file
View File

@@ -0,0 +1,84 @@
name: Clippy Lint
on:
pull_request:
workflow_dispatch:
env:
HUSKY: 0
jobs:
clippy:
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Check src-tauri changes
if: github.event_name != 'workflow_dispatch'
id: check_changes
uses: dorny/paths-filter@v3
with:
filters: |
rust:
- 'src-tauri/**'
- name: Skip if src-tauri not changed
if: github.event_name != 'workflow_dispatch' && steps.check_changes.outputs.rust != 'true'
run: echo "No src-tauri changes, skipping clippy lint."
- name: Continue if src-tauri changed
if: github.event_name != 'workflow_dispatch' && steps.check_changes.outputs.rust == 'true'
run: echo "src-tauri changed, running clippy lint."
- name: Manual trigger - always run
if: github.event_name == 'workflow_dispatch'
run: |
echo "Manual trigger detected: skipping changes check and running clippy."
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: clippy
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
- name: Run Clippy
working-directory: ./src-tauri
run: cargo clippy-all
- name: Run Logging Check
working-directory: ./src-tauri
shell: bash
run: |
cargo install --git https://github.com/clash-verge-rev/clash-verge-logging-check.git
clash-verge-logging-check

View File

@@ -1,55 +1,660 @@
name: Release Project
name: Release Build
on:
# ! 为了避免重复发布版本,应当通过独特 git tag 触发。
# ! 不再使用 workflow_dispatch 触发。
# workflow_dispatch:
push:
# -rc tag 时预览发布, 跳过 telegram 通知、跳过 winget 提交、跳过 latest.json 文件更新
tags:
- v*
- "v*.*.*"
permissions: write-all
env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
HUSKY: 0
concurrency:
# only allow per workflow per commit (and not pr) to run at a time
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
build-tauri:
check_tag_version:
name: Check Release Tag and package.json Version Consistency
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Check if tag is from main branch
run: |
TAG_REF="${GITHUB_REF##*/}"
echo "Checking if tag $TAG_REF is from main branch..."
TAG_COMMIT=$(git rev-list -n 1 $TAG_REF)
MAIN_COMMITS=$(git rev-list origin/main)
if echo "$MAIN_COMMITS" | grep -q "$TAG_COMMIT"; then
echo "✅ Tag $TAG_REF is from main branch"
else
echo "❌ Tag $TAG_REF is not from main branch"
echo "This release workflow only accepts tags from main branch."
exit 1
fi
- name: Check tag and package.json version
run: |
TAG_REF="${GITHUB_REF_NAME:-${GITHUB_REF##*/}}"
echo "Current tag: $TAG_REF"
PKG_VERSION=$(jq -r .version package.json)
echo "package.json version: $PKG_VERSION"
EXPECTED_TAG="v$PKG_VERSION"
if [[ "$TAG_REF" != "$EXPECTED_TAG" ]]; then
echo "❌ Version mismatch:"
echo " Git tag : $TAG_REF"
echo " package.json : $EXPECTED_TAG"
exit 1
fi
echo "✅ Tag and package.json version are consistent."
update_tag:
name: Update tag
runs-on: ubuntu-latest
needs: [release, release-for-linux-arm, release-for-fixed-webview2]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Fetch UPDATE logs
id: fetch_update_logs
run: bash ./scripts/extract_update_logs.sh
shell: bash
- name: Set Env
run: |
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
TAG_REF="${GITHUB_REF##*/}"
echo "TAG_NAME=$TAG_REF" >> $GITHUB_ENV
VERSION=$(echo "$TAG_REF" | sed 's/^v//')
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "DOWNLOAD_URL=https://github.com/clash-verge-rev/clash-verge-rev/releases/download/$TAG_REF" >> $GITHUB_ENV
shell: bash
- run: |
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found update logs"
fi
cat > release.txt << EOF
$UPDATE_LOGS
## 下载地址
### Windows (不再支持Win7)
#### 正常版本(推荐)
- [64位(常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64-setup.exe) | [ARM64(不常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64-setup.exe)
#### 内置Webview2版(体积较大仅在企业版系统或无法安装webview2时使用)
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64_fixed_webview2-setup.exe) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64_fixed_webview2-setup.exe)
### macOS
- [Apple M芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_aarch64.dmg) | [Intel芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64.dmg)
### Linux
#### DEB包(Debian系) 使用 apt ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_amd64.deb) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64.deb) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_armhf.deb)
#### RPM包(Redhat系) 使用 dnf ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.x86_64.rpm) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.aarch64.rpm) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.armhfp.rpm)
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
Created at ${{ env.BUILDTIME }}.
EOF
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev ${{ env.TAG_NAME }}"
body_path: release.txt
draft: false
prerelease: ${{ contains(github.ref_name, '-rc') }}
token: ${{ secrets.GITHUB_TOKEN }}
# generate_release_notes: true
release:
name: Release Build
needs: [check_tag_version]
strategy:
fail-fast: false
matrix:
platform: [windows-latest]
runs-on: ${{ matrix.platform }}
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: windows-latest
target: aarch64-pc-windows-msvc
- os: macos-latest
target: aarch64-apple-darwin
- os: macos-latest
target: x86_64-apple-darwin
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: setup node
uses: actions/setup-node@v1
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
node-version: 14
- name: install Rust stable
uses: actions-rs/toolchain@v1
toolchain: "1.91.0"
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
toolchain: stable
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
- name: Install x86 OpenSSL (macOS only)
if: matrix.target == 'x86_64-apple-darwin'
run: |
arch -x86_64 brew install openssl@3
echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl@3)/include" >> $GITHUB_ENV
echo "OPENSSL_LIB_DIR=$(brew --prefix openssl@3)/lib" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig" >> $GITHUB_ENV
- name: Install Node
uses: actions/setup-node@v6
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- uses: actions/cache@v2
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
src-tauri/target/
src-tauri/WixTools/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: install app dependencies and build it
run: yarn && yarn run predev
- uses: tauri-apps/tauri-action@v0
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri build
# 上游 5.24 修改了 latest.json 的生成逻辑,且依赖 tauri-plugin-update 2.10.0 暂未发布,故锁定在 0.5.23 版本
uses: tauri-apps/tauri-action@v0.6.1
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: ${{ github.ref_name }}
releaseName: "Clash Verge Rev ${{ github.ref_name }}"
releaseBody: "Draft release, will be updated later."
releaseDraft: true
prerelease: ${{ contains(github.ref_name, '-rc') }}
tauriScript: pnpm
args: --target ${{ matrix.target }}
includeUpdaterJson: true
release-for-linux-arm:
name: Release Build for Linux ARM
needs: [check_tag_version]
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
arch: arm64
- os: ubuntu-22.04
target: armv7-unknown-linux-gnueabihf
arch: armhf
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.91.0"
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: "Setup for linux"
run: |-
sudo ls -lR /etc/apt/
cat > /tmp/sources.list << EOF
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-security main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main multiverse universe restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main multiverse universe restricted
EOF
sudo mv /etc/apt/sources.list /etc/apt/sources.list.default
sudo mv /tmp/sources.list /etc/apt/sources.list
sudo dpkg --add-architecture ${{ matrix.arch }}
sudo apt update
sudo apt install -y \
libxslt1.1:${{ matrix.arch }} \
libwebkit2gtk-4.1-dev:${{ matrix.arch }} \
libayatana-appindicator3-dev:${{ matrix.arch }} \
libssl-dev:${{ matrix.arch }} \
patchelf:${{ matrix.arch }} \
librsvg2-dev:${{ matrix.arch }}
- name: "Install aarch64 tools"
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu
- name: "Install armv7 tools"
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
run: |
sudo apt install -y \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Build for Linux
run: |
export PKG_CONFIG_ALLOW_CROSS=1
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]; then
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/
elif [ "${{ matrix.target }}" == "armv7-unknown-linux-gnueabihf" ]; then
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/:$PKG_CONFIG_PATH
export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/
fi
pnpm build --target ${{ matrix.target }}
env:
NODE_OPTIONS: "--max_old_space_size=4096"
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: Get Version
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{env.VERSION}}
name: "Clash Verge Rev v${{env.VERSION}}"
body: "See release notes for detailed changelog."
token: ${{ secrets.GITHUB_TOKEN }}
prerelease: ${{ contains(github.ref_name, '-rc') }}
files: |
target/${{ matrix.target }}/release/bundle/deb/*.deb
target/${{ matrix.target }}/release/bundle/rpm/*.rpm
release-for-fixed-webview2:
name: Release Build for Fixed WebView2
needs: [check_tag_version]
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
arch: x64
- os: windows-latest
target: aarch64-pc-windows-msvc
arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Install Rust Stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.91.0"
targets: ${{ matrix.target }}
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/dev' }}
prefix-key: "v1-rust"
key: "rust-shared-stable-${{ matrix.os }}-${{ matrix.target }}"
workspaces: |
. -> target
cache-all-crates: true
cache-workspace-crates: true
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install and check
run: |
pnpm i
pnpm run prebuild ${{ matrix.target }}
- name: Download WebView2 Runtime
run: |
invoke-webrequest -uri https://github.com/westinyang/WebView2RuntimeArchive/releases/download/133.0.3065.92/Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -outfile Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab
Expand .\Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${{ matrix.arch }}.cab -F:* ./src-tauri
Remove-Item .\src-tauri\tauri.windows.conf.json
Rename-Item .\src-tauri\webview2.${{ matrix.arch }}.json tauri.windows.conf.json
- name: Add Rust Target
run: |
# Ensure cross target is installed for the pinned toolchain; fallback without explicit toolchain if needed
rustup target add ${{ matrix.target }} --toolchain 1.91.0 || rustup target add ${{ matrix.target }}
rustup target list --installed
echo "Rust target ${{ matrix.target }} installed."
- name: Tauri build
id: build
uses: tauri-apps/tauri-action@v0.6.1
env:
NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tauriScript: pnpm
args: --target ${{ matrix.target }}
- name: Rename
run: |
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe$", "_fixed_webview2-setup.exe"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*.nsis.zip"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.nsis\.zip$", "_fixed_webview2-setup.nsis.zip"
Rename-Item $file.FullName $newName
}
$files = Get-ChildItem ".\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe.sig"
foreach ($file in $files) {
$newName = $file.Name -replace "-setup\.exe\.sig$", "_fixed_webview2-setup.exe.sig"
Rename-Item $file.FullName $newName
}
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{steps.build.outputs.appVersion}}
name: "Clash Verge Rev v${{steps.build.outputs.appVersion}}"
body: "See release notes for detailed changelog."
token: ${{ secrets.GITHUB_TOKEN }}
prerelease: ${{ contains(github.ref_name, '-rc') }}
files: target/${{ matrix.target }}/release/bundle/nsis/*setup*
- name: Portable Bundle
run: pnpm portable-fixed-webview2 ${{ matrix.target }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-update:
if: ${{ !contains(github.ref_name, '-rc') }}
name: Release Update
runs-on: ubuntu-latest
needs: [update_tag]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node
uses: actions/setup-node@v6
with:
tagName: v__VERSION__
releaseName: "Clash Verge v__VERSION__"
releaseBody: "This is a release."
releaseDraft: true
prerelease: false
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install
run: pnpm i
- name: Release updater file
run: pnpm updater
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-update-for-fixed-webview2:
if: ${{ !contains(github.ref_name, '-rc') }}
runs-on: ubuntu-latest
needs: [update_tag]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install
run: pnpm i
- name: Release updater file
run: pnpm updater-fixed-webview2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
submit-to-winget:
if: ${{ !contains(github.ref_name, '-rc') }}
name: Submit to Winget
runs-on: ubuntu-latest
needs: [update_tag, release-update]
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Get Version
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
- name: Submit to Winget
uses: vedantmgoyal9/winget-releaser@main
with:
identifier: ClashVergeRev.ClashVergeRev
version: ${{env.VERSION}}
release-tag: v${{env.VERSION}}
installers-regex: '_(arm64|x64|x86)-setup\.exe$'
token: ${{ secrets.WINGET_TOKEN }}
notify-telegram:
if: ${{ !contains(github.ref_name, '-rc') }}
name: Notify Telegram
runs-on: ubuntu-latest
needs:
[
update_tag,
release-update,
release-update-for-fixed-webview2,
submit-to-winget,
]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Fetch UPDATE logs
id: fetch_update_logs
run: bash ./scripts/extract_update_logs.sh
shell: bash
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Get Version and Release Info
run: |
sudo apt-get update
sudo apt-get install jq
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "DOWNLOAD_URL=https://github.com/clash-verge-rev/clash-verge-rev/releases/download/v$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
- name: Generate release.txt
run: |
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found update logs"
fi
cat > release.txt << EOF
$UPDATE_LOGS
## 下载地址
### Windows (不再支持Win7)
#### 正常版本(推荐)
- [64位(常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64-setup.exe) | [ARM64(不常用)](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64-setup.exe)
#### 内置Webview2版(体积较大仅在企业版系统或无法安装webview2时使用)
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64_fixed_webview2-setup.exe) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64_fixed_webview2-setup.exe)
### macOS
- [Apple M芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_aarch64.dmg) | [Intel芯片](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_x64.dmg)
### Linux
#### DEB包(Debian系) 使用 apt ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_amd64.deb) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_arm64.deb) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge_${{ env.VERSION }}_armhf.deb)
#### RPM包(Redhat系) 使用 dnf ./路径 安装
- [64位](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.x86_64.rpm) | [ARM64](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.aarch64.rpm) | [ARMv7](${{ env.DOWNLOAD_URL }}/Clash.Verge-${{ env.VERSION }}-1.armhfp.rpm)
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
Created at ${{ env.BUILDTIME }}.
EOF
- name: Send Telegram Notification
run: node scripts/telegram.mjs
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
BUILD_TYPE: release
VERSION: ${{ env.VERSION }}
DOWNLOAD_URL: ${{ env.DOWNLOAD_URL }}

56
.github/workflows/rustfmt.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: Check Formatting
on:
pull_request:
env:
HUSKY: 0
jobs:
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check Rust changes
id: check_rust
uses: dorny/paths-filter@v3
with:
filters: |
rust:
- 'src-tauri/**'
- '**/*.rs'
- name: Skip if no Rust changes
if: steps.check_rust.outputs.rust != 'true'
run: echo "No Rust changes, skipping rustfmt."
- name: install Rust stable and rustfmt
if: steps.check_rust.outputs.rust == 'true'
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: run cargo fmt
if: steps.check_rust.outputs.rust == 'true'
run: cargo fmt --manifest-path ./src-tauri/Cargo.toml --all -- --check
# taplo:
# name: taplo (.toml files)
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - name: install Rust stable
# uses: dtolnay/rust-toolchain@stable
# - name: install taplo-cli
# uses: taiki-e/install-action@v2
# with:
# tool: taplo-cli
# - run: taplo fmt --check --diff

55
.github/workflows/updater.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: Updater CI
on: workflow_dispatch
permissions: write-all
env:
HUSKY: 0
jobs:
release-update:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install
run: pnpm i
- name: Release updater file
run: pnpm updater
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-update-for-fixed-webview2:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: "24.13.0"
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: false
- name: Pnpm install
run: pnpm i
- name: Release updater file
run: pnpm updater-fixed-webview2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

12
.gitignore vendored
View File

@@ -1,7 +1,15 @@
node_modules
.pnpm-store
.DS_Store
dist
dist-ssr
*.local
package-lock.json
yarn.lock
update.json
scripts/_env.sh
.vscode
.tool-versions
.idea
.old
.eslintcache
.changelog_backups
target

53
.husky/pre-commit Normal file → Executable file
View File

@@ -1,4 +1,51 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
#!/bin/bash
set -euo pipefail
yarn pretty-quick --staged
ROOT_DIR="$(git rev-parse --show-toplevel)"
cd "$ROOT_DIR"
if ! command -v pnpm >/dev/null 2>&1; then
echo "❌ pnpm is required for pre-commit checks."
exit 1
fi
LOCALE_DIFF="$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^src/locales/' || true)"
if [ -n "$LOCALE_DIFF" ]; then
echo "[pre-commit] Locale changes detected. Regenerating i18n types..."
pnpm i18n:types
if [ -d src/types/generated ]; then
echo "[pre-commit] Staging regenerated i18n type artifacts..."
git add src/types/generated
fi
fi
echo "[pre-commit] Running pnpm format before lint..."
pnpm format
echo "[pre-commit] Running lint-staged for JS/TS files..."
pnpm exec lint-staged
RUST_FILES="$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^src-tauri/.*\.rs$' || true)"
if [ -n "$RUST_FILES" ]; then
echo "[pre-commit] Formatting Rust changes with cargo fmt..."
cargo fmt
while IFS= read -r file; do
[ -n "$file" ] && git add "$file"
done <<< "$RUST_FILES"
echo "[pre-commit] Linting Rust changes with cargo clippy..."
cargo clippy-all
if ! command -v clash-verge-logging-check >/dev/null 2>&1; then
echo "[pre-commit] Installing clash-verge-logging-check..."
cargo install --git https://github.com/clash-verge-rev/clash-verge-logging-check.git
fi
clash-verge-logging-check
fi
TS_FILES="$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.(ts|tsx)$' || true)"
if [ -n "$TS_FILES" ]; then
echo "[pre-commit] Running TypeScript type check..."
pnpm typecheck
fi
echo "[pre-commit] All checks completed successfully."

36
.husky/pre-push Normal file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
set -euo pipefail
remote_name="${1:-origin}"
remote_url="${2:-unknown}"
ROOT_DIR="$(git rev-parse --show-toplevel)"
cd "$ROOT_DIR"
if ! command -v pnpm >/dev/null 2>&1; then
echo "❌ pnpm is required for pre-push checks."
exit 1
fi
echo "[pre-push] Preparing to push to '$remote_name' ($remote_url). Running full validation..."
echo "[pre-push] Checking Prettier formatting..."
pnpm format:check
echo "[pre-push] Running ESLint..."
pnpm lint
echo "[pre-push] Running TypeScript type checking..."
pnpm typecheck
if command -v cargo >/dev/null 2>&1; then
echo "[pre-push] Verifying Rust formatting..."
cargo fmt --check
echo "[pre-push] Running cargo clippy..."
cargo clippy-all
else
echo "[pre-push] ⚠️ cargo not found; skipping Rust checks."
fi
echo "[pre-push] All checks passed."

5
.mergify.yml Normal file
View File

@@ -0,0 +1,5 @@
queue_rules:
- name: LetMeMergeForYou
batch_size: 3
allow_queue_branch_edit: true
queue_conditions: []

11
.prettierignore Normal file
View File

@@ -0,0 +1,11 @@
# README.md
# Changelog.md
# CONTRIBUTING.md
.changelog_backups
pnpm-lock.yaml
src-tauri/target/
src-tauri/gen/
target

16
.prettierrc Normal file
View File

@@ -0,0 +1,16 @@
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": false,
"jsxSingleQuote": false,
"trailingComma": "all",
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "css",
"endOfLine": "auto",
"embeddedLanguageFormatting": "auto"
}

1
.tool-versions Normal file
View File

@@ -0,0 +1 @@
nodejs 21.7.1

136
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,136 @@
# CONTRIBUTING
Thank you for your interest in contributing to **Clash Verge Rev**! This guide provides instructions to help you set up your development environment and start contributing effectively.
## Internationalization (i18n)
We welcome translations and improvements to existing locales. For details on contributing translations, please see [CONTRIBUTING_i18n.md](docs/CONTRIBUTING_i18n.md).
## Development Setup
Before contributing, you need to set up your development environment. Follow the steps below carefully.
### Prerequisites
1. **Install Rust and Node.js**
Our project requires both Rust and Node.js. Follow the official installation instructions [here](https://tauri.app/start/prerequisites/).
### Windows Users
> [!NOTE]
> **Windows ARM users must also install [LLVM](https://github.com/llvm/llvm-project/releases) (including clang) and set the corresponding environment variables.**
> The `ring` crate depends on `clang` when building on Windows ARM.
Additional steps for Windows:
- Ensure Rust and Node.js are added to your system `PATH`.
- Install the GNU `patch` tool.
- Use the MSVC toolchain for Rust:
```bash
rustup target add x86_64-pc-windows-msvc
rustup set default-host x86_64-pc-windows-msvc
```
### Install Node.js Package Manager
Enable `corepack`:
```bash
corepack enable
```
### Install Project Dependencies
Node.js dependencies:
```bash
pnpm install
```
Ubuntu-only system packages:
```bash
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
```
### Download the Mihomo Core Binary (Automatic)
```bash
pnpm run prebuild
pnpm run prebuild --force # Re-download and overwrite Mihomo core and service binaries
```
### Run the Development Server
```bash
pnpm dev # Standard
pnpm dev:diff # If an app instance already exists
pnpm dev:tauri # Run Tauri development mode
```
### Build the Project
Standard build:
```bash
pnpm build
```
Fast build for testing:
```bash
pnpm build:fast
```
### Clean Build
```bash
pnpm clean
```
### Portable Version (Windows Only)
```bash
pnpm portable
```
## Contributing Your Changes
### Before Committing
**Code quality checks:**
```bash
# Rust backend
cargo clippy-all
# Frontend
pnpm lint
```
**Code formatting:**
```bash
# Rust backend
cargo fmt
# Frontend
pnpm format
```
### Signing your commit
Signed commits are required to verify authorship and ensure your contributions can be merged. Reference signing-commits [here](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).
### Submitting Your Changes
1. Fork the repository.
2. Create a new branch for your feature or bug fix.
3. Commit your changes with clear messages and make sure it's signed.
4. Push your branch and submit a pull request.
We appreciate your contributions and look forward to your participation!

10384
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

136
Cargo.toml Normal file
View File

@@ -0,0 +1,136 @@
[workspace]
members = [
"src-tauri",
"crates/clash-verge-draft",
"crates/clash-verge-logging",
"crates/clash-verge-signal",
"crates/tauri-plugin-clash-verge-sysinfo",
"crates/clash-verge-i18n",
]
resolver = "2"
[profile.release]
panic = "abort"
codegen-units = 1
lto = "thin"
opt-level = 3
debug = false
strip = true
overflow-checks = false
rpath = false
[profile.dev]
incremental = true
codegen-units = 64
opt-level = 0
debug = true
strip = "none"
overflow-checks = true
lto = false
rpath = false
[profile.fast-release]
inherits = "release"
codegen-units = 64
incremental = true
lto = false
opt-level = 0
debug = true
strip = false
[workspace.dependencies]
clash-verge-draft = { path = "crates/clash-verge-draft" }
clash-verge-logging = { path = "crates/clash-verge-logging" }
clash-verge-signal = { path = "crates/clash-verge-signal" }
clash-verge-i18n = { path = "crates/clash-verge-i18n" }
tauri-plugin-clash-verge-sysinfo = { path = "crates/tauri-plugin-clash-verge-sysinfo" }
tauri = { version = "2.9.5" }
tauri-plugin-clipboard-manager = "2.3.2"
parking_lot = { version = "0.12.5", features = ["hardware-lock-elision"] }
anyhow = "1.0.100"
criterion = { version = "0.8.1", features = ["async_tokio"] }
tokio = { version = "1.49.0", features = [
"rt-multi-thread",
"macros",
"time",
"sync",
] }
flexi_logger = "0.31.8"
log = "0.4.29"
smartstring = { version = "1.0.1" }
compact_str = { version = "0.9.0", features = ["serde"] }
serde = { version = "1.0.228" }
serde_json = { version = "1.0.149" }
serde_yaml_ng = { version = "0.10.0" }
bitflags = { version = "2.10.0" }
# *** For Windows platform only ***
deelevate = "0.2.0"
# *********************************
[patch.crates-io]
# Patches until https://github.com/tauri-apps/tao/pull/1167 is merged.
tao = { git = "https://github.com/tauri-apps/tao" }
[workspace.lints.clippy]
correctness = { level = "deny", priority = -1 }
suspicious = { level = "deny", priority = -1 }
unwrap_used = "warn"
expect_used = "warn"
panic = "deny"
unimplemented = "deny"
todo = "warn"
dbg_macro = "warn"
clone_on_ref_ptr = "warn"
rc_clone_in_vec_init = "warn"
large_stack_arrays = "warn"
large_const_arrays = "warn"
async_yields_async = "deny"
mutex_atomic = "deny"
mutex_integer = "deny"
rc_mutex = "deny"
unused_async = "deny"
await_holding_lock = "deny"
large_futures = "deny"
future_not_send = "deny"
redundant_else = "deny"
needless_continue = "deny"
needless_raw_string_hashes = "deny"
or_fun_call = "deny"
cognitive_complexity = "deny"
useless_let_if_seq = "deny"
use_self = "deny"
tuple_array_conversions = "deny"
trait_duplication_in_bounds = "deny"
suspicious_operation_groupings = "deny"
string_lit_as_bytes = "deny"
significant_drop_tightening = "deny"
significant_drop_in_scrutinee = "deny"
redundant_clone = "deny"
# option_if_let_else = "deny" // 过于激进,暂时不开启
needless_pass_by_ref_mut = "deny"
needless_collect = "deny"
missing_const_for_fn = "deny"
iter_with_drain = "deny"
iter_on_single_items = "deny"
iter_on_empty_collections = "deny"
# fallible_impl_from = "deny" // 过于激进,暂时不开启
equatable_if_let = "deny"
collection_is_never_read = "deny"
branches_sharing_code = "deny"
pathbuf_init_then_push = "deny"
option_as_ref_cloned = "deny"
large_types_passed_by_value = "deny"
# implicit_clone = "deny" // 可能会造成额外开销,暂时不开启
expl_impl_clone_on_copy = "deny"
copy_iterator = "deny"
cloned_instead_of_copied = "deny"
# self_only_used_in_recursion = "deny" // Since 1.92.0
unnecessary_self_imports = "deny"
unused_trait_names = "deny"
wildcard_imports = "deny"
unnecessary_wraps = "deny"

22
Changelog.md Normal file
View File

@@ -0,0 +1,22 @@
## v(2.4.6)
### 🐞 修复问题
- 修复首次启动时代理信息刷新缓慢
- 修复无网络时无限请求 IP 归属查询
- 修复 WebDAV 页面重试逻辑
<details>
<summary><strong> ✨ 新增功能 </strong></summary>
- 支持订阅设置自动延时监测间隔
</details>
<details>
<summary><strong> 🚀 优化改进 </strong></summary>
- 后端性能优化
- 前端性能优化
</details>

131
README.md
View File

@@ -1,59 +1,116 @@
<h1 align="center">
<img src="./src/assets/image/logo.png" alt="Clash" width="128" />
<img src="./src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
Clash Verge
Continuation of <a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>
<br>
</h1>
<h3 align="center">
A <a href="https://github.com/Dreamacro/clash">Clash</a> GUI based on <a href="https://github.com/tauri-apps/tauri">tauri</a>.
A Clash Meta GUI based on <a href="https://github.com/tauri-apps/tauri">Tauri</a>.
</h3>
<p align="center">
Languages:
<a href="./README.md">简体中文</a> ·
<a href="./docs/README_en.md">English</a> ·
<a href="./docs/README_es.md">Español</a> ·
<a href="./docs/README_ru.md">Русский</a> ·
<a href="./docs/README_ja.md">日本語</a> ·
<a href="./docs/README_ko.md">한국어</a> ·
<a href="./docs/README_fa.md">فارسی</a>
</p>
## Preview
| Dark | Light |
| -------------------------------- | --------------------------------- |
| ![预览](./docs/preview_dark.png) | ![预览](./docs/preview_light.png) |
## Install
请到发布页面下载对应的安装包:[Release page](https://github.com/clash-verge-rev/clash-verge-rev/releases)<br>
Go to the [Release page](https://github.com/clash-verge-rev/clash-verge-rev/releases) to download the corresponding installation package<br>
Supports Windows (x64/x86), Linux (x64/arm64) and macOS 10.15+ (intel/apple).
#### 我应当怎样选择发行版
| 版本 | 特征 | 链接 |
| :---------- | :--------------------------------------- | :------------------------------------------------------------------------------------- |
| Stable | 正式版,高可靠性,适合日常使用。 | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha(废弃) | 测试发布流程。 | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | 滚动更新版,适合测试反馈,可能存在缺陷。 | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### 安装说明和常见问题,请到 [文档页](https://clash-verge-rev.github.io/) 查看
---
### TG 频道: [@clash_verge_rev](https://t.me/clash_verge_re)
## Promotion
### ✈️ [狗狗加速 —— 技术流机场 Doggygo VPN](https://verge.dginv.click/#/register?code=oaxsAGo6)
🚀 高性能海外技术流机场,支持免费试用与优惠套餐,全面解锁流媒体及 AI 服务,全球首家采用 **QUIC 协议**
🎁 使用 **Clash Verge 专属邀请链接** 注册即送 **3 天免费试用**,每日 **1GB 流量**:👉 [点此注册](https://verge.dginv.click/#/register?code=oaxsAGo6)
#### **核心优势:**
- 📱 自研 iOS 客户端(业内"唯一")技术经得起考验,极大**持续研发**投入
- 🧑‍💻 **12小时真人客服**(顺带解决 Clash Verge 使用问题)
- 💰 优惠套餐每月**仅需 21 元160G 流量,年付 8 折**
- 🌍 海外团队,无跑路风险,高达 50% 返佣
- ⚙️ **集群负载均衡**设计,**负载监控和随时扩容**,高速专线(兼容老客户端)极低延迟无视晚高峰4K 秒开
- ⚡ 全球首家**Quic 协议机场**,现已上线更快的 Tuic 协议(Clash Verge 客户端最佳搭配)
- 🎬 解锁**流媒体及 主流 AI**
🌐 官网:👉 [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## Features
Now it's no different from the others, even fewer. (WIP)
- 基于性能强劲的 Rust 和 Tauri 2 框架
- 内置[Clash.Meta(mihomo)](https://github.com/MetaCubeX/mihomo)内核,并支持切换 `Alpha` 版本内核。
- 简洁美观的用户界面,支持自定义主题颜色、代理组/托盘图标以及 `CSS Injection`
- 配置文件管理和增强Merge 和 Script配置文件语法提示。
- 系统代理和守卫、`TUN(虚拟网卡)` 模式。
- 可视化节点和规则编辑
- WebDav 配置备份和同步
### FAQ
Refer to [Doc FAQ Page](https://clash-verge-rev.github.io/faq/windows.html)
### Donation
[捐助Clash Verge Rev的开发](https://github.com/sponsors/clash-verge-rev)
## Development
You should install Rust and Nodejs. Then install tauri cli and packages.
See [CONTRIBUTING.md](./CONTRIBUTING.md) for more details.
To run the development server, execute the following commands after all prerequisites for **Tauri** are installed:
```shell
cargo install tauri-cli --git https://github.com/tauri-apps/tauri
yarn install
pnpm i
pnpm run prebuild
pnpm dev
```
Then download the clash binary... Or you can download it from [clash premium release](https://github.com/Dreamacro/clash/releases/tag/premium) and rename it according to [tauri config](https://tauri.studio/en/docs/api/config#tauri.bundle.externalBin).
```shell
yarn run predev
```
Then run
```shell
yarn dev
```
## Todos
> This keng is a little big...
## Screenshots
<div align="center">
<img src="./docs/demo1.png" alt="demo1" width="42%" />
<img src="./docs/demo2.png" alt="demo2" width="42%" />
</div>
## Disclaimer
This is a learning project for Rust practice.
## Contributions
PR welcome!
Issue and PR welcome!
## Acknowledgement
Clash Verge rev was based on or inspired by these projects and so on:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): A Clash GUI based on tauri. Supports Windows, macOS and Linux.
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): Build smaller, faster, and more secure desktop applications with a web frontend.
- [Dreamacro/clash](https://github.com/Dreamacro/clash): A rule-based tunnel in Go.
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): A rule-based tunnel in Go.
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): A Windows/macOS GUI based on Clash.
- [vitejs/vite](https://github.com/vitejs/vite): Next generation frontend tooling. It's fast!
## License
GPL-3.0 License
GPL-3.0 License. See [License here](./LICENSE) for details.

View File

@@ -0,0 +1,17 @@
[package]
name = "clash-verge-draft"
version = "0.1.0"
edition = "2024"
[[bench]]
name = "draft_bench"
path = "bench/benche_me.rs"
harness = false
[dependencies]
parking_lot = { workspace = true }
anyhow = { workspace = true }
[dev-dependencies]
criterion = { workspace = true }
tokio = { workspace = true }

View File

@@ -0,0 +1,118 @@
use criterion::{Criterion, criterion_group, criterion_main};
use std::hint::black_box;
use std::process;
use tokio::runtime::Runtime;
use clash_verge_draft::Draft;
#[derive(Default, Clone, Debug)]
struct IVerge {
enable_auto_launch: Option<bool>,
enable_tun_mode: Option<bool>,
}
fn make_draft() -> Draft<IVerge> {
let verge = IVerge {
enable_auto_launch: Some(true),
enable_tun_mode: Some(false),
};
Draft::new(verge)
}
pub fn bench_draft(c: &mut Criterion) {
let rt = Runtime::new().unwrap_or_else(|e| {
eprintln!("Tokio runtime init failed: {e}");
process::exit(1);
});
let mut group = c.benchmark_group("draft");
group.sample_size(100);
group.warm_up_time(std::time::Duration::from_millis(300));
group.measurement_time(std::time::Duration::from_secs(1));
group.bench_function("data_mut", |b| {
b.iter(|| {
let draft = black_box(make_draft());
draft.edit_draft(|d| d.enable_tun_mode = Some(true));
black_box(&draft.latest_arc().enable_tun_mode);
});
});
group.bench_function("draft_mut_first", |b| {
b.iter(|| {
let draft = black_box(make_draft());
draft.edit_draft(|d| d.enable_auto_launch = Some(false));
let latest = draft.latest_arc();
black_box(&latest.enable_auto_launch);
});
});
group.bench_function("draft_mut_existing", |b| {
b.iter(|| {
let draft = black_box(make_draft());
{
draft.edit_draft(|d| {
d.enable_tun_mode = Some(true);
});
let latest1 = draft.latest_arc();
black_box(&latest1.enable_tun_mode);
}
draft.edit_draft(|d| {
d.enable_tun_mode = Some(false);
});
let latest2 = draft.latest_arc();
black_box(&latest2.enable_tun_mode);
});
});
group.bench_function("latest_arc", |b| {
b.iter(|| {
let draft = black_box(make_draft());
let latest = draft.latest_arc();
black_box(&latest.enable_auto_launch);
});
});
group.bench_function("apply", |b| {
b.iter(|| {
let draft = black_box(make_draft());
{
draft.edit_draft(|d| {
d.enable_auto_launch = Some(false);
});
}
draft.apply();
black_box(&draft);
});
});
group.bench_function("discard", |b| {
b.iter(|| {
let draft = black_box(make_draft());
{
draft.edit_draft(|d| {
d.enable_auto_launch = Some(false);
});
}
draft.discard();
black_box(&draft);
});
});
group.bench_function("with_data_modify_async", |b| {
b.to_async(&rt).iter(|| async {
let draft = black_box(make_draft());
let _: Result<(), anyhow::Error> = draft
.with_data_modify::<_, _, _>(|mut box_data| async move {
box_data.enable_auto_launch = Some(!box_data.enable_auto_launch.unwrap_or(false));
Ok((box_data, ()))
})
.await;
});
});
group.finish();
}
criterion_group!(benches, bench_draft);
criterion_main!(benches);

View File

@@ -0,0 +1,92 @@
use parking_lot::RwLock;
use std::sync::Arc;
pub type SharedDraft<T> = Arc<T>;
type DraftInner<T> = (SharedDraft<T>, Option<SharedDraft<T>>);
/// Draft 管理committed 与 optional draft 都以 Arc<Box<T>> 存储,
// (committed_snapshot, optional_draft_snapshot)
#[derive(Debug, Clone)]
pub struct Draft<T: Clone> {
inner: Arc<RwLock<DraftInner<T>>>,
}
impl<T: Clone> Draft<T> {
#[inline]
pub fn new(data: T) -> Self {
Self {
inner: Arc::new(RwLock::new((Arc::new(data), None))),
}
}
/// 以 Arc<Box<T>> 的形式获取当前“已提交(正式)”数据的快照(零拷贝,仅 clone Arc
#[inline]
pub fn data_arc(&self) -> SharedDraft<T> {
let guard = self.inner.read();
Arc::clone(&guard.0)
}
/// 获取当前(草稿若存在则返回草稿,否则返回已提交)的快照
/// 这也是零拷贝:只 clone Arc不 clone T
#[inline]
pub fn latest_arc(&self) -> SharedDraft<T> {
let guard = self.inner.read();
guard.1.clone().unwrap_or_else(|| Arc::clone(&guard.0))
}
/// 通过闭包以可变方式编辑草稿(在闭包中我们给出 &mut T
/// - 延迟拷贝:如果只有这一个 Arc 引用,则直接修改,不会克隆 T
/// - 若草稿被其他读者共享Arc::make_mut 会做一次 T.clone最小必要拷贝
#[inline]
pub fn edit_draft<F, R>(&self, f: F) -> R
where
F: FnOnce(&mut T) -> R,
{
let mut guard = self.inner.write();
let mut draft_arc = guard.1.take().unwrap_or_else(|| Arc::clone(&guard.0));
let data_mut = Arc::make_mut(&mut draft_arc);
let result = f(data_mut);
guard.1 = Some(draft_arc);
result
}
/// 将草稿提交到已提交位置(替换),并清除草稿
#[inline]
pub fn apply(&self) {
let mut guard = self.inner.write();
if let Some(d) = guard.1.take() {
guard.0 = d;
}
}
/// 丢弃草稿(如果存在)
#[inline]
pub fn discard(&self) {
let mut guard = self.inner.write();
guard.1 = None;
}
/// 异步地以拥有 Box<T> 的方式修改已提交数据:将克隆一次已提交数据到本地,
/// 异步闭包返回新的 Box<T>(替换已提交数据)和业务返回值 R。
#[inline]
pub async fn with_data_modify<F, Fut, R>(&self, f: F) -> Result<R, anyhow::Error>
where
T: Send + Sync + 'static,
F: FnOnce(T) -> Fut + Send,
Fut: std::future::Future<Output = Result<(T, R), anyhow::Error>> + Send,
{
let (local, original_arc) = {
let guard = self.inner.read();
let arc = Arc::clone(&guard.0);
((*arc).clone(), arc)
};
let (new_local, res) = f(local).await?;
let mut guard = self.inner.write();
if !Arc::ptr_eq(&guard.0, &original_arc) {
return Err(anyhow::anyhow!(
"Optimistic lock failed: Committed data has changed during async operation"
));
}
guard.0 = Arc::from(new_local);
Ok(res)
}
}

View File

@@ -0,0 +1,263 @@
#[cfg(test)]
mod tests {
use anyhow::anyhow;
use clash_verge_draft::Draft;
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
#[derive(Clone, Debug, Default, PartialEq)]
struct IVerge {
enable_auto_launch: Option<bool>,
enable_tun_mode: Option<bool>,
}
// Minimal single-threaded executor for immediately-ready futures
fn block_on_ready<F: Future>(fut: F) -> F::Output {
fn no_op_raw_waker() -> RawWaker {
fn clone(_: *const ()) -> RawWaker {
no_op_raw_waker()
}
fn wake(_: *const ()) {}
fn wake_by_ref(_: *const ()) {}
fn drop(_: *const ()) {}
static VTABLE: RawWakerVTable = RawWakerVTable::new(clone, wake, wake_by_ref, drop);
RawWaker::new(std::ptr::null(), &VTABLE)
}
let waker = unsafe { Waker::from_raw(no_op_raw_waker()) };
let mut cx = Context::from_waker(&waker);
let mut fut = Box::pin(fut);
loop {
match Pin::as_mut(&mut fut).poll(&mut cx) {
Poll::Ready(v) => return v,
Poll::Pending => std::thread::yield_now(),
}
}
}
#[test]
fn test_draft_basic_flow() {
let verge = IVerge {
enable_auto_launch: Some(true),
enable_tun_mode: Some(false),
};
let draft = Draft::new(verge);
// 读取正式数据data_arc
{
let data = draft.data_arc();
assert_eq!(data.enable_auto_launch, Some(true));
assert_eq!(data.enable_tun_mode, Some(false));
}
// 修改草稿(使用 edit_draft
draft.edit_draft(|d| {
d.enable_auto_launch = Some(false);
d.enable_tun_mode = Some(true);
});
// 正式数据未变
{
let data = draft.data_arc();
assert_eq!(data.enable_auto_launch, Some(true));
assert_eq!(data.enable_tun_mode, Some(false));
}
// 草稿已变
{
let latest = draft.latest_arc();
assert_eq!(latest.enable_auto_launch, Some(false));
assert_eq!(latest.enable_tun_mode, Some(true));
}
// 提交草稿
draft.apply();
// 正式数据已更新
{
let data = draft.data_arc();
assert_eq!(data.enable_auto_launch, Some(false));
assert_eq!(data.enable_tun_mode, Some(true));
}
// 新一轮草稿并修改
draft.edit_draft(|d| {
d.enable_auto_launch = Some(true);
});
{
let latest = draft.latest_arc();
assert_eq!(latest.enable_auto_launch, Some(true));
assert_eq!(latest.enable_tun_mode, Some(true));
}
// 丢弃草稿
draft.discard();
// 丢弃后再次创建草稿,会从已提交重新 clone
{
draft.edit_draft(|d| {
// 原 committed 是 enable_auto_launch = Some(false)
assert_eq!(d.enable_auto_launch, Some(false));
// 再修改一下
d.enable_tun_mode = Some(false);
});
// 草稿中值已修改,但正式数据仍是 apply 后的值
let data = draft.data_arc();
assert_eq!(data.enable_auto_launch, Some(false));
assert_eq!(data.enable_tun_mode, Some(true));
}
}
#[test]
fn test_arc_pointer_behavior_on_edit_and_apply() {
let draft = Draft::new(IVerge {
enable_auto_launch: Some(true),
enable_tun_mode: Some(false),
});
// 初始 latest == committed
let committed = draft.data_arc();
let latest = draft.latest_arc();
assert!(std::sync::Arc::ptr_eq(&committed, &latest));
// 第一次 edit由于与 committed 共享Arc::make_mut 会克隆
draft.edit_draft(|d| d.enable_tun_mode = Some(true));
let committed_after_first_edit = draft.data_arc();
let draft_after_first_edit = draft.latest_arc();
assert!(!std::sync::Arc::ptr_eq(
&committed_after_first_edit,
&draft_after_first_edit
));
// 提交会把 committed 指向草稿的 Arc
let prev_draft_ptr = std::sync::Arc::as_ptr(&draft_after_first_edit);
draft.apply();
let committed_after_apply = draft.data_arc();
assert_eq!(std::sync::Arc::as_ptr(&committed_after_apply), prev_draft_ptr);
// 第二次编辑:此时草稿唯一持有(无其它引用),不应再克隆
// 获取草稿 Arc 的指针并立即丢弃本地引用,避免增加 strong_count
draft.edit_draft(|d| d.enable_auto_launch = Some(false));
let latest1 = draft.latest_arc();
let latest1_ptr = std::sync::Arc::as_ptr(&latest1);
drop(latest1); // 确保只有 Draft 内部持有草稿 Arc
// 再次编辑uniqueArc::make_mut 不应克隆)
draft.edit_draft(|d| d.enable_tun_mode = Some(false));
let latest2 = draft.latest_arc();
let latest2_ptr = std::sync::Arc::as_ptr(&latest2);
assert_eq!(latest1_ptr, latest2_ptr, "Unique edit should not clone Arc");
assert_eq!(latest2.enable_auto_launch, Some(false));
assert_eq!(latest2.enable_tun_mode, Some(false));
}
#[test]
fn test_discard_restores_latest_to_committed() {
let draft = Draft::new(IVerge {
enable_auto_launch: Some(false),
enable_tun_mode: Some(false),
});
// 创建草稿并修改
draft.edit_draft(|d| d.enable_auto_launch = Some(true));
let committed = draft.data_arc();
let latest = draft.latest_arc();
assert!(!std::sync::Arc::ptr_eq(&committed, &latest));
// 丢弃草稿后 latest 应回到 committed
draft.discard();
let committed2 = draft.data_arc();
let latest2 = draft.latest_arc();
assert!(std::sync::Arc::ptr_eq(&committed2, &latest2));
assert_eq!(latest2.enable_auto_launch, Some(false));
}
#[test]
fn test_edit_draft_returns_closure_result() {
let draft = Draft::new(IVerge::default());
let ret = draft.edit_draft(|d| {
d.enable_tun_mode = Some(true);
123usize
});
assert_eq!(ret, 123);
let latest = draft.latest_arc();
assert_eq!(latest.enable_tun_mode, Some(true));
}
#[test]
fn test_with_data_modify_ok_and_replaces_committed() {
let draft = Draft::new(IVerge {
enable_auto_launch: Some(false),
enable_tun_mode: Some(false),
});
// 使用 with_data_modify 异步(立即就绪)地更新 committed
let res = block_on_ready(draft.with_data_modify(|mut v| async move {
v.enable_auto_launch = Some(true);
Ok((v, "done"))
}));
assert_eq!(
{
#[allow(clippy::unwrap_used)]
res.unwrap()
},
"done"
);
let committed = draft.data_arc();
assert_eq!(committed.enable_auto_launch, Some(true));
assert_eq!(committed.enable_tun_mode, Some(false));
}
#[test]
fn test_with_data_modify_error_propagation() {
let draft = Draft::new(IVerge::default());
#[allow(clippy::unwrap_used)]
let err = block_on_ready(draft.with_data_modify(|_v| async move { Err::<(IVerge, ()), _>(anyhow!("boom")) }))
.unwrap_err();
assert_eq!(format!("{err}"), "boom");
}
#[test]
fn test_with_data_modify_does_not_touch_existing_draft() {
let draft = Draft::new(IVerge {
enable_auto_launch: Some(false),
enable_tun_mode: Some(false),
});
// 创建草稿并修改
draft.edit_draft(|d| {
d.enable_auto_launch = Some(true);
d.enable_tun_mode = Some(true);
});
let draft_before = draft.latest_arc();
let draft_before_ptr = std::sync::Arc::as_ptr(&draft_before);
// 同时通过 with_data_modify 修改 committed
#[allow(clippy::unwrap_used)]
block_on_ready(draft.with_data_modify(|mut v| async move {
v.enable_auto_launch = Some(false); // 与草稿不同
Ok((v, ()))
}))
.unwrap();
// 草稿应保持不变
let draft_after = draft.latest_arc();
assert_eq!(
std::sync::Arc::as_ptr(&draft_after),
draft_before_ptr,
"Existing draft should not be replaced by with_data_modify"
);
assert_eq!(draft_after.enable_auto_launch, Some(true));
assert_eq!(draft_after.enable_tun_mode, Some(true));
// 丢弃草稿后 latest == committed且 committed 为异步修改结果
draft.discard();
let latest = draft.latest_arc();
assert_eq!(latest.enable_auto_launch, Some(false));
assert_eq!(latest.enable_tun_mode, Some(false));
}
}

View File

@@ -0,0 +1,11 @@
[package]
name = "clash-verge-i18n"
version = "0.1.0"
edition = "2024"
[dependencies]
rust-i18n = "3.1.5"
sys-locale = "0.3.2"
[lints]
workspace = true

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: لوحة التحكم
body: تم تحديث حالة عرض لوحة التحكم.
clashModeChanged:
title: تبديل الوضع
body: تم التبديل إلى {mode}.
systemProxyToggled:
title: وكيل النظام
body: تم تحديث حالة وكيل النظام.
tunModeToggled:
title: وضع TUN
body: تم تحديث حالة وضع TUN.
lightweightModeEntered:
title: الوضع الخفيف
body: تم الدخول إلى الوضع الخفيف.
profilesReactivated:
title: الملفات التعريفية
body: تمت إعادة تفعيل الملف التعريفي.
appQuit:
title: على وشك الخروج
body: Clash Verge على وشك الخروج.
appHidden:
title: تم إخفاء التطبيق
body: Clash Verge يعمل في الخلفية.
service:
adminInstallPrompt: يتطلب تثبيت خدمة Clash Verge صلاحيات المسؤول.
adminUninstallPrompt: يتطلب إلغاء تثبيت خدمة Clash Verge صلاحيات المسؤول.
tray:
dashboard: لوحة التحكم
ruleMode: وضع القواعد
globalMode: الوضع العام
directMode: الوضع المباشر
outboundModes: أوضاع الخروج
rule: قاعدة
direct: مباشر
global: عام
profiles: الملفات التعريفية
proxies: وكلاء
systemProxy: وكيل النظام
tunMode: وضع TUN
closeAllConnections: إغلاق كل الاتصالات
lightweightMode: الوضع الخفيف
copyEnv: نسخ متغيرات البيئة
confDir: دليل الإعدادات
coreDir: دليل النواة
logsDir: دليل السجلات
openDir: فتح الدليل
appLog: سجل التطبيق
coreLog: سجل النواة
restartClash: إعادة تشغيل نواة Clash
restartApp: إعادة تشغيل التطبيق
vergeVersion: إصدار Verge
more: المزيد
exit: خروج
tooltip:
systemProxy: وكيل النظام
tun: TUN
profile: ملف تعريفي

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Übersicht
body: Die Sichtbarkeit der Übersicht wurde aktualisiert.
clashModeChanged:
title: Moduswechsel
body: Auf {mode} umgeschaltet.
systemProxyToggled:
title: Systemproxy
body: Der Status des Systemproxys wurde aktualisiert.
tunModeToggled:
title: TUN-Modus
body: Der Status des TUN-Modus wurde aktualisiert.
lightweightModeEntered:
title: Leichtmodus
body: Leichtmodus aktiviert.
profilesReactivated:
title: Profile
body: Profil reaktiviert.
appQuit:
title: Beenden steht bevor
body: Clash Verge wird gleich beendet.
appHidden:
title: Anwendung ausgeblendet
body: Clash Verge läuft im Hintergrund.
service:
adminInstallPrompt: Für die Installation des Clash-Verge-Dienstes sind Administratorrechte erforderlich.
adminUninstallPrompt: Für die Deinstallation des Clash-Verge-Dienstes sind Administratorrechte erforderlich.
tray:
dashboard: Übersicht
ruleMode: Regelmodus
globalMode: Globaler Modus
directMode: Direktmodus
outboundModes: Ausgangsmodi
rule: Regel
direct: Direkt
global: Global
profiles: Profile
proxies: Proxy
systemProxy: Systemproxy
tunMode: TUN-Modus
closeAllConnections: Alle Verbindungen schließen
lightweightMode: Leichtmodus
copyEnv: Umgebungsvariablen kopieren
confDir: Konfigurationsverzeichnis
coreDir: Core-Verzeichnis
logsDir: Log-Verzeichnis
openDir: Verzeichnis öffnen
appLog: Anwendungslog
coreLog: Core-Log
restartClash: Clash-Core neu starten
restartApp: Anwendung neu starten
vergeVersion: Verge-Version
more: Mehr
exit: Beenden
tooltip:
systemProxy: Systemproxy
tun: TUN
profile: Profil

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Dashboard
body: Dashboard visibility has been updated.
clashModeChanged:
title: Mode Switch
body: Switched to {mode}.
systemProxyToggled:
title: System Proxy
body: System proxy status has been updated.
tunModeToggled:
title: TUN Mode
body: TUN mode status has been updated.
lightweightModeEntered:
title: Lightweight Mode
body: Entered lightweight mode.
profilesReactivated:
title: Profiles
body: Profile Reactivated.
appQuit:
title: About to Exit
body: Clash Verge is about to exit.
appHidden:
title: Application Hidden
body: Clash Verge is running in the background.
service:
adminInstallPrompt: Installing the Clash Verge service requires administrator privileges.
adminUninstallPrompt: Uninstalling the Clash Verge service requires administrator privileges.
tray:
dashboard: Dashboard
ruleMode: Rule Mode
globalMode: Global Mode
directMode: Direct Mode
outboundModes: Outbound Modes
rule: Rule
direct: Direct
global: Global
profiles: Profiles
proxies: Proxies
systemProxy: System Proxy
tunMode: TUN Mode
closeAllConnections: Close All Connections
lightweightMode: Lightweight Mode
copyEnv: Copy Environment Variables
confDir: Configuration Directory
coreDir: Core Directory
logsDir: Log Directory
openDir: Open Directory
appLog: Application Log
coreLog: Core Log
restartClash: Restart Clash Core
restartApp: Restart Application
vergeVersion: Verge Version
more: More
exit: Exit
tooltip:
systemProxy: System Proxy
tun: TUN
profile: Profile

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Panel
body: La visibilidad del panel se ha actualizado.
clashModeChanged:
title: Cambio de modo
body: Cambiado a {mode}.
systemProxyToggled:
title: Proxy del sistema
body: El estado del proxy del sistema se ha actualizado.
tunModeToggled:
title: Modo TUN
body: El estado del modo TUN se ha actualizado.
lightweightModeEntered:
title: Modo ligero
body: Se ha entrado en el modo ligero.
profilesReactivated:
title: Perfiles
body: Perfil reactivado.
appQuit:
title: A punto de salir
body: Clash Verge está a punto de salir.
appHidden:
title: Aplicación oculta
body: Clash Verge se está ejecutando en segundo plano.
service:
adminInstallPrompt: Instalar el servicio de Clash Verge requiere privilegios de administrador.
adminUninstallPrompt: Desinstalar el servicio de Clash Verge requiere privilegios de administrador.
tray:
dashboard: Panel
ruleMode: Modo de reglas
globalMode: Modo global
directMode: Modo directo
outboundModes: Modos de salida
rule: Regla
direct: Directo
global: Global
profiles: Perfiles
proxies: Proxies
systemProxy: Proxy del sistema
tunMode: Modo TUN
closeAllConnections: Cerrar todas las conexiones
lightweightMode: Modo ligero
copyEnv: Copiar variables de entorno
confDir: Directorio de configuración
coreDir: Directorio del núcleo
logsDir: Directorio de registros
openDir: Abrir directorio
appLog: Registro de la aplicación
coreLog: Registro del núcleo
restartClash: Reiniciar el núcleo de Clash
restartApp: Reiniciar aplicación
vergeVersion: Versión de Verge
more: Más
exit: Salir
tooltip:
systemProxy: Proxy del sistema
tun: TUN
profile: Perfil

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: داشبورد
body: وضعیت نمایش داشبورد به‌روزرسانی شد.
clashModeChanged:
title: تغییر حالت
body: به {mode} تغییر کرد.
systemProxyToggled:
title: پروکسی سیستم
body: وضعیت پروکسی سیستم به‌روزرسانی شد.
tunModeToggled:
title: حالت TUN
body: وضعیت حالت TUN به‌روزرسانی شد.
lightweightModeEntered:
title: حالت سبک
body: به حالت سبک وارد شد.
profilesReactivated:
title: پروفایل‌ها
body: پروفایل دوباره فعال شد.
appQuit:
title: در آستانه خروج
body: Clash Verge در آستانه خروج است.
appHidden:
title: برنامه پنهان شد
body: Clash Verge در پس‌زمینه در حال اجراست.
service:
adminInstallPrompt: نصب سرویس Clash Verge به دسترسی مدیر نیاز دارد.
adminUninstallPrompt: حذف سرویس Clash Verge به دسترسی مدیر نیاز دارد.
tray:
dashboard: داشبورد
ruleMode: حالت قوانین
globalMode: حالت سراسری
directMode: حالت مستقیم
outboundModes: حالت‌های خروجی
rule: قانون
direct: مستقیم
global: سراسری
profiles: پروفایل‌ها
proxies: پروکسی‌ها
systemProxy: پروکسی سیستم
tunMode: حالت TUN
closeAllConnections: بستن همه اتصال‌ها
lightweightMode: حالت سبک
copyEnv: کپی متغیرهای محیطی
confDir: پوشه پیکربندی
coreDir: پوشه هسته
logsDir: پوشه گزارش‌ها
openDir: باز کردن پوشه
appLog: گزارش برنامه
coreLog: گزارش هسته
restartClash: راه‌اندازی مجدد هسته Clash
restartApp: راه‌اندازی مجدد برنامه
vergeVersion: نسخه Verge
more: بیشتر
exit: خروج
tooltip:
systemProxy: پروکسی سیستم
tun: TUN
profile: پروفایل

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Dasbor
body: Visibilitas dasbor telah diperbarui.
clashModeChanged:
title: Peralihan Mode
body: Beralih ke {mode}.
systemProxyToggled:
title: Proksi Sistem
body: Status proksi sistem telah diperbarui.
tunModeToggled:
title: Mode TUN
body: Status mode TUN telah diperbarui.
lightweightModeEntered:
title: Mode Ringan
body: Masuk ke mode ringan.
profilesReactivated:
title: Profil
body: Profil diaktifkan kembali.
appQuit:
title: Akan Keluar
body: Clash Verge akan keluar.
appHidden:
title: Aplikasi Disembunyikan
body: Clash Verge berjalan di latar belakang.
service:
adminInstallPrompt: Menginstal layanan Clash Verge memerlukan hak administrator.
adminUninstallPrompt: Menghapus instalasi layanan Clash Verge memerlukan hak administrator.
tray:
dashboard: Dasbor
ruleMode: Mode Aturan
globalMode: Mode Global
directMode: Mode Langsung
outboundModes: Mode Keluar
rule: Aturan
direct: Langsung
global: Global
profiles: Profil
proxies: Proksi
systemProxy: Proksi Sistem
tunMode: Mode TUN
closeAllConnections: Tutup Semua Koneksi
lightweightMode: Mode Ringan
copyEnv: Salin Variabel Lingkungan
confDir: Direktori Konfigurasi
coreDir: Direktori Core
logsDir: Direktori Log
openDir: Buka Direktori
appLog: Log Aplikasi
coreLog: Log Core
restartClash: Mulai Ulang Core Clash
restartApp: Mulai Ulang Aplikasi
vergeVersion: Versi Verge
more: Lainnya
exit: Keluar
tooltip:
systemProxy: Proksi Sistem
tun: TUN
profile: Profil

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: ダッシュボード
body: ダッシュボードの表示状態が更新されました。
clashModeChanged:
title: モード切り替え
body: "{mode} に切り替えました。"
systemProxyToggled:
title: システムプロキシ
body: システムプロキシの状態が更新されました。
tunModeToggled:
title: TUN モード
body: TUN モードの状態が更新されました。
lightweightModeEntered:
title: 軽量モード
body: 軽量モードに入りました。
profilesReactivated:
title: プロファイル
body: プロファイルが再有効化されました。
appQuit:
title: 終了間近
body: Clash Verge はまもなく終了します。
appHidden:
title: アプリが非表示
body: Clash Verge はバックグラウンドで実行中です。
service:
adminInstallPrompt: Clash Verge サービスのインストールには管理者権限が必要です。
adminUninstallPrompt: Clash Verge サービスのアンインストールには管理者権限が必要です。
tray:
dashboard: ダッシュボード
ruleMode: ルールモード
globalMode: グローバルモード
directMode: ダイレクトモード
outboundModes: アウトバウンドモード
rule: ルール
direct: ダイレクト
global: グローバル
profiles: プロファイル
proxies: プロキシ
systemProxy: システムプロキシ
tunMode: TUN モード
closeAllConnections: すべての接続を閉じる
lightweightMode: 軽量モード
copyEnv: 環境変数をコピー
confDir: 設定ディレクトリ
coreDir: コアディレクトリ
logsDir: ログディレクトリ
openDir: ディレクトリを開く
appLog: アプリケーションログ
coreLog: コアログ
restartClash: Clash コアを再起動
restartApp: アプリケーションを再起動
vergeVersion: Verge バージョン
more: その他
exit: 終了
tooltip:
systemProxy: システムプロキシ
tun: TUN
profile: プロファイル

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: 대시보드
body: 대시보드 표시 상태가 업데이트되었습니다.
clashModeChanged:
title: 모드 전환
body: "{mode}(으)로 전환되었습니다."
systemProxyToggled:
title: 시스템 프록시
body: 시스템 프록시 상태가 업데이트되었습니다.
tunModeToggled:
title: TUN 모드
body: TUN 모드 상태가 업데이트되었습니다.
lightweightModeEntered:
title: 경량 모드
body: 경량 모드에 진입했습니다.
profilesReactivated:
title: 프로필
body: 프로필이 다시 활성화되었습니다.
appQuit:
title: 곧 종료
body: Clash Verge가 곧 종료됩니다.
appHidden:
title: 앱이 숨겨짐
body: Clash Verge가 백그라운드에서 실행 중입니다.
service:
adminInstallPrompt: Clash Verge 서비스 설치에는 관리자 권한이 필요합니다.
adminUninstallPrompt: Clash Verge 서비스 제거에는 관리자 권한이 필요합니다.
tray:
dashboard: 대시보드
ruleMode: 규칙 모드
globalMode: 전역 모드
directMode: 직접 모드
outboundModes: 아웃바운드 모드
rule: 규칙
direct: 직접
global: 글로벌
profiles: 프로필
proxies: 프록시
systemProxy: 시스템 프록시
tunMode: TUN 모드
closeAllConnections: 모든 연결 닫기
lightweightMode: 경량 모드
copyEnv: 환경 변수 복사
confDir: 구성 디렉터리
coreDir: 코어 디렉터리
logsDir: 로그 디렉터리
openDir: 디렉터리 열기
appLog: 애플리케이션 로그
coreLog: 코어 로그
restartClash: Clash 코어 재시작
restartApp: 애플리케이션 재시작
vergeVersion: Verge 버전
more: 더 보기
exit: 종료
tooltip:
systemProxy: 시스템 프록시
tun: TUN
profile: 프로필

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Панель
body: Видимость панели обновлена.
clashModeChanged:
title: Смена режима
body: Переключено на {mode}.
systemProxyToggled:
title: Системный прокси
body: Статус системного прокси обновлен.
tunModeToggled:
title: Режим TUN
body: Статус режима TUN обновлен.
lightweightModeEntered:
title: Легкий режим
body: Включен легкий режим.
profilesReactivated:
title: Профили
body: Профиль повторно активирован.
appQuit:
title: Скорый выход
body: Clash Verge скоро завершит работу.
appHidden:
title: Приложение скрыто
body: Clash Verge работает в фоновом режиме.
service:
adminInstallPrompt: Для установки службы Clash Verge требуются права администратора.
adminUninstallPrompt: Для удаления службы Clash Verge требуются права администратора.
tray:
dashboard: Панель
ruleMode: Режим правил
globalMode: Глобальный режим
directMode: Прямой режим
outboundModes: Исходящие режимы
rule: Правило
direct: Прямой
global: Глобальный
profiles: Профили
proxies: Прокси
systemProxy: Системный прокси
tunMode: Режим TUN
closeAllConnections: Закрыть все соединения
lightweightMode: Легкий режим
copyEnv: Копировать переменные среды
confDir: Каталог конфигурации
coreDir: Каталог ядра
logsDir: Каталог журналов
openDir: Открыть каталог
appLog: Журнал приложения
coreLog: Журнал ядра
restartClash: Перезапустить ядро Clash
restartApp: Перезапустить приложение
vergeVersion: Версия Verge
more: Еще
exit: Выход
tooltip:
systemProxy: Системный прокси
tun: TUN
profile: Профиль

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Gösterge Paneli
body: Gösterge panelinin görünürlüğü güncellendi.
clashModeChanged:
title: Mod Değişimi
body: "{mode} moduna geçildi."
systemProxyToggled:
title: Sistem Vekil'i
body: Sistem vekil'i durumu güncellendi.
tunModeToggled:
title: TUN Modu
body: TUN modu durumu güncellendi.
lightweightModeEntered:
title: Hafif Mod
body: Hafif moda geçildi.
profilesReactivated:
title: Profiller
body: Profil yeniden etkinleştirildi.
appQuit:
title: Çıkış Yapılmak Üzere
body: Clash Verge kapanmak üzere.
appHidden:
title: Uygulama Gizlendi
body: Clash Verge arka planda çalışıyor.
service:
adminInstallPrompt: Clash Verge hizmetini kurmak için yönetici ayrıcalıkları gerekir.
adminUninstallPrompt: Clash Verge hizmetini kaldırmak için yönetici ayrıcalıkları gerekir.
tray:
dashboard: Gösterge Paneli
ruleMode: Kural Modu
globalMode: Küresel Mod
directMode: Doğrudan Mod
outboundModes: Giden Modlar
rule: Kural
direct: Doğrudan
global: Küresel
profiles: Profiller
proxies: Vekil'ler
systemProxy: Sistem Vekil'i
tunMode: TUN Modu
closeAllConnections: Tüm Bağlantıları Kapat
lightweightMode: Hafif Mod
copyEnv: Ortam Değişkenlerini Kopyala
confDir: Yapılandırma Dizini
coreDir: Çekirdek Dizini
logsDir: Günlük Dizini
openDir: Dizini Aç
appLog: Uygulama Günlüğü
coreLog: Çekirdek Günlüğü
restartClash: Clash Çekirdeğini Yeniden Başlat
restartApp: Uygulamayı Yeniden Başlat
vergeVersion: Verge Sürümü
more: Daha Fazla
exit: Çıkış
tooltip:
systemProxy: Sistem Vekil'i
tun: TUN
profile: Profil

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: Идарә панеле
body: Идарә панеленең күренеше яңартылды.
clashModeChanged:
title: Режим алыштыру
body: "{mode} режимына күчтел."
systemProxyToggled:
title: Системалы прокси
body: Системалы прокси хәле яңартылды.
tunModeToggled:
title: TUN режимы
body: TUN режимы хәле яңартылды.
lightweightModeEntered:
title: Җиңел режим
body: Җиңел режимга күчелде.
profilesReactivated:
title: Профильләр
body: Профиль яңадан активлаштырылды.
appQuit:
title: Чыгар алдыннан
body: Clash Verge чыгарга җыена.
appHidden:
title: Кушымта яшерелде
body: Clash Verge фон режимында эшли.
service:
adminInstallPrompt: Clash Verge хезмәтен урнаштыру өчен администратор хокуклары кирәк.
adminUninstallPrompt: Clash Verge хезмәтен бетерү өчен администратор хокуклары кирәк.
tray:
dashboard: Идарә панеле
ruleMode: Кагыйдә режимы
globalMode: Глобаль режим
directMode: Турыдан-туры режим
outboundModes: Чыгыш режимнары
rule: Кагыйдә
direct: Турыдан-туры
global: Глобаль
profiles: Профильләр
proxies: Проксилар
systemProxy: Системалы прокси
tunMode: TUN режимы
closeAllConnections: Барлык тоташуларны ябу
lightweightMode: Җиңел режим
copyEnv: Мохит үзгәрүчәннәрен күчерү
confDir: Конфигурация каталогы
coreDir: Ядро каталогы
logsDir: Журнал каталогы
openDir: Каталогны ачу
appLog: Кушымта журналы
coreLog: Ядро журналы
restartClash: Clash ядрәсен кабат җибәрү
restartApp: Кушымтаны кабат җибәрү
vergeVersion: Verge версиясе
more: Күбрәк
exit: Чыгу
tooltip:
systemProxy: Системалы прокси
tun: TUN
profile: Профиль

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: 仪表板
body: 仪表板显示状态已更新。
clashModeChanged:
title: 模式切换
body: 已切换至 {mode}。
systemProxyToggled:
title: 系统代理
body: 系统代理状态已更新。
tunModeToggled:
title: TUN 模式
body: TUN 模式状态已更新。
lightweightModeEntered:
title: 轻量模式
body: 已进入轻量模式。
profilesReactivated:
title: 订阅
body: 订阅已激活。
appQuit:
title: 即将退出
body: Clash Verge 即将退出。
appHidden:
title: 应用已隐藏
body: Clash Verge 正在后台运行。
service:
adminInstallPrompt: 安装 Clash Verge 服务需要管理员权限
adminUninstallPrompt: 卸载 Clash Verge 服务需要管理员权限
tray:
dashboard: 仪表板
ruleMode: 规则模式
globalMode: 全局模式
directMode: 直连模式
outboundModes: 出站模式
rule: 规则
direct: 直连
global: 全局
profiles: 订阅
proxies: 代理
systemProxy: 系统代理
tunMode: TUN 模式
closeAllConnections: 关闭所有连接
lightweightMode: 轻量模式
copyEnv: 复制环境变量
confDir: 配置目录
coreDir: 内核目录
logsDir: 日志目录
openDir: 打开目录
appLog: 应用日志
coreLog: 内核日志
restartClash: 重启 Clash 内核
restartApp: 重启应用
vergeVersion: Verge 版本
more: 更多
exit: 退出
tooltip:
systemProxy: 系统代理
tun: TUN
profile: 订阅

View File

@@ -0,0 +1,60 @@
_version: 1
notifications:
dashboardToggled:
title: 儀表板
body: 儀表板顯示狀態已更新。
clashModeChanged:
title: 模式切換
body: 已切換至 {mode}。
systemProxyToggled:
title: 系統代理
body: 系統代理狀態已更新。
tunModeToggled:
title: 虛擬網路介面卡模式
body: 已更新虛擬網路介面卡模式狀態。
lightweightModeEntered:
title: 輕量模式
body: 已進入輕量模式。
profilesReactivated:
title: 訂閱
body: 訂閱已啟用。
appQuit:
title: 即將退出
body: Clash Verge 即將退出。
appHidden:
title: 應用已隱藏
body: Clash Verge 正在背景執行。
service:
adminInstallPrompt: 安裝 Clash Verge 服務需要管理員權限
adminUninstallPrompt: 卸载 Clash Verge 服務需要管理員權限
tray:
dashboard: 儀表板
ruleMode: 規則模式
globalMode: 全域模式
directMode: 直連模式
outboundModes: 出站模式
rule: 規則
direct: 直連
global: 全域
profiles: 訂閱
proxies: 代理
systemProxy: 系統代理
tunMode: 虛擬網路介面卡模式
closeAllConnections: 關閉所有連線
lightweightMode: 輕量模式
copyEnv: 複製環境變數
confDir: 設定目錄
coreDir: 核心目錄
logsDir: 日誌目錄
openDir: 開啟目錄
appLog: 應用程式日誌
coreLog: 核心日誌
restartClash: 重新啟動 Clash 核心
restartApp: 重新啟動應用程式
vergeVersion: Verge 版本
more: 更多
exit: 離開
tooltip:
systemProxy: 系統代理
tun: 虛擬網路介面卡
profile: 訂閱

View File

@@ -0,0 +1,103 @@
use rust_i18n::i18n;
const DEFAULT_LANGUAGE: &str = "zh";
i18n!("locales", fallback = "zh");
#[inline]
fn locale_alias(locale: &str) -> Option<&'static str> {
match locale {
"ja" | "ja-jp" | "jp" => Some("jp"),
"zh" | "zh-cn" | "zh-hans" | "zh-sg" | "zh-my" | "zh-chs" => Some("zh"),
"zh-tw" | "zh-hk" | "zh-hant" | "zh-mo" | "zh-cht" => Some("zhtw"),
_ => None,
}
}
#[inline]
fn resolve_supported_language(language: &str) -> Option<&'static str> {
if language.is_empty() {
return None;
}
let normalized = language.to_lowercase().replace('_', "-");
let segments: Vec<&str> = normalized.split('-').collect();
let supported = rust_i18n::available_locales!();
for i in (1..=segments.len()).rev() {
let prefix = segments[..i].join("-");
if let Some(alias) = locale_alias(&prefix)
&& let Some(&found) = supported.iter().find(|&&l| l.eq_ignore_ascii_case(alias))
{
return Some(found);
}
if let Some(&found) = supported.iter().find(|&&l| l.eq_ignore_ascii_case(&prefix)) {
return Some(found);
}
}
None
}
#[inline]
fn current_language(language: Option<&str>) -> &str {
language
.as_ref()
.filter(|lang| !lang.is_empty())
.and_then(|lang| resolve_supported_language(lang))
.unwrap_or_else(system_language)
}
#[inline]
pub fn system_language() -> &'static str {
sys_locale::get_locale()
.as_deref()
.and_then(resolve_supported_language)
.unwrap_or(DEFAULT_LANGUAGE)
}
#[inline]
pub fn sync_locale(language: Option<&str>) {
let language = current_language(language);
set_locale(language);
}
#[inline]
pub fn set_locale(language: &str) {
let lang = resolve_supported_language(language).unwrap_or(DEFAULT_LANGUAGE);
rust_i18n::set_locale(lang);
}
#[inline]
pub fn translate(key: &str) -> Cow<'_, str> {
rust_i18n::t!(key)
}
#[macro_export]
macro_rules! t {
($key:expr) => {
$crate::translate(&$key)
};
($key:expr, $($arg_name:ident = $arg_value:expr),*) => {
{
let mut _text = $crate::translate(&$key);
$(
_text = _text.replace(&format!("{{{}}}", stringify!($arg_name)), &$arg_value);
)*
_text
}
};
}
#[cfg(test)]
mod test {
use super::resolve_supported_language;
#[test]
fn test_resolve_supported_language() {
assert_eq!(resolve_supported_language("en"), Some("en"));
assert_eq!(resolve_supported_language("en-US"), Some("en"));
assert_eq!(resolve_supported_language("zh"), Some("zh"));
assert_eq!(resolve_supported_language("zh-CN"), Some("zh"));
assert_eq!(resolve_supported_language("zh-Hant"), Some("zhtw"));
assert_eq!(resolve_supported_language("jp"), Some("jp"));
assert_eq!(resolve_supported_language("ja-JP"), Some("jp"));
assert_eq!(resolve_supported_language("fr"), None);
}
}

View File

@@ -0,0 +1,13 @@
[package]
name = "clash-verge-logging"
version = "0.1.0"
edition = "2024"
[dependencies]
log = { workspace = true }
tokio = { workspace = true }
compact_str = { workspace = true }
flexi_logger = { workspace = true }
[features]
default = []

View File

@@ -0,0 +1,129 @@
use compact_str::CompactString;
use flexi_logger::DeferredNow;
use flexi_logger::filter::LogLineFilter;
use flexi_logger::writers::FileLogWriter;
use flexi_logger::writers::LogWriter as _;
use log::Level;
use log::Record;
use std::{fmt, sync::Arc};
use tokio::sync::{Mutex, MutexGuard};
pub type SharedWriter = Arc<Mutex<FileLogWriter>>;
#[derive(Debug, PartialEq, Eq)]
pub enum Type {
Cmd,
Core,
Config,
Setup,
System,
SystemSignal,
Service,
Hotkey,
Window,
Tray,
Timer,
Frontend,
Backup,
File,
Lightweight,
Network,
ProxyMode,
Validate,
ClashVergeRev,
}
impl fmt::Display for Type {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Cmd => write!(f, "[Cmd]"),
Self::Core => write!(f, "[Core]"),
Self::Config => write!(f, "[Config]"),
Self::Setup => write!(f, "[Setup]"),
Self::System => write!(f, "[System]"),
Self::SystemSignal => write!(f, "[SysSignal]"),
Self::Service => write!(f, "[Service]"),
Self::Hotkey => write!(f, "[Hotkey]"),
Self::Window => write!(f, "[Window]"),
Self::Tray => write!(f, "[Tray]"),
Self::Timer => write!(f, "[Timer]"),
Self::Frontend => write!(f, "[Frontend]"),
Self::Backup => write!(f, "[Backup]"),
Self::File => write!(f, "[File]"),
Self::Lightweight => write!(f, "[Lightweight]"),
Self::Network => write!(f, "[Network]"),
Self::ProxyMode => write!(f, "[ProxMode]"),
Self::Validate => write!(f, "[Validate]"),
Self::ClashVergeRev => write!(f, "[ClashVergeRev]"),
}
}
}
#[macro_export]
macro_rules! logging {
// 不带 print 参数的版本(默认不打印)
($level:ident, $type:expr, $($arg:tt)*) => {
log::$level!(target: "app", "{} {}", $type, format_args!($($arg)*))
};
}
#[macro_export]
macro_rules! logging_error {
// Handle Result<T, E>
($type:expr, $expr:expr) => {
if let Err(err) = $expr {
log::error!(target: "app", "[{}] {}", $type, err);
}
};
// Handle formatted message: always print to stdout and log as error
($type:expr, $fmt:literal $(, $arg:expr)*) => {
log::error!(target: "app", "[{}] {}", $type, format_args!($fmt $(, $arg)*));
};
}
#[inline]
pub fn write_sidecar_log(
writer: MutexGuard<'_, FileLogWriter>,
now: &mut DeferredNow,
level: Level,
message: &CompactString,
) {
let args = format_args!("{}", message);
let record = Record::builder().args(args).level(level).target("sidecar").build();
let _ = writer.write(now, &record);
}
pub struct NoModuleFilter<'a>(pub Vec<&'a str>);
impl<'a> NoModuleFilter<'a> {
#[inline]
pub fn filter(&self, record: &Record) -> bool {
if let Some(module) = record.module_path() {
for blocked in self.0.iter() {
if module.len() >= blocked.len() && module.as_bytes()[..blocked.len()] == blocked.as_bytes()[..] {
return false;
}
}
}
true
}
}
impl<'a> LogLineFilter for NoModuleFilter<'a> {
#[inline]
fn write(
&self,
now: &mut DeferredNow,
record: &Record,
writer: &dyn flexi_logger::filter::LogLineWriter,
) -> std::io::Result<()> {
if !self.filter(record) {
return Ok(());
}
writer.write(now, record)
}
}

View File

@@ -0,0 +1,13 @@
[package]
name = "clash-verge-signal"
version = "0.1.0"
edition = "2024"
rust-version = "1.91"
[dependencies]
clash-verge-logging = { workspace = true }
log = { workspace = true }
tokio = { workspace = true }
[lints]
workspace = true

View File

@@ -0,0 +1,35 @@
use std::sync::OnceLock;
use clash_verge_logging::{Type, logging};
#[cfg(unix)]
mod unix;
#[cfg(windows)]
mod windows;
pub(crate) static RUNTIME: OnceLock<Option<tokio::runtime::Runtime>> = OnceLock::new();
pub fn register<F, Fut>(f: F)
where
F: Fn() -> Fut + Send + Sync + 'static,
Fut: Future + Send + 'static,
{
RUNTIME.get_or_init(|| match tokio::runtime::Runtime::new() {
Ok(rt) => Some(rt),
Err(e) => {
logging!(
info,
Type::SystemSignal,
"register shutdown signal failed, create tokio runtime error: {}",
e
);
None
}
});
#[cfg(unix)]
unix::register(f);
#[cfg(windows)]
windows::register(f);
}

View File

@@ -0,0 +1,79 @@
use std::sync::atomic::{AtomicBool, Ordering};
use clash_verge_logging::{Type, logging};
use tokio::signal::unix::{SignalKind, signal};
use crate::RUNTIME;
static IS_CLEANING_UP: AtomicBool = AtomicBool::new(false);
pub fn register<F, Fut>(f: F)
where
F: Fn() -> Fut + Send + Sync + 'static,
Fut: Future + Send + 'static,
{
if let Some(Some(rt)) = RUNTIME.get() {
rt.spawn(async move {
let mut sigterm = match signal(SignalKind::terminate()) {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register SIGTERM: {}", e);
return;
}
};
let mut sigint = match signal(SignalKind::interrupt()) {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register SIGINT: {}", e);
return;
}
};
let mut sighup = match signal(SignalKind::hangup()) {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register SIGHUP: {}", e);
return;
}
};
loop {
let signal_name;
tokio::select! {
_ = sigterm.recv() => {
signal_name = "SIGTERM";
}
_ = sigint.recv() => {
signal_name = "SIGINT";
}
_ = sighup.recv() => {
signal_name = "SIGHUP";
}
else => {
break;
}
}
if IS_CLEANING_UP.load(Ordering::SeqCst) {
logging!(
info,
Type::SystemSignal,
"Already shutting down, ignoring repeated signal: {}",
signal_name
);
continue;
}
IS_CLEANING_UP.store(true, Ordering::SeqCst);
logging!(info, Type::SystemSignal, "Caught signal {}", signal_name);
f().await;
}
});
} else {
logging!(
error,
Type::SystemSignal,
"register shutdown signal failed, RUNTIME is not available"
);
}
}

View File

@@ -0,0 +1,89 @@
use std::sync::atomic::{AtomicBool, Ordering};
use clash_verge_logging::{Type, logging};
use tokio::signal::windows;
use crate::RUNTIME;
static IS_CLEANING_UP: AtomicBool = AtomicBool::new(false);
pub fn register<F, Fut>(f: F)
where
F: Fn() -> Fut + Send + Sync + 'static,
Fut: Future + Send + 'static,
{
if let Some(Some(rt)) = RUNTIME.get() {
rt.spawn(async move {
let mut ctrl_c = match windows::ctrl_c() {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register Ctrl+C: {}", e);
return;
}
};
let mut ctrl_close = match windows::ctrl_close() {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register Ctrl+Close: {}", e);
return;
}
};
let mut ctrl_shutdown = match windows::ctrl_shutdown() {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register Ctrl+Shutdown: {}", e);
return;
}
};
let mut ctrl_logoff = match windows::ctrl_logoff() {
Ok(s) => s,
Err(e) => {
logging!(error, Type::SystemSignal, "Failed to register Ctrl+Logoff: {}", e);
return;
}
};
loop {
let signal_name;
tokio::select! {
_ = ctrl_c.recv() => {
signal_name = "Ctrl+C";
}
_ = ctrl_close.recv() => {
signal_name = "Ctrl+Close";
}
_ = ctrl_shutdown.recv() => {
signal_name = "Ctrl+Shutdown";
}
_ = ctrl_logoff.recv() => {
signal_name = "Ctrl+Logoff";
}
}
if IS_CLEANING_UP.load(Ordering::SeqCst) {
logging!(
info,
Type::SystemSignal,
"Already shutting down, ignoring repeated signal: {}",
signal_name
);
continue;
}
IS_CLEANING_UP.store(true, Ordering::SeqCst);
logging!(info, Type::SystemSignal, "Caught Windows signal: {}", signal_name);
f().await;
}
});
} else {
logging!(
error,
Type::SystemSignal,
"register shutdown signal failed, RUNTIME is not available"
);
}
}

View File

@@ -0,0 +1,20 @@
[package]
name = "tauri-plugin-clash-verge-sysinfo"
version = "0.1.0"
edition = "2024"
rust-version = "1.91"
[dependencies]
tauri = { workspace = true }
tauri-plugin-clipboard-manager = { workspace = true }
parking_lot = { workspace = true }
sysinfo = { version = "0.37.2", features = ["network", "system"] }
[target.'cfg(not(windows))'.dependencies]
libc = "0.2.180"
[target.'cfg(windows)'.dependencies]
deelevate = { workspace = true }
[lints]
workspace = true

View File

@@ -0,0 +1,33 @@
use parking_lot::RwLock;
use tauri::{AppHandle, Runtime, State, command};
use tauri_plugin_clipboard_manager::{ClipboardExt as _, Error};
use crate::Platform;
// TODO 迁移,让新的结构体允许通过 tauri command 正确使用 structure.field 方式获取信息
#[command]
pub fn get_system_info(state: State<'_, RwLock<Platform>>) -> Result<String, Error> {
Ok(state.inner().read().to_string())
}
/// 获取应用的运行时间(毫秒)
#[command]
pub fn get_app_uptime(state: State<'_, RwLock<Platform>>) -> Result<u128, Error> {
Ok(state.inner().read().appinfo.app_startup_time.elapsed().as_millis())
}
/// 检查应用是否以管理员身份运行
#[command]
pub fn app_is_admin(state: State<'_, RwLock<Platform>>) -> Result<bool, Error> {
Ok(state.inner().read().appinfo.app_is_admin)
}
#[command]
pub fn export_diagnostic_info<R: Runtime>(
app_handle: AppHandle<R>,
state: State<'_, RwLock<Platform>>,
) -> Result<(), Error> {
let info = state.inner().read().to_string();
let clipboard = app_handle.clipboard();
clipboard.write_text(info)
}

View File

@@ -0,0 +1,180 @@
use std::{
fmt::{Debug, Display},
time::Instant,
};
pub mod commands;
#[cfg(windows)]
use deelevate::{PrivilegeLevel, Token};
#[cfg(unix)]
pub use libc;
use parking_lot::RwLock;
use sysinfo::{Networks, System};
use tauri::{
Manager as _, Runtime,
plugin::{Builder, TauriPlugin},
};
pub struct SysInfo {
system_name: String,
system_version: String,
system_kernel_version: String,
system_arch: String,
}
impl Default for SysInfo {
#[inline]
fn default() -> Self {
let system_name = System::name().unwrap_or_else(|| "Null".into());
let system_version = System::long_os_version().unwrap_or_else(|| "Null".into());
let system_kernel_version = System::kernel_version().unwrap_or_else(|| "Null".into());
let system_arch = System::cpu_arch();
Self {
system_name,
system_version,
system_kernel_version,
system_arch,
}
}
}
pub struct AppInfo {
app_version: String,
app_core_mode: String,
pub app_startup_time: Instant,
pub app_is_admin: bool,
}
impl Default for AppInfo {
#[inline]
fn default() -> Self {
let app_version = "0.0.0".into();
let app_core_mode = "NotRunning".into();
let app_is_admin = false;
let app_startup_time = Instant::now();
Self {
app_version,
app_core_mode,
app_startup_time,
app_is_admin,
}
}
}
#[derive(Default)]
pub struct Platform {
pub sysinfo: SysInfo,
pub appinfo: AppInfo,
}
impl Debug for Platform {
#[inline]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Platform")
.field("system_name", &self.sysinfo.system_name)
.field("system_version", &self.sysinfo.system_version)
.field("system_kernel_version", &self.sysinfo.system_kernel_version)
.field("system_arch", &self.sysinfo.system_arch)
.field("app_version", &self.appinfo.app_version)
.field("app_core_mode", &self.appinfo.app_core_mode)
.field("app_is_admin", &self.appinfo.app_is_admin)
.finish()
}
}
impl Display for Platform {
#[inline]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"System Name: {}\nSystem Version: {}\nSystem kernel Version: {}\nSystem Arch: {}\nVerge Version: {}\nRunning Mode: {}\nIs Admin: {}",
self.sysinfo.system_name,
self.sysinfo.system_version,
self.sysinfo.system_kernel_version,
self.sysinfo.system_arch,
self.appinfo.app_version,
self.appinfo.app_core_mode,
self.appinfo.app_is_admin
)
}
}
impl Platform {
#[inline]
fn new() -> Self {
Self::default()
}
}
#[inline]
fn is_binary_admin() -> bool {
#[cfg(not(windows))]
unsafe {
libc::geteuid() == 0
}
#[cfg(windows)]
Token::with_current_process()
.and_then(|token| token.privilege_level())
.map(|level| level != PrivilegeLevel::NotPrivileged)
.unwrap_or(false)
}
#[inline]
#[cfg(unix)]
pub fn current_gid() -> u32 {
unsafe { libc::getgid() }
}
#[inline]
pub fn list_network_interfaces() -> Vec<String> {
let mut networks = Networks::new();
networks.refresh(false);
networks.keys().map(|name| name.to_owned()).collect()
}
#[inline]
pub fn set_app_core_mode<R: Runtime>(app: &tauri::AppHandle<R>, mode: impl Into<String>) {
let platform_spec = app.state::<RwLock<Platform>>();
let mut spec = platform_spec.write();
spec.appinfo.app_core_mode = mode.into();
}
#[inline]
pub fn get_app_uptime<R: Runtime>(app: &tauri::AppHandle<R>) -> Instant {
let platform_spec = app.state::<RwLock<Platform>>();
let spec = platform_spec.read();
spec.appinfo.app_startup_time
}
#[inline]
pub fn is_current_app_handle_admin<R: Runtime>(app: &tauri::AppHandle<R>) -> bool {
let platform_spec = app.state::<RwLock<Platform>>();
let spec = platform_spec.read();
spec.appinfo.app_is_admin
}
#[inline]
pub fn init<R: Runtime>() -> TauriPlugin<R> {
Builder::<R>::new("clash_verge_sysinfo")
// TODO 现在 crate 还不是真正的 tauri 插件,必须由主 lib 自行注册
// TODO 从 clash-verge 中迁移获取系统信息的 commnand 并实现优雅 structure.field 访问
// .invoke_handler(tauri::generate_handler![
// commands::get_system_info,
// commands::get_app_uptime,
// commands::app_is_admin,
// commands::export_diagnostic_info,
// ])
.setup(move |app, _api| {
let app_version = app.package_info().version.to_string();
let is_admin = is_binary_admin();
let mut platform_spec = Platform::new();
platform_spec.appinfo.app_version = app_version;
platform_spec.appinfo.app_is_admin = is_admin;
app.manage(RwLock::new(platform_spec));
Ok(())
})
.build()
}

236
deny.toml Normal file
View File

@@ -0,0 +1,236 @@
# This template contains all of the possible sections and their default values
# Note that all fields that take a lint level have these possible values:
# * deny - An error will be produced and the check will fail
# * warn - A warning will be produced, but the check will not fail
# * allow - No warning or error will be produced, though in some cases a note
# will be
# The values provided in this template are the default values that will be used
# when any section or field is not specified in your own configuration
# Root options
# The graph table configures how the dependency graph is constructed and thus
# which crates the checks are performed against
[graph]
# If 1 or more target triples (and optionally, target_features) are specified,
# only the specified targets will be checked when running `cargo deny check`.
# This means, if a particular package is only ever used as a target specific
# dependency, such as, for example, the `nix` crate only being used via the
# `target_family = "unix"` configuration, that only having windows targets in
# this list would mean the nix crate, as well as any of its exclusive
# dependencies not shared by any other crates, would be ignored, as the target
# list here is effectively saying which targets you are building for.
targets = [
# The triple can be any string, but only the target triples built in to
# rustc (as of 1.40) can be checked against actual config expressions
#"x86_64-unknown-linux-musl",
# You can also specify which target_features you promise are enabled for a
# particular target. target_features are currently not validated against
# the actual valid features supported by the target architecture.
#{ triple = "wasm32-unknown-unknown", features = ["atomics"] },
]
# When creating the dependency graph used as the source of truth when checks are
# executed, this field can be used to prune crates from the graph, removing them
# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate
# is pruned from the graph, all of its dependencies will also be pruned unless
# they are connected to another crate in the graph that hasn't been pruned,
# so it should be used with care. The identifiers are [Package ID Specifications]
# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html)
#exclude = []
# If true, metadata will be collected with `--all-features`. Note that this can't
# be toggled off if true, if you want to conditionally enable `--all-features` it
# is recommended to pass `--all-features` on the cmd line instead
all-features = false
# If true, metadata will be collected with `--no-default-features`. The same
# caveat with `all-features` applies
no-default-features = false
# If set, these feature will be enabled when collecting metadata. If `--features`
# is specified on the cmd line they will take precedence over this option.
#features = []
# The output table provides options for how/if diagnostics are outputted
[output]
# When outputting inclusion graphs in diagnostics that include features, this
# option can be used to specify the depth at which feature edges will be added.
# This option is included since the graphs can be quite large and the addition
# of features from the crate(s) to all of the graph roots can be far too verbose.
# This option can be overridden via `--feature-depth` on the cmd line
feature-depth = 1
# This section is considered when running `cargo deny check advisories`
# More documentation for the advisories section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
[advisories]
# The path where the advisory databases are cloned/fetched into
#db-path = "$CARGO_HOME/advisory-dbs"
# The url(s) of the advisory databases to use
#db-urls = ["https://github.com/rustsec/advisory-db"]
# A list of advisory IDs to ignore. Note that ignored advisories will still
# output a note when they are encountered.
ignore = [
#"RUSTSEC-0000-0000",
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
#"a-crate-that-is-yanked@0.1.1", # you can also ignore yanked crate versions if you wish
#{ crate = "a-crate-that-is-yanked@0.1.1", reason = "you can specify why you are ignoring the yanked crate" },
"RUSTSEC-2024-0415",
]
# If this is true, then cargo deny will use the git executable to fetch advisory database.
# If this is false, then it uses a built-in git library.
# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support.
# See Git Authentication for more information about setting up git authentication.
#git-fetch-with-cli = true
# This section is considered when running `cargo deny check licenses`
# More documentation for the licenses section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
[licenses]
# List of explicitly allowed licenses
# See https://spdx.org/licenses/ for list of possible licenses
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
allow = [
#"MIT",
#"Apache-2.0",
#"Apache-2.0 WITH LLVM-exception",
]
# The confidence threshold for detecting a license from license text.
# The higher the value, the more closely the license text must be to the
# canonical license text of a valid SPDX license file.
# [possible values: any between 0.0 and 1.0].
confidence-threshold = 0.85
# Allow 1 or more licenses on a per-crate basis, so that particular licenses
# aren't accepted for every possible crate as with the normal allow list
exceptions = [
# Each entry is the crate and version constraint, and its specific allow
# list
#{ allow = ["Zlib"], crate = "adler32" },
]
# Some crates don't have (easily) machine readable licensing information,
# adding a clarification entry for it allows you to manually specify the
# licensing information
#[[licenses.clarify]]
# The package spec the clarification applies to
#crate = "ring"
# The SPDX expression for the license requirements of the crate
#expression = "MIT AND ISC AND OpenSSL"
# One or more files in the crate's source used as the "source of truth" for
# the license expression. If the contents match, the clarification will be used
# when running the license check, otherwise the clarification will be ignored
# and the crate will be checked normally, which may produce warnings or errors
# depending on the rest of your configuration
#license-files = [
# Each entry is a crate relative path, and the (opaque) hash of its contents
#{ path = "LICENSE", hash = 0xbd0eed23 }
#]
[licenses.private]
# If true, ignores workspace crates that aren't published, or are only
# published to private registries.
# To see how to mark a crate as unpublished (to the official registry),
# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
ignore = false
# One or more private registries that you might publish crates to, if a crate
# is only published to private registries, and ignore is true, the crate will
# not have its license(s) checked
registries = [
#"https://sekretz.com/registry
]
# This section is considered when running `cargo deny check bans`.
# More documentation about the 'bans' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
[bans]
# Lint level for when multiple versions of the same crate are detected
multiple-versions = "warn"
# Lint level for when a crate version requirement is `*`
wildcards = "allow"
# The graph highlighting used when creating dotgraphs for crates
# with multiple versions
# * lowest-version - The path to the lowest versioned duplicate is highlighted
# * simplest-path - The path to the version with the fewest edges is highlighted
# * all - Both lowest-version and simplest-path are used
highlight = "all"
# The default lint level for `default` features for crates that are members of
# the workspace that is being checked. This can be overridden by allowing/denying
# `default` on a crate-by-crate basis if desired.
workspace-default-features = "allow"
# The default lint level for `default` features for external crates that are not
# members of the workspace. This can be overridden by allowing/denying `default`
# on a crate-by-crate basis if desired.
external-default-features = "allow"
# List of crates that are allowed. Use with care!
allow = [
#"ansi_term@0.11.0",
#{ crate = "ansi_term@0.11.0", reason = "you can specify a reason it is allowed" },
]
# List of crates to deny
deny = [
#"ansi_term@0.11.0",
#{ crate = "ansi_term@0.11.0", reason = "you can specify a reason it is banned" },
# Wrapper crates can optionally be specified to allow the crate when it
# is a direct dependency of the otherwise banned crate
#{ crate = "ansi_term@0.11.0", wrappers = ["this-crate-directly-depends-on-ansi_term"] },
]
# List of features to allow/deny
# Each entry the name of a crate and a version range. If version is
# not specified, all versions will be matched.
#[[bans.features]]
#crate = "reqwest"
# Features to not allow
#deny = ["json"]
# Features to allow
#allow = [
# "rustls",
# "__rustls",
# "__tls",
# "hyper-rustls",
# "rustls",
# "rustls-pemfile",
# "rustls-tls-webpki-roots",
# "tokio-rustls",
# "webpki-roots",
#]
# If true, the allowed features must exactly match the enabled feature set. If
# this is set there is no point setting `deny`
#exact = true
# Certain crates/versions that will be skipped when doing duplicate detection.
skip = [
#"ansi_term@0.11.0",
#{ crate = "ansi_term@0.11.0", reason = "you can specify a reason why it can't be updated/removed" },
]
# Similarly to `skip` allows you to skip certain crates during duplicate
# detection. Unlike skip, it also includes the entire tree of transitive
# dependencies starting at the specified crate, up to a certain depth, which is
# by default infinite.
skip-tree = [
#"ansi_term@0.11.0", # will be skipped along with _all_ of its direct and transitive dependencies
#{ crate = "ansi_term@0.11.0", depth = 20 },
]
# This section is considered when running `cargo deny check sources`.
# More documentation about the 'sources' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
[sources]
# Lint level for what to happen when a crate from a crate registry that is not
# in the allow list is encountered
unknown-registry = "warn"
# Lint level for what to happen when a crate from a git repository that is not
# in the allow list is encountered
unknown-git = "warn"
# List of URLs for allowed crate registries. Defaults to the crates.io index
# if not specified. If it is specified but empty, no registries are allowed.
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
# List of URLs for allowed Git repositories
allow-git = []
[sources.allow-org]
# github.com organizations to allow git sources for
github = []
# gitlab.com organizations to allow git sources for
gitlab = []
# bitbucket.org organizations to allow git sources for
bitbucket = []

79
docs/CONTRIBUTING_i18n.md Normal file
View File

@@ -0,0 +1,79 @@
# CONTRIBUTING — i18n
Thanks for helping localize Clash Verge Rev. This guide reflects the current architecture, where the React frontend and the Tauri backend keep their translation bundles separate. Follow the steps below to keep both sides in sync without stepping on each other.
## Quick workflow
- Update the language folder under `src/locales/<lang>/`; use `src/locales/en/` as the canonical reference for keys and intent.
- Run `pnpm i18n:format` to align structure (frontend JSON + backend YAML) and `pnpm i18n:types` to refresh generated typings.
- If you touch backend copy, edit the matching YAML file in `crates/clash-verge-i18n/locales/<lang>.yml`.
- Preview UI changes with `pnpm dev` (desktop shell) or `pnpm web:dev` (web only).
- Keep PRs focused and add screenshots whenever layout could be affected by text length.
## Frontend locale structure
Each locale folder mirrors the namespaces under `src/locales/en/`:
```
src/locales/
en/
connections.json
home.json
shared.json
...
index.ts
zh/
...
```
- JSON files map to namespaces (for example `home.json``home.*`). Keep keys scoped to the file they belong to.
- `shared.json` stores reusable vocabulary (buttons, validations, etc.); feature-specific wording should live in the relevant namespace.
- `index.ts` re-exports a `resources` object that aggregates the namespace JSON files. When adding or removing namespaces, mirror the pattern from `src/locales/en/index.ts`.
- Frontend bundles are lazy-loaded by `src/services/i18n.ts`. Only languages listed in `supportedLanguages` are fetched at runtime, so append new codes there when you add a locale.
Because backend translations now live in their own directory, you no longer need to run `pnpm prebuild` just to sync locales—the frontend folder is the sole source of truth for web bundles.
## Tooling for i18n contributors
- `pnpm i18n:format``node scripts/cleanup-unused-i18n.mjs --align --apply`. It aligns key ordering, removes unused entries, and keeps all locales in lock-step with English across both JSON and YAML bundles.
- `pnpm i18n:check` performs a dry-run audit of frontend and backend keys. It scans TS/TSX usage plus Rust `t!(...)` calls in `src-tauri/` and `crates/` to spot missing or extra entries.
- `pnpm i18n:types` regenerates `src/types/generated/i18n-keys.ts` and `src/types/generated/i18n-resources.ts`, ensuring TypeScript catches invalid key usage.
- For dynamic keys that the analyzer cannot statically detect, add explicit references in code or update the script whitelist to avoid false positives.
## Backend (Tauri) locale bundles
Native UI strings (tray menu, notifications, dialogs) use `rust-i18n` with YAML bundles stored in `crates/clash-verge-i18n/locales/<lang>.yml`. These files are completely independent from the frontend JSON modules.
- Keep `en.yml` semantically aligned with the Simplified Chinese baseline (`zh.yml`). Other locales may temporarily copy English if no translation is available yet.
- When a backend feature introduces new strings, update every YAML file to keep the key set consistent. Missing keys fall back to the default language (`zh`), so catching gaps early avoids mixed-language output.
- The same `pnpm i18n:check` / `pnpm i18n:format` tooling now validates backend YAML keys against Rust usage, so run it after backend i18n edits.
- Rust code resolves the active language through the `clash-verge-i18n` crate (`crates/clash-verge-i18n/src/lib.rs`). No additional build step is required after editing YAML files; `tauri dev` and `tauri build` pick them up automatically.
## Adding a new language
1. Duplicate `src/locales/en/` into `src/locales/<new-lang>/` and translate the JSON files while preserving key structure.
2. Update the locales `index.ts` to import every namespace. Matching the English file is the easiest way to avoid missing exports.
3. Append the language code to `supportedLanguages` in `src/services/i18n.ts`.
4. If the backend should expose the language, create `crates/clash-verge-i18n/<new-lang>.yml` and translate the keys used in existing YAML files.
5. Run `pnpm i18n:format`, `pnpm i18n:types`, and (optionally) `pnpm i18n:check` in dry-run mode to confirm structure.
## Authoring guidelines
- **Reuse shared vocabulary** before introducing new phrases—check `shared.json` for common actions, statuses, and labels.
- **Prefer semantic keys** (`systemProxy`, `updateInterval`, `autoRefresh`) over positional ones (`item1`, `dialogTitle2`).
- **Document placeholders** using `{{placeholder}}` and ensure components supply the required values.
- **Group keys by UI responsibility** inside each namespace (`page`, `sections`, `forms`, `actions`, `tooltips`, `notifications`, `errors`, `tables`, `statuses`, etc.).
- **Keep strings concise** to avoid layout issues. If a translation needs more context, leave a PR note so reviewers can verify the UI.
## Testing & QA
- Launch the desktop shell with `pnpm dev` (or `pnpm web:dev`) and navigate through the affected views to confirm translations load and layouts behave.
- Run `pnpm test` if you touched code that consumes translations or adjusts formatting logic.
- For backend changes, trigger the relevant tray actions or notifications to verify the updated copy.
- Note any remaining untranslated sections or layout concerns in your PR description so maintainers can follow up.
## Feedback & support
- File an issue for missing context, tooling bugs, or localization gaps so we can track them.
- PRs that touch UI should include screenshots or GIFs whenever text length may affect layout.
- Mention the commands you ran (formatting, type generation, tests) in the PR checklist. If you need extra context or review help, request it via a PR comment.

2114
docs/Changelog.history.md Normal file

File diff suppressed because it is too large Load Diff

119
docs/README_en.md Normal file
View File

@@ -0,0 +1,119 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
Continuation of <a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>
<br>
</h1>
<h3 align="center">
A Clash Meta GUI built with <a href="https://github.com/tauri-apps/tauri">Tauri</a>.
</h3>
<p align="center">
Languages:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## Preview
| Dark | Light |
| ----------------------------------- | ------------------------------------- |
| ![Dark Preview](./preview_dark.png) | ![Light Preview](./preview_light.png) |
## Install
Visit the [Release page](https://github.com/clash-verge-rev/clash-verge-rev/releases) to download the installer that matches your platform.<br>
We provide packages for Windows (x64/x86), Linux (x64/arm64), and macOS 10.15+ (Intel/Apple).
#### Choosing a Release Channel
| Channel | Description | Link |
| :---------- | :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------- |
| Stable | Official builds with high reliability, ideal for daily use. | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha (EOL) | Legacy builds used to validate the publish pipeline. | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | Rolling builds for testing and feedback. Expect experimental changes. | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### Installation Guides & FAQ
Read the [project documentation](https://clash-verge-rev.github.io/) for install steps, troubleshooting, and frequently asked questions.
---
### Telegram Channel
Join [@clash_verge_rev](https://t.me/clash_verge_re) for update announcements.
## Promotion
### ✈️ [Doggygo VPN — A Technical-Grade Proxy Service](https://verge.dginv.click/#/register?code=oaxsAGo6)
🚀 A high-performance, overseas, technical-grade proxy service offering free trials and discounted plans, fully unlocking streaming platforms and AI services. The worlds first provider to adopt the **QUIC protocol**.
🎁 Register via the **Clash Verge exclusive invitation link** to receive **3 days of free trial**, with **1GB traffic per day**: 👉 [Register here](https://verge.dginv.click/#/register?code=oaxsAGo6)
#### **Core Advantages:**
- 📱 Self-developed iOS client (the industrys “only one”), with technology proven in production and **significant ongoing R&D investment**
- 🧑‍💻 **12-hour live customer support** (also assists with Clash Verge usage issues)
- 💰 Discounted plans at **only CNY 21 per month, 160GB traffic, 20% off with annual billing**
- 🌍 Overseas team, no risk of shutdown or exit scams, with up to **50% referral commission**
- ⚙️ **Cluster-based load balancing** architecture with **real-time load monitoring and elastic scaling**, high-speed dedicated lines (compatible with legacy clients), ultra-low latency, unaffected by peak hours, **4K streaming loads instantly**
- ⚡ The worlds first **QUIC-protocol-based proxy service**, now upgraded with the faster **Tuic protocol** (best paired with the Clash Verge client)
- 🎬 Unlocks **streaming platforms and mainstream AI services**
🌐 Official Website: 👉 [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## Features
- Built on high-performance Rust with the Tauri 2 framework
- Ships with the embedded [Clash.Meta (mihomo)](https://github.com/MetaCubeX/mihomo) core and supports switching to the `Alpha` channel
- Clean, polished UI with theme color controls, proxy group/tray icons, and `CSS Injection`
- Enhanced profile management (Merge and Script helpers) with configuration syntax hints
- System proxy controls, guard mode, and `TUN` (virtual network adapter) support
- Visual editors for nodes and rules
- WebDAV-based backup and sync for configurations
### FAQ
See the [FAQ page](https://clash-verge-rev.github.io/faq/windows.html) for platform-specific guidance.
### Donation
[Support Clash Verge Rev development](https://github.com/sponsors/clash-verge-rev)
## Development
See [CONTRIBUTING.md](../CONTRIBUTING.md) for detailed contribution guidelines.
After installing all **Tauri** prerequisites, run the development shell with:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## Contributions
Issues and pull requests are welcome!
## Acknowledgement
Clash Verge Rev builds on or draws inspiration from these projects:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): A Tauri-based Clash GUI for Windows, macOS, and Linux.
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): Build smaller, faster, more secure desktop apps with a web frontend.
- [Dreamacro/clash](https://github.com/Dreamacro/clash): A rule-based tunnel written in Go.
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): A rule-based tunnel written in Go.
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): A Clash GUI for Windows and macOS.
- [vitejs/vite](https://github.com/vitejs/vite): Next-generation frontend tooling with blazing-fast DX.
## License
GPL-3.0 License. See the [license file](../LICENSE) for details.

113
docs/README_es.md Normal file
View File

@@ -0,0 +1,113 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
Continuación de <a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>
<br>
</h1>
<h3 align="center">
Una interfaz gráfica para Clash Meta construida con <a href="https://github.com/tauri-apps/tauri">Tauri</a>.
</h3>
<p align="center">
Idiomas:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## Vista previa
| Oscuro | Claro |
| ----------------------------------- | ----------------------------------- |
| ![Vista oscura](./preview_dark.png) | ![Vista clara](./preview_light.png) |
## Instalación
Visita la [página de lanzamientos](https://github.com/clash-verge-rev/clash-verge-rev/releases) y descarga el instalador que corresponda a tu plataforma.<br>
Ofrecemos paquetes para Windows (x64/x86), Linux (x64/arm64) y macOS 10.15+ (Intel/Apple).
#### Cómo elegir el canal de lanzamiento
| Canal | Descripción | Enlace |
| :---------- | :----------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- |
| Stable | Compilaciones oficiales de alta fiabilidad; ideales para el uso diario. | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha (EOL) | Compilaciones heredadas usadas para validar el flujo de publicación. | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | Compilaciones continuas para pruebas y retroalimentación. Espera cambios beta. | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### Guías de instalación y preguntas frecuentes
Consulta la [documentación del proyecto](https://clash-verge-rev.github.io/) para encontrar los pasos de instalación, solución de problemas y preguntas frecuentes.
---
### Canal de Telegram
Únete a [@clash_verge_rev](https://t.me/clash_verge_re) para enterarte de las novedades.
## Promociones
#### [Doggygo VPN — Acelerador global orientado al rendimiento](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Servicio internacional de alto rendimiento con prueba gratuita, planes con descuento, desbloqueo de streaming y soporte de protocolo Hysteria de primera clase.
- Regístrate mediante el enlace exclusivo de Clash Verge y obtén una prueba de 3 días con 1 GB de tráfico diario: [Regístrate](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Cupón exclusivo de 20% de descuento para usuarios de Clash Verge: `verge20` (limitado a 500 usos)
- Plan promocional desde ¥15.8 al mes con 160 GB, más 20% de descuento adicional por pago anual
- Equipo ubicado en el extranjero para un servicio confiable, con hasta 50% de comisión compartida
- Clústeres balanceados con rutas dedicadas de alta velocidad (compatibles con clientes antiguos), latencia extremadamente baja, reproducción 4K sin interrupciones
- Primer proveedor global que soporta el protocolo `Hysteria2`, ideal para el cliente Clash Verge
- Desbloquea servicios de streaming y acceso a ChatGPT
- Sitio oficial: [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## Funciones
- Basado en Rust de alto rendimiento y en el framework Tauri 2
- Incluye el núcleo integrado [Clash.Meta (mihomo)](https://github.com/MetaCubeX/mihomo) y permite cambiar al canal `Alpha`
- Interfaz limpia y elegante con controles de color de tema, iconos de grupos proxy/bandeja y `CSS Injection`
- Gestión avanzada de perfiles (herramientas Merge y Script) con sugerencias de sintaxis para configuraciones
- Control del proxy del sistema, modo guardián y soporte para `TUN` (adaptador de red virtual)
- Editores visuales para nodos y reglas
- Copias de seguridad y sincronización mediante WebDAV
### Preguntas frecuentes
Visita la [página de FAQ](https://clash-verge-rev.github.io/faq/windows.html) para obtener instrucciones específicas por plataforma.
### Donaciones
[Apoya el desarrollo de Clash Verge Rev](https://github.com/sponsors/clash-verge-rev)
## Desarrollo
Consulta [CONTRIBUTING.md](../CONTRIBUTING.md) para conocer las pautas de contribución.
Después de instalar todos los requisitos de **Tauri**, ejecuta el entorno de desarrollo con:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## Contribuciones
Se agradecen los issues y pull requests.
## Agradecimientos
Clash Verge Rev se basa en, o se inspira en, los siguientes proyectos:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): Interfaz gráfica para Clash basada en Tauri. Compatible con Windows, macOS y Linux.
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): Construye aplicaciones de escritorio más pequeñas, rápidas y seguras con un frontend web.
- [Dreamacro/clash](https://github.com/Dreamacro/clash): Túnel basado en reglas escrito en Go.
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): Túnel basado en reglas escrito en Go.
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): Interfaz de Clash para Windows y macOS.
- [vitejs/vite](https://github.com/vitejs/vite): Herramientas de frontend de nueva generación con una experiencia rapidísima.
## Licencia
Licencia GPL-3.0. Consulta el [archivo de licencia](../LICENSE) para más detalles.

112
docs/README_fa.md Normal file
View File

@@ -0,0 +1,112 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
Continuation of <a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>
<br>
</h1>
<h3 align="center">
یک رابط کاربری گرافیکی Clash Meta که با <a href="https://github.com/tauri-apps/tauri">Tauri</a> ساخته شده است.
</h3>
<p align="center">
زبان‌ها:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## پیش‌نمایش
| تاریک | روشن |
| ----------------------------------- | ------------------------------------- |
| ![Dark Preview](./preview_dark.png) | ![Light Preview](./preview_light.png) |
## نصب
برای دانلود فایل نصبی متناسب با پلتفرم خود، به [صفحه انتشار](https://github.com/clash-verge-rev/clash-verge-rev/releases) مراجعه کنید.<br> ما بسته‌هایی برای ویندوز (x64/x86)، لینوکس (x64/arm64) و macOS 10.15+ (اینتل/اپل) ارائه می‌دهیم.
#### انتخاب کانال انتشار
| Channel | توضیحات | Link |
| :---------- | :------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------- |
| Stable | ساخت رسمی با قابلیت اطمینان بالا، ایده‌آل برای استفاده روزانه. | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha (EOL) | نسخه‌های قدیمی (Legacy builds) برای اعتبارسنجی خط لوله انتشار (publish pipeline) استفاده می‌شوند. | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | نسخه‌های آزمایشی برای آزمایش و دریافت بازخورد. منتظر تغییرات آزمایشی باشید. | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### راهنماهای نصب و سوالات متداول
برای مراحل نصب، عیب‌یابی و سوالات متداول، [مستندات پروژه](https://clash-verge-rev.github.io/) را مطالعه کنید.
---
### کانال تلگرام
برای اطلاع از آخرین اخبار به [@clash_verge_rev](https://t.me/clash_verge_re) بپیوندید.
## تبلیغات
#### [Doggygo VPN — شتاب‌دهنده جهانی عملکردگرا](https://verge.dginv.click/#/register?code=oaxsAGo6)
- سرویس شبکه برون مرزی با عملکرد بالا به همراه دوره‌های آزمایشی رایگان، طرح‌های تخفیف‌دار، امکان باز کردن قفل استریم و پشتیبانی درجه یک از پروتکل هیستریا.
- از طریق لینک اختصاصی Clash Verge ثبت نام کنید تا یک دوره آزمایشی ۳ روزه با ۱ گیگابایت ترافیک در روز دریافت کنید: [ثبت نام](https://verge.dginv.click/#/register?code=oaxsAGo6)
- کوپن تخفیف ۲۰٪ ویژه کاربران Clash Verge: `verge20` (محدود به ۵۰۰ بار استفاده)
- بسته تخفیف‌دار از ۱۵.۸ ین در ماه برای ۱۶۰ گیگابایت، به علاوه ۲۰٪ تخفیف اضافی برای صورتحساب سالانه
- توسط یک تیم خارجی با خدمات قابل اعتماد و تا 50٪ سهم درآمد اداره می‌شود
- کلاسترهای متعادل بار با مسیرهای اختصاصی پرسرعت (سازگار با کلاینت‌های قدیمی)، تأخیر فوق‌العاده کم، پخش روان 4K
- اولین ارائه‌دهنده جهانی که از پروتکل «Hysteria2» پشتیبانی می‌کند - کاملاً مناسب برای کلاینت Clash Verge
- پشتیبانی از سرویس‌های استریم و دسترسی به ChatGPT
- وبسایت رسمی: [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## ویژگی‌ها
- ساخته شده بر اساس Rust با کارایی بالا و فریم‌ورک Tauri 2
- با هسته جاسازی‌شده [Clash.Meta (mihomo)](https://github.com/MetaCubeX/mihomo) ارائه می‌شود و از تغییر به کانال «آلفا» پشتیبانی می‌کند.
- رابط کاربری تمیز و مرتب با کنترل‌های رنگ تم، آیکون‌های گروه/سینی پروکسی و `تزریق CSS`
- مدیریت پروفایل پیشرفته (ادغام و کمک‌کننده‌های اسکریپت) با نکات مربوط به سینتکس پیکربندی
- کنترل‌های پروکسی سیستم، حالت محافظت و پشتیبانی از `TUN` (آداپتور شبکه مجازی)
- ویرایشگرهای بصری برای گره‌ها و قوانین
- پشتیبان‌گیری و همگام‌سازی مبتنی بر WebDAV برای تنظیمات
### سوالات متداول
برای راهنمایی‌های مربوط به هر پلتفرم، به [صفحه سوالات متداول](https://clash-verge-rev.github.io/faq/windows.html) مراجعه کنید.
### اهدا
[پشتیبانی از توسعه Clash Verge Rev](https://github.com/sponsors/clash-verge-rev)
## توسعه
برای دستورالعمل‌های دقیق مشارکت، به [CONTRIBUTING.md](../CONTRIBUTING.md) مراجعه کنید.
پس از نصب تمام پیش‌نیازهای **Tauri**، پوسته توسعه را با دستور زیر اجرا کنید:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## مشارکت‌ها
مشکلات و درخواست‌های pull مورد استقبال قرار می‌گیرند!
## تقدیر و تشکر
Clash Verge Rev بر اساس این پروژه‌ها ساخته شده یا از آنها الهام گرفته است:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): یک رابط کاربری گرافیکی Clash مبتنی بر Tauri برای ویندوز، macOS و لینوکس..
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): ساخت برنامه‌های دسکتاپ کوچک‌تر، سریع‌تر و امن‌تر با رابط کاربری وب.
- [Dreamacro/clash](https://github.com/Dreamacro/clash): یک تونل مبتنی بر قانون که با زبان Go نوشته شده است.
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): یک تونل مبتنی بر قانون که با زبان Go نوشته شده است.
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): رابط کاربری گرافیکی Clash برای ویندوز و macOS.
- [vitejs/vite](https://github.com/vitejs/vite): ابزارهای فرانت‌اند نسل بعدی با DX فوق‌العاده سریع.
## مجوز
مجوز GPL-3.0. برای جزئیات بیشتر به [فایل مجوز](../LICENSE) مراجعه کنید.

113
docs/README_ja.md Normal file
View File

@@ -0,0 +1,113 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
<a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a> の継続プロジェクト
<br>
</h1>
<h3 align="center">
<a href="https://github.com/tauri-apps/tauri">Tauri</a> で構築された Clash Meta GUI。
</h3>
<p align="center">
言語:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## プレビュー
| ダーク | ライト |
| --------------------------------------- | ---------------------------------------- |
| ![ダークプレビュー](./preview_dark.png) | ![ライトプレビュー](./preview_light.png) |
## インストール
[リリースページ](https://github.com/clash-verge-rev/clash-verge-rev/releases) から、ご利用のプラットフォームに対応したインストーラーをダウンロードしてください。<br>
Windows (x64/x86)、Linux (x64/arm64)、macOS 10.15+ (Intel/Apple) をサポートしています。
#### リリースチャンネルの選び方
| チャンネル | 説明 | リンク |
| :---------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------------- |
| Stable | 安定版。信頼性が高く、日常利用に最適です。 | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha (EOL) | 公開フローの検証に使用した旧テスト版。 | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | 継続的に更新されるテスト版。フィードバックや新機能検証向けです。 | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### インストール手順と FAQ
詳しい導入手順やトラブルシュートは [ドキュメントサイト](https://clash-verge-rev.github.io/) を参照してください。
---
### Telegram チャンネル
更新情報は [@clash_verge_rev](https://t.me/clash_verge_re) をフォローしてください。
## プロモーション
#### [Doggygo VPN — 高性能グローバルアクセラレータ](https://verge.dginv.click/#/register?code=oaxsAGo6)
- 無料トライアル、割引プラン、ストリーミング解放、世界初の Hysteria プロトコル対応を備えた高性能海外ネットワークサービス。
- Clash Verge 専用リンクから登録すると、3 日間・1 日 1 GB の無料体験が利用できます。 [登録はこちら](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Clash Verge 利用者限定 20% オフクーポン: `verge20`(先着 500 名)
- 月額 15.8 元で 160 GB を利用できるプラン、年額契約ならさらに 20% オフ
- 海外チーム運営による高信頼サービス、収益シェアは最大 50%
- 負荷分散クラスタと高速専用回線(旧クライアント互換)、極低レイテンシで 4K も快適
- 世界初の `Hysteria2` プロトコル対応。Clash Verge クライアントとの相性抜群
- ストリーミングおよび ChatGPT の利用にも対応
- 公式サイト: [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## 機能
- 高性能な Rust と Tauri 2 フレームワークに基づくデスクトップアプリ
- 組み込みの [Clash.Meta (mihomo)](https://github.com/MetaCubeX/mihomo) コアを搭載し、`Alpha` チャンネルへの切り替えも可能
- テーマカラーやプロキシグループ/トレイアイコン、`CSS Injection` をカスタマイズできる洗練された UI
- 設定ファイルの管理および拡張Merge・Script 支援)、構成シンタックスヒントを提供
- システムプロキシ制御、ガード機能、`TUN`(仮想ネットワークアダプタ)モード
- ノードとルールのビジュアルエディタ
- WebDAV による設定のバックアップと同期
### FAQ
プラットフォーム別の案内は [FAQ ページ](https://clash-verge-rev.github.io/faq/windows.html) を参照してください。
### 寄付
[Clash Verge Rev の開発を支援する](https://github.com/sponsors/clash-verge-rev)
## 開発
詳細な貢献ガイドは [CONTRIBUTING.md](../CONTRIBUTING.md) をご覧ください。
**Tauri** の前提条件を整えたら、以下のコマンドで開発サーバーを起動できます:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## コントリビューション
Issue や Pull Request を歓迎します。
## 謝辞
Clash Verge Rev は、以下のプロジェクトに影響を受けています。
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): Tauri ベースの Clash GUI。Windows / macOS / Linux に対応。
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): Web フロントエンドで小型・高速・安全なデスクトップアプリを構築するためのフレームワーク。
- [Dreamacro/clash](https://github.com/Dreamacro/clash): Go 製のルールベーストンネル。
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): Go 製のルールベーストンネル。
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): Windows / macOS 向けの Clash GUI。
- [vitejs/vite](https://github.com/vitejs/vite): 次世代のフロントエンドツール群。高速な開発体験を提供。
## ライセンス
GPL-3.0 ライセンス。詳細は [LICENSE](../LICENSE) を参照してください。

113
docs/README_ko.md Normal file
View File

@@ -0,0 +1,113 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
<a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>의 후속 프로젝트
<br>
</h1>
<h3 align="center">
<a href="https://github.com/tauri-apps/tauri">Tauri</a>로 제작된 Clash Meta GUI.
</h3>
<p align="center">
언어:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## 미리보기
| 다크 | 라이트 |
| ------------------------------------ | --------------------------------------- |
| ![다크 미리보기](./preview_dark.png) | ![라이트 미리보기](./preview_light.png) |
## 설치
[릴리스 페이지](https://github.com/clash-verge-rev/clash-verge-rev/releases)에서 사용 중인 플랫폼에 맞는 설치 프로그램을 다운로드하세요.<br>
Windows (x64/x86), Linux (x64/arm64), macOS 10.15+ (Intel/Apple)을 지원합니다.
#### 릴리스 채널 선택
| 채널 | 설명 | 링크 |
| :---------- | :----------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- |
| Stable | 안정 릴리스. 신뢰성이 높아 일상 사용에 적합합니다. | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha (EOL) | 퍼블리시 파이프라인 검증에 사용되었던 구 테스트 채널입니다. | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | 롤링 빌드 채널. 테스트와 피드백 용도로 권장되며, 실험적인 변경이 포함될 수 있습니다. | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### 설치 가이드 및 FAQ
설치 방법, 트러블슈팅, 자주 묻는 질문은 [프로젝트 문서](https://clash-verge-rev.github.io/)를 참고하세요.
---
### 텔레그램 채널
업데이트 공지는 [@clash_verge_rev](https://t.me/clash_verge_re)에서 확인하세요.
## 프로모션
#### [Doggygo VPN — 고성능 글로벌 가속기](https://verge.dginv.click/#/register?code=oaxsAGo6)
- 무료 체험, 할인 요금제, 스트리밍 해제, 선도적인 Hysteria 프로토콜 지원을 갖춘 고성능 해외 네트워크 서비스
- Clash Verge 전용 초대 링크로 가입 시 3일간 매일 1GB 무료 체험 제공: [가입하기](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Clash Verge 전용 20% 할인 코드: `verge20` (선착순 500회)
- 월 15.8위안부터 160GB 제공, 연간 결제 시 추가 20% 할인
- 해외 팀 운영, 높은 신뢰성, 최대 50% 커미션
- 로드밸런싱 클러스터, 고속 전용 회선(구 클라이언트 호환), 매우 낮은 지연, 4K도 쾌적
- 세계 최초 `Hysteria2` 프로토콜 지원 — Clash Verge 클라이언트와 최적의 궁합
- 스트리밍 및 ChatGPT 접근 지원
- 공식 사이트: [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## 기능
- 고성능 Rust와 Tauri 2 프레임워크 기반 데스크톱 앱
- 내장 [Clash.Meta (mihomo)](https://github.com/MetaCubeX/mihomo) 코어, `Alpha` 채널 전환 지원
- 테마 색상, 프록시 그룹/트레이 아이콘, `CSS Injection` 등 세련된 UI 커스터마이징
- 프로필 관리(병합 및 스크립트 보조), 구성 문법 힌트 제공
- 시스템 프록시 제어, 가드 모드, `TUN`(가상 네트워크 어댑터) 지원
- 노드/규칙 시각 편집기
- WebDAV 기반 설정 백업 및 동기화
### FAQ
플랫폼별 가이드는 [FAQ 페이지](https://clash-verge-rev.github.io/faq/windows.html)에서 확인하세요.
### 후원
[Clash Verge Rev 개발 후원](https://github.com/sponsors/clash-verge-rev)
## 개발
자세한 기여 가이드는 [CONTRIBUTING.md](../CONTRIBUTING.md)를 참고하세요.
**Tauri** 필수 구성 요소를 설치한 뒤 아래 명령으로 개발 서버를 실행합니다:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## 기여
Issue와 Pull Request를 환영합니다!
## 감사의 말
Clash Verge Rev는 다음 프로젝트에 기반하거나 영향을 받았습니다:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): Windows / macOS / Linux용 Tauri 기반 Clash GUI
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): 웹 프론트엔드로 더 작고 빠르고 안전한 데스크톱 앱을 빌드
- [Dreamacro/clash](https://github.com/Dreamacro/clash): Go로 작성된 규칙 기반 터널
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): Go로 작성된 규칙 기반 터널
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): Windows / macOS용 Clash GUI
- [vitejs/vite](https://github.com/vitejs/vite): 차세대 프론트엔드 툴링, 매우 빠른 DX
## 라이선스
GPL-3.0 라이선스. 자세한 내용은 [LICENSE](../LICENSE)를 참고하세요.

109
docs/README_ru.md Normal file
View File

@@ -0,0 +1,109 @@
<h1 align="center">
<img src="../src-tauri/icons/icon.png" alt="Clash" width="128" />
<br>
Continuation of <a href="https://github.com/zzzgydi/clash-verge">Clash Verge</a>
<br>
</h1>
<h3 align="center">
Clash Meta GUI базируется на <a href="https://github.com/tauri-apps/tauri">Tauri</a>.
</h3>
<p align="center">
Языки:
<a href="../README.md">简体中文</a> ·
<a href="./README_en.md">English</a> ·
<a href="./README_es.md">Español</a> ·
<a href="./README_ru.md">Русский</a> ·
<a href="./README_ja.md">日本語</a> ·
<a href="./README_ko.md">한국어</a> ·
<a href="./README_fa.md">فارسی</a>
</p>
## Предпросмотр
| Тёмная тема | Светлая тема |
| ---------------------------------- | ------------------------------------ |
| ![Тёмная тема](./preview_dark.png) | ![Светлая тема](./preview_light.png) |
## Установка
Пожалуйста, перейдите на страницу релизов, чтобы скачать соответствующий установочный пакет: [Страница релизов](https://github.com/clash-verge-rev/clash-verge-rev/releases)<br>
Перейти на [Страницу релизов](https://github.com/clash-verge-rev/clash-verge-rev/releases) to download the corresponding installation package<br>
Поддержка Windows (x64/x86), Linux (x64/arm64) и macOS 10.15+ (intel/apple).
#### Как выбрать дистрибутив?
| Версия | Характеристики | Ссылка |
| :-------------------- | :------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------- |
| Stable | Официальный релиз, высокая надежность, подходит для повседневного использования. | [Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
| Alpha(неиспользуемый) | Тестирование процесса публикации. | [Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha) |
| AutoBuild | Версия с постоянным обновлением, подходящая для тестирования и обратной связи. Может содержать дефекты. | [AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild) |
#### Инструкции по установке и ответы на часто задаваемые вопросы можно найти на [странице документации](https://clash-verge-rev.github.io/)
---
### TG канал: [@clash_verge_rev](https://t.me/clash_verge_re)
## Продвижение
#### [Doggygo VPN —— технический VPN-сервис (айрпорт)](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Высокопроизводительный иностранный VPN-сервис (айрпорт) с бесплатным пробным периодом, выгодными тарифами, возможностью разблокировки потокового ТВ и первым в мире поддержкой протокола Hysteria.
- Зарегистрируйтесь по эксклюзивной ссылке Clash Verge и получите 3 дня бесплатного использования, 1 Гб трафика в день: [регистрация](https://verge.dginv.click/#/register?code=oaxsAGo6)
- Эксклюзивный промо-код на скидку 20% для Clash Verge: verge20 (только 500 штук)
- Специальный тарифный план всего за 15,8 юаней в месяц, 160 Гб трафика, скидка 20% при оплате за год
- Команда за рубежом, без риска побега, до 50% кэшбэка
- Архитектура с балансировкойнагрузки, высокоскоростная выделенная линия (совместима со старыми клиентами), чрезвычайно низкая задержка, без проблем в часы пик, 4K видео загружается мгновенно
- Первый в мире VPN-сервис (айрпорт), поддерживающий протокол Hysteria, теперь доступен более быстрый протокол `Hysteria2` (лучшее сочетание с клиентом Clash Verge)
- Разблокировка потоковые сервисы и ChatGPT
- Официальный сайт: [https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
## Фичи
- Основан на произвоительном Rust и фреймворке Tauri 2
- Имеет встроенное ядро [Clash.Meta(mihomo)](https://github.com/MetaCubeX/mihomo) и поддерживает переключение на ядро версии `Alpha`.
- Чистый и эстетичный пользовательский интерфейс, поддержка настраиваемых цветов темы, значков прокси-группы/системного трея и `CSS Injection`
- Управление и расширение конфигурационными файлами (Merge и Script), подсказки по синтаксису конфигурационных файлов.
- Режим системного прокси и защита, `TUN (Tunneled Network Interface)` режим.
- Визуальное редактирование узлов и правил
- Резервное копирование и синхронизация конфигурации WebDAV
### FAQ
Смотрите [Страница часто задаваемых вопросов](https://clash-verge-rev.github.io/faq/windows.html)
### Донат
[Поддержите развитие Clash Verge Rev](https://github.com/sponsors/clash-verge-rev)
## Разработка
Дополнительные сведения смотреть в файле [CONTRIBUTING.md](../CONTRIBUTING.md).
Для запуска сервера разработки выполните следующие команды после установки всех необходимых компонентов для **Tauri**:
```shell
pnpm i
pnpm run prebuild
pnpm dev
```
## Вклад
Обращения и запросы на PR приветствуются!
## Благодарность
Clash Verge rev был основан на этих проектах или вдохновлен ими, и так далее:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): Графический интерфейс Clash на основе tauri. Поддерживает Windows, macOS и Linux.
- [tauri-apps/tauri](https://github.com/tauri-apps/tauri): Создавайте более компактные, быстрые и безопасные настольные приложения с веб-интерфейсом.
- [Dreamacro/clash](https://github.com/Dreamacro/clash): Правило-ориентированный туннель на Go.
- [MetaCubeX/mihomo](https://github.com/MetaCubeX/mihomo): Правило-ориентированный туннель на Go.
- [Fndroid/clash_for_windows_pkg](https://github.com/Fndroid/clash_for_windows_pkg): Графический интерфейс пользователя для Windows/macOS на основе Clash.
- [vitejs/vite](https://github.com/vitejs/vite): Инструменты нового поколения для фронтенда. Они быстрые!
## Лицензия
GPL-3.0 License. Подробности смотрите в [Лицензии](../LICENSE).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

BIN
docs/preview_dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

BIN
docs/preview_light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

149
eslint.config.ts Normal file
View File

@@ -0,0 +1,149 @@
import eslintJS from "@eslint/js";
import eslintReact from "@eslint-react/eslint-plugin";
import { defineConfig } from "eslint/config";
import configPrettier from "eslint-config-prettier";
import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript";
import pluginImportX from "eslint-plugin-import-x";
import pluginPrettier from "eslint-plugin-prettier";
import pluginReactCompiler from "eslint-plugin-react-compiler";
import pluginReactHooks from "eslint-plugin-react-hooks";
import pluginReactRefresh from "eslint-plugin-react-refresh";
import pluginUnusedImports from "eslint-plugin-unused-imports";
import globals from "globals";
import tseslint from "typescript-eslint";
export default defineConfig([
{
files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
plugins: {
js: eslintJS,
// @ts-expect-error -- https://github.com/typescript-eslint/typescript-eslint/issues/11543
"react-hooks": pluginReactHooks,
"react-compiler": pluginReactCompiler,
// @ts-expect-error -- https://github.com/un-ts/eslint-plugin-import-x/issues/421
"import-x": pluginImportX,
"react-refresh": pluginReactRefresh,
"unused-imports": pluginUnusedImports,
prettier: pluginPrettier,
},
extends: [
eslintJS.configs.recommended,
tseslint.configs.recommended,
eslintReact.configs["recommended-typescript"],
configPrettier,
],
languageOptions: {
globals: globals.browser,
},
settings: {
react: {
version: "detect",
},
"import-x/resolver-next": [
createTypeScriptImportResolver({
project: "./tsconfig.json",
}),
],
},
rules: {
// React
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "error",
"react-compiler/react-compiler": "error",
"react-refresh/only-export-components": [
"warn",
{ allowConstantExport: true },
],
"@eslint-react/no-forward-ref": "off",
// React performance and production quality rules
"@eslint-react/no-array-index-key": "warn",
"@eslint-react/no-children-count": "error",
"@eslint-react/no-children-for-each": "error",
"@eslint-react/no-children-map": "error",
"@eslint-react/no-children-only": "error",
"@eslint-react/no-children-prop": "error",
"@eslint-react/no-children-to-array": "error",
"@eslint-react/no-class-component": "error",
"@eslint-react/no-clone-element": "error",
"@eslint-react/no-create-ref": "error",
"@eslint-react/no-default-props": "error",
"@eslint-react/no-direct-mutation-state": "error",
"@eslint-react/no-implicit-key": "error",
"@eslint-react/no-prop-types": "error",
"@eslint-react/no-set-state-in-component-did-mount": "error",
"@eslint-react/no-set-state-in-component-did-update": "error",
"@eslint-react/no-set-state-in-component-will-update": "error",
"@eslint-react/no-string-refs": "error",
"@eslint-react/no-unstable-context-value": "warn",
"@eslint-react/no-unstable-default-props": "warn",
"@eslint-react/no-unused-class-component-members": "error",
"@eslint-react/no-unused-state": "error",
"@eslint-react/no-useless-fragment": "warn",
"@eslint-react/prefer-destructuring-assignment": "warn",
// TypeScript
"@typescript-eslint/no-explicit-any": "off",
// unused-imports 代替 no-unused-vars
"@typescript-eslint/no-unused-vars": "off",
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
{
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^ignore",
},
],
// Import
"import-x/no-unresolved": "error",
"import-x/order": [
"warn",
{
groups: [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
],
"newlines-between": "always",
alphabetize: {
order: "asc",
caseInsensitive: true,
},
},
],
// 其他常见
"prefer-const": "warn",
"no-case-declarations": "error",
"no-fallthrough": "error",
"no-empty": ["warn", { allowEmptyCatch: true }],
// Prettier 格式化问题
"prettier/prettier": "warn",
},
},
{
files: ["scripts/**/*.{js,mjs,cjs}", "scripts-workflow/**/*.{js,mjs,cjs}"],
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
},
},
]);

View File

@@ -1,49 +1,142 @@
{
"name": "clash-verge",
"version": "0.0.1",
"license": "GPL-3.0",
"version": "2.4.6",
"license": "GPL-3.0-only",
"scripts": {
"dev": "cargo tauri dev",
"build": "cargo tauri build",
"prepare": "husky || true",
"dev": "cross-env RUST_BACKTRACE=full tauri dev -f verge-dev",
"dev:diff": "cross-env RUST_BACKTRACE=full tauri dev -f verge-dev",
"dev:trace": "cross-env RUST_BACKTRACE=full RUSTFLAGS=\"--cfg tokio_unstable\" tauri dev -f verge-dev tokio-trace",
"dev:tauri": "cross-env RUST_BACKTRACE=full tauri dev -f tauri-dev",
"build": "cross-env NODE_OPTIONS='--max-old-space-size=4096' tauri build",
"build:fast": "cross-env NODE_OPTIONS='--max-old-space-size=4096' tauri build -- --profile fast-release",
"tauri": "tauri",
"web:dev": "vite",
"web:build": "tsc && vite build",
"web:build": "tsc --noEmit && vite build",
"web:serve": "vite preview",
"predev": "node scripts/pre-dev.mjs",
"prepare": "husky install"
"prebuild": "node scripts/prebuild.mjs",
"updater": "node scripts/updater.mjs",
"updater-fixed-webview2": "node scripts/updater-fixed-webview2.mjs",
"portable": "node scripts/portable.mjs",
"portable-fixed-webview2": "node scripts/portable-fixed-webview2.mjs",
"fix-alpha-version": "node scripts/fix-alpha_version.mjs",
"release-version": "node scripts/release-version.mjs",
"release:autobuild": "pnpm release-version autobuild",
"release:deploytest": "pnpm release-version deploytest",
"publish-version": "node scripts/publish-version.mjs",
"lint": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache src",
"lint:fix": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache --fix src",
"format": "prettier --write .",
"format:check": "prettier --check .",
"i18n:check": "node scripts/cleanup-unused-i18n.mjs",
"i18n:format": "node scripts/cleanup-unused-i18n.mjs --align --apply",
"i18n:types": "node scripts/generate-i18n-keys.mjs",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@emotion/react": "^11.7.0",
"@emotion/styled": "^11.6.0",
"@mui/icons-material": "^5.2.1",
"@mui/material": "^5.2.3",
"@tauri-apps/api": "^1.0.0-beta.8",
"axios": "^0.24.0",
"dayjs": "^1.10.7",
"react": "^17.0.0",
"react-dom": "^17.0.0",
"react-router-dom": "^6.0.2",
"react-virtuoso": "^2.3.1",
"recoil": "^0.5.2",
"swr": "^1.1.2-beta.0"
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@juggle/resize-observer": "^3.4.0",
"@monaco-editor/react": "^4.7.0",
"@mui/icons-material": "^7.3.7",
"@mui/lab": "7.0.0-beta.17",
"@mui/material": "^7.3.7",
"@tanstack/react-table": "^8.21.3",
"@tanstack/react-virtual": "^3.13.18",
"@tauri-apps/api": "2.9.1",
"@tauri-apps/plugin-clipboard-manager": "^2.3.2",
"@tauri-apps/plugin-dialog": "^2.6.0",
"@tauri-apps/plugin-fs": "^2.4.5",
"@tauri-apps/plugin-http": "~2.5.6",
"@tauri-apps/plugin-process": "^2.3.1",
"@tauri-apps/plugin-shell": "2.3.4",
"@tauri-apps/plugin-updater": "2.9.0",
"ahooks": "^3.9.6",
"axios": "^1.13.2",
"dayjs": "1.11.19",
"foxact": "^0.2.52",
"i18next": "^25.7.4",
"js-yaml": "^4.1.1",
"lodash-es": "^4.17.22",
"monaco-editor": "^0.55.1",
"monaco-yaml": "^5.4.0",
"nanoid": "^5.1.6",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-error-boundary": "6.1.0",
"react-hook-form": "^7.71.1",
"react-i18next": "16.5.3",
"react-markdown": "10.1.0",
"react-router": "^7.12.0",
"react-virtuoso": "^4.18.1",
"rehype-raw": "^7.0.0",
"swr": "^2.3.8",
"tauri-plugin-mihomo-api": "github:clash-verge-rev/tauri-plugin-mihomo#main",
"types-pac": "^1.0.3"
},
"devDependencies": {
"@tauri-apps/cli": "^1.0.0-beta.10",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@vitejs/plugin-react": "^1.1.1",
"adm-zip": "^0.5.9",
"fs-extra": "^10.0.0",
"husky": "^7.0.0",
"node-fetch": "^3.1.0",
"pretty-quick": "^3.1.3",
"sass": "^1.44.0",
"typescript": "^4.5.2",
"vite": "^2.7.1"
"@actions/github": "^7.0.0",
"@eslint-react/eslint-plugin": "^2.7.2",
"@eslint/js": "^9.39.2",
"@tauri-apps/cli": "2.9.6",
"@types/js-yaml": "^4.0.9",
"@types/lodash-es": "^4.17.12",
"@types/node": "^24.10.9",
"@types/react": "19.2.8",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-react-swc": "^4.2.2",
"adm-zip": "^0.5.16",
"cli-color": "^2.0.4",
"commander": "^14.0.2",
"cross-env": "^10.1.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import-x": "^4.16.1",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-react-compiler": "19.1.0-rc.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.26",
"eslint-plugin-unused-imports": "^4.3.0",
"glob": "^13.0.0",
"globals": "^17.0.0",
"https-proxy-agent": "^7.0.6",
"husky": "^9.1.7",
"jiti": "^2.6.1",
"lint-staged": "^16.2.7",
"node-fetch": "^3.3.2",
"prettier": "^3.8.0",
"sass": "^1.97.2",
"tar": "^7.5.3",
"terser": "^5.46.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.53.0",
"vite": "^7.3.1",
"vite-plugin-svgr": "^4.5.0"
},
"prettier": {
"tabWidth": 2,
"semi": true,
"singleQuote": false,
"endOfLine": "lf"
"lint-staged": {
"*.{ts,tsx,js,jsx}": [
"eslint --fix --max-warnings=0",
"prettier --write"
],
"*.{css,scss,json,md}": [
"prettier --write"
]
},
"type": "module",
"packageManager": "pnpm@10.28.0",
"pnpm": {
"onlyBuiltDependencies": [
"@parcel/watcher",
"@swc/core",
"core-js",
"es5-ext",
"esbuild",
"unrs-resolver"
]
}
}

7668
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

55
renovate.json Normal file
View File

@@ -0,0 +1,55 @@
{
"extends": ["config:recommended", ":disableDependencyDashboard"],
"baseBranches": ["dev"],
"enabledManagers": ["cargo", "npm", "github-actions"],
"labels": ["dependencies"],
"ignorePaths": [
"**/node_modules/**",
"**/bower_components/**",
"**/vendor/**",
"**/__tests__/**",
"**/test/**",
"**/tests/**",
"**/__fixtures__/**",
"shared/**"
],
"rangeStrategy": "replace",
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true
},
{
"matchPackageNames": ["*"],
"semanticCommitType": "chore"
},
{
"description": "Disable node/pnpm version updates",
"matchPackageNames": ["node", "pnpm"],
"matchDepTypes": ["engines", "packageManager"],
"enabled": false
},
{
"description": "Group all cargo dependencies into a single PR",
"matchManagers": ["cargo"],
"groupName": "cargo dependencies"
},
{
"description": "Group all npm dependencies into a single PR",
"matchManagers": ["npm"],
"groupName": "npm dependencies"
},
{
"description": "Group all GitHub Actions updates into a single PR",
"matchManagers": ["github-actions"],
"groupName": "github actions"
}
],
"postUpdateOptions": ["pnpmDedupe"],
"ignoreDeps": ["criterion"],
"lockFileMaintenance": {
"enabled": true,
"description": "Force update lockfile to track latest commits of git dependencies",
"schedule": ["before 5am on monday"]
}
}

3
rust-toolchain.toml Normal file
View File

@@ -0,0 +1,3 @@
[toolchain]
channel = "1.91.0"
components = ["rustfmt", "clippy"]

View File

@@ -1,14 +1,13 @@
max_width = 100
max_width = 120
hard_tabs = false
tab_spaces = 2
tab_spaces = 4
newline_style = "Auto"
use_small_heuristics = "Default"
reorder_imports = true
reorder_modules = true
remove_nested_parens = true
edition = "2021"
edition = "2024"
merge_derives = true
use_try_shorthand = false
use_field_init_shorthand = false
force_explicit_abi = true
imports_granularity = "Crate"

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env bash
set -euo pipefail
# bump_changelog.sh
# - prepend ./Changelog.md to ./docs/Changelog.history.md
# - overwrite ./Changelog.md with ./template/Changelog.md
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT_DIR"
CHANGELOG="Changelog.md"
HISTORY="docs/Changelog.history.md"
TEMPLATE="template/Changelog.md"
timestamp() { date +"%Y%m%d%H%M%S"; }
echo "Repo root: $ROOT_DIR"
if [ ! -f "$CHANGELOG" ]; then
echo "Error: $CHANGELOG not found" >&2
exit 2
fi
if [ ! -f "$TEMPLATE" ]; then
echo "Error: $TEMPLATE not found" >&2
exit 3
fi
BACKUP_DIR=".changelog_backups"
mkdir -p "$BACKUP_DIR"
bak_ts=$(timestamp)
cp "$CHANGELOG" "$BACKUP_DIR/Changelog.md.bak.$bak_ts"
echo "Backed up $CHANGELOG -> $BACKUP_DIR/Changelog.md.bak.$bak_ts"
if [ -f "$HISTORY" ]; then
cp "$HISTORY" "$BACKUP_DIR/Changelog.history.md.bak.$bak_ts"
echo "Backed up $HISTORY -> $BACKUP_DIR/Changelog.history.md.bak.$bak_ts"
fi
# Prepend current Changelog.md content to top of docs/Changelog.history.md
tmpfile=$(mktemp)
{
cat "$CHANGELOG"
echo
echo ""
if [ -f "$HISTORY" ]; then
cat "$HISTORY"
fi
} > "$tmpfile"
mv "$tmpfile" "$HISTORY"
echo "Prepended $CHANGELOG -> $HISTORY"
# Overwrite Changelog.md with template
cp "$TEMPLATE" "$CHANGELOG"
echo "Overwrote $CHANGELOG with $TEMPLATE"
echo "Done. Backups saved under $BACKUP_DIR"
exit 0

View File

@@ -0,0 +1,56 @@
#!/bin/bash
# 获取最近一个和 Tauri 相关的改动的 commit hash
# This script finds the latest commit that modified Tauri-related files
# Tauri 相关文件的模式
TAURI_PATTERNS=(
"src-tauri/"
"Cargo.toml"
"Cargo.lock"
"tauri.*.conf.json"
"package.json"
"pnpm-lock.yaml"
"src/"
)
# 排除的文件模式build artifacts 等)
EXCLUDE_PATTERNS=(
"src-tauri/target/"
"src-tauri/gen/"
"*.log"
"*.tmp"
"node_modules/"
".git/"
)
# 构建 git log 的路径过滤参数
PATHS=""
for pattern in "${TAURI_PATTERNS[@]}"; do
if [[ -e "$pattern" ]]; then
PATHS="$PATHS $pattern"
fi
done
# 如果没有找到相关路径,返回错误
if [[ -z "$PATHS" ]]; then
echo "Error: No Tauri-related paths found in current directory" >&2
exit 1
fi
# 获取最新的 commit hash
# 使用 git log 查找最近修改了 Tauri 相关文件的提交
LATEST_COMMIT=$(git log --format="%H" -n 1 -- $PATHS)
# 验证是否找到了 commit
if [[ -z "$LATEST_COMMIT" ]]; then
echo "Error: No commits found for Tauri-related files" >&2
exit 1
fi
# 输出结果
echo "$LATEST_COMMIT"
# 如果需要更多信息,可以取消注释以下行
# echo "Latest Tauri-related commit: $LATEST_COMMIT"
# git show --stat --oneline "$LATEST_COMMIT"

File diff suppressed because it is too large Load Diff

43
scripts/extract_update_logs.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
#
# extract_update_logs.sh
# 从 Changelog.md 提取最新版本 (## v...) 的更新内容
# 并输出到屏幕或写入环境变量文件(如 GitHub Actions
set -euo pipefail
CHANGELOG_FILE="Changelog.md"
if [[ ! -f "$CHANGELOG_FILE" ]]; then
echo "❌ 文件不存在: $CHANGELOG_FILE" >&2
exit 1
fi
# 提取从第一个 '## v' 开始到下一个 '## v' 前的内容
UPDATE_LOGS=$(awk '
/^## v/ {
if (found) exit;
found=1
}
found
' "$CHANGELOG_FILE")
if [[ -z "$UPDATE_LOGS" ]]; then
echo "⚠️ 未找到更新日志内容"
exit 0
fi
echo "✅ 提取到的最新版本日志内容如下:"
echo "----------------------------------------"
echo "$UPDATE_LOGS"
echo "----------------------------------------"
# 如果在 GitHub Actions 环境中GITHUB_ENV 已定义)
if [[ -n "${GITHUB_ENV:-}" ]]; then
{
echo "UPDATE_LOGS<<EOF"
echo "$UPDATE_LOGS"
echo "EOF"
} >> "$GITHUB_ENV"
echo "✅ 已写入 GitHub 环境变量 UPDATE_LOGS"
fi

View File

@@ -0,0 +1,67 @@
import { exec } from "child_process";
import fs from "fs/promises";
import path from "path";
import { promisify } from "util";
/**
* 为Alpha版本重命名版本号
*/
const execPromise = promisify(exec);
/**
* 标准输出HEAD hash
*/
async function getLatestCommitHash() {
try {
const { stdout } = await execPromise("git rev-parse HEAD");
const commitHash = stdout.trim();
// 格式化只截取前7位字符
const formathash = commitHash.substring(0, 7);
console.log(`Found the latest commit hash code: ${commitHash}`);
return formathash;
} catch (error) {
console.error("pnpm run fix-alpha-version ERROR", error);
}
}
/**
* @param string 传入格式化后的hash
* 将新的版本号写入文件 package.json
*/
async function updatePackageVersion(newVersion) {
// 获取内容根目录
const _dirname = process.cwd();
const packageJsonPath = path.join(_dirname, "package.json");
try {
// 读取文件
const data = await fs.readFile(packageJsonPath, "utf8");
const packageJson = JSON.parse(data);
// 获取键值替换
let result = packageJson.version.replace("alpha", newVersion);
// 检查当前版本号是否已经包含了 alpha- 后缀
if (!packageJson.version.includes(`alpha-`)) {
// 如果只有 alpha 而没有 alpha-,则替换为 alpha-newVersion
result = packageJson.version.replace("alpha", `alpha-${newVersion}`);
} else {
// 如果已经是 alpha-xxx 格式,则更新 xxx 部分
result = packageJson.version.replace(
/alpha-[^-]*/,
`alpha-${newVersion}`,
);
}
console.log("[INFO]: Current version is: ", result);
packageJson.version = result;
// 写入版本号
await fs.writeFile(
packageJsonPath,
JSON.stringify(packageJson, null, 2),
"utf8",
);
console.log(`[INFO]: Alpha version update to: ${newVersion}`);
} catch (error) {
console.error("pnpm run fix-alpha-version ERROR", error);
}
}
const newVersion = await getLatestCommitHash();
updatePackageVersion(newVersion).catch(console.error);

View File

@@ -0,0 +1,98 @@
#!/usr/bin/env node
import { promises as fs } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const ROOT_DIR = path.resolve(__dirname, "..");
const LOCALE_DIR = path.resolve(ROOT_DIR, "src/locales/en");
const KEY_OUTPUT = path.resolve(ROOT_DIR, "src/types/generated/i18n-keys.ts");
const RESOURCE_OUTPUT = path.resolve(
ROOT_DIR,
"src/types/generated/i18n-resources.ts",
);
const isPlainObject = (value) =>
typeof value === "object" && value !== null && !Array.isArray(value);
const flattenKeys = (data, prefix = "") => {
const keys = [];
for (const [key, value] of Object.entries(data)) {
const nextPrefix = prefix ? `${prefix}.${key}` : key;
if (isPlainObject(value)) {
keys.push(...flattenKeys(value, nextPrefix));
} else {
keys.push(nextPrefix);
}
}
return keys;
};
const buildType = (data, indent = 0) => {
if (!isPlainObject(data)) {
return "string";
}
const entries = Object.entries(data).sort(([a], [b]) => a.localeCompare(b));
const pad = " ".repeat(indent);
const inner = entries
.map(([key, value]) => {
const typeStr = buildType(value, indent + 2);
return `${" ".repeat(indent + 2)}${JSON.stringify(key)}: ${typeStr};`;
})
.join("\n");
return entries.length
? `{
${inner}
${pad}}`
: "{}";
};
const loadNamespaceJson = async () => {
const dirents = await fs.readdir(LOCALE_DIR, { withFileTypes: true });
const namespaces = [];
for (const dirent of dirents) {
if (!dirent.isFile() || !dirent.name.endsWith(".json")) continue;
const name = dirent.name.replace(/\.json$/, "");
const filePath = path.join(LOCALE_DIR, dirent.name);
const raw = await fs.readFile(filePath, "utf8");
const json = JSON.parse(raw);
namespaces.push({ name, json });
}
namespaces.sort((a, b) => a.name.localeCompare(b.name));
return namespaces;
};
const buildKeysFile = (keys) => {
const arrayLiteral = keys.map((key) => ` "${key}"`).join(",\n");
return `// This file is auto-generated by scripts/generate-i18n-keys.mjs\n// Do not edit this file manually.\n\nexport const translationKeys = [\n${arrayLiteral}\n] as const;\n\nexport type TranslationKey = typeof translationKeys[number];\n`;
};
const buildResourcesFile = (namespaces) => {
const namespaceEntries = namespaces
.map(({ name, json }) => {
const typeStr = buildType(json, 4);
return ` ${JSON.stringify(name)}: ${typeStr};`;
})
.join("\n");
return `// This file is auto-generated by scripts/generate-i18n-keys.mjs\n// Do not edit this file manually.\n\nexport interface TranslationResources {\n translation: {\n${namespaceEntries}\n };\n}\n`;
};
const main = async () => {
const namespaces = await loadNamespaceJson();
const keys = namespaces.flatMap(({ name, json }) => flattenKeys(json, name));
const keysContent = buildKeysFile(keys);
const resourcesContent = buildResourcesFile(namespaces);
await fs.mkdir(path.dirname(KEY_OUTPUT), { recursive: true });
await fs.writeFile(KEY_OUTPUT, keysContent, "utf8");
await fs.writeFile(RESOURCE_OUTPUT, resourcesContent, "utf8");
console.log(`Generated ${keys.length} translation keys.`);
};
main().catch((error) => {
console.error("Failed to generate i18n metadata:", error);
process.exitCode = 1;
});

View File

@@ -0,0 +1,104 @@
import fs from "fs";
import fsp from "fs/promises";
import { createRequire } from "module";
import path from "path";
import { context, getOctokit } from "@actions/github";
import AdmZip from "adm-zip";
const target = process.argv.slice(2)[0];
const alpha = process.argv.slice(2)[1];
const ARCH_MAP = {
"x86_64-pc-windows-msvc": "x64",
"i686-pc-windows-msvc": "x86",
"aarch64-pc-windows-msvc": "arm64",
};
const PROCESS_MAP = {
x64: "x64",
ia32: "x86",
arm64: "arm64",
};
const arch = target ? ARCH_MAP[target] : PROCESS_MAP[process.arch];
/// Script for ci
/// 打包绿色版/便携版 (only Windows)
async function resolvePortable() {
if (process.platform !== "win32") return;
const releaseDir = target
? `./src-tauri/target/${target}/release`
: `./src-tauri/target/release`;
const configDir = path.join(releaseDir, ".config");
if (!fs.existsSync(releaseDir)) {
throw new Error("could not found the release dir");
}
await fsp.mkdir(configDir, { recursive: true });
if (!fs.existsSync(path.join(configDir, "PORTABLE"))) {
await fsp.writeFile(path.join(configDir, "PORTABLE"), "");
}
const zip = new AdmZip();
zip.addLocalFile(path.join(releaseDir, "Clash Verge.exe"));
zip.addLocalFile(path.join(releaseDir, "verge-mihomo.exe"));
zip.addLocalFile(path.join(releaseDir, "verge-mihomo-alpha.exe"));
zip.addLocalFolder(path.join(releaseDir, "resources"), "resources");
zip.addLocalFolder(
path.join(
releaseDir,
`Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${arch}`,
),
`Microsoft.WebView2.FixedVersionRuntime.133.0.3065.92.${arch}`,
);
zip.addLocalFolder(configDir, ".config");
const require = createRequire(import.meta.url);
const packageJson = require("../package.json");
const { version } = packageJson;
const zipFile = `Clash.Verge_${version}_${arch}_fixed_webview2_portable.zip`;
zip.writeZip(zipFile);
console.log("[INFO]: create portable zip successfully");
// push release assets
if (process.env.GITHUB_TOKEN === undefined) {
throw new Error("GITHUB_TOKEN is required");
}
const options = { owner: context.repo.owner, repo: context.repo.repo };
const github = getOctokit(process.env.GITHUB_TOKEN);
const tag = alpha ? "alpha" : process.env.TAG_NAME || `v${version}`;
console.log("[INFO]: upload to ", tag);
const { data: release } = await github.rest.repos.getReleaseByTag({
...options,
tag,
});
const assets = release.assets.filter((x) => {
return x.name === zipFile;
});
if (assets.length > 0) {
const id = assets[0].id;
await github.rest.repos.deleteReleaseAsset({
...options,
asset_id: id,
});
}
console.log(release.name);
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: release.id,
name: zipFile,
data: zip.toBuffer(),
});
}
resolvePortable().catch(console.error);

53
scripts/portable.mjs Normal file
View File

@@ -0,0 +1,53 @@
import fs from "fs";
import fsp from "fs/promises";
import { createRequire } from "module";
import path from "path";
import AdmZip from "adm-zip";
const target = process.argv.slice(2)[0];
const ARCH_MAP = {
"x86_64-pc-windows-msvc": "x64",
"aarch64-pc-windows-msvc": "arm64",
};
const PROCESS_MAP = {
x64: "x64",
arm64: "arm64",
};
const arch = target ? ARCH_MAP[target] : PROCESS_MAP[process.arch];
/// Script for ci
/// 打包绿色版/便携版 (only Windows)
async function resolvePortable() {
if (process.platform !== "win32") return;
const releaseDir = target
? `./src-tauri/target/${target}/release`
: `./src-tauri/target/release`;
const configDir = path.join(releaseDir, ".config");
if (!fs.existsSync(releaseDir)) {
throw new Error("could not found the release dir");
}
await fsp.mkdir(configDir, { recursive: true });
if (!fs.existsSync(path.join(configDir, "PORTABLE"))) {
await fsp.writeFile(path.join(configDir, "PORTABLE"), "");
}
const zip = new AdmZip();
zip.addLocalFile(path.join(releaseDir, "clash-verge.exe"));
zip.addLocalFile(path.join(releaseDir, "verge-mihomo.exe"));
zip.addLocalFile(path.join(releaseDir, "verge-mihomo-alpha.exe"));
zip.addLocalFolder(path.join(releaseDir, "resources"), "resources");
zip.addLocalFolder(configDir, ".config");
const require = createRequire(import.meta.url);
const packageJson = require("../package.json");
const { version } = packageJson;
const zipFile = `Clash.Verge_${version}_${arch}_portable.zip`;
zip.writeZip(zipFile);
console.log("[INFO]: create portable zip successfully");
}
resolvePortable().catch(console.error);

View File

@@ -1,104 +0,0 @@
import fs from "fs-extra";
import path from "path";
import AdmZip from "adm-zip";
import fetch from "node-fetch";
import { execSync } from "child_process";
const cwd = process.cwd();
const CLASH_URL_PREFIX =
"https://github.com/Dreamacro/clash/releases/download/premium/";
const CLASH_LATEST_DATE = "2021.12.07";
/**
* get the correct clash release infomation
*/
function resolveClash() {
const { platform, arch } = process;
let name = "";
// todo
if (platform === "win32" && arch === "x64") {
name = `clash-windows-386`;
}
if (!name) {
throw new Error("todo");
}
const isWin = platform === "win32";
const zip = isWin ? "zip" : "gz";
const url = `${CLASH_URL_PREFIX}${name}-${CLASH_LATEST_DATE}.${zip}`;
const exefile = `${name}${isWin ? ".exe" : ""}`;
const zipfile = `${name}.${zip}`;
return { url, zip, exefile, zipfile };
}
/**
* get the sidecar bin
*/
async function resolveSidecar() {
const sidecarDir = path.join(cwd, "src-tauri", "sidecar");
const host = execSync("rustc -vV | grep host").toString().slice(6).trim();
const ext = process.platform === "win32" ? ".exe" : "";
const sidecarFile = `clash-${host}${ext}`;
const sidecarPath = path.join(sidecarDir, sidecarFile);
if (!(await fs.pathExists(sidecarDir))) await fs.mkdir(sidecarDir);
if (await fs.pathExists(sidecarPath)) return;
// download sidecar
const binInfo = resolveClash();
const tempDir = path.join(cwd, "pre-dev-temp");
const tempZip = path.join(tempDir, binInfo.zipfile);
const tempExe = path.join(tempDir, binInfo.exefile);
if (!(await fs.pathExists(tempDir))) await fs.mkdir(tempDir);
if (!(await fs.pathExists(tempZip))) await downloadFile(binInfo.url, tempZip);
// Todo: support gz
const zip = new AdmZip(tempZip);
zip.getEntries().forEach((entry) => {
console.log("[INFO]: entry name", entry.entryName);
});
zip.extractAllTo(tempDir, true);
// save as sidecar
await fs.rename(tempExe, sidecarPath);
// delete temp dir
await fs.remove(tempDir);
}
/**
* get the Country.mmdb (not required)
*/
async function resolveMmdb() {
const url =
"https://github.com/Dreamacro/maxmind-geoip/releases/latest/download/Country.mmdb";
const resPath = path.join(cwd, "src-tauri", "resources", "Country.mmdb");
if (await fs.pathExists(resPath)) return;
await downloadFile(url, resPath);
}
/**
* download file and save to `path`
*/
async function downloadFile(url, path) {
console.log(`[INFO]: downloading from "${url}"`);
const response = await fetch(url, {
method: "GET",
headers: { "Content-Type": "application/octet-stream" },
});
const buffer = await response.arrayBuffer();
await fs.writeFile(path, new Uint8Array(buffer));
}
/// main
resolveSidecar();
resolveMmdb();

708
scripts/prebuild.mjs Normal file
View File

@@ -0,0 +1,708 @@
import { execSync } from "child_process";
import { createHash } from "crypto";
import fs from "fs";
import fsp from "fs/promises";
import path from "path";
import zlib from "zlib";
import AdmZip from "adm-zip";
import { glob } from "glob";
import { HttpsProxyAgent } from "https-proxy-agent";
import fetch from "node-fetch";
import { extract } from "tar";
import { log_debug, log_error, log_info, log_success } from "./utils.mjs";
/**
* Prebuild script with optimization features:
* 1. Skip downloading mihomo core if it already exists (unless --force is used)
* 2. Cache version information for 1 hour to avoid repeated version checks
* 3. Use file hash to detect changes and skip unnecessary chmod/copy operations
* 4. Use --force or -f flag to force re-download and update all resources
*
*/
const cwd = process.cwd();
const TEMP_DIR = path.join(cwd, "node_modules/.verge");
const FORCE = process.argv.includes("--force") || process.argv.includes("-f");
const VERSION_CACHE_FILE = path.join(TEMP_DIR, ".version_cache.json");
const HASH_CACHE_FILE = path.join(TEMP_DIR, ".hash_cache.json");
const PLATFORM_MAP = {
"x86_64-pc-windows-msvc": "win32",
"i686-pc-windows-msvc": "win32",
"aarch64-pc-windows-msvc": "win32",
"x86_64-apple-darwin": "darwin",
"aarch64-apple-darwin": "darwin",
"x86_64-unknown-linux-gnu": "linux",
"i686-unknown-linux-gnu": "linux",
"aarch64-unknown-linux-gnu": "linux",
"armv7-unknown-linux-gnueabihf": "linux",
"riscv64gc-unknown-linux-gnu": "linux",
"loongarch64-unknown-linux-gnu": "linux",
};
const ARCH_MAP = {
"x86_64-pc-windows-msvc": "x64",
"i686-pc-windows-msvc": "ia32",
"aarch64-pc-windows-msvc": "arm64",
"x86_64-apple-darwin": "x64",
"aarch64-apple-darwin": "arm64",
"x86_64-unknown-linux-gnu": "x64",
"i686-unknown-linux-gnu": "ia32",
"aarch64-unknown-linux-gnu": "arm64",
"armv7-unknown-linux-gnueabihf": "arm",
"riscv64gc-unknown-linux-gnu": "riscv64",
"loongarch64-unknown-linux-gnu": "loong64",
};
const arg1 = process.argv.slice(2)[0];
const arg2 = process.argv.slice(2)[1];
const target = arg1 === "--force" || arg1 === "-f" ? arg2 : arg1;
const { platform, arch } = target
? { platform: PLATFORM_MAP[target], arch: ARCH_MAP[target] }
: process;
const SIDECAR_HOST = target
? target
: execSync("rustc -vV")
.toString()
.match(/(?<=host: ).+(?=\s*)/g)[0];
// =======================
// Version Cache
// =======================
async function loadVersionCache() {
try {
if (fs.existsSync(VERSION_CACHE_FILE)) {
const data = await fsp.readFile(VERSION_CACHE_FILE, "utf-8");
return JSON.parse(data);
}
} catch (err) {
log_debug("Failed to load version cache:", err.message);
}
return {};
}
async function saveVersionCache(cache) {
try {
await fsp.mkdir(TEMP_DIR, { recursive: true });
await fsp.writeFile(VERSION_CACHE_FILE, JSON.stringify(cache, null, 2));
log_debug("Version cache saved");
} catch (err) {
log_debug("Failed to save version cache:", err.message);
}
}
async function getCachedVersion(key) {
const cache = await loadVersionCache();
const cached = cache[key];
if (cached && Date.now() - cached.timestamp < 3600000) {
log_info(`Using cached version for ${key}: ${cached.version}`);
return cached.version;
}
return null;
}
async function setCachedVersion(key, version) {
const cache = await loadVersionCache();
cache[key] = { version, timestamp: Date.now() };
await saveVersionCache(cache);
}
// =======================
// Hash Cache & File Hash
// =======================
async function calculateFileHash(filePath) {
try {
const fileBuffer = await fsp.readFile(filePath);
const hashSum = createHash("sha256");
hashSum.update(fileBuffer);
return hashSum.digest("hex");
} catch (ignoreErr) {
return null;
}
}
async function loadHashCache() {
try {
if (fs.existsSync(HASH_CACHE_FILE)) {
const data = await fsp.readFile(HASH_CACHE_FILE, "utf-8");
return JSON.parse(data);
}
} catch (err) {
log_debug("Failed to load hash cache:", err.message);
}
return {};
}
async function saveHashCache(cache) {
try {
await fsp.mkdir(TEMP_DIR, { recursive: true });
await fsp.writeFile(HASH_CACHE_FILE, JSON.stringify(cache, null, 2));
log_debug("Hash cache saved");
} catch (err) {
log_debug("Failed to save hash cache:", err.message);
}
}
async function hasFileChanged(filePath, targetPath) {
if (FORCE) return true;
if (!fs.existsSync(targetPath)) return true;
const hashCache = await loadHashCache();
const sourceHash = await calculateFileHash(filePath);
const targetHash = await calculateFileHash(targetPath);
if (!sourceHash || !targetHash) return true;
const cacheKey = targetPath;
const cachedHash = hashCache[cacheKey];
if (cachedHash === sourceHash && sourceHash === targetHash) {
return false;
}
return true;
}
async function updateHashCache(targetPath) {
const hashCache = await loadHashCache();
const hash = await calculateFileHash(targetPath);
if (hash) {
hashCache[targetPath] = hash;
await saveHashCache(hashCache);
}
}
// =======================
// Meta maps (stable & alpha)
// =======================
const META_ALPHA_VERSION_URL =
"https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha/version.txt";
const META_ALPHA_URL_PREFIX = `https://github.com/MetaCubeX/mihomo/releases/download/Prerelease-Alpha`;
let META_ALPHA_VERSION;
const META_VERSION_URL =
"https://github.com/MetaCubeX/mihomo/releases/latest/download/version.txt";
const META_URL_PREFIX = `https://github.com/MetaCubeX/mihomo/releases/download`;
let META_VERSION;
const META_ALPHA_MAP = {
"win32-x64": "mihomo-windows-amd64-v2",
"win32-ia32": "mihomo-windows-386",
"win32-arm64": "mihomo-windows-arm64",
"darwin-x64": "mihomo-darwin-amd64-v1-go122",
"darwin-arm64": "mihomo-darwin-arm64-go122",
"linux-x64": "mihomo-linux-amd64-v2",
"linux-ia32": "mihomo-linux-386",
"linux-arm64": "mihomo-linux-arm64",
"linux-arm": "mihomo-linux-armv7",
"linux-riscv64": "mihomo-linux-riscv64",
"linux-loong64": "mihomo-linux-loong64",
};
const META_MAP = {
"win32-x64": "mihomo-windows-amd64-v2",
"win32-ia32": "mihomo-windows-386",
"win32-arm64": "mihomo-windows-arm64",
"darwin-x64": "mihomo-darwin-amd64-v2-go122",
"darwin-arm64": "mihomo-darwin-arm64-go122",
"linux-x64": "mihomo-linux-amd64-v2",
"linux-ia32": "mihomo-linux-386",
"linux-arm64": "mihomo-linux-arm64",
"linux-arm": "mihomo-linux-armv7",
"linux-riscv64": "mihomo-linux-riscv64",
"linux-loong64": "mihomo-linux-loong64",
};
// =======================
// Fetch latest versions
// =======================
async function getLatestAlphaVersion() {
if (!FORCE) {
const cached = await getCachedVersion("META_ALPHA_VERSION");
if (cached) {
META_ALPHA_VERSION = cached;
return;
}
}
const options = {};
const httpProxy =
process.env.HTTP_PROXY ||
process.env.http_proxy ||
process.env.HTTPS_PROXY ||
process.env.https_proxy;
if (httpProxy) options.agent = new HttpsProxyAgent(httpProxy);
try {
const response = await fetch(META_ALPHA_VERSION_URL, {
...options,
method: "GET",
});
if (!response.ok)
throw new Error(
`Failed to fetch ${META_ALPHA_VERSION_URL}: ${response.status}`,
);
META_ALPHA_VERSION = (await response.text()).trim();
log_info(`Latest alpha version: ${META_ALPHA_VERSION}`);
await setCachedVersion("META_ALPHA_VERSION", META_ALPHA_VERSION);
} catch (err) {
log_error("Error fetching latest alpha version:", err.message);
process.exit(1);
}
}
async function getLatestReleaseVersion() {
if (!FORCE) {
const cached = await getCachedVersion("META_VERSION");
if (cached) {
META_VERSION = cached;
return;
}
}
const options = {};
const httpProxy =
process.env.HTTP_PROXY ||
process.env.http_proxy ||
process.env.HTTPS_PROXY ||
process.env.https_proxy;
if (httpProxy) options.agent = new HttpsProxyAgent(httpProxy);
try {
const response = await fetch(META_VERSION_URL, {
...options,
method: "GET",
});
if (!response.ok)
throw new Error(
`Failed to fetch ${META_VERSION_URL}: ${response.status}`,
);
META_VERSION = (await response.text()).trim();
log_info(`Latest release version: ${META_VERSION}`);
await setCachedVersion("META_VERSION", META_VERSION);
} catch (err) {
log_error("Error fetching latest release version:", err.message);
process.exit(1);
}
}
// =======================
// Validate availability
// =======================
if (!META_MAP[`${platform}-${arch}`]) {
throw new Error(`clash meta unsupported platform "${platform}-${arch}"`);
}
if (!META_ALPHA_MAP[`${platform}-${arch}`]) {
throw new Error(
`clash meta alpha unsupported platform "${platform}-${arch}"`,
);
}
// =======================
// Build meta objects
// =======================
function clashMetaAlpha() {
const name = META_ALPHA_MAP[`${platform}-${arch}`];
const isWin = platform === "win32";
const urlExt = isWin ? "zip" : "gz";
return {
name: "verge-mihomo-alpha",
targetFile: `verge-mihomo-alpha-${SIDECAR_HOST}${isWin ? ".exe" : ""}`,
exeFile: `${name}${isWin ? ".exe" : ""}`,
zipFile: `${name}-${META_ALPHA_VERSION}.${urlExt}`,
downloadURL: `${META_ALPHA_URL_PREFIX}/${name}-${META_ALPHA_VERSION}.${urlExt}`,
};
}
function clashMeta() {
const name = META_MAP[`${platform}-${arch}`];
const isWin = platform === "win32";
const urlExt = isWin ? "zip" : "gz";
return {
name: "verge-mihomo",
targetFile: `verge-mihomo-${SIDECAR_HOST}${isWin ? ".exe" : ""}`,
exeFile: `${name}${isWin ? ".exe" : ""}`,
zipFile: `${name}-${META_VERSION}.${urlExt}`,
downloadURL: `${META_URL_PREFIX}/${META_VERSION}/${name}-${META_VERSION}.${urlExt}`,
};
}
// =======================
// download helper (增强status + magic bytes)
// =======================
async function downloadFile(url, outPath) {
const options = {};
const httpProxy =
process.env.HTTP_PROXY ||
process.env.http_proxy ||
process.env.HTTPS_PROXY ||
process.env.https_proxy;
if (httpProxy) options.agent = new HttpsProxyAgent(httpProxy);
const response = await fetch(url, {
...options,
method: "GET",
headers: { "Content-Type": "application/octet-stream" },
});
if (!response.ok) {
const body = await response.text().catch(() => "");
// 将 body 写到文件以便排查(可通过临时目录查看)
await fsp.mkdir(path.dirname(outPath), { recursive: true });
await fsp.writeFile(outPath, body);
throw new Error(`Failed to download ${url}: status ${response.status}`);
}
const buf = Buffer.from(await response.arrayBuffer());
await fsp.mkdir(path.dirname(outPath), { recursive: true });
// 简单 magic 字节检查
if (url.endsWith(".gz") || url.endsWith(".tgz")) {
if (!(buf[0] === 0x1f && buf[1] === 0x8b)) {
await fsp.writeFile(outPath, buf);
throw new Error(
`Downloaded file for ${url} is not a valid gzip (magic mismatch).`,
);
}
} else if (url.endsWith(".zip")) {
if (!(buf[0] === 0x50 && buf[1] === 0x4b)) {
await fsp.writeFile(outPath, buf);
throw new Error(
`Downloaded file for ${url} is not a valid zip (magic mismatch).`,
);
}
}
await fsp.writeFile(outPath, buf);
log_success(`download finished: ${url}`);
}
// =======================
// resolveSidecar (支持 zip / tgz / gz)
// =======================
async function resolveSidecar(binInfo) {
const { name, targetFile, zipFile, exeFile, downloadURL } = binInfo;
const sidecarDir = path.join(cwd, "src-tauri", "sidecar");
const sidecarPath = path.join(sidecarDir, targetFile);
await fsp.mkdir(sidecarDir, { recursive: true });
if (!FORCE && fs.existsSync(sidecarPath)) {
log_success(`"${name}" already exists, skipping download`);
return;
}
const tempDir = path.join(TEMP_DIR, name);
const tempZip = path.join(tempDir, zipFile);
const tempExe = path.join(tempDir, exeFile);
await fsp.mkdir(tempDir, { recursive: true });
try {
if (!fs.existsSync(tempZip)) {
await downloadFile(downloadURL, tempZip);
}
if (zipFile.endsWith(".zip")) {
const zip = new AdmZip(tempZip);
zip.getEntries().forEach((entry) => {
log_debug(`"${name}" entry: ${entry.entryName}`);
});
zip.extractAllTo(tempDir, true);
// 尝试按 exeFile 重命名,否则找第一个可执行文件
if (fs.existsSync(tempExe)) {
await fsp.rename(tempExe, sidecarPath);
} else {
// 搜索候选
const files = await fsp.readdir(tempDir);
const candidate = files.find(
(f) =>
f === path.basename(exeFile) ||
f.endsWith(".exe") ||
!f.includes("."),
);
if (!candidate)
throw new Error(`Expected binary not found in ${tempDir}`);
await fsp.rename(path.join(tempDir, candidate), sidecarPath);
}
if (platform !== "win32") execSync(`chmod 755 ${sidecarPath}`);
log_success(`unzip finished: "${name}"`);
} else if (zipFile.endsWith(".tgz")) {
await extract({ cwd: tempDir, file: tempZip });
const files = await fsp.readdir(tempDir);
log_debug(`"${name}" extracted files:`, files);
// 优先寻找给定 exeFile 或已知前缀
let extracted = files.find(
(f) =>
f === path.basename(exeFile) ||
f.startsWith("虚空终端-") ||
!f.includes("."),
);
if (!extracted) extracted = files[0];
if (!extracted) throw new Error(`Expected file not found in ${tempDir}`);
await fsp.rename(path.join(tempDir, extracted), sidecarPath);
execSync(`chmod 755 ${sidecarPath}`);
log_success(`tgz processed: "${name}"`);
} else {
// .gz
const readStream = fs.createReadStream(tempZip);
const writeStream = fs.createWriteStream(sidecarPath);
await new Promise((resolve, reject) => {
readStream
.pipe(zlib.createGunzip())
.on("error", (e) => {
log_error(`gunzip error for ${name}:`, e.message);
reject(e);
})
.pipe(writeStream)
.on("finish", () => {
if (platform !== "win32") execSync(`chmod 755 ${sidecarPath}`);
resolve();
})
.on("error", (e) => {
log_error(`write stream error for ${name}:`, e.message);
reject(e);
});
});
log_success(`gz binary processed: "${name}"`);
}
} catch (err) {
await fsp.rm(sidecarPath, { recursive: true, force: true });
throw err;
} finally {
await fsp.rm(tempDir, { recursive: true, force: true });
}
}
async function resolveResource(binInfo) {
const { file, downloadURL, localPath } = binInfo;
const resDir = path.join(cwd, "src-tauri/resources");
const targetPath = path.join(resDir, file);
if (!FORCE && fs.existsSync(targetPath) && !downloadURL && !localPath) {
log_success(`"${file}" already exists, skipping`);
return;
}
if (downloadURL) {
if (!FORCE && fs.existsSync(targetPath)) {
log_success(`"${file}" already exists, skipping download`);
return;
}
await fsp.mkdir(resDir, { recursive: true });
await downloadFile(downloadURL, targetPath);
await updateHashCache(targetPath);
}
if (localPath) {
if (!(await hasFileChanged(localPath, targetPath))) {
return;
}
await fsp.mkdir(resDir, { recursive: true });
await fsp.copyFile(localPath, targetPath);
await updateHashCache(targetPath);
log_success(`Copied file: ${file}`);
}
log_success(`${file} finished`);
}
// SimpleSC.dll (win plugin)
const resolvePlugin = async () => {
const url =
"https://nsis.sourceforge.io/mediawiki/images/e/ef/NSIS_Simple_Service_Plugin_Unicode_1.30.zip";
const tempDir = path.join(TEMP_DIR, "SimpleSC");
const tempZip = path.join(
tempDir,
"NSIS_Simple_Service_Plugin_Unicode_1.30.zip",
);
const tempDll = path.join(tempDir, "SimpleSC.dll");
const pluginDir = path.join(process.env.APPDATA || "", "Local/NSIS");
const pluginPath = path.join(pluginDir, "SimpleSC.dll");
await fsp.mkdir(pluginDir, { recursive: true });
await fsp.mkdir(tempDir, { recursive: true });
if (!FORCE && fs.existsSync(pluginPath)) return;
try {
if (!fs.existsSync(tempZip)) {
await downloadFile(url, tempZip);
}
const zip = new AdmZip(tempZip);
zip
.getEntries()
.forEach((entry) => log_debug(`"SimpleSC" entry`, entry.entryName));
zip.extractAllTo(tempDir, true);
if (fs.existsSync(tempDll)) {
await fsp.cp(tempDll, pluginPath, { recursive: true, force: true });
log_success(`unzip finished: "SimpleSC"`);
} else {
// 如果 dll 名称不同,尝试找到 dll
const files = await fsp.readdir(tempDir);
const dll = files.find((f) => f.toLowerCase().endsWith(".dll"));
if (dll) {
await fsp.cp(path.join(tempDir, dll), pluginPath, {
recursive: true,
force: true,
});
log_success(`unzip finished: "SimpleSC" (found ${dll})`);
} else {
throw new Error("SimpleSC.dll not found in zip");
}
}
} finally {
await fsp.rm(tempDir, { recursive: true, force: true });
}
};
// service chmod (保留并使用 glob)
const resolveServicePermission = async () => {
const serviceExecutables = [
"clash-verge-service*",
"clash-verge-service-install*",
"clash-verge-service-uninstall*",
];
const resDir = path.join(cwd, "src-tauri/resources");
const hashCache = await loadHashCache();
let hasChanges = false;
for (const f of serviceExecutables) {
const files = glob.sync(path.join(resDir, f));
for (const filePath of files) {
if (fs.existsSync(filePath)) {
const currentHash = await calculateFileHash(filePath);
const cacheKey = `${filePath}_chmod`;
if (!FORCE && hashCache[cacheKey] === currentHash) {
continue;
}
try {
execSync(`chmod 755 ${filePath}`);
log_success(`chmod finished: "${filePath}"`);
} catch (e) {
log_error(`chmod failed for ${filePath}:`, e.message);
}
hashCache[cacheKey] = currentHash;
hasChanges = true;
}
}
}
if (hasChanges) {
await saveHashCache(hashCache);
}
};
// =======================
// Other resource resolvers (service, mmdb, geosite, geoip, enableLoopback)
// =======================
const SERVICE_URL = `https://github.com/clash-verge-rev/clash-verge-service-ipc/releases/download/${SIDECAR_HOST}`;
const resolveService = () => {
const ext = platform === "win32" ? ".exe" : "";
const suffix = platform === "linux" ? "-" + SIDECAR_HOST : "";
return resolveResource({
file: "clash-verge-service" + suffix + ext,
downloadURL: `${SERVICE_URL}/clash-verge-service${ext}`,
});
};
const resolveInstall = () => {
const ext = platform === "win32" ? ".exe" : "";
const suffix = platform === "linux" ? "-" + SIDECAR_HOST : "";
return resolveResource({
file: "clash-verge-service-install" + suffix + ext,
downloadURL: `${SERVICE_URL}/clash-verge-service-install${ext}`,
});
};
const resolveUninstall = () => {
const ext = platform === "win32" ? ".exe" : "";
const suffix = platform === "linux" ? "-" + SIDECAR_HOST : "";
return resolveResource({
file: "clash-verge-service-uninstall" + suffix + ext,
downloadURL: `${SERVICE_URL}/clash-verge-service-uninstall${ext}`,
});
};
const resolveMmdb = () =>
resolveResource({
file: "Country.mmdb",
downloadURL: `https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb`,
});
const resolveGeosite = () =>
resolveResource({
file: "geosite.dat",
downloadURL: `https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat`,
});
const resolveGeoIP = () =>
resolveResource({
file: "geoip.dat",
downloadURL: `https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat`,
});
const resolveEnableLoopback = () =>
resolveResource({
file: "enableLoopback.exe",
downloadURL: `https://github.com/Kuingsmile/uwp-tool/releases/download/latest/enableLoopback.exe`,
});
const resolveSetDnsScript = () =>
resolveResource({
file: "set_dns.sh",
localPath: path.join(cwd, "scripts/set_dns.sh"),
});
const resolveUnSetDnsScript = () =>
resolveResource({
file: "unset_dns.sh",
localPath: path.join(cwd, "scripts/unset_dns.sh"),
});
// =======================
// Tasks
// =======================
const tasks = [
{
name: "verge-mihomo-alpha",
func: () =>
getLatestAlphaVersion().then(() => resolveSidecar(clashMetaAlpha())),
retry: 5,
},
{
name: "verge-mihomo",
func: () =>
getLatestReleaseVersion().then(() => resolveSidecar(clashMeta())),
retry: 5,
},
{ name: "plugin", func: resolvePlugin, retry: 5, winOnly: true },
{ name: "service", func: resolveService, retry: 5 },
{ name: "install", func: resolveInstall, retry: 5 },
{ name: "uninstall", func: resolveUninstall, retry: 5 },
{ name: "mmdb", func: resolveMmdb, retry: 5 },
{ name: "geosite", func: resolveGeosite, retry: 5 },
{ name: "geoip", func: resolveGeoIP, retry: 5 },
{
name: "enableLoopback",
func: resolveEnableLoopback,
retry: 5,
winOnly: true,
},
{
name: "service_chmod",
func: resolveServicePermission,
retry: 5,
unixOnly: platform === "linux" || platform === "darwin",
},
{
name: "set_dns_script",
func: resolveSetDnsScript,
retry: 5,
macosOnly: true,
},
{
name: "unset_dns_script",
func: resolveUnSetDnsScript,
retry: 5,
macosOnly: true,
},
];
async function runTask() {
const task = tasks.shift();
if (!task) return;
if (task.unixOnly && platform === "win32") return runTask();
if (task.winOnly && platform !== "win32") return runTask();
if (task.macosOnly && platform !== "darwin") return runTask();
if (task.linuxOnly && platform !== "linux") return runTask();
for (let i = 0; i < task.retry; i++) {
try {
await task.func();
break;
} catch (err) {
log_error(`task::${task.name} try ${i} ==`, err.message);
if (i === task.retry - 1) throw err;
}
}
return runTask();
}
runTask();

View File

@@ -0,0 +1,66 @@
// scripts/publish-version.mjs
import { spawn } from "child_process";
import { existsSync } from "fs";
import path from "path";
const rootDir = process.cwd();
const scriptPath = path.join(rootDir, "scripts", "release-version.mjs");
if (!existsSync(scriptPath)) {
console.error("release-version.mjs not found!");
process.exit(1);
}
const versionArg = process.argv[2];
if (!versionArg) {
console.error("Usage: pnpm publish-version <version>");
process.exit(1);
}
// 1. 调用 release-version.mjs
const runRelease = () =>
new Promise((resolve, reject) => {
const child = spawn("node", [scriptPath, versionArg], { stdio: "inherit" });
child.on("exit", (code) => {
if (code === 0) resolve();
else reject(new Error("release-version failed"));
});
});
// 2. 判断是否需要打 tag
function isSemver(version) {
return /^v?\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$/.test(version);
}
async function run() {
await runRelease();
let tag = null;
if (versionArg === "alpha") {
// 读取 package.json 里的主版本
const pkg = await import(path.join(rootDir, "package.json"), {
assert: { type: "json" },
});
tag = `v${pkg.default.version}-alpha`;
} else if (isSemver(versionArg)) {
// 1.2.3 或 v1.2.3
tag = versionArg.startsWith("v") ? versionArg : `v${versionArg}`;
}
if (tag) {
// 打 tag 并推送
const { execSync } = await import("child_process");
try {
execSync(`git tag ${tag}`, { stdio: "inherit" });
execSync(`git push origin ${tag}`, { stdio: "inherit" });
console.log(`[INFO]: Git tag ${tag} created and pushed.`);
} catch {
console.error(`[ERROR]: Failed to create or push git tag: ${tag}`);
process.exit(1);
}
} else {
console.log("[INFO]: No git tag created for this version.");
}
}
run();

315
scripts/release-version.mjs Normal file
View File

@@ -0,0 +1,315 @@
/**
* CLI tool to update version numbers in package.json, src-tauri/Cargo.toml, and src-tauri/tauri.conf.json.
*
* Usage:
* pnpm release-version <version>
*
* <version> can be:
* - A full semver version (e.g., 1.2.3, v1.2.3, 1.2.3-beta, v1.2.3+build)
* - A tag: "alpha", "beta", "rc", "autobuild", "autobuild-latest", or "deploytest"
* - "alpha", "beta", "rc": Appends the tag to the current base version (e.g., 1.2.3-beta)
* - "autobuild": Appends a timestamped autobuild tag (e.g., 1.2.3+autobuild.2406101530)
* - "autobuild-latest": Appends an autobuild tag with latest Tauri commit (e.g., 1.2.3+autobuild.0614.a1b2c3d)
* - "deploytest": Appends a timestamped deploytest tag (e.g., 1.2.3+deploytest.2406101530)
*
* Examples:
* pnpm release-version 1.2.3
* pnpm release-version v1.2.3-beta
* pnpm release-version beta
* pnpm release-version autobuild
* pnpm release-version autobuild-latest
* pnpm release-version deploytest
*
* The script will:
* - Validate and normalize the version argument
* - Update the version field in package.json
* - Update the version field in src-tauri/Cargo.toml
* - Update the version field in src-tauri/tauri.conf.json
*
* Errors are logged and the process exits with code 1 on failure.
*/
import { execSync } from "child_process";
import fs from "fs/promises";
import path from "path";
import { program } from "commander";
/**
* 获取当前 git 短 commit hash
* @returns {string}
*/
function getGitShortCommit() {
try {
return execSync("git rev-parse --short HEAD").toString().trim();
} catch {
console.warn("[WARN]: Failed to get git short commit, fallback to 'nogit'");
return "nogit";
}
}
/**
* 获取最新 Tauri 相关提交的短 hash
* @returns {string}
*/
function getLatestTauriCommit() {
try {
const fullHash = execSync(
"bash ./scripts-workflow/get_latest_tauri_commit.bash",
)
.toString()
.trim();
const shortHash = execSync(`git rev-parse --short ${fullHash}`)
.toString()
.trim();
console.log(`[INFO]: Latest Tauri-related commit: ${shortHash}`);
return shortHash;
} catch (error) {
console.warn(
"[WARN]: Failed to get latest Tauri commit, fallback to current git short commit",
);
console.warn(`[WARN]: Error details: ${error.message}`);
return getGitShortCommit();
}
}
/**
* 生成短时间戳格式MMDD或带 commit格式MMDD.cc39b27
* 使用 Asia/Shanghai 时区
* @param {boolean} withCommit 是否带 commit
* @param {boolean} useTauriCommit 是否使用 Tauri 相关的 commit仅当 withCommit 为 true 时有效)
* @returns {string}
*/
function generateShortTimestamp(withCommit = false, useTauriCommit = false) {
const now = new Date();
const formatter = new Intl.DateTimeFormat("en-CA", {
timeZone: "Asia/Shanghai",
month: "2-digit",
day: "2-digit",
});
const parts = formatter.formatToParts(now);
const month = parts.find((part) => part.type === "month").value;
const day = parts.find((part) => part.type === "day").value;
if (withCommit) {
const gitShort = useTauriCommit
? getLatestTauriCommit()
: getGitShortCommit();
return `${month}${day}.${gitShort}`;
}
return `${month}${day}`;
}
/**
* 验证版本号格式
* @param {string} version
* @returns {boolean}
*/
function isValidVersion(version) {
return /^v?\d+\.\d+\.\d+(-(alpha|beta|rc)(\.\d+)?)?(\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?$/i.test(
version,
);
}
/**
* 标准化版本号
* @param {string} version
* @returns {string}
*/
function normalizeVersion(version) {
return version.startsWith("v") ? version : `v${version}`;
}
/**
* 提取基础版本号(去掉所有 -tag 和 +build 部分)
* @param {string} version
* @returns {string}
*/
function getBaseVersion(version) {
let base = version.replace(/-(alpha|beta|rc)(\.\d+)?/i, "");
base = base.replace(/\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*/g, "");
return base;
}
/**
* 更新 package.json 版本号
* @param {string} newVersion
*/
async function updatePackageVersion(newVersion) {
const _dirname = process.cwd();
const packageJsonPath = path.join(_dirname, "package.json");
try {
const data = await fs.readFile(packageJsonPath, "utf8");
const packageJson = JSON.parse(data);
console.log(
"[INFO]: Current package.json version is: ",
packageJson.version,
);
packageJson.version = newVersion.startsWith("v")
? newVersion.slice(1)
: newVersion;
await fs.writeFile(
packageJsonPath,
JSON.stringify(packageJson, null, 2),
"utf8",
);
console.log(
`[INFO]: package.json version updated to: ${packageJson.version}`,
);
} catch (error) {
console.error("Error updating package.json version:", error);
throw error;
}
}
/**
* 更新 Cargo.toml 版本号
* @param {string} newVersion
*/
async function updateCargoVersion(newVersion) {
const _dirname = process.cwd();
const cargoTomlPath = path.join(_dirname, "src-tauri", "Cargo.toml");
try {
const data = await fs.readFile(cargoTomlPath, "utf8");
const lines = data.split("\n");
const versionWithoutV = newVersion.startsWith("v")
? newVersion.slice(1)
: newVersion;
const updatedLines = lines.map((line) => {
if (line.trim().startsWith("version =")) {
return line.replace(
/version\s*=\s*"[^"]+"/,
`version = "${versionWithoutV}"`,
);
}
return line;
});
await fs.writeFile(cargoTomlPath, updatedLines.join("\n"), "utf8");
console.log(`[INFO]: Cargo.toml version updated to: ${versionWithoutV}`);
} catch (error) {
console.error("Error updating Cargo.toml version:", error);
throw error;
}
}
/**
* 更新 tauri.conf.json 版本号
* @param {string} newVersion
*/
async function updateTauriConfigVersion(newVersion) {
const _dirname = process.cwd();
const tauriConfigPath = path.join(_dirname, "src-tauri", "tauri.conf.json");
try {
const data = await fs.readFile(tauriConfigPath, "utf8");
const tauriConfig = JSON.parse(data);
const versionWithoutV = newVersion.startsWith("v")
? newVersion.slice(1)
: newVersion;
console.log(
"[INFO]: Current tauri.conf.json version is: ",
tauriConfig.version,
);
// 使用完整版本信息包含build metadata
tauriConfig.version = versionWithoutV;
await fs.writeFile(
tauriConfigPath,
JSON.stringify(tauriConfig, null, 2),
"utf8",
);
console.log(
`[INFO]: tauri.conf.json version updated to: ${versionWithoutV}`,
);
} catch (error) {
console.error("Error updating tauri.conf.json version:", error);
throw error;
}
}
/**
* 获取当前版本号
*/
async function getCurrentVersion() {
const _dirname = process.cwd();
const packageJsonPath = path.join(_dirname, "package.json");
try {
const data = await fs.readFile(packageJsonPath, "utf8");
const packageJson = JSON.parse(data);
return packageJson.version;
} catch (error) {
console.error("Error getting current version:", error);
throw error;
}
}
/**
* 主函数
*/
async function main(versionArg) {
if (!versionArg) {
console.error("Error: Version argument is required");
process.exit(1);
}
try {
let newVersion;
const validTags = [
"alpha",
"beta",
"rc",
"autobuild",
"autobuild-latest",
"deploytest",
];
if (validTags.includes(versionArg.toLowerCase())) {
const currentVersion = await getCurrentVersion();
const baseVersion = getBaseVersion(currentVersion);
if (versionArg.toLowerCase() === "autobuild") {
// 格式: 2.3.0+autobuild.1004.cc39b27
// 使用 Tauri 相关的最新 commit hash
newVersion = `${baseVersion}+autobuild.${generateShortTimestamp(true, true)}`;
} else if (versionArg.toLowerCase() === "autobuild-latest") {
// 格式: 2.3.0+autobuild.1004.a1b2c3d (使用最新 Tauri 提交)
const latestTauriCommit = getLatestTauriCommit();
newVersion = `${baseVersion}+autobuild.${generateShortTimestamp()}.${latestTauriCommit}`;
} else if (versionArg.toLowerCase() === "deploytest") {
// 格式: 2.3.0+deploytest.1004.cc39b27
// 使用 Tauri 相关的最新 commit hash
newVersion = `${baseVersion}+deploytest.${generateShortTimestamp(true, true)}`;
} else {
newVersion = `${baseVersion}-${versionArg.toLowerCase()}`;
}
} else {
if (!isValidVersion(versionArg)) {
console.error("Error: Invalid version format");
process.exit(1);
}
newVersion = normalizeVersion(versionArg);
}
console.log(`[INFO]: Updating versions to: ${newVersion}`);
await updatePackageVersion(newVersion);
await updateCargoVersion(newVersion);
await updateTauriConfigVersion(newVersion);
console.log("[SUCCESS]: All version updates completed successfully!");
} catch (error) {
console.error("[ERROR]: Failed to update versions:", error);
process.exit(1);
}
}
program
.name("pnpm release-version")
.description("Update project version numbers")
.argument("<version>", "version tag or full version")
.action(main)
.parse(process.argv);

67
scripts/set_dns.sh Normal file
View File

@@ -0,0 +1,67 @@
#!/bin/bash
# 验证IPv4地址格式
function is_valid_ipv4() {
local ip=$1
local IFS='.'
local -a octets
[[ ! $ip =~ ^([0-9]+\.){3}[0-9]+$ ]] && return 1
read -r -a octets <<<"$ip"
[ "${#octets[@]}" -ne 4 ] && return 1
for octet in "${octets[@]}"; do
if ! [[ "$octet" =~ ^[0-9]+$ ]] || ((octet < 0 || octet > 255)); then
return 1
fi
done
return 0
}
# 验证IPv6地址格式
function is_valid_ipv6() {
local ip=$1
if [[ ! $ip =~ ^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$ ]] &&
[[ ! $ip =~ ^(([0-9a-fA-F]{0,4}:){0,7}:|(:[0-9a-fA-F]{0,4}:){0,6}:[0-9a-fA-F]{0,4})$ ]]; then
return 1
fi
return 0
}
# 验证IP地址是否为有效的IPv4或IPv6
function is_valid_ip() {
is_valid_ipv4 "$1" || is_valid_ipv6 "$1"
}
# 检查参数
[ $# -lt 1 ] && echo "Usage: $0 <IP address>" && exit 1
! is_valid_ip "$1" && echo "$1 is not a valid IP address." && exit 1
# 获取网络接口和硬件端口
nic=$(route -n get default | grep "interface" | awk '{print $2}')
# 从网络服务列表中获取硬件端口
hardware_port=$(networksetup -listnetworkserviceorder | awk -v dev="$nic" '
/^\([0-9]+\) /{port=$0; sub(/^\([0-9]+\) /, "", port)}
/\(Hardware Port:/{interface=$NF;sub(/\)/, "", interface); if (interface == dev) {print port; exit}}
')
# 获取当前DNS设置
original_dns=$(networksetup -getdnsservers "$hardware_port")
# 检查当前DNS设置是否有效
is_valid_dns=false
for ip in $original_dns; do
ip=$(echo "$ip" | tr -d '[:space:]')
if [ -n "$ip" ] && (is_valid_ipv4 "$ip" || is_valid_ipv6 "$ip"); then
is_valid_dns=true
break
fi
done
# 更新DNS设置
if [ "$is_valid_dns" = false ]; then
echo "empty" >.original_dns.txt
else
echo "$original_dns" >.original_dns.txt
fi
networksetup -setdnsservers "$hardware_port" "$1"

125
scripts/telegram.mjs Normal file
View File

@@ -0,0 +1,125 @@
import { readFileSync } from "fs";
import axios from "axios";
import { log_error, log_info, log_success } from "./utils.mjs";
const CHAT_ID_RELEASE = "@clash_verge_re"; // 正式发布频道
const CHAT_ID_TEST = "@vergetest"; // 测试频道
async function sendTelegramNotification() {
if (!process.env.TELEGRAM_BOT_TOKEN) {
throw new Error("TELEGRAM_BOT_TOKEN is required");
}
const version =
process.env.VERSION ||
(() => {
const pkg = readFileSync("package.json", "utf-8");
return JSON.parse(pkg).version;
})();
const downloadUrl =
process.env.DOWNLOAD_URL ||
`https://github.com/clash-verge-rev/clash-verge-rev/releases/download/v${version}`;
const isAutobuild =
process.env.BUILD_TYPE === "autobuild" || version.includes("autobuild");
const chatId = isAutobuild ? CHAT_ID_TEST : CHAT_ID_RELEASE;
const buildType = isAutobuild ? "滚动更新版" : "正式版";
log_info(`Preparing Telegram notification for ${buildType} ${version}`);
log_info(`Target channel: ${chatId}`);
log_info(`Download URL: ${downloadUrl}`);
// 读取发布说明和下载地址
let releaseContent = "";
try {
releaseContent = readFileSync("release.txt", "utf-8");
log_info("成功读取 release.txt 文件");
} catch (error) {
log_error("无法读取 release.txt使用默认发布说明", error);
releaseContent = "更多新功能现已支持,详细更新日志请查看发布页面。";
}
// Markdown 转换为 HTML
function convertMarkdownToTelegramHTML(content) {
return content
.split("\n")
.map((line) => {
if (line.trim().length === 0) {
return "";
} else if (line.startsWith("## ")) {
return `<b>${line.replace("## ", "")}</b>`;
} else if (line.startsWith("### ")) {
return `<b>${line.replace("### ", "")}</b>`;
} else if (line.startsWith("#### ")) {
return `<b>${line.replace("#### ", "")}</b>`;
} else {
let processedLine = line.replace(
/\[([^\]]+)\]\(([^)]+)\)/g,
(match, text, url) => {
const encodedUrl = encodeURI(url);
return `<a href="${encodedUrl}">${text}</a>`;
},
);
processedLine = processedLine.replace(
/\*\*([^*]+)\*\*/g,
"<b>$1</b>",
);
return processedLine;
}
})
.join("\n");
}
function normalizeDetailsTags(content) {
return content
.replace(
/<summary>\s*<strong>\s*(.*?)\s*<\/strong>\s*<\/summary>/g,
"\n<b>$1</b>\n",
)
.replace(/<summary>\s*(.*?)\s*<\/summary>/g, "\n<b>$1</b>\n")
.replace(/<\/?details>/g, "")
.replace(/<\/?strong>/g, (m) => (m === "</strong>" ? "</b>" : "<b>"))
.replace(/<br\s*\/?>/g, "\n");
}
releaseContent = normalizeDetailsTags(releaseContent);
const formattedContent = convertMarkdownToTelegramHTML(releaseContent);
const releaseTitle = isAutobuild ? "滚动更新版发布" : "正式发布";
const encodedVersion = encodeURIComponent(version);
const content = `<b>🎉 <a href="https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild">Clash Verge Rev v${version}</a> ${releaseTitle}</b>\n\n${formattedContent}`;
// 发送到 Telegram
try {
await axios.post(
`https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMessage`,
{
chat_id: chatId,
text: content,
link_preview_options: {
is_disabled: false,
url: `https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/v${encodedVersion}`,
prefer_large_media: true,
},
parse_mode: "HTML",
},
);
log_success(`✅ Telegram 通知发送成功到 ${chatId}`);
} catch (error) {
log_error(
`❌ Telegram 通知发送失败到 ${chatId}:`,
error.response?.data || error.message,
error,
);
process.exit(1);
}
}
// 执行函数
sendTelegramNotification().catch((error) => {
log_error("脚本执行失败:", error);
process.exit(1);
});

13
scripts/unset_dns.sh Normal file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
nic=$(route -n get default | grep "interface" | awk '{print $2}')
hardware_port=$(networksetup -listnetworkserviceorder | awk -v dev="$nic" '
/^\([0-9]+\) /{port=$0; sub(/^\([0-9]+\) /, "", port)}
/\(Hardware Port:/{interface=$NF;sub(/\)/, "", interface); if (interface == dev) {print port; exit}}
')
if [ -f .original_dns.txt ]; then
original_dns=$(cat .original_dns.txt)
networksetup -setdnsservers "$hardware_port" $original_dns
rm -rf .original_dns.txt
fi

84
scripts/updatelog.mjs Normal file
View File

@@ -0,0 +1,84 @@
import fs from "fs";
import fsp from "fs/promises";
import path from "path";
const UPDATE_LOG = "Changelog.md";
// parse the Changelog.md
export async function resolveUpdateLog(tag) {
const cwd = process.cwd();
const reTitle = /^## v[\d.]+/;
const reEnd = /^---/;
const file = path.join(cwd, UPDATE_LOG);
if (!fs.existsSync(file)) {
throw new Error("could not found Changelog.md");
}
const data = await fsp.readFile(file, "utf-8");
const map = {};
let p = "";
data.split("\n").forEach((line) => {
if (reTitle.test(line)) {
p = line.slice(3).trim();
if (!map[p]) {
map[p] = [];
} else {
throw new Error(`Tag ${p} dup`);
}
} else if (reEnd.test(line)) {
p = "";
} else if (p) {
map[p].push(line);
}
});
if (!map[tag]) {
throw new Error(`could not found "${tag}" in Changelog.md`);
}
return map[tag].join("\n").trim();
}
export async function resolveUpdateLogDefault() {
const cwd = process.cwd();
const file = path.join(cwd, UPDATE_LOG);
if (!fs.existsSync(file)) {
throw new Error("could not found Changelog.md");
}
const data = await fsp.readFile(file, "utf-8");
const reTitle = /^## v[\d.]+/;
const reEnd = /^---/;
let isCapturing = false;
const content = [];
let firstTag = "";
for (const line of data.split("\n")) {
if (reTitle.test(line) && !isCapturing) {
isCapturing = true;
firstTag = line.slice(3).trim();
continue;
}
if (isCapturing) {
if (reEnd.test(line)) {
break;
}
content.push(line);
}
}
if (!firstTag) {
throw new Error("could not found any version tag in Changelog.md");
}
return content.join("\n").trim();
}

View File

@@ -0,0 +1,158 @@
import { context, getOctokit } from "@actions/github";
import fetch from "node-fetch";
import { resolveUpdateLog } from "./updatelog.mjs";
const UPDATE_TAG_NAME = "updater";
const UPDATE_JSON_FILE = "update-fixed-webview2.json";
const UPDATE_JSON_PROXY = "update-fixed-webview2-proxy.json";
/// generate update.json
/// upload to update tag's release asset
async function resolveUpdater() {
if (process.env.GITHUB_TOKEN === undefined) {
throw new Error("GITHUB_TOKEN is required");
}
const options = { owner: context.repo.owner, repo: context.repo.repo };
const github = getOctokit(process.env.GITHUB_TOKEN);
const { data: tags } = await github.rest.repos.listTags({
...options,
per_page: 10,
page: 1,
});
// get the latest publish tag
const tag = tags.find((t) => t.name.startsWith("v"));
console.log(tag);
console.log();
const { data: latestRelease } = await github.rest.repos.getReleaseByTag({
...options,
tag: tag.name,
});
const updateData = {
name: tag.name,
notes: await resolveUpdateLog(tag.name), // use Changelog.md
pub_date: new Date().toISOString(),
platforms: {
"windows-x86_64": { signature: "", url: "" },
"windows-aarch64": { signature: "", url: "" },
"windows-x86": { signature: "", url: "" },
"windows-i686": { signature: "", url: "" },
},
};
const promises = latestRelease.assets.map(async (asset) => {
const { name, browser_download_url } = asset;
// win64 url
if (name.endsWith("x64_fixed_webview2-setup.nsis.zip")) {
updateData.platforms["windows-x86_64"].url = browser_download_url;
}
// win64 signature
if (name.endsWith("x64_fixed_webview2-setup.nsis.zip.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["windows-x86_64"].signature = sig;
}
// win32 url
if (name.endsWith("x86_fixed_webview2-setup.nsis.zip")) {
updateData.platforms["windows-x86"].url = browser_download_url;
updateData.platforms["windows-i686"].url = browser_download_url;
}
// win32 signature
if (name.endsWith("x86_fixed_webview2-setup.nsis.zip.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["windows-x86"].signature = sig;
updateData.platforms["windows-i686"].signature = sig;
}
// win arm url
if (name.endsWith("arm64_fixed_webview2-setup.nsis.zip")) {
updateData.platforms["windows-aarch64"].url = browser_download_url;
}
// win arm signature
if (name.endsWith("arm64_fixed_webview2-setup.nsis.zip.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["windows-aarch64"].signature = sig;
}
});
await Promise.allSettled(promises);
console.log(updateData);
// maybe should test the signature as well
// delete the null field
Object.entries(updateData.platforms).forEach(([key, value]) => {
if (!value.url) {
console.log(`[Error]: failed to parse release for "${key}"`);
delete updateData.platforms[key];
}
});
// 生成一个代理github的更新文件
// 使用 https://hub.fastgit.xyz/ 做github资源的加速
const updateDataNew = JSON.parse(JSON.stringify(updateData));
Object.entries(updateDataNew.platforms).forEach(([key, value]) => {
if (value.url) {
updateDataNew.platforms[key].url =
"https://download.clashverge.dev/" + value.url;
} else {
console.log(`[Error]: updateDataNew.platforms.${key} is null`);
}
});
// update the update.json
const { data: updateRelease } = await github.rest.repos.getReleaseByTag({
...options,
tag: UPDATE_TAG_NAME,
});
// delete the old assets
for (const asset of updateRelease.assets) {
if (asset.name === UPDATE_JSON_FILE) {
await github.rest.repos.deleteReleaseAsset({
...options,
asset_id: asset.id,
});
}
if (asset.name === UPDATE_JSON_PROXY) {
await github.rest.repos
.deleteReleaseAsset({ ...options, asset_id: asset.id })
.catch(console.error); // do not break the pipeline
}
}
// upload new assets
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: updateRelease.id,
name: UPDATE_JSON_FILE,
data: JSON.stringify(updateData, null, 2),
});
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: updateRelease.id,
name: UPDATE_JSON_PROXY,
data: JSON.stringify(updateDataNew, null, 2),
});
}
// get the signature file content
async function getSignature(url) {
const response = await fetch(url, {
method: "GET",
headers: { "Content-Type": "application/octet-stream" },
});
return response.text();
}
resolveUpdater().catch(console.error);

324
scripts/updater.mjs Normal file
View File

@@ -0,0 +1,324 @@
import { getOctokit, context } from "@actions/github";
import fetch from "node-fetch";
import { resolveUpdateLog, resolveUpdateLogDefault } from "./updatelog.mjs";
// Add stable update JSON filenames
const UPDATE_TAG_NAME = "updater";
const UPDATE_JSON_FILE = "update.json";
const UPDATE_JSON_PROXY = "update-proxy.json";
// Add alpha update JSON filenames
const ALPHA_TAG_NAME = "updater-alpha";
const ALPHA_UPDATE_JSON_FILE = "update.json";
const ALPHA_UPDATE_JSON_PROXY = "update-proxy.json";
/// generate update.json
/// upload to update tag's release asset
async function resolveUpdater() {
if (process.env.GITHUB_TOKEN === undefined) {
throw new Error("GITHUB_TOKEN is required");
}
const options = { owner: context.repo.owner, repo: context.repo.repo };
const github = getOctokit(process.env.GITHUB_TOKEN);
// Fetch all tags using pagination
let allTags = [];
let page = 1;
const perPage = 100;
while (true) {
const { data: pageTags } = await github.rest.repos.listTags({
...options,
per_page: perPage,
page: page,
});
allTags = allTags.concat(pageTags);
// Break if we received fewer tags than requested (last page)
if (pageTags.length < perPage) {
break;
}
page++;
}
const tags = allTags;
console.log(`Retrieved ${tags.length} tags in total`);
// More flexible tag detection with regex patterns
const stableTagRegex = /^v\d+\.\d+\.\d+$/; // Matches vX.Y.Z format
// const preReleaseRegex = /^v\d+\.\d+\.\d+-(alpha|beta|rc|pre)/i; // Matches vX.Y.Z-alpha/beta/rc format
const preReleaseRegex = /^(alpha|beta|rc|pre)$/i; // Matches exact alpha/beta/rc/pre tags
// Get the latest stable tag and pre-release tag
const stableTag = tags.find((t) => stableTagRegex.test(t.name));
const preReleaseTag = tags.find((t) => preReleaseRegex.test(t.name));
console.log("All tags:", tags.map((t) => t.name).join(", "));
console.log("Stable tag:", stableTag ? stableTag.name : "None found");
console.log(
"Pre-release tag:",
preReleaseTag ? preReleaseTag.name : "None found",
);
console.log();
// Process stable release
if (stableTag) {
await processRelease(github, options, stableTag, false);
}
// Process pre-release if found
if (preReleaseTag) {
await processRelease(github, options, preReleaseTag, true);
}
}
// Process a release (stable or alpha) and generate update files
async function processRelease(github, options, tag, isAlpha) {
if (!tag) return;
try {
const { data: release } = await github.rest.repos.getReleaseByTag({
...options,
tag: tag.name,
});
const updateData = {
name: tag.name,
notes: await resolveUpdateLog(tag.name).catch(() =>
resolveUpdateLogDefault().catch(() => "No changelog available"),
),
pub_date: new Date().toISOString(),
platforms: {
win64: { signature: "", url: "" }, // compatible with older formats
linux: { signature: "", url: "" }, // compatible with older formats
darwin: { signature: "", url: "" }, // compatible with older formats
"darwin-aarch64": { signature: "", url: "" },
"darwin-intel": { signature: "", url: "" },
"darwin-x86_64": { signature: "", url: "" },
"linux-x86_64": { signature: "", url: "" },
"linux-x86": { signature: "", url: "" },
"linux-i686": { signature: "", url: "" },
"linux-aarch64": { signature: "", url: "" },
"linux-armv7": { signature: "", url: "" },
"windows-x86_64": { signature: "", url: "" },
"windows-aarch64": { signature: "", url: "" },
"windows-x86": { signature: "", url: "" },
"windows-i686": { signature: "", url: "" },
},
};
const promises = release.assets.map(async (asset) => {
const { name, browser_download_url } = asset;
// Process all the platform URL and signature data
// win64 url
if (name.endsWith("x64-setup.exe")) {
updateData.platforms.win64.url = browser_download_url;
updateData.platforms["windows-x86_64"].url = browser_download_url;
}
// win64 signature
if (name.endsWith("x64-setup.exe.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms.win64.signature = sig;
updateData.platforms["windows-x86_64"].signature = sig;
}
// win32 url
if (name.endsWith("x86-setup.exe")) {
updateData.platforms["windows-x86"].url = browser_download_url;
updateData.platforms["windows-i686"].url = browser_download_url;
}
// win32 signature
if (name.endsWith("x86-setup.exe.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["windows-x86"].signature = sig;
updateData.platforms["windows-i686"].signature = sig;
}
// win arm url
if (name.endsWith("arm64-setup.exe")) {
updateData.platforms["windows-aarch64"].url = browser_download_url;
}
// win arm signature
if (name.endsWith("arm64-setup.exe.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["windows-aarch64"].signature = sig;
}
// darwin url (intel)
if (name.endsWith(".app.tar.gz") && !name.includes("aarch")) {
updateData.platforms.darwin.url = browser_download_url;
updateData.platforms["darwin-intel"].url = browser_download_url;
updateData.platforms["darwin-x86_64"].url = browser_download_url;
}
// darwin signature (intel)
if (name.endsWith(".app.tar.gz.sig") && !name.includes("aarch")) {
const sig = await getSignature(browser_download_url);
updateData.platforms.darwin.signature = sig;
updateData.platforms["darwin-intel"].signature = sig;
updateData.platforms["darwin-x86_64"].signature = sig;
}
// darwin url (aarch)
if (name.endsWith("aarch64.app.tar.gz")) {
updateData.platforms["darwin-aarch64"].url = browser_download_url;
// 使linux可以检查更新
updateData.platforms.linux.url = browser_download_url;
updateData.platforms["linux-x86_64"].url = browser_download_url;
updateData.platforms["linux-x86"].url = browser_download_url;
updateData.platforms["linux-i686"].url = browser_download_url;
updateData.platforms["linux-aarch64"].url = browser_download_url;
updateData.platforms["linux-armv7"].url = browser_download_url;
}
// darwin signature (aarch)
if (name.endsWith("aarch64.app.tar.gz.sig")) {
const sig = await getSignature(browser_download_url);
updateData.platforms["darwin-aarch64"].signature = sig;
updateData.platforms.linux.signature = sig;
updateData.platforms["linux-x86_64"].signature = sig;
updateData.platforms["linux-x86"].url = browser_download_url;
updateData.platforms["linux-i686"].url = browser_download_url;
updateData.platforms["linux-aarch64"].signature = sig;
updateData.platforms["linux-armv7"].signature = sig;
}
});
await Promise.allSettled(promises);
console.log(updateData);
// maybe should test the signature as well
// delete the null field
Object.entries(updateData.platforms).forEach(([key, value]) => {
if (!value.url) {
console.log(`[Error]: failed to parse release for "${key}"`);
delete updateData.platforms[key];
}
});
// Generate a proxy update file for accelerated GitHub resources
const updateDataNew = JSON.parse(JSON.stringify(updateData));
Object.entries(updateDataNew.platforms).forEach(([key, value]) => {
if (value.url) {
updateDataNew.platforms[key].url =
"https://download.clashverge.dev/" + value.url;
} else {
console.log(`[Error]: updateDataNew.platforms.${key} is null`);
}
});
// Get the appropriate updater release based on isAlpha flag
const releaseTag = isAlpha ? ALPHA_TAG_NAME : UPDATE_TAG_NAME;
console.log(
`Processing ${isAlpha ? "alpha" : "stable"} release:`,
releaseTag,
);
try {
let updateRelease;
try {
// Try to get the existing release
const response = await github.rest.repos.getReleaseByTag({
...options,
tag: releaseTag,
});
updateRelease = response.data;
console.log(
`Found existing ${releaseTag} release with ID: ${updateRelease.id}`,
);
} catch (error) {
// If release doesn't exist, create it
if (error.status === 404) {
console.log(
`Release with tag ${releaseTag} not found, creating new release...`,
);
const createResponse = await github.rest.repos.createRelease({
...options,
tag_name: releaseTag,
name: isAlpha
? "Auto-update Alpha Channel"
: "Auto-update Stable Channel",
body: `This release contains the update information for ${isAlpha ? "alpha" : "stable"} channel.`,
prerelease: isAlpha,
});
updateRelease = createResponse.data;
console.log(
`Created new ${releaseTag} release with ID: ${updateRelease.id}`,
);
} else {
// If it's another error, throw it
throw error;
}
}
// File names based on release type
const jsonFile = isAlpha ? ALPHA_UPDATE_JSON_FILE : UPDATE_JSON_FILE;
const proxyFile = isAlpha ? ALPHA_UPDATE_JSON_PROXY : UPDATE_JSON_PROXY;
// Delete existing assets with these names
for (const asset of updateRelease.assets) {
if (asset.name === jsonFile) {
await github.rest.repos.deleteReleaseAsset({
...options,
asset_id: asset.id,
});
}
if (asset.name === proxyFile) {
await github.rest.repos
.deleteReleaseAsset({ ...options, asset_id: asset.id })
.catch(console.error); // do not break the pipeline
}
}
// Upload new assets
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: updateRelease.id,
name: jsonFile,
data: JSON.stringify(updateData, null, 2),
});
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: updateRelease.id,
name: proxyFile,
data: JSON.stringify(updateDataNew, null, 2),
});
console.log(
`Successfully uploaded ${isAlpha ? "alpha" : "stable"} update files to ${releaseTag}`,
);
} catch (error) {
console.error(
`Failed to process ${isAlpha ? "alpha" : "stable"} release:`,
error.message,
);
}
} catch (error) {
if (error.status === 404) {
console.log(`Release not found for tag: ${tag.name}, skipping...`);
} else {
console.error(
`Failed to get release for tag: ${tag.name}`,
error.message,
);
}
}
}
// get the signature file content
async function getSignature(url) {
const response = await fetch(url, {
method: "GET",
headers: { "Content-Type": "application/octet-stream" },
});
return response.text();
}
resolveUpdater().catch(console.error);

11
scripts/utils.mjs Normal file
View File

@@ -0,0 +1,11 @@
import clc from "cli-color";
export const log_success = (msg, ...optionalParams) =>
console.log(clc.green(msg), ...optionalParams);
export const log_error = (msg, ...optionalParams) =>
console.log(clc.red(msg), ...optionalParams);
export const log_info = (msg, ...optionalParams) =>
console.log(clc.bgBlue(msg), ...optionalParams);
var debugMsg = clc.xterm(245);
export const log_debug = (msg, ...optionalParams) =>
console.log(debugMsg(msg), ...optionalParams);

View File

@@ -1,6 +1,8 @@
# Generated by Cargo
# will have compiled files and executables
/target/
gen/
WixTools
resources/Country.mmdb
resources
sidecar

Some files were not shown because too many files have changed in this diff Show More