Commit Graph
100 Commits
Author SHA1 Message Date
Tunglies c599f5547e fix(proxy): validate user-entered URLs via isValidUrl
Delay test inputs now reject non-http(s) URLs with a warning toast and
fall back to the default URL instead of erroring every node in the
core. Subscription import and profile card host parsing reuse the same
validator, fixing bare-domain URLs shown as local files and
credential-bearing URLs leaking into the card.
2026-09-18 13:18:30 +08:00
Tunglies 2baa629ac4 chore: remove unimportant notice in changelog 2026-09-17 23:32:10 +08:00
Tunglies c7ffb21294 Release v2.5.4-rc 2026-09-17 18:55:59 +08:00
Tunglies e385d37e5b ci(gate): align linked-issue-check with the slop review trust tier
linked-issue-check only exempted drafts and the no-issue-needed
label, so member and collaborator PRs failed the linkage gate while
the slop review itself skipped them via skip-roles (#7944).

Skip OWNER, MEMBER, COLLABORATOR, and bot authors as well, reading
the association from the event payload so the permission-free gate
design holds. External contributors still need an issue reference.
2026-09-16 11:07:45 +08:00
Tunglies 2f097790ed fix(updater): downgrade manual check failure notice to warning
Manual update-check failures surfaced as red error toasts that read as
an app fault. Add a warning severity to the notice service and use it
in both check entry points alongside a console.warn; automatic checks
and install failures keep their existing behavior.
2026-09-16 09:14:12 +08:00
Tunglies a8e8fe66dc fix(tray): patch tray-icon for macOS 27 click reentrancy
Close: #7256
2026-09-15 14:03:09 +08:00
Tunglies ce963d175a feat(tun): support mips stack from mihomo v1.19.31
Add `mips` to the TUN stack switch so the stack shipped in mihomo
v1.19.31 is selectable from the GUI. Older cores reject the value,
which the changelog entry discloses.
2026-09-15 00:50:20 +08:00
Tunglies 82d76113f2 refactor(frontend): drop dead code in traffic and ws pipelines
Removes zero-consumer surface verified by repo-wide grep: the
reference-count render machinery, the never-called clearData chain,
unread snapshot fields (rangeMinutes, reason), dead refresh callbacks
on the connection hooks, the write-only wsRef sync, and the worker's
unreachable DEFAULT_CONFIG placeholder (now definite assignment under
the init-first client contract). No behavior change; the compressed
sampler path, samplerStats diagnostics, and lastTimestamp perf
contract stay. Net -120 lines across six files.
2026-09-11 13:19:50 +08:00
Tunglies 38c54c5b3b perf(traffic): single-slice snapshots with worker-side aging
The traffic pipeline re-rendered twice per second (worker snapshot
plus a 1 s now-tick), cloned the 10-minute and 60-minute arrays
through every snapshot, and re-filtered them on the main thread.
Snapshots now carry only the range slice the graph renders, a 1 s
worker-side heartbeat re-broadcasts only when points age out of the
window, and snapshot ingestion pauses while the window is hidden.
Perf harness A/B: hidden-phase webview CPU 2.45% -> 0.77%, main
0.90% -> 0.37%, webview RSS about -3 MB; visible phases unchanged.
2026-09-11 13:19:50 +08:00
Tunglies bf6f43f15b fix(singleton): let a restart-spawned child take over the instance lock
The secondary wait only polled the notify endpoint, which a restarting instance has already shut down before spawning its successor, so a child that lost the spawn-vs-exit race could never acquire the freed lock and died after 20s behind a startup-failure dialog. Retry try_lock_instance on every poll so the child promotes as soon as the old process exits. Double-launch handoff and wedged-holder timeout behavior are unchanged.
2026-09-10 09:09:14 +08:00
Tunglies f77f60ecd5 docs(changelog): distill release notes and add platform grouping
The v2.5.4 notes had grown to 97 free-form entries exposed verbatim in
the in-app update dialog. Distill them to 58 one-theme-per-line entries
capped at ~60 CJK characters with no internal terminology, and move the
writing rules into template/Changelog.md so every cycle starts from them.

Release plumbing now agrees on the --- divider: extract_update_logs.sh
stops there like updatelog.mjs, so file-only content never reaches
release bodies, while updater.mjs appends a per-tag See More link to the
update notes it generates. scripts-workflow/group_platforms.sh locks
platform entries under emoji platform headings, wired into pre-commit,
release and autobuild CI, and the changelog bump script; AGENTS.md points
agents at the template rules.
2026-09-10 08:09:54 +08:00
Tunglies 8812923eda perf(enhance): cut fixed config-generation cost
Every settings toggle reparsed the profile and chain files, ran four
Boa interpreters, serialized the runtime config twice, and re-ran
mihomo -t over bytes the core had just accepted. Builtin and template
scripts now run without Boa, custom scripts bind the config through
JSON.parse and take ownership instead of per-script clones, the config
serializes once, and mihomo -t is skipped unless the bytes, core
build, or geo assets changed. Heavy parses and serializations moved
to spawn_blocking. Large-subscription toggles drop from hundreds of
milliseconds to ~140ms with no new retained state.
2026-09-10 06:32:51 +08:00
Tunglies f754ee53a0 ci(ai-slop): cap review cost with per-run budgets and a leaner prompt
Two months of usage data (56 evaluated runs, 1372 AI credits) show a
median of 22 credits and 6 tool turns per review, with 97% of billed
context being cache tokens anchored on the prompt itself.

Cap each run at 12 turns and 60 credits so only runaway sessions are
stopped, and stop triggering on reopened, which carries no new
implementation evidence; workflow_dispatch remains available for
manual re-reviews.

Compact the policy body from 367 to 177 lines by merging the signal
lists with the weighting/escalation sections that repeated them, with
no verdict, label, rerun-stability, or output-contract semantics
dropped. Add a tool-call budget for normal evaluations and a fast path
for fork-sync and placeholder PRs, which were 29% of measured
credits.
2026-09-08 15:14:42 +08:00
Tunglies 37fa9b65fa ci: add AI-collaboration contract and PR gates for slop review
Codify the rules agents and contributors are judged by: a tracked
AGENTS.md instruction contract, a Contribution Expectations section in
CONTRIBUTING, and a minimal PR template. Align the AI-slop review
policy with them - linkage substance, test/defensive-code padding,
write-access skips, disclosure as transparency - and add two
tamper-resistant checks: an ai-slop:high merge gate with a linked-issue
requirement (no-issue-needed exemption), plus a docs-consistency anchor
check guarding the cross-references.
2026-09-08 14:13:58 +08:00
Tunglies 4ddd021826 Revert "chore(deps): update pnpm to v12.3.4 (#7878)"
pnpm 12.3.4 deterministically breaks every Windows CI build: the install inside the tauri beforeBuildCommand fails importing into the pnpm store with os error 32 (ERROR_SHARING_VIOLATION). Reproduced on fresh runners with caches wiped; 12.3.3 was green on the same pipeline. Re-pin to 12.3.3 until upstream ships a fix.
2026-09-07 20:01:26 +08:00
Tunglies 6de0a59756 chore(deps): bump tauri-plugin-mihomo to 0.6.0 and move home card to count stream
Locks both sides to upstream main 17c7757: the WS channel now uses a
single Json transport (connections wire shrinks ~3.4x) and count-stream
error frames are forwarded unchanged; JS/Rust API surfaces stay
identical, so upper-layer code is untouched except the card below.

The home Active Connections card now subscribes to the count-only
ws_connections_count stream instead of parsing the full connections
snapshot every second; the full stream runs only while the Connections
page is mounted.
2026-09-07 07:13:27 +08:00
Tunglies b39c5f9b6d test(perf): add macOS Tauri WebView performance harness
Drive the production home traffic graph through embedded WebDriver in an
isolated optimized measurement build. Record attributed WebContent and main
process CPU/RSS distributions across foreground, hidden and restored phases.

Keep replay, raw reports, independent-run comparison, cleanup checks and
focused validation available through project commands. Normal release builds
exclude the automation service and measurement entry points.
2026-09-07 07:13:24 +08:00
Tunglies dd7b032cb1 refactor: retire application portable mode 2026-09-06 20:53:36 +08:00
Tunglies 9c9b7c3992 perf(proxy): read delays once per latency sort 2026-09-06 20:50:15 +08:00
Tunglies ee497cc65d refactor(ipc): remove unused commands 2026-09-06 04:38:46 +08:00
Tunglies 4ed474706a refactor(frontend): consolidate query state ownership
Consolidate ordinary query snapshots on SWR and make Profiles own its query key, cache mutation, and invalidation policy.

Impact:
- remove the generic synchronous query Map while keeping dedicated Mihomo WebSocket snapshots
- eliminate duplicate Profiles refreshes while preserving retries and the 800 ms event throttle
- preserve preload-backed Verge updates and system proxy rollback behavior
- scope uptime polling to the Home Clash info card instead of the app lifetime
- leave RunState, Connections, Traffic, backend, and IPC contracts unchanged
- reduce frontend code by 72 net lines without adding dependencies
2026-09-06 04:32:22 +08:00
Tunglies d8b94d12dd perf(core): batch close connections on mode change 2026-09-04 18:20:39 +08:00
Tunglies 836199cfe2 fix: unify font-family usage across GUI
- Remove hardcoded body font-family from index.scss, use MUI theme dt.font_family instead
- Extract monospace font stack to shared MONACO_FONT_FAMILY constant in utils/font-family.ts
- Add platform check for twemoji mozilla in ip-info-card.tsx
- Consolidate 5 Monaco Editor font-family declarations into single constant
2026-09-04 09:57:24 +08:00
Tunglies 7ffb0ef23b test: remove useless test 2026-09-03 19:18:50 +08:00
Tunglies ff4b4dd822 chore: cleanup build script 2026-09-03 11:28:00 +08:00
Tunglies 8611fdc34f chore(deps): update mihomo plugin 2026-08-30 18:34:11 +08:00
Tunglies 44f6f6e19b fix(profile): preserve files until explicit deletion 2026-08-30 14:34:28 +08:00
Tunglies 598b5e690c feat(updater): sanitize release notes and standardize semver 2026-08-29 11:52:08 +08:00
Tunglies 181dfb87a4 chore: migrate to pnpm 12 2026-08-28 11:16:51 +08:00
Tunglies 4c1df582ba fix(profile): propagate subscription update failures 2026-08-26 00:24:28 +08:00
Tunglies 695fadf21e fix(security): restrict external URL opening
Close: 7800
2026-08-25 16:11:47 +08:00
Tunglies 9085d907cd perf: reduce idle backend work 2026-08-24 18:42:49 +08:00
Tunglies eb6c81b00f feat(macos): adopt Icon Composer 2 app icon 2026-08-24 10:20:46 +08:00
Tunglies 6eaf65ff0f fix(profiles): stabilize drag reorder motion
Close: 7798
2026-08-23 17:10:38 +08:00
Tunglies b58ffc909b fix(ci): skip AI review when quota is unavailable 2026-08-22 14:54:57 +08:00
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
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
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
Tunglies fc5fdbfea6 perf(proxy): reuse group order names 2026-08-19 15:49:03 +08:00
Tunglies 95ae5e4e71 fix(proxy): focus filter input when opened 2026-08-17 14:34:11 +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
Tunglies 3e51aaa4da Revert "fix(ui): center sidebar item labels (#7289)"
This reverts commit 6960daf05e.
2026-08-16 11:08:34 +08:00
Tunglies 49f638414b refactor: clean up unused backend code 2026-08-15 00:07:48 +08:00
Tunglies c11791137f perf(tray): avoid cloning runtime config 2026-08-10 22:13:33 +08:00
Tunglies eb769b44ab fix(macos): precompile liquid glass icon (ref #7682) 2026-08-09 16:05:03 +08:00
Tunglies ed4e55a947 chore(knip): include Sass project files 2026-08-09 12:16:48 +08:00
Tunglies f32fd0eaa9 fix(profile): cover card with switching overlay 2026-08-09 11:32:59 +08:00
Tunglies 9b61b3bd4e fix(sysproxy): update to 0.5.5 2026-08-09 10:55:58 +08:00
Tunglies 6d9813756d style: fix side menu fontWeight
Ref: #6578
Close: #7536
2026-08-08 02:32:28 +08:00
Tunglies 1ebe2ab0f8 chore: update pr-ai-slop-review 2026-08-08 01:32:57 +08:00
Tunglies 19744805a9 chore: remove unused config 2026-08-08 01:22:06 +08:00
Tunglies a8275b20b7 refactor: extract media unlock checker crate 2026-08-04 11:37:54 +08:00
Tunglies c5b641e421 fix: make profile deletion rollback-safe 2026-08-03 20:00:01 +08:00
Tunglies 5590f6ab15 fix: scope windows-sys dependency to Windows 2026-07-29 05:42:40 +08:00
Tunglies 95bd5ceed9 fix: update js-yaml imports for ESM 2026-07-28 16:21:06 +08:00
Tunglies 2f7e5771ac fix(ci): update agentic workflow runtime 2026-07-28 03:12:49 +08:00
Tunglies 912f93fe85 fix: resolve default-feature clippy errors 2026-07-28 02:45:14 +08:00
Tunglies 5a2f1fc4c7 fix(macos): sync tray speed style across displays 2026-07-27 14:28:29 +08:00
Tunglies e9cd49eb46 ci(frontend): enforce knip checks on pull requests 2026-07-23 15:29:31 +08:00
Tunglies 0a19dd965d fix(frontend): resolve knip report findings 2026-07-23 15:28:47 +08:00
Tunglies 444215f8ed refactor(frontend): simplify home card settings state 2026-07-23 15:25:09 +08:00
Tunglies 17fe92352e refactor(frontend): centralize tun availability guard 2026-07-23 15:07:33 +08:00
Tunglies d7dbff9f08 chore(hooks): block pushes on knip errors 2026-07-20 02:52:04 +08:00
Tunglies c85928ecaf fix(i18n): keep language section loader private 2026-07-20 02:50:49 +08:00
Tunglies e63b8e6eb0 perf(frontend): eliminate navigation loading states 2026-07-20 02:43:38 +08:00
Tunglies 971dd37965 chore: bump version 2.5.3 2026-07-20 00:24:35 +08:00
Tunglies 12aa989af1 fix(knip): remove unused proxy order export 2026-07-19 21:29:30 +08:00
Tunglies d327a435ff fix(profile): validate profile file names 2026-07-16 16:49:11 +08:00
Tunglies 14bc636ee8 refactor(frontend): remove unused modules 2026-07-12 12:42:27 +08:00
Tunglies 656b6b6d44 chore(frontend): add Knip unused file report 2026-07-12 12:42:27 +08:00
Tunglies 0c86b70fe9 refactor(frontend): reuse sortable arrayMove 2026-07-11 18:58:31 +08:00
Tunglies 6d3761a9ee refactor(frontend): remove obsolete monitor diagnostics 2026-07-11 17:48:16 +08:00
Tunglies ab1e15dceb refactor(frontend): remove retired test page 2026-07-11 16:55:56 +08:00
Tunglies 34fee12496 fix(frontend): warm lazy routes concurrently after idle
Start all navigation route preloads after a single idle gate and show centered loading fallbacks during cold route loads.
2026-07-11 18:01:53 +08:00
Tunglies e8cefa8b07 perf(frontend): vectorize home navigation icon 2026-07-10 20:05:41 +08:00
Tunglies b53227dab5 perf(frontend): optimize initial dependency loading 2026-07-10 19:43:55 +08:00
Tunglies afbc14840c fix: warm lazy routes after startup visibility 2026-07-06 09:13:11 +08:00
Tunglies 1d7462a021 fix: stop idle mihomo websocket subscriptions 2026-07-06 08:33:23 +08:00
Tunglies 9a2f4ff8fb fix: warm lazy navigation routes after startup 2026-06-30 21:34:32 +08:00
Tunglies ad68e445dd rm unused workflow 2026-06-30 18:59:09 +08:00
Tunglies a862667d9b fix: defer setup resources until after first window 2026-06-30 12:53:21 +08:00
Tunglies 4aec41d3be fix: defer tray proxy menu refresh 2026-06-29 18:52:11 +08:00
Tunglies 5fd2175b06 fix: read enhance chain items concurrently 2026-06-29 18:28:18 +08:00
Tunglies fa712b59c9 fix: reuse preloaded verge config 2026-06-29 16:55:25 +08:00
Tunglies 520746428c fix: dedupe initial websocket subscriptions 2026-06-29 11:54:05 +08:00
Tunglies 3ce228ff7a fix: lazy load i18n sections 2026-06-29 11:11:57 +08:00
Tunglies 2442634b2a fix: lazy load non-home routes 2026-06-29 06:30:54 +08:00
Tunglies 4ec3a9bf4c fix: defer provider queries on startup 2026-06-29 06:03:51 +08:00
Tunglies 2a5d29cdb2 fix: defer runtime config init until after window 2026-06-29 05:19:38 +08:00
Tunglies 3a4cd2c361 Revert "fix: update js-yaml imports for v5"
This reverts commit 250198d547.

Revert "chore(deps): update dependency js-yaml to v5 (#7331)"

This reverts commit b44f671fc2.
2026-06-29 05:17:04 +08:00
Tunglies 250198d547 fix: update js-yaml imports for v5 2026-06-29 03:28:46 +08:00
Tunglies 55060d422a fix: include url-test groups in proxy selectors 2026-06-29 03:14:03 +08:00
Tunglies dad5121b7d fix(service): harden privileged service path execution 2026-06-28 21:21:01 +08:00
Tunglies b9da0875cd refactor: optimize swr data refresh paths 2026-06-28 19:42:21 +08:00
Tunglies e71e701fd0 refactor: migrate query cache to swr 2026-06-28 19:39:15 +08:00
Tunglies de438aadf8 fix(ci): skip bot PRs in AI slop review 2026-06-20 00:23:48 +08:00