Commit Graph
4675 Commits
Author SHA1 Message Date
Tunglies c009de42a1 fix(proxy): hide provider names in node cards 2026-08-22 13:42:45 +08:00
Tunglies 0d3f141f20 test: remove redundant backend coverage 2026-08-22 08:53:42 +08:00
Tungliesandwonfen 629c00dc4a fix(port): handle stale macOS wildcard guards
Co-authored-by: wonfen <eiwonfen@gmail.com>
2026-08-22 04:17:15 +08:00
Tunglies 2717aaadad fix: media unlock checking behavior (#7778)
* fix: Gemini test

* naming unlock

* test type

* refactor: deduplicate media unlock checks

* fix: run media unlock checks individually

* fix(media-unlock): satisfy clippy const lint

* fix: stream media unlock test results

* fix: streamline media unlock checks

* fix: force HTTP/1 for media unlock checks

* fix: limit concurrent media unlock checks

* feat: allow concurrent media unlock item checks
2026-08-21 21:27:27 +08:00
wonfen 19401b096d fix(core): clean up the displaced core after a failed upgrade restart
Windows publishes the core by moving the running binary aside, and only the
success path could delete it afterwards. A failed restart left it on disk,
and the uninstaller did not know about it either.
2026-08-21 19:32:15 +08:00
TungliesandTheodore b1e953e495 chore(macos): update liquid glass icon
Co-authored-by: Theodore <57642656+AlwaysExtraordinary@users.noreply.github.com>
2026-08-21 18:34:01 +08:00
wonfen 1b75ea34f9 fix(core): upgrade mihomo atomically instead of letting it self-update
mihomo's updater truncates its own running executable in place; macOS kills
that under Hardened Runtime and leaves a 0-byte core. Verge now downloads the
release, verifies a staged copy next to the target, and renames it into place,
which never touches the inode the running core executes from.

Closes #6834
2026-08-21 14:41:57 +08:00
oomeow e71cf0ec68 feat: watch linux theme changed (#7781)
* feat: add Linux theme change notifications and update dark-light dependency

* fix: remove unused tauri Emitter import

* update changelog

* fix: clippy

* fix: pnpm format
2026-08-20 16:09:16 +00:00
Tunglies 332097bc9f chore: bump clash-verge-service-ipc to v2.6.4 2026-08-20 22:30:13 +08:00
Tunglies 927d794285 chore: bump version to 2.5.4 2026-08-20 17:31:23 +08:00
wonfen 12c85162d6 fix(port): skip unsupported Windows transparent listeners 2026-08-20 08:57:09 +08:00
wonfen b80bca01da fix: unblock pre-push checks 2026-08-20 08:13:02 +08:00
349c635de0 fix(sysproxy): use platform-specific bypass separator (#7559)
* fix(sysproxy): use platform bypass separator

* refactor: squash conditional compilation logic

- Share a single `BYPASS_SEPERATOR` definition between both Linux and macOS

---------

Co-authored-by: Ayanami <ay@nami.ltd>
Co-authored-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
Co-authored-by: oomeow <oomeow@outlook.com>
2026-08-19 13:55:40 +00:00
wonfen 9b9feb9a39 fix: handle proxy cleanup failures during app exit 2026-08-19 20:04:21 +08:00
Tunglies fc5fdbfea6 perf(proxy): reuse group order names 2026-08-19 15:49:03 +08:00
wonfen e15ddab542 test: trim redundant test coverage 2026-08-19 10:24:37 +08:00
wonfen 807f9a206d chore: trim excessive comments 2026-08-19 07:27:43 +08:00
oomeow 42b91b6294 fix: add input ref and focus search fields on toggle (#7766)
* fix: add input ref and focus search fields on toggle

* refactor(proxy): remove unnecessary delay in input focus timeouts
2026-08-18 15:38:31 +00:00
wonfen 2436d5cf6a fix(prebuild): stop pnpm build from re-preparing resources 2026-08-18 23:03:54 +08:00
oomeow daadb126e0 feat: allow manually unfixing proxy nodes (#7756)
* feat(proxy): add ability to clear persisted node selection for groups

* feat(hooks): make proxy selection operations asynchronous

* chore: update tauri-plugin-mihomo deps

* refactor: rename clear_selected_node to forget_selected_node

* refactor(hooks): rename isFixed to isFixedProxy in useProxySelection

* docs: update changelog with manual node cancellation support

* chore(layout): remove dev-only mihomo websocket debugging interval
2026-08-18 12:16:42 +00:00
wonfen 9fa0e91e25 fix(tun): fall back to sidecar when service is absent 2026-08-18 11:05:53 +08:00
wonfen 4c1804baf4 fix: improve validation termination guidance 2026-08-18 09:11:04 +08:00
wonfen 747a68ef2f fix(port): stop the mixed port climbing on every restart
The startup fallback persisted its replacement, so a port blocked once was never
asked for again. It now overrides the Runtime Config for the session only.

Most of those conflicts were not real: SO_REUSEADDR cannot reuse a TIME_WAIT
socket owned by another user, and a service-managed core runs as root while the
app does not. A refused bind is now confirmed by asking whether anything answers.

Also restores the borrowed port when saving proxy ports fails.
2026-08-17 23:30:21 +08:00
wonfen 906ec5e63a fix: serialize concurrent configuration updates 2026-08-17 19:19:54 +08:00
Tunglies 95ae5e4e71 fix(proxy): focus filter input when opened 2026-08-17 14:34:11 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 87aefe5f21 chore(deps): update github/gh-aw-actions action to v0.87.0 (#7757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-17 06:10:05 +00:00
wonfen ec6241b30a feat(profile): raise auto-update intervals below 24h
Each auto-update reloads the core, which drops every connection running through a
`proxy-providers` entry. Existing profiles are corrected once at startup; the form
warns about shorter intervals but still saves them.
2026-08-17 12:14:24 +08:00
wonfen 73d986369c fix(timer): count the first update delay from the last update
The queue got a full interval from now while the UI counted from `updated`, so a
restart pushed every deadline back and the countdown could read "update failed".
Retiring a task disabled mid-update also keeps its state, so re-enabling it no
longer starts a second run alongside the first.
2026-08-17 12:14:20 +08:00
wonfen 4869e362e3 fix: report fatal singleton startup errors 2026-08-17 07:18:34 +08:00
Tunglies 3618ee1e05 fix(clippy): remove redundant formatting borrow 2026-08-17 00:42:59 +08:00
Tunglies 1feba6f073 perf(tray): skip proxy data when menu groups are disabled 2026-08-17 00:42:59 +08:00
wonfen ac37945ee4 chore: bump service version to 2.6.2 2026-08-16 21:31:54 +08:00
Tunglies 3e51aaa4da Revert "fix(ui): center sidebar item labels (#7289)"
This reverts commit 6960daf05e.
2026-08-16 11:08:34 +08:00
雨落 def7a9ce98 fix(enhance): use a lenient timeout for ipc service invoking. (#7558)
Signed-off-by: 秋雨落 <i@rain.cx>
2026-08-16 02:41:49 +00:00
ChenXiangandTunglies c51dd535c1 fix polkit (#7360)
Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
2026-08-16 02:26:24 +00:00
ChenXiangand❤是纱雾酱哟~ 8d2c629241 Update Node.js and Rust versions in devcontainer settings (#7379)
* fix(devcontainer): update dev containers configs

- Introduce package manager configs for Nodejs initialization
- Limit version of Rust initialization
- Adjust VSCode extension requirements
- Switch default formatter from Prettier to Biome
- Adjust volume mounts of the container

* fix(devcontainers): adjust container user

- Unify container user and remote user to "vscode"
- Avoid permission issues in GitHub CodeSpaces
  - CodeSpaces uses "root" for operations by default

---------

Co-authored-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
2026-08-15 10:54:14 +00:00
wonfen c8e248f3ed fix: remove unused notice service export 2026-08-15 06:56:31 +08:00
Tunglies 49f638414b refactor: clean up unused backend code 2026-08-15 00:07:48 +08:00
wonfen 22947632c0 refactor: Rewrite and improve sysproxy logic (#7744)
* fix(cmd): preserve anyhow context in coded errors

Use alternate error formatting so coded failures retain the full anyhow context chain without changing their wire format.

* fix(macos): skip redundant proxy disable writes

When both proxy modes are off, read macOS state first and skip networksetup if the OS is already clean. Update the guard target only after a successful write.

* feat(proxy): classify system proxy failures

Attach stable, actionable proxy failure codes to anyhow chains while preserving the original diagnostic causes.

* feat(cmd): return structured command failures

Replace encoded error strings with serializable code and detail fields, and update frontend notice consumers to handle the structured shape.

* fix(scripts): use the js-yaml namespace import

Import js-yaml through its ESM namespace so the i18n cleanup script can access load and dump.

* feat(proxy): localize classified proxy failures

Map privilege and direct-fallback codes to localized explanations, and let mapped causes outrank generic operation keys in notices.

* fix(ui): bound notice text and render failure details

Limit resolved notice text without truncating clipboard content, and normalize structured failures embedded in translation parameters.

* feat(proxy): persist unseen proxy failures

Store unresolved classified failures by code, notify the frontend when the table changes, and show each failure sequence once when a visible window can receive it.

* feat(proxy): report tray and hotkey toggle failures

Record classified failures from tray and hotkey proxy toggles so they appear when a visible window is available.

* fix(ui): restore the proxy switch after failed toggles

Refresh frontend proxy state after a failed toggle so the switch reflects the rolled-back configuration.

* feat(proxy): stop the guard after repeated failures

Report guard outcomes, stop after the failure threshold, and persist the classified failure for the frontend.

* fix(macos): preserve proxy during service handoff

Stop a sidecar being handed to the service without clearing proxy state that the new owner must inherit.

* feat(macos): classify misplaced sidecar state

Distinguish a refused sidecar proxy write from a machine that still needs the privileged service installed.

* feat(ui): recover misplaced sidecar notices

Offer a restart action for macOS proxy failures caused by a ready service while the core still runs as a sidecar.

* feat(ui): install the service from proxy notices

Let privilege notices install the macOS service, restart the core, and report the runtime mode that was actually reached.

* feat(cmd): attach requested proxy operations

Carry the requested proxy direction with structured command failures when the originating command knows it.

* feat(sysproxy): drain guards before OS access

Wait for the local proxy guard to stop before OS reads, service handoff, or final writes, and refuse transitions when it does not drain.

* feat(sysproxy): recover partial proxy writes

Use write progress to choose whether to restore the old guard or compensate with a disabled proxy state, while preserving actionable errors.

* feat(sysproxy): skip already-applied proxy writes

Compare macOS proxy snapshots with global, PAC, and disabled targets so matching state avoids redundant privileged writes.

* feat(proxy): report background proxy failures

Persist and surface classified proxy failures from lifecycle paths that have no direct caller awaiting the result.

* feat(ui): move proxy recovery into a dialog

Guide users through installing or switching to the service after a refused proxy write, and suppress duplicate toast reports.

* fix(ui): close proxy dialog after service recovery

Dismiss the recovery dialog once the core reaches service mode, even when the original proxy request remains pending.

* feat(ui): retry proxy request after service recovery

Replay the requested proxy direction after the core reaches service mode, while leaving incidental restores unchanged.

* fix(proxy): refresh state after successful apply

Publish the proxy refresh from the shared apply path after releasing the lifecycle lock, and remove the tray-specific duplicate.

* feat(ui): show proxy recovery progress

Display installation, restart, and proxy-apply stages while keeping the primary action spinner visible during recovery.

* feat(ui): route unavailable TUN through service recovery

Let the TUN switch request service recovery and restore its requested state after the core restarts in service mode.

* fix(ui): avoid duplicate TUN recovery errors

Roll back deferred TUN toggles without reporting an error, and publish configuration refreshes from the transaction commit path.

* chore: update changelog & pinlock

* fix(core): resolve platform-specific clippy warnings

* fix(core): detect Windows wildcard TCP conflicts

Windows permits a specific exclusive bind beside an existing non-exclusive wildcard listener. Consult the system TCP listener table so the probe reports that overlap as a conflict.
2026-08-14 23:52:37 +08:00
wonfen 0844ed30a8 fix(core): only fail the macOS listener guard on real bind conflicts
Guard addresses can vanish or fail to bind for reasons unrelated to the
port, and probe_claims turned that into a persisted mixed-port fallback.
2026-08-14 22:01:21 +08:00
eviaaaaaandwonfen eb29c18246 fix(core): avoid false mixed-port fallback after quickly relaunching Clash (#7732)
* fix: ignore stale TCP state in port probe

* fix: preserve macOS listener conflict detection

---------

Co-authored-by: wonfen <eiwonfen@gmail.com>
2026-08-14 19:49:31 +08:00
Ryovik 6960daf05e fix(ui): center sidebar item labels (#7289)
Remove the negative text offset so labels remain centered within the list item text area.
2026-08-13 17:04:31 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ede1d8e524 chore(deps): update github/gh-aw-actions action to v0.86.2 (#7741)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-13 17:02:12 +00:00
oomeow aadceba064 fix(sysproxy): dconf command is no longer mandatory (#7736) 2026-08-12 12:10:12 +00:00
AetherWingand❤是纱雾酱哟~ a5aea75f37 feat: allow moving rules between prepend and append (#7214)
* feat: allow moving rules between prepend and append

* chore: merge import

---------

Co-authored-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
2026-08-12 02:27:51 +00:00
Chen, Ting-An 5cad0f2799 fix(i18n): complete Traditional Chinese backend strings (#7726) 2026-08-11 17:23:22 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 00ca5c170c chore(deps): update rust crate futures to 0.3.34 (#7728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-11 16:15:01 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 5f8c471696 chore(deps): update dependency eslint-plugin-sukka to v10 (#7715)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-11 14:06:03 +00:00
❤是纱雾酱哟~ cc20fd2328 chore(renovate): enable supply-chain-attack protection (#7723)
- Configure Mend Renovate to match default pnpm "min age" setting
- Prevent pull request creation for npm dependencies younger than 1 day

Signed-off-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
2026-08-11 14:03:48 +00:00
oomeow 2ce59e17ab feat(sysproxy): show explicit hint for missing commands when setting proxy on Linux (#7729)
* feat(sysproxy): robust command detection with explicit errors

* docs(changelog): add Linux proxy missing command note
2026-08-11 13:46:52 +00:00