Commit Graph
100 Commits
Author SHA1 Message Date
wonfen c341b9b238 fix(updater): install the already downloaded update instead of fetching it again 2026-10-06 14:21:09 +08:00
wonfen 6ec35c8195 fix(macos): restore system DNS reliably after TUN
Detached tasks spawned on every config generation set and restored the
placeholder DNS without ordering, so a set could back up the placeholder
itself and a later restore reported success while leaving it in place.

Reconcile from the applied config under the lifecycle lock, and restore
whenever the core stops. Keep one backup per network service, never back
up the placeholder, and restore only while the service still holds it.
Scripts verify every read and write and are killed after 5 s.

Refs #8070, #8168
2026-10-06 12:47:08 +08:00
wonfen 30f05a7a39 refactor(port): build the port dialog rows from one listener table 2026-10-05 22:00:54 +08:00
wonfen 7cc6c1ed95 fix(port): edit the saved mixed port, not the session fallback
Closes #8149
2026-10-05 22:00:54 +08:00
wonfen a9a3cfa3a7 fix(proxy): resolve provider members within each group's providers
Same-name nodes from different proxy-providers were marked ambiguous and
greyed out. Resolve each group member against the group's own providers
(use / include-all, exclude-type) and bind the n-th occurrence of a name to
the n-th candidate, matching Mihomo.

Closes #8021
2026-10-03 22:49:39 +08:00
wonfen 57c5484080 fix(service): stop waiting on a service that no longer starts with Windows
When the service's start type was changed from automatic, startup waited
about two minutes for it before falling back to Sidecar. Detect this
immediately, skip the TUN readiness wait, and offer a reinstall that
restores automatic start.

Refs #8129
2026-10-03 20:40:51 +08:00
wonfen 4a0882fc18 fix(singleton): repair Windows lock file permissions in place 2026-10-03 15:59:39 +08:00
wonfen d87bb7b6a3 fix(singleton): acknowledge window restoration before UI work
Dispatch blocking window restoration outside HTTP workers to prevent notification timeouts and repeated window activation in #8118. Remove the misleading failure log, update the changelog, and remove server tests as requested.
2026-10-03 10:56:41 +08:00
wonfen a58cefdc31 fix(notice): keep code-based dismissal internal 2026-10-03 10:30:00 +08:00
wonfen f958dccb25 fix(service): explain sidecar failures and clear recovered notices 2026-10-03 10:21:54 +08:00
wonfen ea509b8236 chore(deps): pin clash-verge-service-ipc to v2.7.6 2026-10-02 22:57:11 +08:00
wonfen 52d616302c fix(service): explain a startup core rejection instead of the generic fallback
When the startup probe finds the service refusing the approved core, the
app falls back to Sidecar with only the generic "could not start the
core" notice. The reason and repair guide appeared only after a
reinstall, which cannot fix a writable volume root (#8045).

Carry the fallback reason to the window and show the same permission
notice as a rejected installation when the core was refused.

Refs #8045
2026-10-02 10:38:09 +08:00
wonfen 8ddd99f226 chore: bump version v2.5.7 2026-09-30 22:07:17 +08:00
wonfen c4f9d65e07 fix(service): don't ask to repair the service when the proxy clear fails 2026-09-29 10:09:21 +08:00
wonfen 0c7e0c8535 fix(dns): persist DNS override confirmation across restarts
A confirmed override on a profile with provider DNS was turned off at
every startup; it now stays on until that profile's provider DNS changes.

Refs #7993
2026-09-28 13:09:09 +08:00
wonfen b057bd964c fix clippy 2026-09-26 00:00:50 +08:00
wonfen 897a117dc5 chore(deps): bump tauri-plugin-mihomo for provider update timeouts
Pick up tauri-plugin-mihomo@ba8434c: provider updates now wait out
mihomo's 20s fetch instead of failing at 5s with "error sending request",
so slow subscriptions update and real failures show mihomo's own error.

Refs #8046
2026-09-25 16:09:57 +08:00
wonfen 6a752994cf fix(service): fail fast when the Windows service is stopped
A registered but stopped service made every version probe back off for
about two minutes, blocking startup before the window and core (#8059).
Check the SCM first; a service that is starting, or not yet started this
boot, still goes through the IPC retries.
2026-09-25 11:55:01 +08:00
wonfen 32e5d5bda3 chore(deps): pin clash-verge-service-ipc to v2.7.4
Replace the local path pin from fbc4b516 with the release tag, which
ships the installer group lookup fix (#8043) along with the residual
helper (#8031) and app data owner (#8026) service changes.
2026-09-25 09:09:14 +08:00
wonfen daae17a40c fix(service): surface a service core that stopped for good
When the service watchdog gave up or the core vanished, the owner
monitor marked the core stopped without telling the user, and on macOS
left the system proxy on the dead mixed port (#8029).

- On SameOwnerFailure, clear the proxy through the helper while the
  session is still ours; displaced or unreachable owners still leave the
  machine-wide setting alone.
- Retain the stop as a core failure with its own message, recorded
  under the lifecycle lock and shown now or on next focus; a running
  core resets the notice dedup.
- Log each watchdog restart the service reports, since launchd discards
  the service's own log.
2026-09-25 00:06:59 +08:00
wonfen 1f140dfd3a fix(service): show how to reclaim an app data root the service refuses
When the service refuses the app data root because another uid owns it
(code 1012), show a sticky notice with the chown command for this
account. Repairing the service cannot fix this.

Refs #8026
2026-09-24 22:10:42 +08:00
wonfen 04d74ac48f fix(service): offer repair when a residual helper blocks Sidecar
A macOS helper left running without IPC made Sidecar refuse to start
while the service counted as not installed, so no repair was offered
(#8031, #8043). Treat such a helper as install evidence and record the
Sidecar refusal as unavailable so the repair dialog appears.
2026-09-24 20:24:40 +08:00
wonfen 78bf79cc09 chore: update changelog 2026-09-24 18:52:24 +08:00
wonfen 61c33c6113 fix(core): retain startup diagnostics until recovery
Show unresolved startup failures when the window becomes visible and clear them when either core mode starts successfully. Cover recovery followed by exit and WebView recreation, use neutral service permission wording, and document the Windows startup fix.
2026-09-24 18:43:28 +08:00
wonfen ae4f416766 fix(service): explain core security failures and link repair guidance 2026-09-24 18:43:27 +08:00
wonfen fbc4b516b8 fix(service): fall back after installation verification rejects cores 2026-09-24 18:43:26 +08:00
wonfen 22e3f1ac8a feat(profiles): highlight current extension step 2026-09-22 20:44:59 +08:00
wonfen 758300ac34 fix(dns): prioritize configured fields over extensions
Restore non-empty DNS page fields and hosts after Merge/Script processing while preserving extension values for empty fields. Keep provider protection tied to the original profile and retain per-profile confirmations.
2026-09-22 20:11:35 +08:00
wonfen 659ee1a181 feat(profiles): explain extension override order 2026-09-22 17:59:37 +08:00
wonfen fd06fbb3b7 fix(service): adopt IPC 2.7.3 and correct dev fallback handling 2026-09-22 17:37:26 +08:00
wonfen ed0b801573 fix(service): unify installation and safe sidecar handoff
Delegate service and core installation to Service IPC so replacement uses
one elevation. Share fallback occupancy checks and retain the execution
guard until the Sidecar exits.

Track missing approved cores and start refusals as unavailable, and show
when no core is running. Build matching service tools from the local IPC
dependency and pass both core executables through the Dev installer.
2026-09-22 14:55:24 +08:00
wonfen ff1ce92fac feat(dns): remember override state per profile
Save the DNS override switch and session confirmation per profile so automatic protection only disables the affected profile. Preserve the legacy switch as the initial preference and show the profile scope beside the settings gear and in the DNS editor.

Refs #7993
2026-09-22 10:54:55 +08:00
wonfen 6a85d0344e fix(enhance): replace DNS fields in merge overrides
Replace DNS map fields and hosts instead of retaining old entries, while preserving unspecified DNS fields. Keep DNS override priority and explicit empty values intact.

Refs #7993
2026-09-22 10:17:19 +08:00
wonfen bffe91db5e fix(service): prompt reinstallation after path permission rejection
Address #7983 with a recovery dialog for Windows service error 1003, including startup refusals received before the UI subscribes. Reinstall the service and require service mode before reporting recovery.
2026-09-22 09:02:56 +08:00
wonfen 93b7bb8fe8 fix(linux): stage approved cores when installing service
Pass available cores and their SHA-256 digests explicitly during service installation and repair, instead of relying on automatic discovery that can skip untrusted source locations. Preserve the arguments across root, pkexec, and sudo execution paths.

Fixes #7995
2026-09-22 08:41:55 +08:00
wonfen 3b958acb22 fix(config): isolate conflicting provider cache paths
Fixes #7989
2026-09-21 23:20:48 +08:00
wonfen d374ab4350 refactor(enhance): unify discarded-key notice state 2026-09-21 22:46:58 +08:00
wonfen b7197f6f4b fix(windows): fall back to sidecar after confirmed service failure 2026-09-21 21:48:13 +08:00
wonfen 7bf8e1dcf5 feat(enhance): warn when extensions write app-owned keys 2026-09-21 21:22:45 +08:00
wonfen 07825afb1e Reapply "feat(dns): protect provider DNS from unconfirmed overrides (#7902)"
This reverts commit df79ed3efb.
2026-09-21 21:22:45 +08:00
wonfen 81ce247ecc fix(service): repair initial owner identity and extend readiness wait 2026-09-21 17:32:48 +08:00
wonfen c6a4de1c6a fix(service): require exact version match and uninstall before reinstall 2026-09-21 07:52:51 +08:00
wonfen 433cd0628f fix(dns): replace configured override fields and prepare v2.5.5 2026-09-21 07:33:06 +08:00
wonfen 73ea0fbd80 fix(dns): keep profile values the override leaves blank or off
Refs #7292 #7933
2026-09-20 15:08:33 +08:00
wonfen 04a2a09368 fix(linux): restore SELinux service startup with v2.7.2
Upgrade clash_verge_service_ipc and bundled service downloads to v2.7.2,
which labels runtime-installed executables before publication and repairs
existing core labels instead of timing out waiting for service IPC.

Register persistent bin_t rules for production and development service
binaries and cores in the RPM post-install script. Support older semanage
versions, apply rules to existing directories, and warn when optional
SELinux tools are unavailable.

Refs: #7965
2026-09-19 23:58:29 +08:00
wonfen f6fdb34745 perf(home): render proxy dropdown options on demand 2026-09-18 00:41:54 +08:00
wonfen 65ed8d3cf2 fix(home): stabilize proxy group and node dropdowns 2026-09-18 00:26:40 +08:00
wonfen a36dcd319f CI: update autobuild time 2026-09-17 11:03:03 +08:00
wonfen 9a879dd8d8 fix(service): fall back to elevated sidecar on path permission rejection
Preserve TUN settings and restore proxy operation after fallback.
Deliver fallback notices after UI subscription and stop retrying
deterministic bundle refusals. Publish fallback state atomically
and avoid conflicting service startup notifications.
2026-09-17 00:00:39 +08:00
wonfen f58e0a0af5 fix(service): stage approved cores during Windows service installation 2026-09-15 16:09:54 +08:00
wonfen d289a608d9 refactor(sysproxy): delegate macOS network monitoring to sysproxy-rs 2026-09-14 22:10:33 +08:00
wonfen 1d9bca13c8 chore(deps): bump clash-verge-service-ipc to v2.7.0
The service installer now admits the staged core copies through Windows
Firewall, so TUN system/mixed stacks pass traffic in service mode again
without users re-allowing the new path by hand.

Refs #7915
2026-09-14 18:33:53 +08:00
wonfen f4651061d2 chore: bump version 2026-09-11 23:07:13 +08:00
wonfen bea03e1a09 fix: preserve custom TUN fields and sync service provider caches
Limit GUI authority to saved TUN fields while preserving custom overrides.

Sync provider caches after service startup, reloads and updates.
Publish copies atomically with session, runtime and cache metadata checks.
2026-09-11 20:44:58 +08:00
wonfen ed0e1b38f0 feat(proxy): support dragging to swap proxy group header sections 2026-09-10 21:39:46 +08:00
wonfen 92624108c9 docs: add privacy 2026-09-10 00:01:22 +08:00
wonfen f60839097c chore: update changelog 2026-09-09 23:20:44 +08:00
wonfen f8b69b5d62 fix(sysproxy): tell the window when a background apply lands 2026-09-07 22:19:51 +08:00
wonfen c0c1fbcfc2 refactor(sysproxy): watch the network from the main run loop 2026-09-03 22:42:50 +08:00
wonfen e57d115110 feat(sysproxy): re-apply the proxy when macOS gains a network service 2026-09-03 22:42:49 +08:00
wonfen c89f431cb0 fix(sysproxy): wait for the network before the login-time proxy write 2026-09-03 22:42:49 +08:00
wonfen ef042ddf82 fix(sysproxy): stop turning a missing network service into a hard failure 2026-09-02 11:46:37 +08:00
wonfen e60285b4ae fix(tun): make the TUN switch reflect what the Core actually runs
The switch read enable_tun_mode while the Core was given
enable_tun_mode && !session_suppression, so falling back to Sidecar left it
showing a TUN that was not running, with nothing to write the flag back.
Drop the session flag: the stored preference is the only truth, re-checked
at startup and written off when the conditions for it are not met, and the
switch renders it against current capability.
2026-08-31 17:09:36 +08:00
wonfen 632c5b2bc5 fix(windows): repair a data root owned by another account 2026-08-30 11:45:04 +08:00
wonfen 272c09568c fix(sysproxy): retry a transient system proxy write on Windows 2026-08-24 22:30:42 +08:00
wonfen 8df8edb6dd fix(sysproxy): keep the system proxy usable when the core is not ready 2026-08-24 19:32:52 +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
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
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
wonfen 9b9feb9a39 fix: handle proxy cleanup failures during app exit 2026-08-19 20:04:21 +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
wonfen 2436d5cf6a fix(prebuild): stop pnpm build from re-preparing resources 2026-08-18 23:03:54 +08: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
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
wonfen ac37945ee4 chore: bump service version to 2.6.2 2026-08-16 21:31:54 +08:00
wonfen c8e248f3ed fix: remove unused notice service export 2026-08-15 06:56:31 +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
wonfen ec53608a70 sytle: change filter icon 2026-08-10 12:30:17 +08:00
wonfen b98c9be7db fix: keep current proxy menus interactive 2026-07-29 15:36:07 +08:00
wonfen 7e0cf4f9f6 fix: remove invalid platform reference from macOS dev anchor 2026-07-29 14:15:01 +08:00
wonfen 98d70978e4 fix(service): keep health probes and sidecar fallback consistent 2026-07-29 12:39:24 +08:00
wonfen 593ac07f03 fix(service): restore sidecar fallback after failed actions 2026-07-29 11:22:10 +08:00
wonfen 389c5342e5 fix(service): harden transient IPC handling 2026-07-26 06:31:32 +08:00
wonfen 2fc831de27 chore: remove promotion 2026-07-26 01:29:44 +08:00
wonfen ece3c71f38 feat(proxies): add empty-state troubleshooting guidance 2026-07-26 01:28:49 +08:00
wonfen e599a9d02c fix(service): avoid sticky availability probes 2026-07-25 15:22:46 +08:00
wonfen 91d0643b5c chore: update service-ipc version 2026-07-25 03:34:48 +08:00
wonfen bce83d5c6f chore: update i18n 2026-07-24 11:53:50 +08:00
wonfen 82c486923b fix(CI): tg notify error 2026-07-24 09:33:35 +08:00
wonfen 6219452168 chore: update changelog 2026-07-21 12:13:46 +08:00
wonfen fd70d4c62b fix(enhance): make GUI TUN config authoritative 2026-07-20 12:33:47 +08:00
wonfen 50d828d0d7 fix(profile): handle missing chain files without breaking rollback 2026-07-19 08:44:24 +08:00
wonfen 4b04d035b6 fix(profile): schedule imported profiles for auto-update 2026-07-19 06:39:48 +08:00