diff --git a/.github/update.log b/.github/update.log index ec8372abd2..beba7d3acc 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1223,3 +1223,4 @@ Update On Mon Dec 22 19:42:47 CET 2025 Update On Tue Dec 23 19:42:08 CET 2025 Update On Wed Dec 24 19:40:00 CET 2025 Update On Thu Dec 25 19:39:50 CET 2025 +Update On Fri Dec 26 19:39:41 CET 2025 diff --git a/clash-nyanpasu/.github/workflows/deps-build-macos.yaml b/clash-nyanpasu/.github/workflows/deps-build-macos.yaml index 0a9ab05d74..dad813c395 100644 --- a/clash-nyanpasu/.github/workflows/deps-build-macos.yaml +++ b/clash-nyanpasu/.github/workflows/deps-build-macos.yaml @@ -49,7 +49,7 @@ jobs: - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: 16 + xcode-version: latest-stable - name: install Rust nightly run: | diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index bb7776395f..bc23a916f0 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -15,7 +15,7 @@ "@dnd-kit/utilities": "3.2.2", "@emotion/styled": "11.14.1", "@hookform/resolvers": "5.2.2", - "@inlang/paraglide-js": "2.7.0", + "@inlang/paraglide-js": "2.7.1", "@juggle/resize-observer": "3.4.0", "@material/material-color-utilities": "0.3.0", "@mui/icons-material": "7.3.6", @@ -98,7 +98,7 @@ "meta-json-schema": "1.19.17", "monaco-yaml": "5.4.0", "nanoid": "5.1.6", - "sass-embedded": "1.93.3", + "sass-embedded": "1.97.1", "shiki": "2.5.0", "unplugin-auto-import": "20.3.0", "unplugin-icons": "22.5.0", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index ebadccea1e..a35c7e3964 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -38,8 +38,8 @@ "@types/d3-interpolate-path": "2.0.3", "clsx": "2.1.1", "d3-interpolate-path": "2.3.0", - "sass-embedded": "1.93.3", - "tailwind-merge": "3.3.1", + "sass-embedded": "1.97.1", + "tailwind-merge": "3.4.0", "typescript-plugin-css-modules": "5.2.0", "vite-plugin-dts": "4.5.4" } diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 298a64f42e..75aeb8a2cb 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -5,7 +5,7 @@ "mihomo_alpha": "alpha-498f81a", "clash_rs": "v0.9.3", "clash_premium": "2023-09-05-gdcc8d87", - "clash_rs_alpha": "0.9.3-alpha+sha.a6538ac" + "clash_rs_alpha": "0.9.3-alpha+sha.61736d2" }, "arch_template": { "mihomo": { @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-12-24T22:21:41.869Z" + "updated_at": "2025-12-25T22:21:24.282Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 2ed53b5a02..c43e536e14 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -225,8 +225,8 @@ importers: specifier: 5.2.2 version: 5.2.2(react-hook-form@7.69.0(react@19.2.3)) '@inlang/paraglide-js': - specifier: 2.7.0 - version: 2.7.0(babel-plugin-macros@3.1.0) + specifier: 2.7.1 + version: 2.7.1(babel-plugin-macros@3.1.0) '@juggle/resize-observer': specifier: 3.4.0 version: 3.4.0 @@ -401,10 +401,10 @@ importers: version: 1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-router-devtools': specifier: 1.134.15 - version: 1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1) + version: 1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass-embedded@1.97.1)(sass@1.97.1)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1) '@tanstack/router-plugin': specifier: 1.134.15 - version: 1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.3.0 version: 2.3.0 @@ -440,13 +440,13 @@ importers: version: 13.15.10 '@vitejs/plugin-legacy': specifier: 7.2.1 - version: 7.2.1(terser@5.36.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 7.2.1(terser@5.36.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitejs/plugin-react': specifier: 5.1.2 - version: 5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitejs/plugin-react-swc': specifier: 4.2.2 - version: 4.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) change-case: specifier: 5.4.4 version: 5.4.4 @@ -469,8 +469,8 @@ importers: specifier: 5.1.6 version: 5.1.6 sass-embedded: - specifier: 1.93.3 - version: 1.93.3 + specifier: 1.97.1 + version: 1.97.1 shiki: specifier: 2.5.0 version: 2.5.0 @@ -485,19 +485,19 @@ importers: version: 13.15.26 vite: specifier: 7.3.0 - version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) vite-plugin-html: specifier: 3.2.2 - version: 3.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 3.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) vite-plugin-sass-dts: specifier: 1.3.35 - version: 1.3.35(postcss@8.5.6)(prettier@3.7.4)(sass-embedded@1.93.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 1.3.35(postcss@8.5.6)(prettier@3.7.4)(sass-embedded@1.97.1)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) vite-plugin-svgr: specifier: 4.5.0 - version: 4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) zod: specifier: 4.1.13 version: 4.1.13 @@ -533,7 +533,7 @@ importers: version: 19.2.7 '@vitejs/plugin-react': specifier: 5.1.2 - version: 5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) ahooks: specifier: 3.9.6 version: 3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -563,10 +563,10 @@ importers: version: 4.1.18 vite: specifier: 7.3.0 - version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) devDependencies: '@emotion/react': specifier: 11.14.0 @@ -581,17 +581,17 @@ importers: specifier: 2.3.0 version: 2.3.0 sass-embedded: - specifier: 1.93.3 - version: 1.93.3 + specifier: 1.97.1 + version: 1.97.1 tailwind-merge: - specifier: 3.3.1 - version: 3.3.1 + specifier: 3.4.0 + version: 3.4.0 typescript-plugin-css-modules: specifier: 5.2.0 version: 5.2.0(typescript@5.9.3) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.10.4)(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)) scripts: dependencies: @@ -1927,15 +1927,15 @@ packages: '@iconify/utils@3.0.2': resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} - '@inlang/paraglide-js@2.7.0': - resolution: {integrity: sha512-R03uEk8C3p3rP1uRXvaVcbA7DClGWdQDmBhWF5B3tLgAwZGPRpCuo8iSie55cErVvZpydC+DLAuZIbrNcojd3w==} + '@inlang/paraglide-js@2.7.1': + resolution: {integrity: sha512-wCpnS9iRTRYMilvWBjB0ndf8+moon+AXz23Uh4wbpQjWhRJyvCytkGFzm7jeqAGggK4v3oeuyjva91TDMS+qhw==} hasBin: true '@inlang/recommend-sherlock@0.2.1': resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==} - '@inlang/sdk@2.4.9': - resolution: {integrity: sha512-cvz/C1rF5WBxzHbEoiBoI6Sz6q6M+TdxfWkEGBYTD77opY8i8WN01prUWXEM87GPF4SZcyIySez9U0Ccm12oFQ==} + '@inlang/sdk@2.4.10': + resolution: {integrity: sha512-MLcYSb9ERwvyfxMsMXGjmAYfh6Bn/rkT58ffkibWxbFLiL3ejSdmLGP8Wl7118dMo6nj2PXTcEPzUw+2YPQ62Q==} engines: {node: '>=18.0.0'} '@isaacs/fs-minipass@4.0.1': @@ -7817,112 +7817,112 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.93.3: - resolution: {integrity: sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==} + sass-embedded-all-unknown@1.97.1: + resolution: {integrity: sha512-0au5gUNibfob7W/g+ycBx74O22CL8vwHiZdEDY6J0uzMkHPiSJk//h0iRf5AUnMArFHJjFd3urIiQIaoRKYa1Q==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.93.3: - resolution: {integrity: sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg==} + sass-embedded-android-arm64@1.97.1: + resolution: {integrity: sha512-h62DmOiS2Jn87s8+8GhJcMerJnTKa1IsIa9iIKjLiqbAvBDKCGUs027RugZkM+Zx7I+vhPq86PUXBYZ9EkRxdw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.93.3: - resolution: {integrity: sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw==} + sass-embedded-android-arm@1.97.1: + resolution: {integrity: sha512-B5dlv4utJ+yC8ZpBeWTHwSZPVKRlqA8pcaD0FAzeNm/DelIFgQUQtt0UwgYoAI6wDIiie5uSVpMK9l2DaCbiBQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.93.3: - resolution: {integrity: sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg==} + sass-embedded-android-riscv64@1.97.1: + resolution: {integrity: sha512-tGup88vgaXPnUHEgDMujrt5rfYadvkiVjRb/45FJTx2hQFoGVbmUXz5XqUFjIIbEjQ3kAJqp86A2jy11s43UiQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.93.3: - resolution: {integrity: sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ==} + sass-embedded-android-x64@1.97.1: + resolution: {integrity: sha512-CAzKjjzu90LZduye2O9+UGX1oScMyF5/RVOa5CxACKALeIS+3XL3LVdV47kwKPoBv5B1aFUvGLscY0CR7jBAbg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.93.3: - resolution: {integrity: sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg==} + sass-embedded-darwin-arm64@1.97.1: + resolution: {integrity: sha512-tyDzspzh5PbqdAFGtVKUXuf0up6Lff3c1U8J7+4Y7jW6AWRBnq95vTzIIxfnNifGCTI2fW5e7GAZpYygKpNwcw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.93.3: - resolution: {integrity: sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg==} + sass-embedded-darwin-x64@1.97.1: + resolution: {integrity: sha512-FMrRuSPI2ICt2M2SYaLbiG4yxn86D6ae+XtrRdrrBMhWprAcB7Iyu67bgRzZkipMZNIKKeTR7EUvJHgZzi5ixQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.93.3: - resolution: {integrity: sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw==} + sass-embedded-linux-arm64@1.97.1: + resolution: {integrity: sha512-im80gfDWRivw9Su3r3YaZmJaCATcJgu3CsCSLodPk1b1R2+X/E12zEQayvrl05EGT9PDwTtuiqKgS4ND4xjwVg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.93.3: - resolution: {integrity: sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA==} + sass-embedded-linux-arm@1.97.1: + resolution: {integrity: sha512-48VxaTUApLyx1NXFdZhKqI/7FYLmz8Ju3Ki2V/p+mhn5raHgAiYeFgn8O1WGxTOh+hBb9y3FdSR5a8MNTbmKMQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.93.3: - resolution: {integrity: sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw==} + sass-embedded-linux-musl-arm64@1.97.1: + resolution: {integrity: sha512-kD35WSD9o0279Ptwid3Jnbovo1FYnuG2mayYk9z4ZI4mweXEK6vTu+tlvCE/MdF/zFKSj11qaxaH+uzXe2cO5A==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.93.3: - resolution: {integrity: sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg==} + sass-embedded-linux-musl-arm@1.97.1: + resolution: {integrity: sha512-FUFs466t3PVViVOKY/60JgLLtl61Pf7OW+g5BeEfuqVcSvYUECVHeiYHtX1fT78PEVa0h9tHpM6XpWti+7WYFA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.93.3: - resolution: {integrity: sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg==} + sass-embedded-linux-musl-riscv64@1.97.1: + resolution: {integrity: sha512-ZgpYps5YHuhA2+KiLkPukRbS5298QObgUhPll/gm5i0LOZleKCwrFELpVPcbhsSBuxqji2uaag5OL+n3JRBVVg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.93.3: - resolution: {integrity: sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg==} + sass-embedded-linux-musl-x64@1.97.1: + resolution: {integrity: sha512-wcAigOyyvZ6o1zVypWV7QLZqpOEVnlBqJr9MbpnRIm74qFTSbAEmShoh8yMXBymzuVSmEbThxAwW01/TLf62tA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.93.3: - resolution: {integrity: sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ==} + sass-embedded-linux-riscv64@1.97.1: + resolution: {integrity: sha512-9j1qE1ZrLMuGb+LUmBzw93Z4TNfqlRkkxjPVZy6u5vIggeSfvGbte7eRoYBNWX6SFew/yBCL90KXIirWFSGrlQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.93.3: - resolution: {integrity: sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA==} + sass-embedded-linux-x64@1.97.1: + resolution: {integrity: sha512-7nrLFYMH/UgvEgXR5JxQJ6y9N4IJmnFnYoDxN0nw0jUp+CQWQL4EJ4RqAKTGelneueRbccvt2sEyPK+X0KJ9Jg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.93.3: - resolution: {integrity: sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA==} + sass-embedded-unknown-all@1.97.1: + resolution: {integrity: sha512-oPSeKc7vS2dx3ZJHiUhHKcyqNq0GWzAiR8zMVpPd/kVMl5ZfVyw+5HTCxxWDBGkX02lNpou27JkeBPCaneYGAQ==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.93.3: - resolution: {integrity: sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ==} + sass-embedded-win32-arm64@1.97.1: + resolution: {integrity: sha512-L5j7J6CbZgHGwcfVedMVpM3z5MYeighcyZE8GF2DVmjWzZI3JtPKNY11wNTD/P9o1Uql10YPOKhGH0iWIXOT7Q==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.93.3: - resolution: {integrity: sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg==} + sass-embedded-win32-x64@1.97.1: + resolution: {integrity: sha512-rfaZAKXU8cW3E7gvdafyD6YtgbEcsDeT99OEiHXRT0UGFuXT8qCOjpAwIKaOA3XXr2d8S42xx6cXcaZ1a+1fgw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.93.3: - resolution: {integrity: sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==} + sass-embedded@1.97.1: + resolution: {integrity: sha512-wH3CbOThHYGX0bUyqFf7laLKyhVWIFc2lHynitkqMIUCtX2ixH9mQh0bN7+hkUu5BFt/SXvEMjFbkEbBMpQiSQ==} engines: {node: '>=16.0.0'} hasBin: true @@ -7931,8 +7931,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sass@1.93.3: - resolution: {integrity: sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==} + sass@1.97.1: + resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} engines: {node: '>=14.0.0'} hasBin: true @@ -8310,8 +8310,8 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} tailwindcss@4.1.18: resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} @@ -10617,10 +10617,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@inlang/paraglide-js@2.7.0(babel-plugin-macros@3.1.0)': + '@inlang/paraglide-js@2.7.1(babel-plugin-macros@3.1.0)': dependencies: '@inlang/recommend-sherlock': 0.2.1 - '@inlang/sdk': 2.4.9(babel-plugin-macros@3.1.0) + '@inlang/sdk': 2.4.10(babel-plugin-macros@3.1.0) commander: 11.1.0 consola: 3.4.0 json5: 2.2.3 @@ -10633,7 +10633,7 @@ snapshots: dependencies: comment-json: 4.5.0 - '@inlang/sdk@2.4.9(babel-plugin-macros@3.1.0)': + '@inlang/sdk@2.4.10(babel-plugin-macros@3.1.0)': dependencies: '@lix-js/sdk': 0.4.7(babel-plugin-macros@3.1.0) '@sinclair/typebox': 0.31.28 @@ -12173,13 +12173,13 @@ snapshots: '@tanstack/query-core': 5.90.12 react: 19.2.3 - '@tanstack/react-router-devtools@1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass-embedded@1.97.1)(sass@1.97.1)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1)': dependencies: '@tanstack/react-router': 1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@tanstack/router-devtools-core': 1.134.15(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1) + '@tanstack/router-devtools-core': 1.134.15(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -12243,14 +12243,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.134.15(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.134.15(@tanstack/router-core@1.134.15)(@types/node@24.10.4)(csstype@3.2.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.21.0)(yaml@2.8.1)': dependencies: '@tanstack/router-core': 1.134.15 clsx: 2.1.1 goober: 2.1.16(csstype@3.2.3) solid-js: 1.9.5 tiny-invariant: 1.3.3 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: csstype: 3.2.3 transitivePeerDependencies: @@ -12279,7 +12279,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': + '@tanstack/router-plugin@1.134.15(@tanstack/react-router@1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -12297,7 +12297,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.134.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -13097,7 +13097,7 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.10.1': optional: true - '@vitejs/plugin-legacy@7.2.1(terser@5.36.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitejs/plugin-legacy@7.2.1(terser@5.36.0)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0) @@ -13112,19 +13112,19 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.36.0 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react-swc@4.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitejs/plugin-react-swc@4.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.47 '@swc/core': 1.13.5 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -13132,7 +13132,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.53 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -17065,65 +17065,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.93.3: + sass-embedded-all-unknown@1.97.1: dependencies: - sass: 1.93.3 + sass: 1.97.1 optional: true - sass-embedded-android-arm64@1.93.3: + sass-embedded-android-arm64@1.97.1: optional: true - sass-embedded-android-arm@1.93.3: + sass-embedded-android-arm@1.97.1: optional: true - sass-embedded-android-riscv64@1.93.3: + sass-embedded-android-riscv64@1.97.1: optional: true - sass-embedded-android-x64@1.93.3: + sass-embedded-android-x64@1.97.1: optional: true - sass-embedded-darwin-arm64@1.93.3: + sass-embedded-darwin-arm64@1.97.1: optional: true - sass-embedded-darwin-x64@1.93.3: + sass-embedded-darwin-x64@1.97.1: optional: true - sass-embedded-linux-arm64@1.93.3: + sass-embedded-linux-arm64@1.97.1: optional: true - sass-embedded-linux-arm@1.93.3: + sass-embedded-linux-arm@1.97.1: optional: true - sass-embedded-linux-musl-arm64@1.93.3: + sass-embedded-linux-musl-arm64@1.97.1: optional: true - sass-embedded-linux-musl-arm@1.93.3: + sass-embedded-linux-musl-arm@1.97.1: optional: true - sass-embedded-linux-musl-riscv64@1.93.3: + sass-embedded-linux-musl-riscv64@1.97.1: optional: true - sass-embedded-linux-musl-x64@1.93.3: + sass-embedded-linux-musl-x64@1.97.1: optional: true - sass-embedded-linux-riscv64@1.93.3: + sass-embedded-linux-riscv64@1.97.1: optional: true - sass-embedded-linux-x64@1.93.3: + sass-embedded-linux-x64@1.97.1: optional: true - sass-embedded-unknown-all@1.93.3: + sass-embedded-unknown-all@1.97.1: dependencies: - sass: 1.93.3 + sass: 1.97.1 optional: true - sass-embedded-win32-arm64@1.93.3: + sass-embedded-win32-arm64@1.97.1: optional: true - sass-embedded-win32-x64@1.93.3: + sass-embedded-win32-x64@1.97.1: optional: true - sass-embedded@1.93.3: + sass-embedded@1.97.1: dependencies: '@bufbuild/protobuf': 2.5.2 buffer-builder: 0.2.0 @@ -17134,24 +17134,24 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.93.3 - sass-embedded-android-arm: 1.93.3 - sass-embedded-android-arm64: 1.93.3 - sass-embedded-android-riscv64: 1.93.3 - sass-embedded-android-x64: 1.93.3 - sass-embedded-darwin-arm64: 1.93.3 - sass-embedded-darwin-x64: 1.93.3 - sass-embedded-linux-arm: 1.93.3 - sass-embedded-linux-arm64: 1.93.3 - sass-embedded-linux-musl-arm: 1.93.3 - sass-embedded-linux-musl-arm64: 1.93.3 - sass-embedded-linux-musl-riscv64: 1.93.3 - sass-embedded-linux-musl-x64: 1.93.3 - sass-embedded-linux-riscv64: 1.93.3 - sass-embedded-linux-x64: 1.93.3 - sass-embedded-unknown-all: 1.93.3 - sass-embedded-win32-arm64: 1.93.3 - sass-embedded-win32-x64: 1.93.3 + sass-embedded-all-unknown: 1.97.1 + sass-embedded-android-arm: 1.97.1 + sass-embedded-android-arm64: 1.97.1 + sass-embedded-android-riscv64: 1.97.1 + sass-embedded-android-x64: 1.97.1 + sass-embedded-darwin-arm64: 1.97.1 + sass-embedded-darwin-x64: 1.97.1 + sass-embedded-linux-arm: 1.97.1 + sass-embedded-linux-arm64: 1.97.1 + sass-embedded-linux-musl-arm: 1.97.1 + sass-embedded-linux-musl-arm64: 1.97.1 + sass-embedded-linux-musl-riscv64: 1.97.1 + sass-embedded-linux-musl-x64: 1.97.1 + sass-embedded-linux-riscv64: 1.97.1 + sass-embedded-linux-x64: 1.97.1 + sass-embedded-unknown-all: 1.97.1 + sass-embedded-win32-arm64: 1.97.1 + sass-embedded-win32-x64: 1.97.1 sass@1.83.0: dependencies: @@ -17161,7 +17161,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.4.1 - sass@1.93.3: + sass@1.97.1: dependencies: chokidar: 4.0.0 immutable: 5.0.2 @@ -17609,7 +17609,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwind-merge@3.3.1: {} + tailwind-merge@3.4.0: {} tailwindcss@4.1.18: {} @@ -18099,7 +18099,7 @@ snapshots: - rollup - supports-color - vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.51.0(@types/node@24.10.4) '@rollup/pluginutils': 5.1.4(rollup@4.46.2) @@ -18112,13 +18112,13 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.3 optionalDependencies: - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-html@3.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-html@3.2.2(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -18132,39 +18132,39 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) - vite-plugin-sass-dts@1.3.35(postcss@8.5.6)(prettier@3.7.4)(sass-embedded@1.93.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-sass-dts@1.3.35(postcss@8.5.6)(prettier@3.7.4)(sass-embedded@1.97.1)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: postcss: 8.5.6 postcss-js: 4.0.1(postcss@8.5.6) prettier: 3.7.4 - sass-embedded: 1.93.3 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + sass-embedded: 1.97.1 + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) - vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.46.2) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.9.3) optionalDependencies: - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1): + vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.1)(sass@1.97.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -18178,8 +18178,8 @@ snapshots: jiti: 2.6.1 less: 4.2.0 lightningcss: 1.30.2 - sass: 1.93.3 - sass-embedded: 1.93.3 + sass: 1.97.1 + sass-embedded: 1.97.1 stylus: 0.62.0 terser: 5.36.0 tsx: 4.21.0 diff --git a/lede/target/linux/allwinner/Makefile b/lede/target/linux/allwinner/Makefile index 191bfdd6c8..652aa6ce64 100644 --- a/lede/target/linux/allwinner/Makefile +++ b/lede/target/linux/allwinner/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk ARCH:=riscv64 BOARD:=allwinner BOARDNAME:=AllWinner D1 RISC-V SoC -FEATURES:=ext4 squashfs +FEATURES:=ext4 squashfs usbgadget KERNELNAME:=Image dtbs SUBTARGETS:=generic @@ -15,6 +15,8 @@ KERNEL_PATCHVER:=6.12 include $(INCLUDE_DIR)/target.mk +DEFAULT_PACKAGES += e2fsprogs f2fsck mkf2fs + define Target/Description Build firmware images for Allwinner D1 RISC-V boards endef diff --git a/lede/target/linux/allwinner/config-6.12 b/lede/target/linux/allwinner/config-6.12 index 9c7ef1eab2..dd005f020a 100644 --- a/lede/target/linux/allwinner/config-6.12 +++ b/lede/target/linux/allwinner/config-6.12 @@ -1,9 +1,10 @@ CONFIG_64BIT=y # CONFIG_ACPI is not set -# CONFIG_AHCI_SUNXI is not set # CONFIG_ARCH_CANAAN is not set -CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_ARCH_DMA_DEFAULT_COHERENT=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y # CONFIG_ARCH_MICROCHIP is not set CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_ARCH_MMAP_RND_BITS_MAX=24 @@ -11,6 +12,7 @@ CONFIG_ARCH_MMAP_RND_BITS_MIN=18 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y +CONFIG_ARCH_PROC_KCORE_TEXT=y CONFIG_ARCH_RV64I=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y # CONFIG_ARCH_SIFIVE is not set @@ -18,17 +20,18 @@ CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_STACKWALK=y CONFIG_ARCH_SUNXI=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y # CONFIG_ARCH_THEAD is not set +CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_ARCH_WANTS_THP_SWAP=y CONFIG_ASN1=y -CONFIG_ASSOCIATIVE_ARRAY=y # CONFIG_AX45MP_L2_CACHE is not set -CONFIG_BLK_DEV_SD=y -CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_PM=y +CONFIG_BUFFER_HEAD=y CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y CONFIG_CLKSRC_MMIO=y CONFIG_CLONE_BACKWARDS=y -CONFIG_CLZ_TAB=y CONFIG_CMODEL_MEDANY=y # CONFIG_CMODEL_MEDLOW is not set CONFIG_COMMON_CLK=y @@ -40,14 +43,20 @@ CONFIG_CONTEXT_TRACKING_IDLE=y CONFIG_COREDUMP=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_CPU_ISOLATION=y -CONFIG_CPU_RMAP=y +CONFIG_CPU_MITIGATIONS=y CONFIG_CRC16=y -# CONFIG_CRC32_SARWATE is not set -CONFIG_CRC32_SLICEBY8=y CONFIG_CRC7=y CONFIG_CRC_ITU_T=y -CONFIG_DECOMPRESS_GZIP=y +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_LIB_GF128MUL=y +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_DEBUG_INFO=y CONFIG_DMADEVICES=y +CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y CONFIG_DMA_DIRECT_REMAP=y CONFIG_DMA_ENGINE=y CONFIG_DMA_NEED_SYNC=y @@ -61,6 +70,7 @@ CONFIG_DTC=y CONFIG_DWMAC_GENERIC=y CONFIG_DWMAC_SUN8I=y CONFIG_DWMAC_SUNXI=y +CONFIG_DYNAMIC_SIGFRAME=y CONFIG_EDAC_SUPPORT=y CONFIG_EFI=y CONFIG_EFIVAR_FS=m @@ -83,7 +93,7 @@ CONFIG_ELF_CORE=y CONFIG_ERRATA_THEAD=y CONFIG_ERRATA_THEAD_CMO=y CONFIG_ERRATA_THEAD_MAE=y -CONFIG_ERRATA_THEAD_PBMT=y +CONFIG_EXCLUSIVE_SYSTEM_RAM=y CONFIG_EXT4_FS=y CONFIG_EXTCON=y CONFIG_FAILOVER=y @@ -95,30 +105,35 @@ CONFIG_FONT_AUTOSELECT=y CONFIG_FONT_SUPPORT=y CONFIG_FPU=y CONFIG_FRAME_POINTER=y -CONFIG_FRAME_WARN=2048 CONFIG_FS_IOMAP=y CONFIG_FS_MBCACHE=y +CONFIG_FUNCTION_ALIGNMENT=0 CONFIG_FWNODE_MDIO=y CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_FW_LOADER_SYSFS=y +CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_ARCH_TOPOLOGY=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_EARLY_IOREMAP=y +CONFIG_GENERIC_ENTRY=y CONFIG_GENERIC_GETTIMEOFDAY=y CONFIG_GENERIC_IDLE_POLL_SETUP=y CONFIG_GENERIC_IOREMAP=y CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_IPI_MUX=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW_LEVEL=y CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y CONFIG_GENERIC_MSI_IRQ=y -CONFIG_GENERIC_MSI_IRQ_DOMAIN=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PINCONF=y @@ -129,21 +144,17 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GLOB=y CONFIG_GPIOLIB_IRQCHIP=y CONFIG_GPIO_CDEV=y CONFIG_GPIO_PCF857X=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_HAS_DMA=y CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y -CONFIG_HID=y -CONFIG_HID_GENERIC=y -CONFIG_HVC_DRIVER=y -CONFIG_HVC_RISCV_SBI=y +CONFIG_HZ_PERIODIC=y CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_COMPAT=y CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_MV64XXX=y CONFIG_I2C_OCORES=y @@ -166,7 +177,6 @@ CONFIG_IRQ_WORK=y CONFIG_JBD2=y CONFIG_KALLSYMS=y # CONFIG_KERNEL_UNCOMPRESSED is not set -# CONFIG_KEYBOARD_SUN4I_LRADC is not set CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 CONFIG_LIBFDT=y @@ -180,7 +190,6 @@ CONFIG_MDIO_BUS_MUX=y CONFIG_MDIO_DEVICE=y CONFIG_MDIO_DEVRES=y # CONFIG_MDIO_SUN4I is not set -CONFIG_MEMFD_CREATE=y CONFIG_MFD_AXP20X=y CONFIG_MFD_AXP20X_I2C=y CONFIG_MFD_CORE=y @@ -192,24 +201,29 @@ CONFIG_MMC=y CONFIG_MMC_BLOCK=y CONFIG_MMC_SUNXI=y CONFIG_MMIOWB=y +CONFIG_MMU_LAZY_TLB_REFCOUNT=y +CONFIG_MODULES_USE_ELF_RELA=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y # CONFIG_MUSB_PIO_ONLY is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_NET_FLOW_LIMIT=y +CONFIG_NET_EGRESS=y +CONFIG_NET_INGRESS=y CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NET_SELFTESTS=y CONFIG_NET_VENDOR_ALLWINNER=y +CONFIG_NET_XGRESS=y CONFIG_NLS=y # CONFIG_NONPORTABLE is not set CONFIG_NOP_USB_XCEIV=y CONFIG_NR_CPUS=8 CONFIG_NVMEM=y +CONFIG_NVMEM_LAYOUTS=y CONFIG_NVMEM_SUNXI_SID=y CONFIG_NVMEM_SYSFS=y CONFIG_OF=y CONFIG_OF_ADDRESS=y -CONFIG_OF_DMA_DEFAULT_COHERENT=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_FLATTREE=y CONFIG_OF_GPIO=y @@ -223,10 +237,12 @@ CONFIG_PAGE_OFFSET=0xff60000000000000 CONFIG_PAGE_POOL=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -# CONFIG_PAGE_TABLE_CHECK is not set CONFIG_PANIC_TIMEOUT=0 +CONFIG_PCS_XPCS=y +CONFIG_PER_VMA_LOCK=y CONFIG_PGTABLE_LEVELS=5 CONFIG_PHYLIB=y +CONFIG_PHYLIB_LEDS=y CONFIG_PHYLINK=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_PHY_SUN4I_USB=y @@ -261,6 +277,8 @@ CONFIG_PINCTRL_SUN20I_D1=y CONFIG_PINCTRL_SUNXI=y CONFIG_PM=y CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_PM_GENERIC_DOMAINS_OF=y CONFIG_PORTABLE=y CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y CONFIG_POWER_RESET=y @@ -272,11 +290,10 @@ CONFIG_PRINTK_TIME=y CONFIG_PTP_1588_CLOCK=y CONFIG_PTP_1588_CLOCK_OPTIONAL=y CONFIG_PWM=y -# CONFIG_PWM_CLK is not set # CONFIG_PWM_SIFIVE is not set # CONFIG_PWM_SUN4I is not set -# CONFIG_PWM_SUN8I_V536 is not set -CONFIG_PWM_SYSFS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_RANDSTRUCT_NONE=y CONFIG_RATIONAL=y CONFIG_RCU_TRACE=y CONFIG_REALTEK_PHY=y @@ -295,9 +312,12 @@ CONFIG_RESET_SUNXI=y CONFIG_RISCV=y CONFIG_RISCV_ALTERNATIVE=y CONFIG_RISCV_ALTERNATIVE_EARLY=y +CONFIG_RISCV_APLIC=y +CONFIG_RISCV_APLIC_MSI=y CONFIG_RISCV_BOOT_SPINWAIT=y CONFIG_RISCV_DMA_NONCOHERENT=y # CONFIG_RISCV_EMULATED_UNALIGNED_ACCESS is not set +CONFIG_RISCV_IMSIC=y CONFIG_RISCV_INTC=y CONFIG_RISCV_ISA_C=y CONFIG_RISCV_ISA_FALLBACK=y @@ -314,13 +334,15 @@ CONFIG_RISCV_ISA_ZBB=y CONFIG_RISCV_ISA_ZBC=y CONFIG_RISCV_ISA_ZICBOM=y CONFIG_RISCV_ISA_ZICBOZ=y +CONFIG_RISCV_MISALIGNED=y +CONFIG_RISCV_NONSTANDARD_CACHE_OPS=y CONFIG_RISCV_PROBE_UNALIGNED_ACCESS=y CONFIG_RISCV_SBI=y CONFIG_RISCV_SBI_V01=y CONFIG_RISCV_TIMER=y +CONFIG_RISCV_USE_LINKER_RELAXATION=y # CONFIG_RPS is not set CONFIG_RTC_CLASS=y -# CONFIG_RTC_DRV_EFI is not set CONFIG_RTC_DRV_GOLDFISH=y CONFIG_RTC_DRV_SUN6I=y CONFIG_RTC_I2C_AND_SPI=y @@ -337,16 +359,12 @@ CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y -CONFIG_SG_POOL=y CONFIG_SIFIVE_PLIC=y CONFIG_SLUB_DEBUG=y CONFIG_SMP=y -# CONFIG_SND_SUN20I_CODEC is not set -# CONFIG_SND_SUN20I_D1_CODEC_ANALOG is not set -# CONFIG_SND_SUN4I_I2S is not set -# CONFIG_SND_SUN50I_DMIC is not set CONFIG_SOCK_RX_QUEUE_MAPPING=y # CONFIG_SOC_STARFIVE is not set +CONFIG_SOFTIRQ_ON_OWN_STACK=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSE_IRQ=y CONFIG_SPI=y @@ -355,14 +373,14 @@ CONFIG_SPI_MASTER=y CONFIG_SPI_MEM=y # CONFIG_SPI_SUN4I is not set CONFIG_SPI_SUN6I=y -CONFIG_SRCU=y +CONFIG_SPLIT_PMD_PTLOCKS=y +CONFIG_SPLIT_PTE_PTLOCKS=y CONFIG_STACKDEPOT=y CONFIG_STACKTRACE=y CONFIG_STMMAC_ETH=y CONFIG_STMMAC_PLATFORM=y CONFIG_SUN20I_D1_CCU=y CONFIG_SUN20I_D1_R_CCU=y -CONFIG_SUN20I_GPADC=y CONFIG_SUN20I_PPU=y # CONFIG_SUN4I_EMAC is not set CONFIG_SUN4I_TIMER=y @@ -370,7 +388,6 @@ CONFIG_SUN50I_IOMMU=y CONFIG_SUN6I_MSGBOX=y CONFIG_SUN6I_RTC_CCU=y CONFIG_SUN8I_DE2_CCU=y -# CONFIG_SUN8I_R_CCU is not set CONFIG_SUN8I_THERMAL=y CONFIG_SUNXI_CCU=y # CONFIG_SUNXI_RSB is not set @@ -378,6 +395,7 @@ CONFIG_SUNXI_SRAM=y CONFIG_SUNXI_WATCHDOG=y CONFIG_SWIOTLB=y CONFIG_SWPHY=y +CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW=y CONFIG_SYSCTL_EXCEPTION_TRACE=y # CONFIG_SYSFB_SIMPLEFB is not set CONFIG_SYSFS_SYSCALL=y @@ -385,46 +403,43 @@ CONFIG_THERMAL=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_GOV_STEP_WISE=y -CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y CONFIG_THREAD_INFO_IN_TASK=y CONFIG_THREAD_SIZE_ORDER=2 CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y -CONFIG_TOOLCHAIN_HAS_ZICBOM=y -CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE=y +CONFIG_TOOLCHAIN_HAS_V=y +CONFIG_TOOLCHAIN_HAS_VECTOR_CRYPTO=y +CONFIG_TOOLCHAIN_HAS_ZBB=y +CONFIG_TOOLCHAIN_HAS_ZBC=y CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI=y CONFIG_TRACE_CLOCK=y CONFIG_TREE_RCU=y CONFIG_TREE_SRCU=y CONFIG_TUNE_GENERIC=y -# CONFIG_UACCE is not set CONFIG_UCS2_STRING=y CONFIG_UEVENT_HELPER_PATH="" CONFIG_USB=y CONFIG_USB_COMMON=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD_PLATFORM=y -CONFIG_USB_HID=y +CONFIG_USB_GADGET=y +CONFIG_USB_MUSB_DUAL_ROLE=y CONFIG_USB_MUSB_HDRC=y -CONFIG_USB_MUSB_HOST=y CONFIG_USB_MUSB_SUNXI=y CONFIG_USB_NET_DRIVERS=y CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD_PLATFORM=y CONFIG_USB_PHY=y CONFIG_USB_SUPPORT=y -# CONFIG_USB_UHCI_HCD is not set CONFIG_USB_XHCI_HCD=y # CONFIG_USB_XHCI_PLATFORM is not set -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_USER_STACKTRACE_SUPPORT=y # CONFIG_VHOST_MENU is not set # CONFIG_VIRTIO_MENU is not set CONFIG_VMAP_STACK=y CONFIG_VM_EVENT_COUNTERS=y CONFIG_WATCHDOG_CORE=y CONFIG_XPS=y -CONFIG_ZLIB_INFLATE=y CONFIG_ZONE_DMA32=y diff --git a/openwrt-packages/luci-app-amlogic/Makefile b/openwrt-packages/luci-app-amlogic/Makefile index c056a9d2ca..383682bb0e 100644 --- a/openwrt-packages/luci-app-amlogic/Makefile +++ b/openwrt-packages/luci-app-amlogic/Makefile @@ -16,7 +16,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-amlogic -PKG_VERSION:=3.1.281 +PKG_VERSION:=3.1.282 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0 License @@ -25,8 +25,8 @@ PKG_MAINTAINER:=ophub LUCI_TITLE:=LuCI support for Amlogic, Allwinner and Rockchip related boxs LUCI_PKGARCH:=all LUCI_DEPENDS:= \ - @(aarch64||arm) +bash +block-mount +dosfstools +e2fsprogs \ - +parted +uuidgen + @(aarch64||arm) +bash +blkid +block-mount +curl +dosfstools +e2fsprogs \ + +fdisk +jq +losetup +lsblk +parted +perl +pv +uuidgen define Package/$(PKG_NAME)/conffiles /etc/config/amlogic diff --git a/openwrt-packages/luci-theme-alpha/README.md b/openwrt-packages/luci-theme-alpha/README.md index a8b6776634..ff097c94a5 100644 --- a/openwrt-packages/luci-theme-alpha/README.md +++ b/openwrt-packages/luci-theme-alpha/README.md @@ -8,6 +8,8 @@ [discord-badge]: https://img.shields.io/badge/visit_Discord-Comunity-blue [paypal]: https://www.paypal.com/paypalme/derisamedia [paypal-badge]: https://img.shields.io/badge/Donate-Paypal_me-blue +[new-release]: https://github.com/derisamedia/luci-theme-alpha-reborn +[new-release-badge]: https://img.shields.io/badge/download-check_releases-red diff --git a/sing-box/.github/CRONET_GO_VERSION b/sing-box/.github/CRONET_GO_VERSION index c320cf1a77..84a69fd065 100644 --- a/sing-box/.github/CRONET_GO_VERSION +++ b/sing-box/.github/CRONET_GO_VERSION @@ -1 +1 @@ -b0385d27c2ab659d9532d71f301deb6599c44a79 +ced05691cdd4e758286db059830ff034807da687 diff --git a/sing-box/Makefile b/sing-box/Makefile index 9a364af1a0..1d3b0c53c2 100644 --- a/sing-box/Makefile +++ b/sing-box/Makefile @@ -37,6 +37,9 @@ fmt: @gofmt -s -w . @gci write --custom-order -s standard -s "prefix(github.com/sagernet/)" -s "default" . +fmt_docs: + go run ./cmd/internal/format_docs + fmt_install: go install -v mvdan.cc/gofumpt@v0.8.0 go install -v github.com/daixiang0/gci@latest diff --git a/sing-box/cmd/internal/format_docs/main.go b/sing-box/cmd/internal/format_docs/main.go new file mode 100644 index 0000000000..061b212102 --- /dev/null +++ b/sing-box/cmd/internal/format_docs/main.go @@ -0,0 +1,117 @@ +package main + +import ( + "bytes" + "os" + "path/filepath" + "strings" + + "github.com/sagernet/sing-box/log" +) + +func main() { + err := filepath.Walk("docs", func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil + } + if !strings.HasSuffix(path, ".md") { + return nil + } + return processFile(path) + }) + if err != nil { + log.Fatal(err) + } +} + +func processFile(path string) error { + content, err := os.ReadFile(path) + if err != nil { + return err + } + + lines := strings.Split(string(content), "\n") + modified := false + result := make([]string, 0, len(lines)) + + inQuoteBlock := false + materialLines := []int{} // indices of :material- lines in the block + + for _, line := range lines { + // Check for quote block start + if strings.HasPrefix(line, "!!! quote \"") && strings.Contains(line, "sing-box") { + inQuoteBlock = true + materialLines = nil + result = append(result, line) + continue + } + + // Inside a quote block + if inQuoteBlock { + trimmed := strings.TrimPrefix(line, " ") + isMaterialLine := strings.HasPrefix(trimmed, ":material-") + isEmpty := strings.TrimSpace(line) == "" + isIndented := strings.HasPrefix(line, " ") + + if isMaterialLine { + materialLines = append(materialLines, len(result)) + result = append(result, line) + continue + } + + // Block ends when: + // - Empty line AFTER we've seen material lines, OR + // - Non-indented, non-empty line + blockEnds := (isEmpty && len(materialLines) > 0) || (!isEmpty && !isIndented) + if blockEnds { + // Process collected material lines + if len(materialLines) > 0 { + for j, idx := range materialLines { + isLast := j == len(materialLines)-1 + resultLine := strings.TrimRight(result[idx], " ") + if !isLast { + // Add trailing two spaces for non-last lines + resultLine += " " + } + if result[idx] != resultLine { + modified = true + result[idx] = resultLine + } + } + } + inQuoteBlock = false + materialLines = nil + } + } + + result = append(result, line) + } + + // Handle case where file ends while still in a block + if inQuoteBlock && len(materialLines) > 0 { + for j, idx := range materialLines { + isLast := j == len(materialLines)-1 + resultLine := strings.TrimRight(result[idx], " ") + if !isLast { + resultLine += " " + } + if result[idx] != resultLine { + modified = true + result[idx] = resultLine + } + } + } + + if modified { + newContent := strings.Join(result, "\n") + if !bytes.Equal(content, []byte(newContent)) { + log.Info("formatted: ", path) + return os.WriteFile(path, []byte(newContent), 0o644) + } + } + + return nil +} diff --git a/sing-box/constant/rule.go b/sing-box/constant/rule.go index b565a39d65..55cad2e137 100644 --- a/sing-box/constant/rule.go +++ b/sing-box/constant/rule.go @@ -30,6 +30,7 @@ const ( RuleActionTypeRoute = "route" RuleActionTypeRouteOptions = "route-options" RuleActionTypeDirect = "direct" + RuleActionTypeBypass = "bypass" RuleActionTypeReject = "reject" RuleActionTypeHijackDNS = "hijack-dns" RuleActionTypeSniff = "sniff" diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md index b36eec2059..890f3f28a6 100644 --- a/sing-box/docs/changelog.md +++ b/sing-box/docs/changelog.md @@ -2,6 +2,20 @@ icon: material/alert-decagram --- +#### 1.13.0-alpha.35 + +* Add pre-match support for `auto_redirect` **1** + +**1**: + +`auto_redirect` now allows you to bypass sing-box for connections based on routing rules. + +A new rule action `bypass` is introduced to support this feature. When matched during pre-match, the connection will bypass sing-box and connect directly. + +This feature requires Linux with `auto_redirect` enabled. + +See [Pre-match](/configuration/shared/pre-match/) and [Rule Action](/configuration/route/rule_action/#bypass). + #### 1.13.0-alpha.34 * Add Chrome Root Store certificate option **1** diff --git a/sing-box/docs/configuration/dns/server/local.md b/sing-box/docs/configuration/dns/server/local.md index 9556cb1d0d..aa7f095a32 100644 --- a/sing-box/docs/configuration/dns/server/local.md +++ b/sing-box/docs/configuration/dns/server/local.md @@ -4,7 +4,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" - :material-plus: [prefer_go](#prefer_go) + :material-plus: [prefer_go](#prefer_go) !!! question "Since sing-box 1.12.0" diff --git a/sing-box/docs/configuration/experimental/cache-file.md b/sing-box/docs/configuration/experimental/cache-file.md index 18c430d973..4ad0361c86 100644 --- a/sing-box/docs/configuration/experimental/cache-file.md +++ b/sing-box/docs/configuration/experimental/cache-file.md @@ -3,7 +3,7 @@ !!! quote "Changes in sing-box 1.9.0" :material-plus: [store_rdrc](#store_rdrc) - :material-plus: [rdrc_timeout](#rdrc_timeout) + :material-plus: [rdrc_timeout](#rdrc_timeout) ### Structure diff --git a/sing-box/docs/configuration/experimental/cache-file.zh.md b/sing-box/docs/configuration/experimental/cache-file.zh.md index 656d53c4fe..db2ae2054c 100644 --- a/sing-box/docs/configuration/experimental/cache-file.zh.md +++ b/sing-box/docs/configuration/experimental/cache-file.zh.md @@ -3,7 +3,7 @@ !!! quote "sing-box 1.9.0 中的更改" :material-plus: [store_rdrc](#store_rdrc) - :material-plus: [rdrc_timeout](#rdrc_timeout) + :material-plus: [rdrc_timeout](#rdrc_timeout) ### 结构 diff --git a/sing-box/docs/configuration/inbound/tun.md b/sing-box/docs/configuration/inbound/tun.md index 5dde6b2075..39393f4258 100644 --- a/sing-box/docs/configuration/inbound/tun.md +++ b/sing-box/docs/configuration/inbound/tun.md @@ -4,6 +4,8 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" + :material-plus: [auto_redirect_reset_mark](#auto_redirect_reset_mark) + :material-plus: [auto_redirect_nfqueue](#auto_redirect_nfqueue) :material-plus: [exclude_mptcp](#exclude_mptcp) !!! quote "Changes in sing-box 1.12.0" @@ -38,7 +40,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.9.0" :material-plus: [platform.http_proxy.bypass_domain](#platformhttp_proxybypass_domain) - :material-plus: [platform.http_proxy.match_domain](#platformhttp_proxymatch_domain) + :material-plus: [platform.http_proxy.match_domain](#platformhttp_proxymatch_domain) !!! quote "Changes in sing-box 1.8.0" @@ -67,6 +69,8 @@ icon: material/new-box "auto_redirect": true, "auto_redirect_input_mark": "0x2023", "auto_redirect_output_mark": "0x2024", + "auto_redirect_reset_mark": "0x2025", + "auto_redirect_nfqueue": 100, "exclude_mptcp": false, "loopback_address": [ "10.7.0.1" @@ -283,6 +287,22 @@ Connection output mark used by `auto_redirect`. `0x2024` is used by default. +#### auto_redirect_reset_mark + +!!! question "Since sing-box 1.13.0" + +Connection reset mark used by `auto_redirect` pre-matching. + +`0x2025` is used by default. + +#### auto_redirect_nfqueue + +!!! question "Since sing-box 1.13.0" + +NFQueue number used by `auto_redirect` pre-matching. + +`100` is used by default. + #### exclude_mptcp !!! question "Since sing-box 1.13.0" diff --git a/sing-box/docs/configuration/inbound/tun.zh.md b/sing-box/docs/configuration/inbound/tun.zh.md index e9dec46f87..fa0c5d913a 100644 --- a/sing-box/docs/configuration/inbound/tun.zh.md +++ b/sing-box/docs/configuration/inbound/tun.zh.md @@ -4,6 +4,8 @@ icon: material/new-box !!! quote "sing-box 1.13.0 中的更改" + :material-plus: [auto_redirect_reset_mark](#auto_redirect_reset_mark) + :material-plus: [auto_redirect_nfqueue](#auto_redirect_nfqueue) :material-plus: [exclude_mptcp](#exclude_mptcp) !!! quote "sing-box 1.12.0 中的更改" @@ -26,7 +28,7 @@ icon: material/new-box :material-delete-clock: [inet6_route_address](#inet6_route_address) :material-plus: [route_exclude_address](#route_address) :material-delete-clock: [inet4_route_exclude_address](#inet4_route_exclude_address) - :material-delete-clock: [inet6_route_exclude_address](#inet6_route_exclude_address) + :material-delete-clock: [inet6_route_exclude_address](#inet6_route_exclude_address) :material-plus: [iproute2_table_index](#iproute2_table_index) :material-plus: [iproute2_rule_index](#iproute2_table_index) :material-plus: [auto_redirect](#auto_redirect) @@ -38,7 +40,7 @@ icon: material/new-box !!! quote "sing-box 1.9.0 中的更改" :material-plus: [platform.http_proxy.bypass_domain](#platformhttp_proxybypass_domain) - :material-plus: [platform.http_proxy.match_domain](#platformhttp_proxymatch_domain) + :material-plus: [platform.http_proxy.match_domain](#platformhttp_proxymatch_domain) !!! quote "sing-box 1.8.0 中的更改" @@ -67,6 +69,8 @@ icon: material/new-box "auto_redirect": true, "auto_redirect_input_mark": "0x2023", "auto_redirect_output_mark": "0x2024", + "auto_redirect_reset_mark": "0x2025", + "auto_redirect_nfqueue": 100, "exclude_mptcp": false, "loopback_address": [ "10.7.0.1" @@ -282,6 +286,22 @@ tun 接口的 IPv6 前缀。 默认使用 `0x2024`。 +#### auto_redirect_reset_mark + +!!! question "自 sing-box 1.13.0 起" + +`auto_redirect` 预匹配使用的连接重置标记。 + +默认使用 `0x2025`。 + +#### auto_redirect_nfqueue + +!!! question "自 sing-box 1.13.0 起" + +`auto_redirect` 预匹配使用的 NFQueue 编号。 + +默认使用 `100`。 + #### exclude_mptcp !!! question "自 sing-box 1.13.0 起" diff --git a/sing-box/docs/configuration/outbound/wireguard.md b/sing-box/docs/configuration/outbound/wireguard.md index 96c5dc7588..648ba60725 100644 --- a/sing-box/docs/configuration/outbound/wireguard.md +++ b/sing-box/docs/configuration/outbound/wireguard.md @@ -12,7 +12,7 @@ icon: material/delete-clock !!! quote "Changes in sing-box 1.8.0" - :material-plus: [gso](#gso) + :material-plus: [gso](#gso) ### Structure diff --git a/sing-box/docs/configuration/outbound/wireguard.zh.md b/sing-box/docs/configuration/outbound/wireguard.zh.md index 46b49a94ad..3b22affd4c 100644 --- a/sing-box/docs/configuration/outbound/wireguard.zh.md +++ b/sing-box/docs/configuration/outbound/wireguard.zh.md @@ -12,7 +12,7 @@ icon: material/delete-clock !!! quote "sing-box 1.8.0 中的更改" - :material-plus: [gso](#gso) + :material-plus: [gso](#gso) ### 结构 diff --git a/sing-box/docs/configuration/route/rule_action.md b/sing-box/docs/configuration/route/rule_action.md index a57de60fbb..241233b92e 100644 --- a/sing-box/docs/configuration/route/rule_action.md +++ b/sing-box/docs/configuration/route/rule_action.md @@ -4,6 +4,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" + :material-plus: [bypass](#bypass) :material-alert: [reject](#reject) !!! quote "Changes in sing-box 1.12.0" @@ -44,6 +45,40 @@ Tag of target outbound. See `route-options` fields below. +### bypass + +!!! question "Since sing-box 1.13.0" + +!!! quote "" + + Only supported on Linux with `auto_redirect` enabled. + +```json +{ + "action": "bypass", + "outbound": "", + + ... // route-options Fields +} +``` + +`bypass` routes connection to the specified outbound. + +For tun connections in [pre-match](/configuration/shared/pre-match/), +the connection will bypass sing-box and connect directly at the kernel level. + +For non-tun connections and already established connections, the behavior is the same as `route`. + +#### outbound + +==Required== + +Tag of target outbound. + +#### route-options Fields + +See `route-options` fields below. + ### reject !!! quote "Changes in sing-box 1.13.0" diff --git a/sing-box/docs/configuration/route/rule_action.zh.md b/sing-box/docs/configuration/route/rule_action.zh.md index 98ea122717..c944d1a879 100644 --- a/sing-box/docs/configuration/route/rule_action.zh.md +++ b/sing-box/docs/configuration/route/rule_action.zh.md @@ -4,6 +4,7 @@ icon: material/new-box !!! quote "sing-box 1.13.0 中的更改" + :material-plus: [bypass](#bypass) :material-alert: [reject](#reject) !!! quote "sing-box 1.12.0 中的更改" @@ -40,6 +41,39 @@ icon: material/new-box 参阅下方的 `route-options` 字段。 +### bypass + +!!! question "自 sing-box 1.13.0 起" + +!!! quote "" + + 仅支持 Linux,且需要启用 `auto_redirect`。 + +```json +{ + "action": "bypass", + "outbound": "", + + ... // route-options 字段 +} +``` + +`bypass` 将连接路由到指定出站。 + +对于[预匹配](/configuration/shared/pre-match/)中的 tun 连接,连接将在内核层面绕过 sing-box 直接连接。 + +对于非 tun 连接和已建立的连接,行为与 `route` 相同。 + +#### outbound + +==必填== + +目标出站的标签。 + +#### route-options 字段 + +参阅下方的 `route-options` 字段。 + ### reject !!! quote "sing-box 1.13.0 中的更改" diff --git a/sing-box/docs/configuration/shared/dial.md b/sing-box/docs/configuration/shared/dial.md index 634b951c65..3907dcb2ac 100644 --- a/sing-box/docs/configuration/shared/dial.md +++ b/sing-box/docs/configuration/shared/dial.md @@ -4,8 +4,8 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" - :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) - :material-plus: [tcp_keep_alive](#tcp_keep_alive) + :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) + :material-plus: [tcp_keep_alive](#tcp_keep_alive) :material-plus: [tcp_keep_alive_interval](#tcp_keep_alive_interval) !!! quote "Changes in sing-box 1.12.0" diff --git a/sing-box/docs/configuration/shared/dial.zh.md b/sing-box/docs/configuration/shared/dial.zh.md index 9778585b38..23cea50976 100644 --- a/sing-box/docs/configuration/shared/dial.zh.md +++ b/sing-box/docs/configuration/shared/dial.zh.md @@ -4,8 +4,8 @@ icon: material/new-box !!! quote "sing-box 1.13.0 中的更改" - :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) - :material-plus: [tcp_keep_alive](#tcp_keep_alive) + :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) + :material-plus: [tcp_keep_alive](#tcp_keep_alive) :material-plus: [tcp_keep_alive_interval](#tcp_keep_alive_interval) !!! quote "sing-box 1.12.0 中的更改" diff --git a/sing-box/docs/configuration/shared/dns01_challenge.md b/sing-box/docs/configuration/shared/dns01_challenge.md index 23265bd64e..904803e675 100644 --- a/sing-box/docs/configuration/shared/dns01_challenge.md +++ b/sing-box/docs/configuration/shared/dns01_challenge.md @@ -4,7 +4,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" - :material-plus: [alidns.security_token](#security_token) + :material-plus: [alidns.security_token](#security_token) :material-plus: [cloudflare.zone_token](#zone_token) ### Structure diff --git a/sing-box/docs/configuration/shared/dns01_challenge.zh.md b/sing-box/docs/configuration/shared/dns01_challenge.zh.md index c316a9fd30..7fb89c114f 100644 --- a/sing-box/docs/configuration/shared/dns01_challenge.zh.md +++ b/sing-box/docs/configuration/shared/dns01_challenge.zh.md @@ -4,7 +4,7 @@ icon: material/new-box !!! quote "sing-box 1.13.0 中的更改" - :material-plus: [alidns.security_token](#security_token) + :material-plus: [alidns.security_token](#security_token) :material-plus: [cloudflare.zone_token](#zone_token) ### 结构 diff --git a/sing-box/docs/configuration/shared/listen.md b/sing-box/docs/configuration/shared/listen.md index 5da32ff0b7..55325564a4 100644 --- a/sing-box/docs/configuration/shared/listen.md +++ b/sing-box/docs/configuration/shared/listen.md @@ -4,7 +4,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" - :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) + :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) :material-alert: [tcp_keep_alive](#tcp_keep_alive) !!! quote "Changes in sing-box 1.12.0" diff --git a/sing-box/docs/configuration/shared/listen.zh.md b/sing-box/docs/configuration/shared/listen.zh.md index 90cf6a797a..905cea3cd8 100644 --- a/sing-box/docs/configuration/shared/listen.zh.md +++ b/sing-box/docs/configuration/shared/listen.zh.md @@ -4,7 +4,7 @@ icon: material/new-box !!! quote "sing-box 1.13.0 中的更改" - :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) + :material-plus: [disable_tcp_keep_alive](#disable_tcp_keep_alive) :material-alert: [tcp_keep_alive](#tcp_keep_alive) !!! quote "sing-box 1.12.0 中的更改" diff --git a/sing-box/docs/configuration/shared/pre-match.md b/sing-box/docs/configuration/shared/pre-match.md new file mode 100644 index 0000000000..180099aa6c --- /dev/null +++ b/sing-box/docs/configuration/shared/pre-match.md @@ -0,0 +1,39 @@ +--- +icon: material/new-box +--- + +# Pre-match + +!!! quote "Changes in sing-box 1.13.0" + + :material-plus: [bypass](#bypass) + +Pre-match is rule matching that runs before the connection is established. + +### How it works + +When TUN receives a connection request, the connection has not yet been established, +so no connection data can be read. In this phase, sing-box runs the routing rules in pre-match mode. + +Since connection data is unavailable, only actions that do not require connection data can be executed. +When a rule matches an action that requires an established connection, pre-match stops at that rule. + +### Supported actions + +#### reject + +Reject with TCP RST / ICMP unreachable. + +#### route + +Route ICMP connections to the specified outbound for direct reply. + +#### bypass + +!!! question "Since sing-box 1.13.0" + +!!! quote "" + + Only supported on Linux with `auto_redirect` enabled. + +Bypass sing-box and connect directly at kernel level. diff --git a/sing-box/docs/configuration/shared/pre-match.zh.md b/sing-box/docs/configuration/shared/pre-match.zh.md new file mode 100644 index 0000000000..c615070f4f --- /dev/null +++ b/sing-box/docs/configuration/shared/pre-match.zh.md @@ -0,0 +1,37 @@ +--- +icon: material/new-box +--- + +# 预匹配 + +!!! quote "sing-box 1.13.0 中的更改" + + :material-plus: [bypass](#bypass) + +预匹配是在连接建立之前运行的规则匹配。 + +### 工作原理 + +当 TUN 收到连接请求时,连接尚未建立,因此无法读取连接数据。在此阶段,sing-box 在预匹配模式下运行路由规则。 + +由于连接数据不可用,只有不需要连接数据的动作才能执行。当规则匹配到需要已建立连接的动作时,预匹配将在该规则处停止。 + +### 支持的动作 + +#### reject + +以 TCP RST / ICMP 不可达拒绝。 + +#### route + +将 ICMP 连接路由到指定出站以直接回复。 + +#### bypass + +!!! question "自 sing-box 1.13.0 起" + +!!! quote "" + + 仅支持 Linux,且需要启用 `auto_redirect`。 + +在内核层面绕过 sing-box 直接连接。 diff --git a/sing-box/docs/configuration/shared/tls.md b/sing-box/docs/configuration/shared/tls.md index c388061dc2..a1e24e7c8d 100644 --- a/sing-box/docs/configuration/shared/tls.md +++ b/sing-box/docs/configuration/shared/tls.md @@ -26,7 +26,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.10.0" - :material-alert-decagram: [utls](#utls) + :material-alert-decagram: [utls](#utls) ### Inbound diff --git a/sing-box/docs/configuration/shared/tls.zh.md b/sing-box/docs/configuration/shared/tls.zh.md index a79d864d3c..279dcf17be 100644 --- a/sing-box/docs/configuration/shared/tls.zh.md +++ b/sing-box/docs/configuration/shared/tls.zh.md @@ -18,15 +18,15 @@ icon: material/new-box !!! quote "sing-box 1.12.0 中的更改" - :material-plus: [fragment](#fragment) - :material-plus: [fragment_fallback_delay](#fragment_fallback_delay) - :material-plus: [record_fragment](#record_fragment) - :material-delete-clock: [ech.pq_signature_schemes_enabled](#pq_signature_schemes_enabled) + :material-plus: [fragment](#fragment) + :material-plus: [fragment_fallback_delay](#fragment_fallback_delay) + :material-plus: [record_fragment](#record_fragment) + :material-delete-clock: [ech.pq_signature_schemes_enabled](#pq_signature_schemes_enabled) :material-delete-clock: [ech.dynamic_record_sizing_disabled](#dynamic_record_sizing_disabled) !!! quote "sing-box 1.10.0 中的更改" - :material-alert-decagram: [utls](#utls) + :material-alert-decagram: [utls](#utls) ### 入站 diff --git a/sing-box/docs/configuration/shared/wifi-state.md b/sing-box/docs/configuration/shared/wifi-state.md index b509d0e9b1..a32675b396 100644 --- a/sing-box/docs/configuration/shared/wifi-state.md +++ b/sing-box/docs/configuration/shared/wifi-state.md @@ -6,7 +6,7 @@ icon: material/new-box !!! quote "Changes in sing-box 1.13.0" - :material-plus: Linux support + :material-plus: Linux support :material-plus: Windows support sing-box can monitor Wi-Fi state to enable routing rules based on `wifi_ssid` and `wifi_bssid`. diff --git a/sing-box/docs/configuration/shared/wifi-state.zh.md b/sing-box/docs/configuration/shared/wifi-state.zh.md index a44340cf26..02e8b6c920 100644 --- a/sing-box/docs/configuration/shared/wifi-state.zh.md +++ b/sing-box/docs/configuration/shared/wifi-state.zh.md @@ -6,7 +6,7 @@ icon: material/new-box !!! quote "sing-box 1.13.0 的变更" - :material-plus: Linux 支持 + :material-plus: Linux 支持 :material-plus: Windows 支持 sing-box 可以监控 Wi-Fi 状态,以启用基于 `wifi_ssid` 和 `wifi_bssid` 的路由规则。 diff --git a/sing-box/go.mod b/sing-box/go.mod index e3c3de8334..42637f7d66 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -26,8 +26,8 @@ require ( github.com/sagernet/asc-go v0.0.0-20241217030726-d563060fe4e1 github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a github.com/sagernet/cors v1.2.1 - github.com/sagernet/cronet-go v0.0.0-20251222042025-2235d8db9f7f - github.com/sagernet/cronet-go/all v0.0.0-20251222042025-2235d8db9f7f + github.com/sagernet/cronet-go v0.0.0-20251225133447-a96cfe4f6a69 + github.com/sagernet/cronet-go/all v0.0.0-20251225133447-a96cfe4f6a69 github.com/sagernet/fswatch v0.1.1 github.com/sagernet/gomobile v0.1.10 github.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1 @@ -38,7 +38,7 @@ require ( github.com/sagernet/sing-shadowsocks v0.2.8 github.com/sagernet/sing-shadowsocks2 v0.2.1 github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 - github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251201004738-e9e3fbf0c15e + github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251226064455-a850c4f8a1c8 github.com/sagernet/sing-vmess v0.2.8-0.20250909125414-3aed155119a1 github.com/sagernet/smux v1.5.34-mod.2 github.com/sagernet/tailscale v1.92.4-sing-box-1.13-mod.3.0.20251225080651-3b25379a5bf8 @@ -73,6 +73,7 @@ require ( github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa // indirect github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect github.com/ebitengine/purego v0.9.1 // indirect + github.com/florianl/go-nfqueue/v2 v2.0.2 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gaissmai/bart v0.18.0 // indirect @@ -101,28 +102,28 @@ require ( github.com/prometheus-community/pro-bing v0.4.0 // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/safchain/ethtool v0.3.0 // indirect - github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251222041542-7fa506facd17 // indirect - github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251222041542-7fa506facd17 // indirect + github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251225132957-e1f82dabebce // indirect + github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251225132957-e1f82dabebce // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/sagernet/nftables v0.3.0-beta.4 // indirect github.com/spf13/pflag v1.0.9 // indirect diff --git a/sing-box/go.sum b/sing-box/go.sum index fcc074225e..a98f3143ee 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -39,6 +39,8 @@ github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 h1:CaO/zOnF8VvUfEbhRatPcwKVWamvbY github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/florianl/go-nfqueue/v2 v2.0.2 h1:FL5lQTeetgpCvac1TRwSfgaXUn0YSO7WzGvWNIp3JPE= +github.com/florianl/go-nfqueue/v2 v2.0.2/go.mod h1:VA09+iPOT43OMoCKNfXHyzujQUty2xmzyCRkBOlmabc= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= @@ -143,54 +145,54 @@ github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a h1:+NkI2670SQpQWvkk github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a/go.mod h1:63s7jpZqcDAIpj8oI/1v4Izok+npJOHACFCU6+huCkM= github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ= github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI= -github.com/sagernet/cronet-go v0.0.0-20251222042025-2235d8db9f7f h1:F8MAWpgYSZp9xAuvmiqRRF2fydn49qbao3pFduuClYw= -github.com/sagernet/cronet-go v0.0.0-20251222042025-2235d8db9f7f/go.mod h1:hwFHBEjjthyEquDULbr4c4ucMedp8Drb6Jvm2kt/0Bw= -github.com/sagernet/cronet-go/all v0.0.0-20251222042025-2235d8db9f7f h1:oxWJoIIF19Zcp438OTQLtXhFHcYzjw+QRjwhhOzRRrQ= -github.com/sagernet/cronet-go/all v0.0.0-20251222042025-2235d8db9f7f/go.mod h1:TTaiEGVltL4Dzde1pL5f8hxbsNhOZmsEBEUC0yqGiyw= -github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251222041542-7fa506facd17 h1:Mi/DrxIKK20bkvr8qV6Fxa/dc6yoRpyFkqe/HcVwxYE= -github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251222041542-7fa506facd17/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw= -github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251222041542-7fa506facd17 h1:T07c63qkYlZCs2nDZL4Tt2FJQFKWoj6GThlw3Osq3PY= -github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM= -github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251222041542-7fa506facd17 h1:wDect54Q6dTMtChbHmpe64KZ/nJjv2o0NcysTyVFq88= -github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251222041542-7fa506facd17/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc= -github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251222041542-7fa506facd17 h1:DkPqqL8AH/Lj2i+0z7/7qmDCIhveKp+TXNcxI6ZF0Xg= -github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ= -github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251222041542-7fa506facd17 h1:Is0ifg/hoF00wFvaHDLqAuEb4Jl/bENQq6x6jRhubV0= -github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs= -github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251222041542-7fa506facd17 h1:2r2ikm5/GGypJOHfBpCMgOZoYzv+aV3yvaH/SPeHfPI= -github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0= -github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251222041542-7fa506facd17 h1:j3fEUwtZ2LGrO6PzmgEGLMl5fea5wWi3SdilRugIICM= -github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251222041542-7fa506facd17/go.mod h1:hkQzRE5GDbaH1/ioqYh0Taho4L6i0yLRCVEZ5xHz5M0= -github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251222041542-7fa506facd17 h1:kurrkp2s0NJhjJZYwGX/vi3BxO9Fb35BWApx70G4dlI= -github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4= -github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251222041542-7fa506facd17 h1:cDHzVFgU2ltySWhYWfH2sOuOn+EdgK9z+l46jrIFyhw= -github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251222041542-7fa506facd17/go.mod h1:M/pN6m3j0HFU6/y83n0HU6GLYys3tYdr/xTE8hVEGMo= -github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251222041542-7fa506facd17 h1:7U/ckrSuJ97R8aN+9B2MNc7F2vVE+2yBa5rsojYSJcA= -github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251222041542-7fa506facd17/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ= -github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251222041542-7fa506facd17 h1:IfmxdknkJuwdMIlMLLtKLUdeZLlUTGmOT9G3AatLQLA= -github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251222041542-7fa506facd17/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU= -github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251222041542-7fa506facd17 h1:DscNAuZZ8R1ubT6z2pIyZ+sVTIaoE7d7Y+PpJq5pTxY= -github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI= -github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251222041542-7fa506facd17 h1:vNFAvJYE+8eTMbLC4B8Bx6lxG1SFA3yTd7QqFNAo0fE= -github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251222041542-7fa506facd17/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ= -github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251222041542-7fa506facd17 h1:dEqWelap2tzWTtp7tUGEvvGdgPanBQceU2Kszn2A4Uc= -github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251222041542-7fa506facd17/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0= -github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251222041542-7fa506facd17 h1:JYD1fglGfabg0/rQv4NT3DpOUMw2cYnp9ywa+zdFjDI= -github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s= -github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251222041542-7fa506facd17 h1:oGurnJbJF2jUx8qt5Hge5m8bZ+bC0bg7Rj1QIy+iIig= -github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251222041542-7fa506facd17/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ= -github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251222041542-7fa506facd17 h1:3TpHov3UIWwFcoGMO9d4+V6wAZZL2FaGg2YQSKxXT3I= -github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251222041542-7fa506facd17/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow= -github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251222041542-7fa506facd17 h1:BY6yotGRpBWO++kJ4Y4ny4aJQLLe674KOrZfBT5Kf0A= -github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251222041542-7fa506facd17/go.mod h1:aaX0YGl8nhGmfRWI8bc3BtDjY8Vzx6O0cS/e1uqxDq4= -github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251222041542-7fa506facd17 h1:tKhSyhd0YdwnMMrxionY5Tii3f1S7L8VPn2prliEVrY= -github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:EdzMKA96xITc42QEI+ct4SwqX8Dn3ltKK8wzdkLWpSc= -github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251222041542-7fa506facd17 h1:4lhYLzCAQVoOzt3IEjSApyIW4yNujJ5ppemztvi4rhE= -github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251222041542-7fa506facd17/go.mod h1:qix4kv1TTAJ5tY4lJ9vjhe9EY4mM+B7H5giOhbxDVcc= -github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251222041542-7fa506facd17 h1:PQjICo8R+uWDyssgqsno3Xh3YJ/qYQHEqXW3FYPSi+Y= -github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8= -github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251222041542-7fa506facd17 h1:dba+qxmctcQ7jvOufwICi92u7NQ03DGPlB+KPPzpBWg= -github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251222041542-7fa506facd17/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw= +github.com/sagernet/cronet-go v0.0.0-20251225133447-a96cfe4f6a69 h1:5K8s47TvmoS6YhpuOu8cUx1fiyu/gzGMnp4s/56eBPg= +github.com/sagernet/cronet-go v0.0.0-20251225133447-a96cfe4f6a69/go.mod h1:hwFHBEjjthyEquDULbr4c4ucMedp8Drb6Jvm2kt/0Bw= +github.com/sagernet/cronet-go/all v0.0.0-20251225133447-a96cfe4f6a69 h1:noutQedWtKA4Ry5HxAC0egq1/jPXhQLNGOhSBTvya+k= +github.com/sagernet/cronet-go/all v0.0.0-20251225133447-a96cfe4f6a69/go.mod h1:u8a+w3gHb1QMe5f3GeF6doqIb31ih4AvBCUiBMWK5Bg= +github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251225132957-e1f82dabebce h1:CyXJpJcFo2AFAq5hNDB1OeBRK/KR8CCeGPVwNXLaqi0= +github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw= +github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251225132957-e1f82dabebce h1:awEG+TXzD4znoMCuTTJeMVyk9aH1tlabPOvu8cpnCWA= +github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM= +github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251225132957-e1f82dabebce h1:FYYqebFnu0O3hl2N/ocq3ihQhSLfghFwubufRmQ0JQs= +github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251225132957-e1f82dabebce/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc= +github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251225132957-e1f82dabebce h1:DWRUyY8Qdvso655bwlQxsIcIZoX1LdWkua4dVCJAKm8= +github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ= +github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251225132957-e1f82dabebce h1:BIfMCrlftqJ05lQ6fmreS6fMqh+d31c+IRF4SEBP0EY= +github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs= +github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251225132957-e1f82dabebce h1:S9kEuMdmx9QDoyCvBNmSs1wlV8KvdIYEdRu0tjeVnZQ= +github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0= +github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251225132957-e1f82dabebce h1:EBNErcQd9OPNKUQ9Jo46GA1uzNZ8RZNFaBkowTlfcSU= +github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20251225132957-e1f82dabebce/go.mod h1:hkQzRE5GDbaH1/ioqYh0Taho4L6i0yLRCVEZ5xHz5M0= +github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251225132957-e1f82dabebce h1:ySs/dm/1beLRapdP7O1nkex2vCNhttOwz0lnicWdAmU= +github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4= +github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251225132957-e1f82dabebce h1:XiBQoMqRJnHNNBss517YO6YVtpe0Ib2JbrtApbHvl6k= +github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20251225132957-e1f82dabebce/go.mod h1:M/pN6m3j0HFU6/y83n0HU6GLYys3tYdr/xTE8hVEGMo= +github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251225132957-e1f82dabebce h1:JpqQvxgAH8Eb1IAOu2nj/DjDqEyGhribM+wQXNW2/vE= +github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ= +github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251225132957-e1f82dabebce h1:+SrPJfEs+Pp24O7agLam0q3DMgB64KCxAybsIGW1EUI= +github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251225132957-e1f82dabebce/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU= +github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251225132957-e1f82dabebce h1:i/sy1n46uteSLFnfGAchey68xTvZuxXzF+Qtn9X9ABk= +github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI= +github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251225132957-e1f82dabebce h1:D0BPW5r0GphBcFfXMcQeD/9DCs1Y0PFpW2cHZ7ec7jc= +github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251225132957-e1f82dabebce/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ= +github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251225132957-e1f82dabebce h1:qO+gLXeZmqVIki2mbtJnjUNhDbaAJB4t0Mb8YNO+ySM= +github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251225132957-e1f82dabebce/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0= +github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251225132957-e1f82dabebce h1:wthfnFHICUX687wgrL6YL1LYHJrfATWUz76jRIZ7EA0= +github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s= +github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251225132957-e1f82dabebce h1:gQMi9YHQvAMq5yzXpoWZ7aCCtnBVvVryCnpONc6Xvtg= +github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251225132957-e1f82dabebce/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ= +github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251225132957-e1f82dabebce h1:NkzbN5KmVJLbXkenOTeiCBOLJQBi3vBlKYFtuQ4nK4w= +github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251225132957-e1f82dabebce/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow= +github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251225132957-e1f82dabebce h1:a76cCOcshqixwueb56hnGcUyyad/2M34nxTgLDa8xo4= +github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20251225132957-e1f82dabebce/go.mod h1:aaX0YGl8nhGmfRWI8bc3BtDjY8Vzx6O0cS/e1uqxDq4= +github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251225132957-e1f82dabebce h1:OU2WMFXlC2IsBHi2xrLWROa3Pw2dNBJ5RAwIFBNg9lM= +github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:EdzMKA96xITc42QEI+ct4SwqX8Dn3ltKK8wzdkLWpSc= +github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251225132957-e1f82dabebce h1:YCmnoOcnZtaQuoy9YX0AKhXCuDYYn21hrNa7sMkjM7k= +github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20251225132957-e1f82dabebce/go.mod h1:qix4kv1TTAJ5tY4lJ9vjhe9EY4mM+B7H5giOhbxDVcc= +github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251225132957-e1f82dabebce h1:a1qP/Kr90j9rHzsw1aOe2o9auDey9GbyJchh99xWMRc= +github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8= +github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251225132957-e1f82dabebce h1:q5AKReJPyQndi9+/fYVTx7Jgoy8Q+6lHVnbzoiPauQE= +github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251225132957-e1f82dabebce/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw= github.com/sagernet/fswatch v0.1.1 h1:YqID+93B7VRfqIH3PArW/XpJv5H4OLEVWDfProGoRQs= github.com/sagernet/fswatch v0.1.1/go.mod h1:nz85laH0mkQqJfaOrqPpkwtU1znMFNVTpT/5oRsVz/o= github.com/sagernet/gomobile v0.1.10 h1:ElqZ0OVDvyQlU91MU0C9cfU0FrILBbc65+NOKzZ1t0c= @@ -216,8 +218,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.1 h1:dWV9OXCeFPuYGHb6IRqlSptVnSzOelnq github.com/sagernet/sing-shadowsocks2 v0.2.1/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 h1:tK+75l64tm9WvEFrYRE1t0YxoFdWQqw/h7Uhzj0vJ+w= github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11/go.mod h1:sWqKnGlMipCHaGsw1sTTlimyUpgzP4WP3pjhCsYt9oA= -github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251201004738-e9e3fbf0c15e h1:ZEv+9vy7vC1vbr3LfwZGx3JAOkl/w4+hnGamHw4W36M= -github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251201004738-e9e3fbf0c15e/go.mod h1:eWETzl4AwaxGKiZTpDIDVJLTBz9cfIdoZwaZY1jlSjg= +github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251226064455-a850c4f8a1c8 h1:aIgk6YzS/7fNm92CycFWzithdwIc+NAwXGHAJce1dyM= +github.com/sagernet/sing-tun v0.8.0-beta.11.0.20251226064455-a850c4f8a1c8/go.mod h1:+HAK/y9GZljdT0KYKMYDR8MjjqnqDDQZYp5ZZQoRzS8= github.com/sagernet/sing-vmess v0.2.8-0.20250909125414-3aed155119a1 h1:aSwUNYUkVyVvdmBSufR8/nRFonwJeKSIROxHcm5br9o= github.com/sagernet/sing-vmess v0.2.8-0.20250909125414-3aed155119a1/go.mod h1:P11scgTxMxVVQ8dlM27yNm3Cro40mD0+gHbnqrNGDuY= github.com/sagernet/smux v1.5.34-mod.2 h1:gkmBjIjlJ2zQKpLigOkFur5kBKdV6bNRoFu2WkltRQ4= diff --git a/sing-box/log/log.go b/sing-box/log/log.go index 7b8f284350..3a1c6537ab 100644 --- a/sing-box/log/log.go +++ b/sing-box/log/log.go @@ -40,6 +40,7 @@ func New(options Options) (Factory, error) { case "stdout": logWriter = os.Stdout default: + logWriter = io.Discard logFilePath = logOptions.Output } logFormatter := Formatter{ diff --git a/sing-box/mkdocs.yml b/sing-box/mkdocs.yml index 236252b983..7683d3768c 100644 --- a/sing-box/mkdocs.yml +++ b/sing-box/mkdocs.yml @@ -122,6 +122,7 @@ nav: - Dial Fields: configuration/shared/dial.md - TLS: configuration/shared/tls.md - DNS01 Challenge Fields: configuration/shared/dns01_challenge.md + - Pre-match: configuration/shared/pre-match.md - Multiplex: configuration/shared/multiplex.md - V2Ray Transport: configuration/shared/v2ray-transport.md - UDP over TCP: configuration/shared/udp-over-tcp.md diff --git a/sing-box/option/rule_action.go b/sing-box/option/rule_action.go index e28b58eb30..48326aed23 100644 --- a/sing-box/option/rule_action.go +++ b/sing-box/option/rule_action.go @@ -18,6 +18,7 @@ type _RuleAction struct { RouteOptions RouteActionOptions `json:"-"` RouteOptionsOptions RouteOptionsActionOptions `json:"-"` DirectOptions DirectActionOptions `json:"-"` + BypassOptions RouteActionOptions `json:"-"` RejectOptions RejectActionOptions `json:"-"` SniffOptions RouteActionSniff `json:"-"` ResolveOptions RouteActionResolve `json:"-"` @@ -38,6 +39,8 @@ func (r RuleAction) MarshalJSON() ([]byte, error) { v = r.RouteOptionsOptions case C.RuleActionTypeDirect: v = r.DirectOptions + case C.RuleActionTypeBypass: + v = r.BypassOptions case C.RuleActionTypeReject: v = r.RejectOptions case C.RuleActionTypeHijackDNS: @@ -69,6 +72,8 @@ func (r *RuleAction) UnmarshalJSON(data []byte) error { v = &r.RouteOptionsOptions case C.RuleActionTypeDirect: v = &r.DirectOptions + case C.RuleActionTypeBypass: + v = &r.BypassOptions case C.RuleActionTypeReject: v = &r.RejectOptions case C.RuleActionTypeHijackDNS: @@ -84,7 +89,14 @@ func (r *RuleAction) UnmarshalJSON(data []byte) error { // check unknown fields return json.UnmarshalDisallowUnknownFields(data, &_RuleAction{}) } - return badjson.UnmarshallExcluded(data, (*_RuleAction)(r), v) + err = badjson.UnmarshallExcluded(data, (*_RuleAction)(r), v) + if err != nil { + return err + } + if r.Action == C.RuleActionTypeBypass && r.BypassOptions.Outbound == "" { + return E.New("missing outbound for bypass action") + } + return nil } type _DNSRuleAction struct { diff --git a/sing-box/option/tun.go b/sing-box/option/tun.go index ca8e3a1136..48989c9f91 100644 --- a/sing-box/option/tun.go +++ b/sing-box/option/tun.go @@ -20,6 +20,8 @@ type TunInboundOptions struct { AutoRedirect bool `json:"auto_redirect,omitempty"` AutoRedirectInputMark FwMark `json:"auto_redirect_input_mark,omitempty"` AutoRedirectOutputMark FwMark `json:"auto_redirect_output_mark,omitempty"` + AutoRedirectResetMark FwMark `json:"auto_redirect_reset_mark,omitempty"` + AutoRedirectNFQueue uint16 `json:"auto_redirect_nfqueue,omitempty"` ExcludeMPTCP bool `json:"exclude_mptcp,omitempty"` LoopbackAddress badoption.Listable[netip.Addr] `json:"loopback_address,omitempty"` StrictRoute bool `json:"strict_route,omitempty"` diff --git a/sing-box/protocol/tailscale/endpoint.go b/sing-box/protocol/tailscale/endpoint.go index 06b8d0bbad..294dd051d3 100644 --- a/sing-box/protocol/tailscale/endpoint.go +++ b/sing-box/protocol/tailscale/endpoint.go @@ -465,8 +465,15 @@ func (t *Endpoint) PrepareConnection(network string, source M.Socksaddr, destina Destination: destination, }, routeContext, timeout) if err != nil { - if !rule.IsRejected(err) { - t.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + switch { + case rule.IsBypassed(err): + err = nil + case rule.IsRejected(err): + t.logger.Trace("reject ", network, " connection from ", source.AddrString(), " to ", destination.AddrString()) + default: + if network == N.NetworkICMP { + t.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + } } } return routeDestination, err diff --git a/sing-box/protocol/tun/inbound.go b/sing-box/protocol/tun/inbound.go index 1cb2f30913..43f6680c14 100644 --- a/sing-box/protocol/tun/inbound.go +++ b/sing-box/protocol/tun/inbound.go @@ -182,6 +182,14 @@ func NewInbound(ctx context.Context, router adapter.Router, logger log.ContextLo if outputMark == 0 { outputMark = tun.DefaultAutoRedirectOutputMark } + resetMark := uint32(options.AutoRedirectResetMark) + if resetMark == 0 { + resetMark = tun.DefaultAutoRedirectResetMark + } + nfQueue := options.AutoRedirectNFQueue + if nfQueue == 0 { + nfQueue = tun.DefaultAutoRedirectNFQueue + } networkManager := service.FromContext[adapter.NetworkManager](ctx) multiPendingPackets := C.IsDarwin && ((options.Stack == "gvisor" && tunMTU < 32768) || (options.Stack != "gvisor" && options.MTU <= 9000)) inbound := &Inbound{ @@ -202,6 +210,8 @@ func NewInbound(ctx context.Context, router adapter.Router, logger log.ContextLo IPRoute2RuleIndex: ruleIndex, AutoRedirectInputMark: inputMark, AutoRedirectOutputMark: outputMark, + AutoRedirectResetMark: resetMark, + AutoRedirectNFQueue: nfQueue, ExcludeMPTCP: options.ExcludeMPTCP, Inet4LoopbackAddress: common.Filter(options.LoopbackAddress, netip.Addr.Is4), Inet6LoopbackAddress: common.Filter(options.LoopbackAddress, netip.Addr.Is6), @@ -472,8 +482,15 @@ func (t *Inbound) PrepareConnection(network string, source M.Socksaddr, destinat InboundOptions: t.inboundOptions, }, routeContext, timeout) if err != nil { - if !rule.IsRejected(err) { - t.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + switch { + case rule.IsBypassed(err): + err = nil + case rule.IsRejected(err): + t.logger.Trace("reject ", network, " connection from ", source.AddrString(), " to ", destination.AddrString()) + default: + if network == N.NetworkICMP { + t.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + } } } return routeDestination, err @@ -509,6 +526,37 @@ func (t *Inbound) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, type autoRedirectHandler Inbound +func (t *autoRedirectHandler) PrepareConnection(network string, source M.Socksaddr, destination M.Socksaddr, routeContext tun.DirectRouteContext, timeout time.Duration) (tun.DirectRouteDestination, error) { + var ipVersion uint8 + if !destination.IsIPv6() { + ipVersion = 4 + } else { + ipVersion = 6 + } + routeDestination, err := t.router.PreMatch(adapter.InboundContext{ + Inbound: t.tag, + InboundType: C.TypeTun, + IPVersion: ipVersion, + Network: network, + Source: source, + Destination: destination, + InboundOptions: t.inboundOptions, + }, routeContext, timeout) + if err != nil { + switch { + case rule.IsBypassed(err): + t.logger.Trace("bypass ", network, " connection from ", source.AddrString(), " to ", destination.AddrString()) + case rule.IsRejected(err): + t.logger.Trace("reject ", network, " connection from ", source.AddrString(), " to ", destination.AddrString()) + default: + if network == N.NetworkICMP { + t.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + } + } + } + return routeDestination, err +} + func (t *autoRedirectHandler) NewConnectionEx(ctx context.Context, conn net.Conn, source M.Socksaddr, destination M.Socksaddr, onClose N.CloseHandlerFunc) { ctx = log.ContextWithNewID(ctx) var metadata adapter.InboundContext @@ -522,3 +570,7 @@ func (t *autoRedirectHandler) NewConnectionEx(ctx context.Context, conn net.Conn t.logger.InfoContext(ctx, "inbound connection to ", metadata.Destination) t.router.RouteConnectionEx(ctx, conn, metadata, onClose) } + +func (t *autoRedirectHandler) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, source M.Socksaddr, destination M.Socksaddr, onClose N.CloseHandlerFunc) { + panic("unexcepted") +} diff --git a/sing-box/protocol/wireguard/endpoint.go b/sing-box/protocol/wireguard/endpoint.go index 811c6bb472..a68d3b3688 100644 --- a/sing-box/protocol/wireguard/endpoint.go +++ b/sing-box/protocol/wireguard/endpoint.go @@ -142,8 +142,15 @@ func (w *Endpoint) PrepareConnection(network string, source M.Socksaddr, destina Destination: destination, }, routeContext, timeout) if err != nil { - if !rule.IsRejected(err) { - w.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + switch { + case rule.IsBypassed(err): + err = nil + case rule.IsRejected(err): + w.logger.Trace("reject ", network, " connection from ", source.AddrString(), " to ", destination.AddrString()) + default: + if network == N.NetworkICMP { + w.logger.Warn(E.Cause(err, "link ", network, " connection from ", source.AddrString(), " to ", destination.AddrString())) + } } } return routeDestination, err diff --git a/sing-box/route/route.go b/sing-box/route/route.go index 2f1d01f7bb..2e4b854a21 100644 --- a/sing-box/route/route.go +++ b/sing-box/route/route.go @@ -113,6 +113,17 @@ func (r *Router) routeConnection(ctx context.Context, conn net.Conn, metadata ad buf.ReleaseMulti(buffers) return E.New("TCP is not supported by outbound: ", selectedOutbound.Tag()) } + case *R.RuleActionBypass: + var loaded bool + selectedOutbound, loaded = r.outbound.Outbound(action.Outbound) + if !loaded { + buf.ReleaseMulti(buffers) + return E.New("outbound not found: ", action.Outbound) + } + if !common.Contains(selectedOutbound.Network(), N.NetworkTCP) { + buf.ReleaseMulti(buffers) + return E.New("TCP is not supported by outbound: ", selectedOutbound.Tag()) + } case *R.RuleActionReject: buf.ReleaseMulti(buffers) if action.Method == C.RuleActionRejectMethodReply { @@ -231,6 +242,17 @@ func (r *Router) routePacketConnection(ctx context.Context, conn N.PacketConn, m N.ReleaseMultiPacketBuffer(packetBuffers) return E.New("UDP is not supported by outbound: ", selectedOutbound.Tag()) } + case *R.RuleActionBypass: + var loaded bool + selectedOutbound, loaded = r.outbound.Outbound(action.Outbound) + if !loaded { + N.ReleaseMultiPacketBuffer(packetBuffers) + return E.New("outbound not found: ", action.Outbound) + } + if !common.Contains(selectedOutbound.Network(), N.NetworkUDP) { + N.ReleaseMultiPacketBuffer(packetBuffers) + return E.New("UDP is not supported by outbound: ", selectedOutbound.Tag()) + } case *R.RuleActionReject: N.ReleaseMultiPacketBuffer(packetBuffers) if action.Method == C.RuleActionRejectMethodReply { @@ -287,6 +309,8 @@ func (r *Router) PreMatch(metadata adapter.InboundContext, routeContext tun.Dire } } return nil, action.Error(context.Background()) + case *R.RuleActionBypass: + return nil, &R.BypassedError{Cause: tun.ErrBypass} case *R.RuleActionRoute: if routeContext == nil { return nil, nil @@ -567,7 +591,8 @@ match: actionType := currentRule.Action().Type() if actionType == C.RuleActionTypeRoute || actionType == C.RuleActionTypeReject || - actionType == C.RuleActionTypeHijackDNS { + actionType == C.RuleActionTypeHijackDNS || + actionType == C.RuleActionTypeBypass { selectedRule = currentRule selectedRuleIndex = currentRuleIndex break match diff --git a/sing-box/route/rule/rule_action.go b/sing-box/route/rule/rule_action.go index 5c08109af5..f4608e0ae2 100644 --- a/sing-box/route/rule/rule_action.go +++ b/sing-box/route/rule/rule_action.go @@ -56,6 +56,21 @@ func NewRuleAction(ctx context.Context, logger logger.ContextLogger, action opti TLSFragmentFallbackDelay: time.Duration(action.RouteOptionsOptions.TLSFragmentFallbackDelay), TLSRecordFragment: action.RouteOptionsOptions.TLSRecordFragment, }, nil + case C.RuleActionTypeBypass: + return &RuleActionBypass{ + Outbound: action.BypassOptions.Outbound, + RuleActionRouteOptions: RuleActionRouteOptions{ + OverrideAddress: M.ParseSocksaddrHostPort(action.BypassOptions.OverrideAddress, 0), + OverridePort: action.BypassOptions.OverridePort, + NetworkStrategy: (*C.NetworkStrategy)(action.BypassOptions.NetworkStrategy), + FallbackDelay: time.Duration(action.BypassOptions.FallbackDelay), + UDPDisableDomainUnmapping: action.BypassOptions.UDPDisableDomainUnmapping, + UDPConnect: action.BypassOptions.UDPConnect, + TLSFragment: action.BypassOptions.TLSFragment, + TLSFragmentFallbackDelay: time.Duration(action.BypassOptions.TLSFragmentFallbackDelay), + TLSRecordFragment: action.BypassOptions.TLSRecordFragment, + }, + }, nil case C.RuleActionTypeDirect: directDialer, err := dialer.New(ctx, option.DialerOptions(action.DirectOptions), false) if err != nil { @@ -158,6 +173,22 @@ func (r *RuleActionRoute) String() string { return F.ToString("route(", strings.Join(descriptions, ","), ")") } +type RuleActionBypass struct { + Outbound string + RuleActionRouteOptions +} + +func (r *RuleActionBypass) Type() string { + return C.RuleActionTypeBypass +} + +func (r *RuleActionBypass) String() string { + var descriptions []string + descriptions = append(descriptions, r.Outbound) + descriptions = append(descriptions, r.Descriptions()...) + return F.ToString("bypass(", strings.Join(descriptions, ","), ")") +} + type RuleActionRouteOptions struct { OverrideAddress M.Socksaddr OverridePort uint16 @@ -301,6 +332,23 @@ func IsRejected(err error) bool { return errors.As(err, &rejected) } +type BypassedError struct { + Cause error +} + +func (b *BypassedError) Error() string { + return "bypassed" +} + +func (b *BypassedError) Unwrap() error { + return b.Cause +} + +func IsBypassed(err error) bool { + var bypassed *BypassedError + return errors.As(err, &bypassed) +} + type RuleActionReject struct { Method string NoDrop bool diff --git a/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo b/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo index 47501317c6..aceccb5e74 100644 --- a/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo +++ b/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo @@ -118,7 +118,7 @@ const methods = { } features.app_version = trim(popen(`${use_apk ? 'apk list -I' : 'opkg list-installed'} luci-app-fchomo | ` + - `awk '{print $${use_apk ? '1' : 'NF'}}'`).read('all')) || null; // @less_25_12 + `awk '{print $${use_apk ? '1' : 'NF'}}' | sed 's|luci-app-fchomo-||'`).read('all')) || null; // @less_25_12 features.has_dnsmasq_full = system(`[ -n "$(${use_apk ? 'apk list -qI' : 'opkg list-installed'} dnsmasq-full)" ]`) == 0 || null; // @less_25_12 features.has_ip_full = access('/usr/libexec/ip-full'); diff --git a/small/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm b/small/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm index 2f1429b821..388b707b55 100644 --- a/small/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm +++ b/small/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm @@ -755,6 +755,12 @@ table td, .table .td { } } } + + function escape_html(s) { + return s.replace(/[&<>"']/g, c => ({ + "&":"&", "<":"<", ">":">", '"':""", "'":"'" + }[c])); + }