Commit Graph
4556 Commits
Author SHA1 Message Date
Evan 85b5501faf fix(profile): prevent crash when editing proxies with empty name (#7582)
When a proxy node without a name (name: null) exists in the prepend/append
sequence, ProxiesEditorViewer passed a null id into @dnd-kit's SortableContext,
which runs `'id' in item` on it and throws
"Cannot use 'in' operator to search for 'id' in null", crashing the page.

Filter out proxies without a valid (non-empty string) name from the rendered
and sortable lists so the visualization editor no longer crashes. The raw YAML
data is preserved and can still be fixed in the advanced (text) mode.

Fixes #7580
2026-07-26 01:35:37 +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
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> f86a591597 chore(deps): update github/gh-aw-actions action to v0.83.3 (#7591)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-25 12:56:28 +00:00
wonfen e599a9d02c fix(service): avoid sticky availability probes 2026-07-25 15:22:46 +08:00
wonfen 7796259b03 feat: automatic mixed port fallback (#7579)
* feat: automatically select an available mixed proxy port

* fix: coordinate listener port changes

* fix: detect Windows listener port conflicts
2026-07-25 05:47:28 +08:00
wonfen 91d0643b5c chore: update service-ipc version 2026-07-25 03:34:48 +08:00
Sam Snowman(赵正中) 52bbf07f1f Update Chinese language label to Simplified Chinese (#7575) 2026-07-24 14:14:22 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 4e9524898d chore(deps): update github/gh-aw-actions action to v0.83.2 (#7586)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 12:24:34 +00: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 23dda47641 feat: add launch guard and secure multi-user service ownership (#7569)
* feat(service): isolate macOS launch and owner runtime

* ci(windows): run owner security tests

* chore(deps): use kode-bridge v0.4.1 tag

* fix(macos): classify installed service state

* fix(macos): classify marked unavailable service

* fix(macos): gate core startup on service migration

* fix(macos): scope service init to supported platforms

* feat(macos): prompt before migrating installed service

* fix(macos): shorten sidecar IPC path

* build(service): pin helper protocol and artifacts

* fix(core): require confirmed service and sidecar readiness

* fix(macos): harden launch roots and singleton state

* fix(ui): refresh migration state before restart

* fix(macos): linearize service migration lifecycle

* fix(ui): keep service migration state fresh

* feat(service): track authenticated owner sessions

* fix(service): preserve newer owner sessions

* feat(macos): route service proxy changes through helper

* fix(macos): serialize service proxy guard

* fix(macos): close service proxy owner lifecycle

* fix(macos): close remaining proxy stop races

* fix(app): do not cancel controlled service stop

* fix(lifecycle): keep controlled updates cancellation-safe

* fix(macos): stage dev core for service

* test(macos): exercise staged core cleanup

* fix(dev): await controlled macOS exit

* chore: update changelog

* fix(macos): recover sidecar after service install failure

Allow the existing sidecar to continue when service installation leaves the manager in InstallRequired, then settle the session state as SidecarAllowed. Show neutral status text while the migration dialog waits for its final state.

* fix(macos): stage dev service tools before elevation

* fix(macos): localize launch guard prompts

* fix(service): address cross-platform integration issues

* feat: support seamless service migration

* fix: pass Windows service installer path safely

* fix(prebuild): derive service release from Cargo dependency

* fix(dev): preserve service installation state

* fix: resolve clippy warnings in service lifecycle
2026-07-24 09:01:49 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> c079da6c99 chore(deps): update github/gh-aw-actions action to v0.83.1 (#7574)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-23 14:01:53 +00: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
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 2c8b1a0607 chore(deps): update actions/setup-node action to v7 (#7481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-23 01:59:56 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> b08bcfedb8 chore(deps): update github actions (#7437)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-23 01:31:56 +00:00
oomeow ccf21f4a31 fix(config): apply runtime configuration on initialization (#7562) 2026-07-22 14:19:05 +00:00
oomeow b57668243b fix(proxy): use latest runtime instead of committed runtime for proxy view (#7560) 2026-07-22 12:53:38 +00:00
wonfen 6219452168 chore: update changelog 2026-07-21 12:13:46 +08:00
wonfen 304f5bade9 perf(proxy): consolidate proxy data into a single IPC (#7542)
* feat(proxy): build deterministic proxy view

* feat(proxy): expose ordered proxy view command

* feat(proxy): add proxy view client contract

* fix(lint): allow Node test files

* feat(proxy): switch UI to ordered proxy view

* fix(proxy): harden ordered proxy view consumers

* fix(proxy): compare chain duplicates by current id

* fix(proxy): release mihomo guard after fetch

* fix(proxy): preserve semantic selections across refresh

* fix(proxy): block global chain without GLOBAL

* fix(proxy): handle proxy view edge states
2026-07-21 00:11:59 +08:00
wonfen fd70d4c62b fix(enhance): make GUI TUN config authoritative 2026-07-20 12:33:47 +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
❤是纱雾酱哟~andTunglies 28f2efc504 refactor(scripts): optimizes file permission changes (#7520)
- Replaces shell-based execution of `chmod` with native Node.js filesystem API calls to improve performance
- Switches to `execFileSync` in stream event handlers to avoid shell spawning overhead

Signed-off-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
Co-authored-by: Tunglies <tunglies.dev@outlook.com>
v2.5.2
2026-07-19 15:23:31 +00:00
Tunglies 12aa989af1 fix(knip): remove unused proxy order export 2026-07-19 21:29:30 +08:00
❤是纱雾酱哟~ 53a0971826 chore(ci): Explicitly limit token permissions (#7519)
- Explicitly set permission boundaries for `GITHUB_TOKEN`
- Prevent overly permissive default tokens

Signed-off-by: ❤是纱雾酱哟~ <49941141+Dragon1573@users.noreply.github.com>
2026-07-19 10:15:27 +00:00
wonfen 50d828d0d7 fix(profile): handle missing chain files without breaking rollback 2026-07-19 08:44:24 +08:00
cjcandwonfen 6e9288437f Related to #6759 (windows): ensure sidecar process dies with the main app (#6853)
* fix(windows): ensure sidecar process dies with the main app

* chore: fix clippy lints

* chore: fix TS2307 error on commit.

chore: Undo the changes about package.json and pnpm-lock.yaml

* Fix formatting errors caused by merging.

刚刚的合并让原本的函数少了个结尾括号

* fix(windows): close process handle after assigning sidecar to job object

* fix(windows): sidecar Job Object 错误改为向上传播并补充测试

将 job 创建逻辑抽为返回 Result<OwnedHandle> 的独立函数,任一 Win32 调用失败时
终止已 spawn 的子进程并返回 Err,不再静默降级。句柄由裸 isize 改为 OwnedHandle,
借助 RAII 自动关闭。新增 Windows 单元测试,覆盖 KILL_ON_JOB_CLOSE 生命周期
及无效 PID 的失败路径。

---------

Co-authored-by: wonfen <96291150+wonfen@users.noreply.github.com>
2026-07-19 07:30:38 +08:00
cxymdsandwonfen 6bbe8bd37d fix: isolate macOS service logs from app logs (#7236)
* fix: isolate macOS service logs from app logs

* fix: migrate legacy macos logs

---------

Co-authored-by: wonfen <96291150+wonfen@users.noreply.github.com>
2026-07-19 06:49:37 +08:00
wonfen 4b04d035b6 fix(profile): schedule imported profiles for auto-update 2026-07-19 06:39:48 +08:00
oomeow becd86c179 feat(home): hide hidden proxy groups in current proxy card (#7504)
* feat(home): hide hidden proxy groups in current proxy card

* docs: update changelog with fixes and feature clarifications
2026-07-18 15:16:37 +00:00
wonfen b31437f727 fix(ci): pin release target commit 2026-07-18 15:33:43 +08:00
wonfen b7978705af fix: support VLESS xhttp and normalize IPv6 addresses 2026-07-17 23:51:29 +08:00
timelicandwonfen 950e8195fb style: refine navigation item styling (#6578)
Co-authored-by: wonfen <eiwonfen@gmail.com>
2026-07-17 04:20:02 +00:00
wonfen bdeaf2a062 perf: improve drag performance for large profile lists 2026-07-17 03:08:22 +08:00
oomeow f6440175d8 fix(signal): use default runtime (#7495) 2026-07-16 12:19:35 +00:00
oomeow 96e9564295 style(home): fix layout shift in current-proxy-card by adding fixed heights (#7494) 2026-07-16 12:19:23 +00:00
Tunglies d327a435ff fix(profile): validate profile file names 2026-07-16 16:49:11 +08:00
wonfen f09aef170d fix(proxy): preserve runtime proxy group order 2026-07-16 06:53:21 +08:00
wonfen d144e78aeb perf: streamline profile switching 2026-07-16 05:52:10 +08:00
wonfen 6ea7f544b2 fix: dispatch frontend events on main thread 2026-07-16 04:27:47 +08:00
wonfen cd20bdb6a1 fix: safely restore selected proxy nodes 2026-07-16 04:16:42 +08:00
wonfen 6c149d6234 chore: update service-ipc version 2026-07-16 02:42:54 +08:00
wonfen 993cc2ffb1 fix(core): skip service wait for elevated TUN startup 2026-07-15 04:30:55 +08:00
ysakura99andwonfen f1e0622813 fix(connections): show destination IP as host for raw-IP targets (#7483)
* fix(connections): show destination IP as host for raw-IP targets

When metadata.host is empty (a raw-IP CONNECT with no domain), the
connection "Host" column fell back to remoteDestination (the outbounds
relay/exit address) joined with the destination port, which misleadingly
showed the relay as the connections destination.

Fall back to metadata.destinationIP instead, in both the list column
(getConnectionHost) and the detail panel.

Closes #6669

* fix(connections): preserve fallback for empty destination IP

---------

Co-authored-by: wonfen <eiwonfen@gmail.com>
2026-07-14 14:42:07 +08:00