Commit Graph
600 Commits
Author SHA1 Message Date
Tunglies 7ca20fc4ed refactor: knip cleanup (#7468)
* chore(frontend): expand Knip reports

* chore: remove unused Mihomo changelog sync script

* refactor: remove unused value exports

* refactor: remove unused type exports

* refactor: remove circular route dependencies

* chore(frontend): move Knip scope to config

* chore(i18n): remove stale portable update message
2026-07-13 11:29:25 +08:00
Tunglies 656b6b6d44 chore(frontend): add Knip unused file report 2026-07-12 12:42:27 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> d7fca9fd70 chore(deps): update dependency @tauri-apps/cli to v2.11.4 (#7376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-06 02:35:28 +00: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
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> dad18ce90f chore(deps): update dependency @tauri-apps/cli to v2.11.3 (#7324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-28 11:52:34 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> b44f671fc2 chore(deps): update dependency js-yaml to v5 (#7331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-28 11:51:50 +00:00
Tunglies e71e701fd0 refactor: migrate query cache to swr 2026-06-28 19:39:15 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 468483660a chore(deps): update npm dependencies to v8 (#7310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-19 06:52:50 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 138901f26b chore(deps): update npm dependencies to v2.11.1 (#7309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-19 06:52:37 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 276afb2429 chore(deps): update npm dependencies (#7179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-16 04:39:52 +00:00
Tunglies 6a0cc21244 lint: add eslint checks for frontend compatibility 2026-06-09 14:12:13 +08:00
Tunglies 45afb1c15a fix(frontend): reduce long-running memory pressure in connections (#7227)
* fix(connections): stabilize table memory usage

Render the connections table and list from stable row view models, and replace the TanStack row/cell instantiation path with a lightweight virtualized table body.

The leak was isolated to the frontend table render path: websocket data without the table stayed flat, while the normal table path kept producing large per-snapshot object graphs under active/closed churn.

Introduced-by: bf06cbc87d (introduced the TanStack table path)

Related-hot-path: 068678135 (made default ordering/filtering hot enough for long-running /connections sessions to amplify retained heap/RSS)

Related-retention-path: 7fc238c27b (moved Home stats to the full connection websocket subscription, so Home could keep connection snapshots alive for totals/count)

Keep UI behavior intact: column visibility, column order, resizing, sorting, connection details, the closed-connection cap, and the 500ms refresh cadence remain.

* fix(connections): lazily release connection snapshots

Keep the full active/closed connection snapshot scoped to /connections by using a short React Query gcTime for the full subscription.

Home now subscribes to a lightweight connection summary for totals and active count, so leaving /connections no longer keeps the full active/closed arrays and closed history alive for the dashboard.

Only the selected Active or Closed mode feeds filtering, sorting, row-view derivation, and table/list rendering. Switching modes remounts the row subtree and closes detail/column-manager state without changing the capped closed-history behavior.

* fix(connections): decouple collection from rendering

Move the high-frequency connection websocket path out of React Query and into a module-level external store consumed with useSyncExternalStore.

The store keeps one normalized active snapshot plus the capped closed history, continues collecting across route changes, and only notifies mounted subscribers. Home reads the same store through a lightweight summary snapshot, so leaving /connections no longer renders the table/list while connection history is still preserved.

This replaces the short-gc release behavior that made Active/Closed history disappear after navigating away, and bounds retained data to current active connections plus the closed cap instead of React Query cache objects.

* fix(connections): keep collection store authoritative

Remove the temporary per-subscription gcTime override added for /connections. The connection monitor now owns active/closed retention outside React Query, so route changes should stop rendering without clearing collected history.

This leaves the shared Mihomo websocket hook on its original 30s cache behavior for logs, traffic, and memory while /connections uses the external store introduced in the previous commit.

* perf(connections): coalesce snapshots before parsing

Keep only the latest raw websocket message during the 500ms throttle window and parse it when the store flushes. High-churn connection bursts no longer allocate parsed object graphs for snapshots that will be overwritten before React can observe them.

Also compare incoming metadata through the same normalization used for retained records, so optional undefined fields do not prevent metadata reference reuse.

* perf(connections): trim render allocations

Reuse existing row view objects before formatting derived strings when the retained connection object reference is unchanged. Stable closed-history rows no longer allocate throwaway display strings on every snapshot.

Measure the table scroll viewport on mount and resize instead of assuming a 1200px body, so virtual rendering starts from the real visible row count. Keep table state across Active/Closed switches and share the relative-time cell between table and list rows.

* perf(connections): tighten shared time updates

Refresh the shared relative-time clock before the first subscriber render and switch the listener registry back to a Set, avoiding stale labels after returning to /connections and keeping subscriber churn O(1).

Also sort table time rows by the existing numeric startTime field, drop the redundant row-view startTime equality check, and remove one unnecessary table prop guard.

* perf(connections): skip table-wide row projection

Stop materializing ConnectionRowView objects for the whole filtered dataset in table layout. The page now keeps raw connection records for the table path and only formats visible cells inside the virtualized table body, while list layout keeps the cached row-view path.

This removes the steady 500ms allocation pass that was still walking every filtered connection before table rendering. Detail lookup now reads the current filtered raw record directly, and the table clamps scroll state when switching between datasets of different lengths.

* perf(connections): skip unnecessary filter clone when table not searching

In table mode, avoid creating a filtered copy when search is empty: only apply search/sort work for non-empty query while retaining the same default order behavior. Also replace  parsing in order comparators with numeric startTime to avoid per-tick Date object churn and use SearchBox state to detect an empty search.

In table layout without search input, use upstream connection snapshot directly for rendering instead of cloning/sorting every interval tick. This removes a persistent per-update array allocation path while keeping list-mode sort/search behavior unchanged.

* perf(connections): bound closed merge without full transient arrays

Cap closed-history promotion while iterating previous active set without building a temporary large closed array. This preserves the 500-item limit while avoiding 100k-scale transient allocations when many connections close between snapshots.

* fix(changelog): address memory leak caused by frontend

* perf(connections): cache visible table cell snapshots

Add a bounded row snapshot cache for the virtualized table so repeated paints and optional column sorting reuse stable formatted strings instead of rebuilding host/source/rule/chains/traffic text on every refresh. The cache is capped to avoid retaining large active sets.

Also skip full connection-data snapshot merging when only summary listeners are mounted, keeping Home on the summary-only path without changing Connections history while the page is subscribed.

* chore: update Changelog

* chore: update Changelog
2026-06-07 13:08:15 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> b5b41956e2 chore(deps): update dependency commander to v15 (#7156)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-02 13:22:26 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 28139706d2 chore(deps): update npm dependencies (#7121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-26 06:14:49 +00:00
Tunglies 32ed10c25d chore: remove node-fetch dependency from package.json and related scripts 2026-05-26 14:03:59 +08:00
Tunglies c7cdc62512 chore: bump dependencies
Bump tauri-plugin-mihomo to 0.5.0 and update frontend dependency locks.

Adapt the traffic websocket stream parser to the new raw text byte callback API.
2026-05-26 13:30:37 +08:00
Tunglies 435d611114 chore: update pnpm peers 2026-05-26 12:47:59 +08:00
Tunglies 29fc8c9f4c chore: bump pnpm to 11 (#7125) 2026-05-26 12:24:47 +08:00
Tunglies bedcb8a07c fix: update tauri-plugin-mihomo and related dependencies
close #7073
2026-05-21 18:34:47 +08:00
Tunglies d05ead9cdd chore: track tauri-plugin-mihomo main updates 2026-05-21 12:16:17 +08:00
AetherWing df92e5d95d fix(ci): resolve pnpm lint issues (#7063)
* fix(eslint): remove deprecated prefer-destructuring-assignment rule

* refactor(eslint): port destructuring rule to sukka
2026-05-20 20:10:46 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ba4ee35374 chore(deps): update npm dependencies (#6922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 21:26:03 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 88f1927aa5 chore(deps): update npm dependencies (#6930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 13:10:42 +00:00
Tunglies 46fb817fe4 chore:bump version to 2.5.2 2026-05-20 14:27:32 +08:00
wonfen 15de400f2f fix: align backup dialogs with in-app modal behavior 2026-05-20 10:24:11 +08:00
Tunglies 6f36613103 chore: bump version to 2.5.1 2026-05-19 14:01:41 +08:00
Tunglies 69c75e92f4 Release 2.5.0 2026-05-19 13:07:20 +08:00
Tunglies ae7915c66f chore: update tauri-plugin-mihomo to 0.1.9 2026-05-17 18:13:25 +08:00
Tunglies 178b33beef Release 2.5.0-rc 2026-05-06 16:25:23 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> aae792127f chore(deps): update dependency react-i18next to v17.0.6 (#6914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-30 13:05:31 +00:00
Tunglies 72394eb9b7 feat(ui): add QR code sharing for remote profiles
Add "Share QR Code" context menu item to remote profile cards.
2026-04-19 22:20:17 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 4997365ac4 chore(deps): update dependency react-i18next to v17.0.4 (#6838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-18 14:53:04 +00:00
renovate[bot]Tungliesrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
71dc5f0bdb chore(deps): update npm dependencies to v9 (major) (#6819)
* fix: replace DeleteOutline with DeleteOutlined icon in BackupHistoryViewer

* chore(deps): update npm dependencies to v9

* refactor: bump @mui to v9

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-15 14:12:06 +00:00
Tunglies 0dd861fa32 Revert "chore(deps): update npm dependencies to v9 (#6752)" (#6818)
This reverts commit 0a090b1963.
2026-04-15 20:08:54 +08:00
❤是纱雾酱哟~ b3b7a450c4 fix(ci): upgrade pnpm to 10.33.0 to fix ERR_PNPM_BROKEN_LOCKFILE on Linux 2026-04-15 19:56:21 +08:00
Tunglies 6b904a6b14 chore: bump pnpm to v10.33.0 2026-04-15 19:02:46 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 03829b7197 chore(deps): update dependency react-i18next to v17.0.3 (#6814)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-15 06:31:31 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 0a090b1963 chore(deps): update npm dependencies to v9 (#6752)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-14 09:35:14 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 7a5c314d89 chore(deps): update npm dependencies to v19.2.5 (#6762)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-12 10:15:00 +00:00
Tunglies e63e3aa63f chore: update changelog for Mihomo(Meta) kernel upgrade to v1.19.23 2026-04-08 21:30:36 +08:00
Tunglies c2aa9d79ff Revert "feat: add babel-plugin-react-compiler and configure Vite for optimized chunking"
This reverts commit 1005baabe6.
2026-04-07 11:10:45 +08:00
Tunglies bff78d96b4 chore: migrate formatter from prettier to biome 2026-04-07 01:32:14 +08:00
Tunglies 1005baabe6 feat: add babel-plugin-react-compiler and configure Vite for optimized chunking 2026-04-07 01:11:46 +08:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 2c766e1ada chore(deps): update dependency @tauri-apps/plugin-updater to v2.10.1 (#6726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-05 14:24:49 +00:00
Tunglies fa4557337b fix: adjust axios dependency to devDependency 2026-04-03 17:35:05 +08:00
Tunglies d6d15652ca refactor: migrate react-virtuoso to @tanstack/react-virtual 2026-04-03 17:13:13 +08:00
Tunglies a73fafaf9f refactor: migrate SWR to TanStack Query v5 (#6713)
Replace swr with @tanstack/react-query v5 across all hooks, providers,
and components. Introduce singleton QueryClient, WS subscription pattern
via useQuery+useEffect, and enforce component-layer cache access contract.
2026-04-03 08:15:51 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> d95265f08c chore(deps): update npm dependencies (#6658)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-02 13:30:25 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> dad6b89770 chore(deps): update dependency react-i18next to v16.6.6 (#6618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-26 14:27:27 +00:00
renovate[bot]andrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 0c711b4ac1 chore(deps): update dependency react-i18next to v16.6.5 (#6616)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-24 13:33:09 +00:00