From 63a933d290b218e2b9cc2133bdd79573d156bec1 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 1 Mar 2026 20:18:53 +0800 Subject: [PATCH 01/22] add snell proxy config document --- .../add_i18n_support_20260210/index.md | 5 ++ .../add_i18n_support_20260210/metadata.json | 8 ++ .../archive/add_i18n_support_20260210/plan.md | 40 ++++++++++ .../archive/add_i18n_support_20260210/spec.md | 32 ++++++++ .../archive/anytls_doc_20260215/index.md | 5 ++ .../archive/anytls_doc_20260215/metadata.json | 8 ++ conductor/archive/anytls_doc_20260215/plan.md | 24 ++++++ conductor/archive/anytls_doc_20260215/spec.md | 43 +++++++++++ .../archive/hysteria2_proxy_20260208/index.md | 5 ++ .../hysteria2_proxy_20260208/metadata.json | 8 ++ .../archive/hysteria2_proxy_20260208/plan.md | 13 ++++ .../archive/hysteria2_proxy_20260208/spec.md | 32 ++++++++ .../logical_rule_doc_20260225/index.md | 5 ++ .../logical_rule_doc_20260225/metadata.json | 8 ++ .../archive/logical_rule_doc_20260225/plan.md | 22 ++++++ .../archive/logical_rule_doc_20260225/spec.md | 34 +++++++++ .../refactor_profile_format_20260208/index.md | 5 ++ .../metadata.json | 8 ++ .../refactor_profile_format_20260208/plan.md | 15 ++++ .../refactor_profile_format_20260208/spec.md | 17 +++++ conductor/archive/snell_doc_20260301/index.md | 5 ++ .../archive/snell_doc_20260301/metadata.json | 8 ++ conductor/archive/snell_doc_20260301/plan.md | 32 ++++++++ conductor/archive/snell_doc_20260301/spec.md | 36 +++++++++ .../archive/ss2022_doc_20260208/index.md | 5 ++ .../archive/ss2022_doc_20260208/metadata.json | 8 ++ conductor/archive/ss2022_doc_20260208/plan.md | 12 +++ conductor/archive/ss2022_doc_20260208/spec.md | 23 ++++++ conductor/tracks.md | 6 ++ docs/profile-format/overview.md | 3 + .../proxy/external-proxy/snell.md | 38 ++++++++++ docs/profile-format/proxy/index.md | 1 + .../current/profile-format/overview.md | 3 + .../proxy/external-proxy/snell.md | 38 ++++++++++ .../current/profile-format/proxy/index.md | 3 +- scripts/verify-snell-doc.mjs | 76 +++++++++++++++++++ 36 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 conductor/archive/add_i18n_support_20260210/index.md create mode 100644 conductor/archive/add_i18n_support_20260210/metadata.json create mode 100644 conductor/archive/add_i18n_support_20260210/plan.md create mode 100644 conductor/archive/add_i18n_support_20260210/spec.md create mode 100644 conductor/archive/anytls_doc_20260215/index.md create mode 100644 conductor/archive/anytls_doc_20260215/metadata.json create mode 100644 conductor/archive/anytls_doc_20260215/plan.md create mode 100644 conductor/archive/anytls_doc_20260215/spec.md create mode 100644 conductor/archive/hysteria2_proxy_20260208/index.md create mode 100644 conductor/archive/hysteria2_proxy_20260208/metadata.json create mode 100644 conductor/archive/hysteria2_proxy_20260208/plan.md create mode 100644 conductor/archive/hysteria2_proxy_20260208/spec.md create mode 100644 conductor/archive/logical_rule_doc_20260225/index.md create mode 100644 conductor/archive/logical_rule_doc_20260225/metadata.json create mode 100644 conductor/archive/logical_rule_doc_20260225/plan.md create mode 100644 conductor/archive/logical_rule_doc_20260225/spec.md create mode 100644 conductor/archive/refactor_profile_format_20260208/index.md create mode 100644 conductor/archive/refactor_profile_format_20260208/metadata.json create mode 100644 conductor/archive/refactor_profile_format_20260208/plan.md create mode 100644 conductor/archive/refactor_profile_format_20260208/spec.md create mode 100644 conductor/archive/snell_doc_20260301/index.md create mode 100644 conductor/archive/snell_doc_20260301/metadata.json create mode 100644 conductor/archive/snell_doc_20260301/plan.md create mode 100644 conductor/archive/snell_doc_20260301/spec.md create mode 100644 conductor/archive/ss2022_doc_20260208/index.md create mode 100644 conductor/archive/ss2022_doc_20260208/metadata.json create mode 100644 conductor/archive/ss2022_doc_20260208/plan.md create mode 100644 conductor/archive/ss2022_doc_20260208/spec.md create mode 100644 conductor/tracks.md create mode 100644 docs/profile-format/proxy/external-proxy/snell.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md create mode 100644 scripts/verify-snell-doc.mjs diff --git a/conductor/archive/add_i18n_support_20260210/index.md b/conductor/archive/add_i18n_support_20260210/index.md new file mode 100644 index 000000000..938852622 --- /dev/null +++ b/conductor/archive/add_i18n_support_20260210/index.md @@ -0,0 +1,5 @@ +# Track add_i18n_support_20260210 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) \ No newline at end of file diff --git a/conductor/archive/add_i18n_support_20260210/metadata.json b/conductor/archive/add_i18n_support_20260210/metadata.json new file mode 100644 index 000000000..01404d73e --- /dev/null +++ b/conductor/archive/add_i18n_support_20260210/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "add_i18n_support_20260210", + "type": "feature", + "status": "new", + "created_at": "2026-02-10T00:00:00Z", + "updated_at": "2026-02-10T00:00:00Z", + "description": "Add i18n support starting with Simplified Chinese (zh-Hans)" +} \ No newline at end of file diff --git a/conductor/archive/add_i18n_support_20260210/plan.md b/conductor/archive/add_i18n_support_20260210/plan.md new file mode 100644 index 000000000..fd5f3a2b2 --- /dev/null +++ b/conductor/archive/add_i18n_support_20260210/plan.md @@ -0,0 +1,40 @@ +# Implementation Plan - Track: add_i18n_support_20260210 + +## Phase 1: Configuration and Infrastructure [checkpoint: b94e453] +- [x] Task: Update `docusaurus.config.js` to configure `i18n` for `en` and `zh-Hans`. [83a0197] + - [x] Update `i18n` object in config. + - [x] Add `localeDropdown` to `themeConfig.navbar.items`. +- [x] Task: Verify configuration changes. [3e81130] + - [x] Run `yarn start` to verify the site starts and the language dropdown appears. +- [x] Task: Conductor - User Manual Verification 'Configuration and Infrastructure' (Protocol in workflow.md) [b94e453] + +## Phase 2: UI String Translation [checkpoint: 9de1e15] +- [x] Task: Scaffold translation files. [b5822c1] + - [x] Run `yarn docusaurus write-translations --locale zh-Hans`. +- [x] Task: Translate essential UI strings. [16948b3] + - [x] Update `i18n/zh-Hans/docusaurus-theme-classic/navbar.json` with Chinese labels. + - [x] Update `i18n/zh-Hans/docusaurus-theme-classic/footer.json` with Chinese labels. +- [x] Task: Conductor - User Manual Verification 'UI String Translation' (Protocol in workflow.md) [9de1e15] + +## Phase 3: Documentation Content Translation [checkpoint: f9a8dd0] +- [x] Task: Create i18n directory structure for docs. [e6fd427] + - [x] Create `i18n/zh-Hans/docusaurus-plugin-content-docs/current` and replicate `docs/` folder structure. +- [x] Task: Translate Documentation Files (Batch 1 - Root & Install). [7237d64] + - [x] Translate `docs/*.md` files (installation, faq, etc.) preserving technical terms. +- [x] Task: Translate Documentation Files (Batch 2 - Profiles). [b42fff7] + - [x] Translate `docs/profile-format/**/*.md` files preserving technical terms. +- [x] Task: Translate Documentation Files (Batch 3 - Proxy & Rules). [afaa1a0] + - [x] Translate remaining files in `docs/` subdirectories preserving technical terms. +- [x] Task: Conductor - User Manual Verification 'Documentation Content Translation' (Protocol in workflow.md) [f9a8dd0] + +## Phase 4: Blog Content Translation [checkpoint: b0b1a8c] +- [x] Task: Create i18n directory structure for blog. [9e9ed7c] + - [x] Create `i18n/zh-Hans/docusaurus-plugin-content-blog`. +- [x] Task: Translate Blog Posts. [9031b77] + - [x] Translate all files in `blog/` to `i18n/zh-Hans/docusaurus-plugin-content-blog/` preserving technical terms. +- [x] Task: Conductor - User Manual Verification 'Blog Content Translation' (Protocol in workflow.md) [b0b1a8c] + +## Phase 5: Final Build and Verification +- [x] Task: Verify full site build. [9adbc85] + - [ ] Run `yarn build` to ensure both locales build successfully. +- [ ] Task: Conductor - User Manual Verification 'Final Build and Verification' (Protocol in workflow.md) \ No newline at end of file diff --git a/conductor/archive/add_i18n_support_20260210/spec.md b/conductor/archive/add_i18n_support_20260210/spec.md new file mode 100644 index 000000000..9a6351790 --- /dev/null +++ b/conductor/archive/add_i18n_support_20260210/spec.md @@ -0,0 +1,32 @@ +# Specification: add_i18n_support_20260210 + +## Overview +Implement internationalization (i18n) support for the Surfboard-NG documentation website following the [official Docusaurus i18n tutorial](https://docusaurus.io/docs/i18n/tutorial), including automated translation of documentation and blog content into Simplified Chinese (`zh-Hans`). + +## Functional Requirements +- **Locale Configuration:** Update `docusaurus.config.js` to define `en` (default) and `zh-Hans` locales. +- **Navigation Integration:** Add a `localeDropdown` type item to the `navbar` in `docusaurus.config.js`. +- **UI String Translation:** Use `yarn docusaurus write-translations --locale zh-Hans` to generate JSON translation files. +- **Automated Content Translation:** + - Use AI/LLM capabilities to translate all `.md` and `.mdx` files from `docs/` to `i18n/zh-Hans/docusaurus-plugin-content-docs/current/`. + - Use AI/LLM capabilities to translate all blog posts from `blog/` to `i18n/zh-Hans/docusaurus-plugin-content-blog/`. + - **Technical Term Preservation:** Ensure that technical terms, keywords, and specific configuration parameters (e.g., `Shadowsocks`, `VMess`, `Trojan`, `HTTP`, `SOCKS5`, `routing rules`, etc.) remain in their original English form. + - Maintain the original frontmatter, file names, and directory structure during translation. +- **Localized Routing:** Verify that Docusaurus correctly serves localized content at `/zh-Hans/`. + +## Non-Functional Requirements +- **Build Stability:** `yarn build` must successfully generate both the English and Chinese versions of the site. +- **Translation Quality:** Automated translations should be technically accurate and maintain the formal tone of the project. +- **Technical Accuracy:** Directory structure must strictly follow Docusaurus i18n conventions. + +## Acceptance Criteria +- [ ] `docusaurus.config.js` is correctly configured for `en` and `zh-Hans`. +- [ ] The language switcher dropdown is functional in the `navbar`. +- [ ] `yarn build` completes without errors for both locales. +- [ ] Initial automated translations for all `docs/` and `blog/` content are present in the `i18n/zh-Hans/` directories. +- [ ] Technical terms remain untranslated in the Chinese version. +- [ ] Localized versions of the documentation and blog are accessible at their respective `/zh-Hans/` URLs. + +## Out of Scope +- Implementation of third-party SaaS translation platforms (e.g., Crowdin, Transifex). +- Ongoing maintenance of translations (this track covers the initial automated pass). \ No newline at end of file diff --git a/conductor/archive/anytls_doc_20260215/index.md b/conductor/archive/anytls_doc_20260215/index.md new file mode 100644 index 000000000..2ba233d7f --- /dev/null +++ b/conductor/archive/anytls_doc_20260215/index.md @@ -0,0 +1,5 @@ +# Track anytls_doc_20260215 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/anytls_doc_20260215/metadata.json b/conductor/archive/anytls_doc_20260215/metadata.json new file mode 100644 index 000000000..a12a392cc --- /dev/null +++ b/conductor/archive/anytls_doc_20260215/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "anytls_doc_20260215", + "type": "feature", + "status": "new", + "created_at": "2026-02-15T10:00:00Z", + "updated_at": "2026-02-15T10:00:00Z", + "description": "add anytls doc" +} diff --git a/conductor/archive/anytls_doc_20260215/plan.md b/conductor/archive/anytls_doc_20260215/plan.md new file mode 100644 index 000000000..5b40aaae5 --- /dev/null +++ b/conductor/archive/anytls_doc_20260215/plan.md @@ -0,0 +1,24 @@ +# Implementation Plan: Add anytls Proxy Documentation + +## Phase 1: Implementation of anytls Proxy Documentation [checkpoint: 92b2ee98] + +- [x] Task: Write verification script `scripts/verify-anytls-doc.js` 4ed38401 + - [ ] Create a script that checks for the existence of both English and Chinese `anytls.md` files. + - [ ] The script should also verify that the files contain the mandatory sections (Format, Parameters, Examples). +- [x] Task: Implement English documentation `docs/profile-format/proxy/external-proxy/anytls.md` 774b0b43 + - [ ] Follow the spec for content (name, server, port, password, etc.). + - [ ] Use `sidebar_position: 7`. +- [x] Task: Implement Chinese documentation `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/anytls.md` cb2d48cc + - [ ] Translate English content to Simplified Chinese. + - [ ] Keep configuration examples literal. +- [x] Task: Run verification script cde97bcd + - [ ] Execute `node scripts/verify-anytls-doc.js` and ensure it passes. +- [x] Task: Update overview files `docs/profile-format/overview.md` and `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md` 3900a317 + - [ ] Add AnyTls and Hysteria2 to the [Proxy] section example. +- [ ] Task: Conductor - User Manual Verification 'Implementation of anytls Proxy Documentation' (Protocol in workflow.md) + +## Phase 2: Final Validation [checkpoint: 176bd229] + +- [x] Task: Run project build 28cc86eb + - [ ] Execute `yarn build` to ensure no broken links or site-wide build errors. +- [x] Task: Conductor - User Manual Verification 'Final Validation' (Protocol in workflow.md) 176bd229 diff --git a/conductor/archive/anytls_doc_20260215/spec.md b/conductor/archive/anytls_doc_20260215/spec.md new file mode 100644 index 000000000..f5f187a10 --- /dev/null +++ b/conductor/archive/anytls_doc_20260215/spec.md @@ -0,0 +1,43 @@ +# Specification: Add anytls Proxy Documentation + +## Overview +This track involves adding technical documentation for the `anytls` proxy type to the Surfboard-NG manual. The documentation will cover the configuration format, parameters, and provide usage examples in both English and Simplified Chinese. + +## Functional Requirements + +### 1. New Documentation Files +- Create the English documentation at: `docs/profile-format/proxy/external-proxy/anytls.md` +- Create the Simplified Chinese documentation at: `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/anytls.md` + +### 2. Content Specifications +The documentation must include: +- **Description:** A brief overview of the `anytls` proxy type. +- **Format:** The standard comma-separated configuration line used in Surfboard profiles. +- **Parameters:** + - `name`: Identifier for the proxy. + - `server`: Server address (IP or hostname). + - `port`: Server port. + - `password`: Authentication password. + - `skip-cert-verify` (Optional): `true` or `false`. + - `sni` (Optional): Server Name Indication. + - `reuse` (Optional): `true` or `false`. **Default is `true`.** +- **Examples:** + - Full configuration: `ProxyAnyTLS = anytls, 1.2.3.4, 443, password, skip-cert-verify=true, sni=abc.com, reuse=false` + - Minimal configuration: `ProxyAnyTLSMin = anytls, 1.2.3.4, 443, password` + +### 3. Localization +- Ensure the Chinese version accurately translates the technical descriptions while keeping the configuration parameters and examples in their literal form. + +## Non-Functional Requirements +- **Consistency:** Maintain the formal and technical tone of the existing documentation. +- **Formatting:** Use MDX and follow Docusaurus conventions. + +## Acceptance Criteria +- [ ] `docs/profile-format/proxy/external-proxy/anytls.md` exists with correct English content. +- [ ] `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/anytls.md` exists with correct Chinese content. +- [ ] The new files are correctly indexed or visible in the sidebar (Docusaurus auto-generated sidebar should handle this). +- [ ] `yarn build` completes successfully without errors. + +## Out of Scope +- Implementing `anytls` proxy logic in the Surfboard application itself. +- Updating documentation for other proxy types. diff --git a/conductor/archive/hysteria2_proxy_20260208/index.md b/conductor/archive/hysteria2_proxy_20260208/index.md new file mode 100644 index 000000000..4e250c893 --- /dev/null +++ b/conductor/archive/hysteria2_proxy_20260208/index.md @@ -0,0 +1,5 @@ +# Track hysteria2_proxy_20260208 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/hysteria2_proxy_20260208/metadata.json b/conductor/archive/hysteria2_proxy_20260208/metadata.json new file mode 100644 index 000000000..c0831330e --- /dev/null +++ b/conductor/archive/hysteria2_proxy_20260208/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "hysteria2_proxy_20260208", + "type": "feature", + "status": "new", + "created_at": "2026-02-08T19:30:00Z", + "updated_at": "2026-02-08T19:30:00Z", + "description": "add document for new hysteria2 proxy" +} diff --git a/conductor/archive/hysteria2_proxy_20260208/plan.md b/conductor/archive/hysteria2_proxy_20260208/plan.md new file mode 100644 index 000000000..26dd71198 --- /dev/null +++ b/conductor/archive/hysteria2_proxy_20260208/plan.md @@ -0,0 +1,13 @@ +# Implementation Plan: Add Hysteria2 Proxy Documentation + +## Phase 1: Content Creation [checkpoint: fac9e6a] +- [x] Task: Create the new documentation file `docs/profile-format/proxy/external-proxy/hysteria2.md` with initial header and summary. fac9e6a +- [x] Task: Document the Hysteria2 configuration parameters (Mandatory and Optional) in a structured table. fac9e6a +- [x] Task: Add the Hysteria2 configuration example with descriptive comments. fac9e6a +- [x] Task: Update `docs/profile-format/proxy/index.md` to include Hysteria2 in the external proxies list. fac9e6a +- [x] Task: Conductor - User Manual Verification 'Phase 1: Content Creation' (Protocol in workflow.md) fac9e6a + +## Phase 2: Verification +- [x] Task: Run `yarn build` to verify the site builds correctly with the new content. +- [x] Task: Perform a manual review of the Hysteria2 page to ensure formatting and relative links are correct. +- [x] Task: Conductor - User Manual Verification 'Phase 2: Verification' (Protocol in workflow.md) diff --git a/conductor/archive/hysteria2_proxy_20260208/spec.md b/conductor/archive/hysteria2_proxy_20260208/spec.md new file mode 100644 index 000000000..88f3039a3 --- /dev/null +++ b/conductor/archive/hysteria2_proxy_20260208/spec.md @@ -0,0 +1,32 @@ +# Specification: Add Hysteria2 Proxy Documentation + +## Overview +This track involves adding a new documentation page for the Hysteria2 proxy protocol to the Surfboard-NG manual. Hysteria2 is a high-performance proxy based on the QUIC protocol, designed for challenging network environments. + +## Functional Requirements +- **New Documentation Page:** Create `docs/profile-format/proxy/external-proxy/hysteria2.md`. +- **Protocol Details:** Include a summary of Hysteria2 and a link to its official protocol standard/documentation. +- **Configuration Specification:** Document the following parameters for Hysteria2: + - **Mandatory:** + - `server`: Server IP or domain. + - `port`: Server port. + - `password`: Authentication password. + - **Optional:** + - `download-bandwidth`: Maximum download speed (e.g., `100`). + - `port-hopping`: Port hopping configuration (e.g., `"1234;5000-6000"`). + - `port-hopping-interval`: Interval for port hopping in seconds (e.g., `30`). + - `skip-cert-verify`: Bypass TLS certificate verification (`true`/`false`). + - `sni`: Server Name Indication for TLS. + - `udp-relay`: Enable or disable UDP relay (`true`/`false`). +- **Code Example:** Provide a clear, commented code block demonstrating a Hysteria2 configuration. +- **Navigation Update:** Ensure the new page is correctly categorized under External Proxies. + +## Non-Functional Requirements +- **Guideline Compliance:** Follow project guidelines: summary at the top, clear headings, descriptive code comments, and relative internal links. +- **Build Stability:** Verification via `yarn build` is mandatory. + +## Acceptance Criteria +- `docs/profile-format/proxy/external-proxy/hysteria2.md` exists and is correctly formatted. +- The configuration example matches the provided format: `ProxyHysteria2 = hysteria2, 1.2.3.4, 443, password=pwd, download-bandwidth=100, port-hopping="1234;5000-6000", port-hopping-interval=30, skip-cert-verify=true, sni=example.com, udp-relay=true`. +- All parameters (mandatory and optional) are clearly explained in a table or list. +- `yarn build` completes without errors. diff --git a/conductor/archive/logical_rule_doc_20260225/index.md b/conductor/archive/logical_rule_doc_20260225/index.md new file mode 100644 index 000000000..8b6d31d7d --- /dev/null +++ b/conductor/archive/logical_rule_doc_20260225/index.md @@ -0,0 +1,5 @@ +# Track logical_rule_doc_20260225 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/logical_rule_doc_20260225/metadata.json b/conductor/archive/logical_rule_doc_20260225/metadata.json new file mode 100644 index 000000000..223e057f2 --- /dev/null +++ b/conductor/archive/logical_rule_doc_20260225/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "logical_rule_doc_20260225", + "type": "feature", + "status": "new", + "created_at": "2026-02-25T11:00:00Z", + "updated_at": "2026-02-25T11:00:00Z", + "description": "add logical rule document" +} diff --git a/conductor/archive/logical_rule_doc_20260225/plan.md b/conductor/archive/logical_rule_doc_20260225/plan.md new file mode 100644 index 000000000..31d4d2bb7 --- /dev/null +++ b/conductor/archive/logical_rule_doc_20260225/plan.md @@ -0,0 +1,22 @@ +# Implementation Plan: Logical Rule Document + +## Phase 1: Test Scaffolding [checkpoint: 2fd0e67] +- [x] Task: Create verification script `scripts/verify-logical-doc.js` 6245371 following the pattern of `scripts/verify-anytls-doc.js`. +- [x] Task: Run the verification script and confirm it fails (Red Phase) 6245371. +- [x] Task: Conductor - User Manual Verification 'Phase 1' 2fd0e67 (Protocol in workflow.md) + +## Phase 2: English Documentation [checkpoint: f24be8b] +- [x] Task: Create `docs/profile-format/rule/logical.md` b74afe7 with AND, OR, NOT documentation. +- [x] Task: Update `docs/profile-format/rule/index.md` b74afe7 to reference logical rules. +- [x] Task: Run `scripts/verify-logical-doc.js` and ensure English part passes b74afe7 (Yellow Phase). +- [x] Task: Conductor - User Manual Verification 'Phase 2' f24be8b (Protocol in workflow.md) + +## Phase 3: Chinese Translation [checkpoint: cebb358] +- [x] Task: Create Simplified Chinese translation for logical rules 0e966e9 in `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/logical.md`. +- [x] Task: Update Simplified Chinese translation for rule index 0e966e9 in `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/index.md`. +- [x] Task: Run `scripts/verify-logical-doc.js` and ensure all parts pass 0e966e9 (Green Phase). +- [x] Task: Conductor - User Manual Verification 'Phase 3' cebb358 (Protocol in workflow.md) + +## Phase 4: Final Validation [checkpoint: 78665a0] +- [x] Task: Run `yarn build` to verify the site generates correctly. +- [x] Task: Conductor - User Manual Verification 'Phase 4' 78665a0 (Protocol in workflow.md) diff --git a/conductor/archive/logical_rule_doc_20260225/spec.md b/conductor/archive/logical_rule_doc_20260225/spec.md new file mode 100644 index 000000000..c0f80e236 --- /dev/null +++ b/conductor/archive/logical_rule_doc_20260225/spec.md @@ -0,0 +1,34 @@ +# Specification: Add Logical Rule Document + +## Overview +Add a new technical reference document for "Logical Rules" (AND, OR, NOT) to the Surfboard profile format documentation. This track includes both English and Simplified Chinese versions. + +## Functional Requirements +- Create `docs/profile-format/rule/logical.md` with English content. +- Create `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/logical.md` with Simplified Chinese content. +- Document the following operators: + - **AND**: Matches if all sub-rules match. + - **OR**: Matches if any sub-rule matches. + - **NOT**: Matches if the sub-rule does not match. +- Each operator documentation must include: + - Description + - Syntax Format + - Parameters Table + - Practical Examples (including nesting and common use cases) +- **External Reference:** Include a link to the [Surge manual](https://manual.nssurge.com/rule/logical.html) as a technical reference. +- **Overview Update:** Update `docs/profile-format/rule/index.md` (and its translation) to mention the availability of logical rules. + +## Non-Functional Requirements +- Maintain a formal and technical tone consistent with existing rule docs. +- Adhere to the established Markdown structure (sidebar_position, headers). + +## Acceptance Criteria +- Files exist in both the default and translated documentation paths. +- Content accurately describes the logic and syntax of Surfboard logical rules. +- `yarn build` completes successfully without errors. +- Sidebar displays the new "Logical Rules" item under Profile Format -> Rule. +- `index.md` (English and Chinese) includes a mention of logical rules. + +## Out of Scope +- Documentation for other rule types (e.g., Domain, IP). +- Changes to the Surfboard application logic. diff --git a/conductor/archive/refactor_profile_format_20260208/index.md b/conductor/archive/refactor_profile_format_20260208/index.md new file mode 100644 index 000000000..29b2b25dd --- /dev/null +++ b/conductor/archive/refactor_profile_format_20260208/index.md @@ -0,0 +1,5 @@ +# Track refactor_profile_format_20260208 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/refactor_profile_format_20260208/metadata.json b/conductor/archive/refactor_profile_format_20260208/metadata.json new file mode 100644 index 000000000..227913c16 --- /dev/null +++ b/conductor/archive/refactor_profile_format_20260208/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "refactor_profile_format_20260208", + "type": "feature", + "status": "new", + "created_at": "2026-02-08T12:00:00Z", + "updated_at": "2026-02-08T12:00:00Z", + "description": "Refactor and update the profile format documentation for technical accuracy and guideline compliance." +} diff --git a/conductor/archive/refactor_profile_format_20260208/plan.md b/conductor/archive/refactor_profile_format_20260208/plan.md new file mode 100644 index 000000000..98fc468cb --- /dev/null +++ b/conductor/archive/refactor_profile_format_20260208/plan.md @@ -0,0 +1,15 @@ +# Implementation Plan: Refactor and Update Profile Format Documentation + +## Phase 1: Audit and Preparation +- [x] Task: List and audit all files in `docs/profile-format/` for guideline compliance. +- [x] Task: Verify existing external links in the profile format section. + +## Phase 2: Content Refactoring +- [x] Task: Update `docs/profile-format/overview.md` with summary and formatted code blocks. d459436 +- [x] Task: Update `docs/profile-format/general/` documentation. 0317b1c +- [x] Task: Update `docs/profile-format/proxy/` and `docs/profile-format/proxygroup/` documentation. 326b18f +- [x] Task: Update `docs/profile-format/rule/` and `docs/profile-format/host/` documentation. fff3a99 + +## Phase 3: Verification +- [x] Task: Run `yarn build` to ensure documentation integrity. +- [x] Task: Perform a final manual review of link relative paths. diff --git a/conductor/archive/refactor_profile_format_20260208/spec.md b/conductor/archive/refactor_profile_format_20260208/spec.md new file mode 100644 index 000000000..451a58ef5 --- /dev/null +++ b/conductor/archive/refactor_profile_format_20260208/spec.md @@ -0,0 +1,17 @@ +# Specification: Refactor and Update Profile Format Documentation + +## Objective +Audit and update all documentation within `docs/profile-format` to ensure technical precision, adherence to new project guidelines, and build stability. + +## Scope +- Audit all MDX/Markdown files in `docs/profile-format/` and its subdirectories. +- Update code blocks to include syntax highlighting and descriptive comments. +- Verify and correct all internal and external links. +- Ensure every modified page follows the content structure (summary at the top). +- Validate changes by running `yarn build`. + +## Success Criteria +- `yarn build` completes without errors. +- All code blocks have language tags. +- No broken internal links. +- Consistent formatting across the audited section. diff --git a/conductor/archive/snell_doc_20260301/index.md b/conductor/archive/snell_doc_20260301/index.md new file mode 100644 index 000000000..1caf3a28e --- /dev/null +++ b/conductor/archive/snell_doc_20260301/index.md @@ -0,0 +1,5 @@ +# Track snell_doc_20260301 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/snell_doc_20260301/metadata.json b/conductor/archive/snell_doc_20260301/metadata.json new file mode 100644 index 000000000..00b71c3b5 --- /dev/null +++ b/conductor/archive/snell_doc_20260301/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "snell_doc_20260301", + "type": "feature", + "status": "new", + "created_at": "2026-03-01T10:00:00Z", + "updated_at": "2026-03-01T10:00:00Z", + "description": "add snell proxy config document" +} \ No newline at end of file diff --git a/conductor/archive/snell_doc_20260301/plan.md b/conductor/archive/snell_doc_20260301/plan.md new file mode 100644 index 000000000..8c8c7a36e --- /dev/null +++ b/conductor/archive/snell_doc_20260301/plan.md @@ -0,0 +1,32 @@ +# Implementation Plan: Add Snell Proxy Configuration Document + +## Phase 1: Test Setup and Initial Drafting [checkpoint: ace4338] +- [x] Task: Create verification script for Snell documentation 64b42b3 + - [x] Create `scripts/verify-snell-doc.mjs` (following existing patterns) + - [x] Run the test to confirm failure (Red phase) +- [x] Task: Conductor - User Manual Verification 'Phase 1: Test Setup and Initial Drafting' (Protocol in workflow.md) ace4338 + +## Phase 2: Documentation Implementation (English) [checkpoint: 8e9aba3] +- [x] Task: Create English Snell documentation 5042fd6 + - [x] Create `docs/profile-format/proxy/external-proxy/snell.md` with: + - [x] Header and Overview + - [x] Format description + - [x] Detailed Parameters (`server`, `port`, `psk`, `version`, `obfs`, `obfs-host`, `obfs-uri`, `udp-relay`) + - [x] Version support note (1, 2, 3) + - [x] Example configuration +- [x] Task: Conductor - User Manual Verification 'Phase 2: Documentation Implementation (English)' (Protocol in workflow.md) 8e9aba3 + +## Phase 3: Documentation Implementation (Simplified Chinese) [checkpoint: f45adbf] +- [x] Task: Create Simplified Chinese Snell documentation c336a67 + - [x] Create `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md` as translation of EN version +- [x] Task: Conductor - User Manual Verification 'Phase 3: Documentation Implementation (Simplified Chinese)' (Protocol in workflow.md) f45adbf + +## Phase 4: Final Validation and Build [checkpoint: 7f60e10] +- [x] Task: Run verification tests 251561d + - [x] Run `node scripts/verify-snell-doc.mjs` and confirm pass (Green phase) +- [x] Task: Verify documentation build 7f60e10 + - [x] Run `yarn build` to ensure no docusaurus errors +- [x] Task: Conductor - User Manual Verification 'Phase 4: Final Validation and Build' (Protocol in workflow.md) 7f60e10 + +## Phase: Review Fixes +- [x] Task: Apply review suggestions 98aa3a7 diff --git a/conductor/archive/snell_doc_20260301/spec.md b/conductor/archive/snell_doc_20260301/spec.md new file mode 100644 index 000000000..616ca2431 --- /dev/null +++ b/conductor/archive/snell_doc_20260301/spec.md @@ -0,0 +1,36 @@ +# Specification: Add Snell Proxy Configuration Document + +## Overview +Add a new documentation page for the Snell proxy type in the Surfboard-NG documentation. This includes detailed configuration fields, descriptions, and examples in both English and Simplified Chinese. + +## Functional Requirements +1. **New File Creation:** + - Create `docs/profile-format/proxy/external-proxy/snell.md`. + - Create `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md`. +2. **Documentation Content:** + - **Basic Fields:** `server`, `port`, `psk`, `version`. + - **Version Support:** Specifically mention that currently only **versions 1, 2, and 3** are supported. + - **OBFS Options:** `obfs`, `obfs-host`, `obfs-uri`. + - **Advanced Fields:** `udp-relay`. +3. **Examples:** + - Include a complete Snell proxy configuration snippet. +4. **Consistency:** + - Ensure the style matches existing proxy documentation (e.g., `shadowsocks.md`). +5. **Multi-language Support:** + - Ensure the `zh-Hans` version is an accurate translation of the English document. + +## Non-Functional Requirements +1. **Validation:** The documentation must build successfully using `yarn build`. +2. **Tone:** Formal and technical documentation tone. + +## Acceptance Criteria +- [ ] `snell.md` exists in `docs/profile-format/proxy/external-proxy/`. +- [ ] `snell.md` exists in `i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/`. +- [ ] All requested fields (`server`, `port`, `psk`, `version`, `obfs`, `obfs-host`, `obfs-uri`, `udp-relay`) are documented. +- [ ] Example configuration is included. +- [ ] `yarn build` succeeds. + +## Out of Scope +- Documenting other proxy types not mentioned in the request. +- Changes to the application code itself. +- `reuse-connection` field (as requested for removal). diff --git a/conductor/archive/ss2022_doc_20260208/index.md b/conductor/archive/ss2022_doc_20260208/index.md new file mode 100644 index 000000000..9833804bd --- /dev/null +++ b/conductor/archive/ss2022_doc_20260208/index.md @@ -0,0 +1,5 @@ +# Track ss2022_doc_20260208 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/ss2022_doc_20260208/metadata.json b/conductor/archive/ss2022_doc_20260208/metadata.json new file mode 100644 index 000000000..9ef274a6a --- /dev/null +++ b/conductor/archive/ss2022_doc_20260208/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "ss2022_doc_20260208", + "type": "feature", + "status": "new", + "created_at": "2026-02-08T18:58:00Z", + "updated_at": "2026-02-08T18:58:00Z", + "description": "update document for shadowsocks new protocol: 2022-blake3-aes-128-gcm & 2022-blake3-aes-256-gcm" +} diff --git a/conductor/archive/ss2022_doc_20260208/plan.md b/conductor/archive/ss2022_doc_20260208/plan.md new file mode 100644 index 000000000..048cb95ed --- /dev/null +++ b/conductor/archive/ss2022_doc_20260208/plan.md @@ -0,0 +1,12 @@ +# Implementation Plan: Update Shadowsocks 2022 Protocol Documentation + +## Phase 1: Content Update +- [x] Task: Update the `encrypt method` table and parameter description in `docs/profile-format/proxy/external-proxy/shadowsocks.md`. d3fe284 +- [x] Task: Add documentation for the base64-encoded password requirement for Shadowsocks 2022 methods. d3fe284 +- [x] Task: Add Shadowsocks 2022 configuration examples to the documentation. d3fe284 +- [x] Task: Conductor - User Manual Verification 'Phase 1: Content Update' (Protocol in workflow.md) d3fe284 + +## Phase 2: Verification +- [x] Task: Run `yarn build` to ensure documentation integrity. +- [x] Task: Perform a final manual review of the updated documentation for clarity and accuracy. +- [x] Task: Conductor - User Manual Verification 'Phase 2: Verification' (Protocol in workflow.md) diff --git a/conductor/archive/ss2022_doc_20260208/spec.md b/conductor/archive/ss2022_doc_20260208/spec.md new file mode 100644 index 000000000..b31b85690 --- /dev/null +++ b/conductor/archive/ss2022_doc_20260208/spec.md @@ -0,0 +1,23 @@ +# Specification: Update Shadowsocks 2022 Protocol Documentation + +## Overview +This track aims to update the Surfboard-NG manual to include support for the new Shadowsocks 2022 (AEAD-2022) encryption methods: `2022-blake3-aes-128-gcm` and `2022-blake3-aes-256-gcm`. + +## Functional Requirements +- **Update Encrypt Methods:** Modify `docs/profile-format/proxy/external-proxy/shadowsocks.md` to include `2022-blake3-aes-128-gcm` and `2022-blake3-aes-256-gcm` in the list of supported `encrypt method` values. +- **Document Password Requirements:** Explicitly state that for Shadowsocks 2022 methods, the `password` field must be a base64-encoded string corresponding to the required key size (16 bytes for AES-128, 32 bytes for AES-256). +- **Update Examples:** Provide clear configuration examples demonstrating the use of the new 2022 methods with base64-encoded passwords. + +## Non-Functional Requirements +- **Adherence to Guidelines:** Ensure the updated documentation follows the project's content structure, code example, and tone guidelines. +- **Build Stability:** Verify the documentation integrity by running `yarn build`. + +## Acceptance Criteria +- `docs/profile-format/proxy/external-proxy/shadowsocks.md` contains the new encryption methods. +- The documentation clearly explains the base64-encoded password requirement for these methods. +- Valid configuration examples are provided. +- `yarn build` completes successfully. + +## Out of Scope +- Documenting other Shadowsocks 2022 variants not specified in the request. +- Implementing code changes in the Surfboard-NG application itself. diff --git a/conductor/tracks.md b/conductor/tracks.md new file mode 100644 index 000000000..84cb38fcb --- /dev/null +++ b/conductor/tracks.md @@ -0,0 +1,6 @@ +# Project Tracks + +This file tracks all major tracks for the project. Each track has its own detailed plan in its respective folder. + +--- +--- diff --git a/docs/profile-format/overview.md b/docs/profile-format/overview.md index 9efede9b0..940536754 100644 --- a/docs/profile-format/overview.md +++ b/docs/profile-format/overview.md @@ -93,6 +93,9 @@ ProxyAnyTLS = anytls, 1.2.3.4, 443, password, skip-cert-verify=true, sni=abc.com # Hysteria2 proxy configuration. ProxyHysteria2 = hysteria2, 1.2.3.4, 443, password=pwd, download-bandwidth=100, port-hopping="1234;5000-6000", port-hopping-interval=30, skip-cert-verify=true, sni=example.com, udp-relay=true +# Snell proxy configuration. +ProxySnell = snell, 1.2.3.4, 443, psk=yourpsk, version=3, udp-relay=true + # WireGuard VPN integration. ProxyWireguard = wireguard, section-name = HomeServer diff --git a/docs/profile-format/proxy/external-proxy/snell.md b/docs/profile-format/proxy/external-proxy/snell.md new file mode 100644 index 000000000..be938de75 --- /dev/null +++ b/docs/profile-format/proxy/external-proxy/snell.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 9 +--- + +# Snell + +Snell is a private proxy protocol developed by the Surge team. It is designed to be lightweight and secure. + +## Format + +```ini +{proxy name} = snell, {server}, {port}, psk={psk}, version={version}, udp-relay={udp-relay}, obfs={obfs}, obfs-host={obfs-host}, obfs-uri={obfs-uri} +``` + +## Parameters + +| Name | Value | Mandatory | Note | +|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| proxy name | - | true | | +| protocol | snell | true | | +| server | - | true | Supports domain and IP formats. | +| port | 0-65535 | true | | +| psk | - | true | Pre-shared key for authentication. | +| version | 1, 2, 3 | false | Currently only versions 1, 2, and 3 are supported. | +| udp-relay | true
false | false | Default value: false. Only supported when **version is 3**. | +| obfs | tls
http | false | | +| obfs-host | - | false | Default value: cloudfront.net. Only applicable when obfs is specified. | +| obfs-uri | - | false | Default value: /. Only applicable when obfs is http. | + +## Example + +```ini +# A standard Snell proxy configuration +ProxySnell = snell, 1.2.3.4, 443, psk=yourpsk, version=3, udp-relay=true + +# A Snell proxy configuration with HTTP obfuscation +ProxySnellObfs = snell, 1.2.3.4, 443, psk=yourpsk, version=2, obfs=http, obfs-host=www.example.com, obfs-uri=/ +``` diff --git a/docs/profile-format/proxy/index.md b/docs/profile-format/proxy/index.md index f26b10880..daf70ed83 100644 --- a/docs/profile-format/proxy/index.md +++ b/docs/profile-format/proxy/index.md @@ -15,3 +15,4 @@ The following proxy protocols are currently supported: - [Trojan](/docs/profile-format/proxy/external-proxy/trojan) - [Wireguard](/docs/profile-format/proxy/external-proxy/wireguard) - [Hysteria2](/docs/profile-format/proxy/external-proxy/hysteria2) +- [Snell](/docs/profile-format/proxy/external-proxy/snell) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md index 87918adea..46d4fa8e0 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md @@ -93,6 +93,9 @@ ProxyAnyTLS = anytls, 1.2.3.4, 443, password, skip-cert-verify=true, sni=abc.com # Hysteria2 代理配置。 ProxyHysteria2 = hysteria2, 1.2.3.4, 443, password=pwd, download-bandwidth=100, port-hopping="1234;5000-6000", port-hopping-interval=30, skip-cert-verify=true, sni=example.com, udp-relay=true +# Snell 代理配置。 +ProxySnell = snell, 1.2.3.4, 443, psk=yourpsk, version=3, udp-relay=true + # WireGuard VPN 集成。 ProxyWireguard = wireguard, section-name = HomeServer diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md new file mode 100644 index 000000000..4c95c574f --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 9 +--- + +# Snell + +Snell 是由 Surge 团队开发的一种私有代理协议。它旨在轻量且安全。 + +## 格式 + +```ini +{proxy name} = snell, {server}, {port}, psk={psk}, version={version}, udp-relay={udp-relay}, obfs={obfs}, obfs-host={obfs-host}, obfs-uri={obfs-uri} +``` + +## 参数 + +| 名称 | 值 | 是否必填 | 备注 | +|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| proxy name | - | 是 | | +| protocol | snell | 是 | | +| server | - | 是 | 支持域名和 IP 格式。 | +| port | 0-65535 | 是 | | +| psk | - | 是 | 用于身份验证的预共享密钥。 | +| version | 1, 2, 3 | 否 | 目前仅支持 **版本 1, 2, 和 3**。 | +| udp-relay | true
false | 否 | 默认值: false。仅在 **版本为 3** 时支持。 | +| obfs | tls
http | 否 | | +| obfs-host | - | 否 | 默认值: cloudfront.net。仅在指定了 obfs 时适用。 | +| obfs-uri | - | 否 | 默认值: /。仅在 obfs 为 http 时适用。 | + +## 示例 + +```ini +# 标准 Snell 代理配置 +ProxySnell = snell, 1.2.3.4, 443, psk=yourpsk, version=3, udp-relay=true + +# 带有 HTTP 混淆的 Snell 代理配置 +ProxySnellObfs = snell, 1.2.3.4, 443, psk=yourpsk, version=2, obfs=http, obfs-host=www.example.com, obfs-uri=/ +``` diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/index.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/index.md index 9e967b762..0a835bc59 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/index.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/index.md @@ -14,4 +14,5 @@ - [VMESS](/docs/profile-format/proxy/external-proxy/vmess) - [Trojan](/docs/profile-format/proxy/external-proxy/trojan) - [Wireguard](/docs/profile-format/proxy/external-proxy/wireguard) -- [Hysteria2](/docs/profile-format/proxy/external-proxy/hysteria2) \ No newline at end of file +- [Hysteria2](/docs/profile-format/proxy/external-proxy/hysteria2) +- [Snell](/docs/profile-format/proxy/external-proxy/snell) diff --git a/scripts/verify-snell-doc.mjs b/scripts/verify-snell-doc.mjs new file mode 100644 index 000000000..c7cd4d016 --- /dev/null +++ b/scripts/verify-snell-doc.mjs @@ -0,0 +1,76 @@ +import fs from 'fs'; +import path from 'path'; + +const filesToVerify = [ + 'docs/profile-format/proxy/external-proxy/snell.md', + 'i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/snell.md' +]; + +const mandatorySections = [ + { en: '# Snell', zh: '# Snell' }, + { en: '## Format', zh: '## 格式' }, + { en: '## Parameters', zh: '## 参数' }, + { en: '## Example', zh: '## 示例' } +]; + +const mandatoryParameters = [ + { en: 'proxy name', zh: 'proxy name' }, + { en: 'protocol', zh: 'protocol' }, + { en: 'server', zh: 'server' }, + { en: 'port', zh: 'port' }, + { en: 'psk', zh: 'psk' }, + { en: 'version', zh: 'version' }, + { en: 'obfs', zh: 'obfs' }, + { en: 'obfs-host', zh: 'obfs-host' }, + { en: 'obfs-uri', zh: 'obfs-uri' }, + { en: 'udp-relay', zh: 'udp-relay' } +]; + +function verify() { + console.log('Verifying snell documentation...'); + let hasError = false; + + for (const file of filesToVerify) { + if (!fs.existsSync(file)) { + console.error(`FAIL: ${file} does not exist.`); + hasError = true; + continue; + } + + const isZh = file.includes('zh-Hans'); + const content = fs.readFileSync(file, 'utf8'); + for (const section of mandatorySections) { + const searchStr = isZh ? section.zh : section.en; + if (!content.includes(searchStr)) { + console.error(`FAIL: ${file} is missing mandatory section: ${searchStr}`); + hasError = true; + } + } + + for (const param of mandatoryParameters) { + const searchStr = isZh ? param.zh : param.en; + if (!content.includes(searchStr)) { + console.error(`FAIL: ${file} is missing mandatory parameter: ${searchStr}`); + hasError = true; + } + } + + if (!content.includes('version is 3') && !content.includes('版本为 3')) { + console.error(`FAIL: ${file} is missing version 3 requirement for udp-relay`); + hasError = true; + } + + if (!content.includes('1, 2, 3') && !content.includes('1, 2, 和 3')) { + console.error(`FAIL: ${file} is missing version support note (1, 2, 3)`); + hasError = true; + } + } + + if (hasError) { + process.exit(1); + } + + console.log('PASS: snell documentation verified.'); +} + +verify(); From f121b80d27a489fdace86f3ac7420fd3604f0bd5 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Tue, 3 Mar 2026 01:07:07 +0800 Subject: [PATCH 02/22] update changelog --- docs/changelog.md | 25 +++++++++++-------- .../current/changelog.md | 23 ++++++++++------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index b2d2c1689..177abdcc0 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,17 +4,22 @@ sidebar_position: 5 # ChangeLog +### mobile-2.28.0 + +- **New Features** + - Added support for the [Snell](./profile-format/proxy/external-proxy/snell) proxy protocol. + ### mobile-2.27.1 - **New Features** - - Added support for logical rules (AND, OR, NOT). + - Added support for [logical rules](./profile-format/rule/logical) (AND, OR, NOT). - Better handle profile content which wrap string value in quotes. - Support import anytls:// uri directly. ### mobile-2.27.0 - **New Features** - - Added support for new proxy protocol anytls. + - Added support for the [anytls](./profile-format/proxy/external-proxy/anytls) proxy protocol. - Updated LAN profile editor UI: enlarged the editor and added line number display support. - In-app profile editor now supports profile keyboard highlight. - In-app profile editor now supports IME scroll animation on Android 11+ devices. @@ -34,7 +39,7 @@ sidebar_position: 5 ### mobile-2.26.0 - **New Features** - - Added support for shadowsocks 2022(`2022-blake3-aes-128-gcm` & `2022-blake3-aes-256-gcm`) and hysteria2 proxy support + - Added support for shadowsocks 2022(`2022-blake3-aes-128-gcm` & `2022-blake3-aes-256-gcm`) and [hysteria2](./profile-format/proxy/external-proxy/hysteria2) proxy support - Support Upload/Edit/Copy/Rename/Delete profile in new added web server in LAN, try it at the top right corner in profile list menu ### mobile-2.25.5 @@ -275,7 +280,7 @@ Issues above were introduced in 2.22.1 and 2.22.3. ### 2.22.0 -- Added WireGuard proxy support. +- Added [WireGuard](./profile-format/proxy/external-proxy/wireguard) proxy support. - Added `include-other-group` support. - Ignored Ponte proxy. - Updated embedded GeoIP library. @@ -314,7 +319,7 @@ Issues above were introduced in 2.22.1 and 2.22.3. ### 2.21.0 -- Added support for some MISC rules. +- Added support for some [MISC rules](./profile-format/rule/misc). - With `IN-PORT` and `SRC-IP`, you can now control traffic from LAN proxies more easily. - For more info, please check the [manual](https://getsurfboard.com/docs/profile-format/rule/misc). - Added support for compact profile list. @@ -373,13 +378,13 @@ Issues above were introduced in 2.22.1 and 2.22.3. ### 2.20.2 -- Profile content: Added support for [subnet type rules](https://getsurfboard.com/docs/profile-format/rule/subnet). +- Profile content: Added support for [subnet type rules](./profile-format/rule/subnet). - About settings: Added new version checking for non-Google Play installations. - Bug fixes. ### 2.20.1 -- Profile content: Added support for subnet type rules. +- Profile content: Added support for [subnet type rules](./profile-format/rule/subnet). - About settings: Added new version checking for non-Google Play installations. - Bug fixes. @@ -596,9 +601,9 @@ Issues above were introduced in 2.22.1 and 2.22.3. - Supported long-press on IP card to copy IP. - Updated translations. -### 2.16.1 +### mobile-2.16.1 -- Supported [panel](https://getsurfboard.com/docs/profile-format/panel/static). +- Supported [panel](./profile-format/panel/static). - Fixed Shadowsocks protocol crash issue. ### 2.16.0 @@ -667,7 +672,7 @@ Issues above were introduced in 2.22.1 and 2.22.3. ### 2.13.0 -- Supported DOMAIN-SET rule. +- Supported [DOMAIN-SET](./profile-format/rule/domainset) rule. - Fixed force-remote-dns setting not working for domain rules in RULE-SET. - Added Korean language support. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index fd4d8c0dc..d01d1a257 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,17 +4,22 @@ sidebar_position: 5 # 更新日志 +### mobile-2.28.0 + +- **新功能** + - 增加了对 [Snell](./profile-format/proxy/external-proxy/snell) 代理协议的支持。 + ### mobile-2.27.1 - **新功能** - - 增加了对逻辑规则 (AND, OR, NOT) 的支持。 + - 增加了对 [逻辑规则](./profile-format/rule/logical) (AND, OR, NOT) 的支持。 - 更好地处理配置文件内容中被引号包裹的字符串值。 - 支持直接导入 anytls:// URI。 ### mobile-2.27.0 - **新功能** - - 增加了对新代理协议 anytls 的支持。 + - 增加了对 [anytls](./profile-format/proxy/external-proxy/anytls) 代理协议的支持。 - 更新了局域网配置文件编辑器 UI:增大了编辑器并增加了行号显示支持。 - 应用内配置文件编辑器现在支持配置文件关键字高亮。 - 应用内配置文件编辑器现在支持在 Android 11+ 设备上使用 IME 滚动动画。 @@ -34,7 +39,7 @@ sidebar_position: 5 ### mobile-2.26.0 - **新功能** - - 增加了对 Shadowsocks 2022 (`2022-blake3-aes-128-gcm` & `2022-blake3-aes-256-gcm`) 和 Hysteria2 代理的支持 + - 增加了对 Shadowsocks 2022 (`2022-blake3-aes-128-gcm` & `2022-blake3-aes-256-gcm`) 和 [Hysteria2](./profile-format/proxy/external-proxy/hysteria2) 代理的支持 - 支持在局域网新增的 Web 服务器中上传/编辑/复制/重命名/删除配置文件,请在配置文件列表菜单的右上角尝试使用 ### mobile-2.25.5 @@ -275,7 +280,7 @@ sidebar_position: 5 ### 2.22.0 -- 增加了 WireGuard 代理支持。 +- 增加了 [WireGuard](./profile-format/proxy/external-proxy/wireguard) 代理支持。 - 增加了 `include-other-group` 支持。 - 忽略了 Ponte 代理。 - 更新了嵌入式 GeoIP 库。 @@ -314,7 +319,7 @@ sidebar_position: 5 ### 2.21.0 -- 增加了对部分 MISC 规则的支持。 +- 增加了对部分 [MISC 规则](./profile-format/rule/misc) 的支持。 - 通过 `IN-PORT` 和 `SRC-IP`,你现在可以更轻松地控制来自局域网代理的流量。 - 更多信息请查看 [手册](https://getsurfboard.com/zh-Hans/docs/profile-format/rule/misc)。 - 增加了对紧凑型配置文件列表的支持。 @@ -373,13 +378,13 @@ sidebar_position: 5 ### 2.20.2 -- 配置文件内容:增加了对 [子网类型规则](https://getsurfboard.com/zh-Hans/docs/profile-format/rule/subnet) 的支持。 +- 配置文件内容:增加了对 [子网类型规则](./profile-format/rule/subnet) 的支持。 - 关于设置:为非 Google Play 安装增加了新版本检查。 - 错误修复。 ### 2.20.1 -- 配置文件内容:增加了对子网类型规则的支持。 +- 配置文件内容:增加了对 [子网类型规则](./profile-format/rule/subnet) 的支持。 - 关于设置:为非 Google Play 安装增加了新版本检查。 - 错误修复。 @@ -598,7 +603,7 @@ sidebar_position: 5 ### 2.16.1 -- 支持 [面板 (Panel)](https://getsurfboard.com/zh-Hans/docs/profile-format/panel/static)。 +- 支持 [面板 (Panel)](./profile-format/panel/static)。 - 修复了 Shadowsocks 协议崩溃问题。 ### 2.16.0 @@ -667,7 +672,7 @@ sidebar_position: 5 ### 2.13.0 -- 支持 DOMAIN-SET 规则。 +- 支持 [DOMAIN-SET](./profile-format/rule/domainset) 规则。 - 修复了 RULE-SET 中域名规则的 force-remote-dns 设置不生效的问题。 - 增加了韩语支持。 From 4661b6d1b439ddb083658dac3ec342870a77d30f Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Thu, 12 Mar 2026 02:05:08 +0800 Subject: [PATCH 03/22] update changelog --- docs/changelog.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 177abdcc0..58deff774 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,20 @@ sidebar_position: 5 # ChangeLog +### mobile-2.28.1 + +- **New Features** + - **Profile Editor**: Added search support with highlight, navigation, and auto-scroll. + - **GeoIP**: Supported importing external `.mmdb` database files via system file picker. + - **DNS**: Supported multiple servers in DoH override config. + - **DNS**: Added TTL-based in-memory cache support for DoH resolver. + - **Proxy**: Supported Shadowsocks 2022 password with identity format (`password:identity`). +- **Improvements** + - **Speedometer**: Improved core logic and correctly handle redirection response codes. + - **Profile List**: Optimized "NEW" label display logic to show only when content changes. + - **GeoIP**: Updated built-in GeoIP database file. + - **Translations**: Updated and improved all supported languages. + ### mobile-2.28.0 - **New Features** From a9e088563bd6250e5905e2b122517158f1269005 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 22 Mar 2026 00:30:36 +0800 Subject: [PATCH 04/22] docs(general): Add ipv6 option documentation - Add ipv6 sample in [General] section of overview (EN/ZH) - Add ipv6.md page under profile-format/general (EN/ZH) --- docs/profile-format/general/ipv6.md | 30 +++++++++++++++++++ docs/profile-format/overview.md | 3 ++ .../current/profile-format/general/ipv6.md | 30 +++++++++++++++++++ .../current/profile-format/overview.md | 3 ++ 4 files changed, 66 insertions(+) create mode 100644 docs/profile-format/general/ipv6.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/ipv6.md diff --git a/docs/profile-format/general/ipv6.md b/docs/profile-format/general/ipv6.md new file mode 100644 index 000000000..2c8abb657 --- /dev/null +++ b/docs/profile-format/general/ipv6.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 9 +--- + +# `ipv6` + +Controls whether Surfboard processes IPv6 traffic. + +:::tip +Only enable IPv6 when you have confirmed that **both your local network and your proxy server** support IPv6. Enabling it in an environment where either side lacks proper IPv6 support may cause connection delays or degraded network performance. +::: + +When set to `false`, Surfboard actively suppresses IPv6 traffic — for example, by returning only IPv4 addresses in DNS responses and not establishing IPv6 connections — even if the underlying physical network and proxy server are IPv6-capable. + +### Example + +```ini +# Disable IPv6 support +ipv6 = false +``` + +### Format + +```ini +ipv6 = {true|false} +``` + +:::note +Defaults to `false` if not specified. +::: diff --git a/docs/profile-format/overview.md b/docs/profile-format/overview.md index 940536754..dd33c80e4 100644 --- a/docs/profile-format/overview.md +++ b/docs/profile-format/overview.md @@ -48,6 +48,9 @@ socks5-listen = 127.0.0.1:1235 # Behavior when a proxy does not support UDP relay (DIRECT or REJECT). udp-policy-not-supported-behaviour = DIRECT +# Disable IPv6 support. +ipv6 = false + [Host] # Static IP mapping for specific domains. abc.com = 1.2.3.4 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/ipv6.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/ipv6.md new file mode 100644 index 000000000..f0531d6da --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/ipv6.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 9 +--- + +# IPv6 + +控制 Surfboard 是否处理 IPv6 流量。 + +:::tip 提示 +仅在确认**本地网络和代理服务器均支持 IPv6** 时再启用此选项。若任意一方不具备完整的 IPv6 支持,启用后可能导致连接延迟或网络性能下降。 +::: + +当设置为 `false` 时,Surfboard 会主动抑制 IPv6 流量的产生——例如在 DNS 响应中仅返回 IPv4 地址、不建立 IPv6 连接等——即使底层物理网络和代理服务器本身支持 IPv6 亦然。 + +### 示例 + +```ini +# 禁用 IPv6 支持 +ipv6 = false +``` + +### 格式 + +```ini +ipv6 = {true|false} +``` + +:::note 注意 +未指定时默认为 `false`。 +::: diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md index 46d4fa8e0..4422f0a7b 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/overview.md @@ -48,6 +48,9 @@ socks5-listen = 127.0.0.1:1235 # 当代理不支持 UDP 转发时的行为(DIRECT 或 REJECT)。 udp-policy-not-supported-behaviour = DIRECT +# 禁用 IPv6 支持。 +ipv6 = false + [Host] # 特定域名的静态 IP 映射。 abc.com = 1.2.3.4 From fb9d6fba008c202d2045c114898f633af6566af1 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 22 Mar 2026 00:35:52 +0800 Subject: [PATCH 05/22] chore(gitignore): Add CLAUDE.md to ignore list --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 37e35f9e8..7545a7281 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -conductor \ No newline at end of file +conductor +CLAUDE.md \ No newline at end of file From 98e78eb792fafc68389a35bed7c637ddcbe26de1 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 22 Mar 2026 20:33:14 +0800 Subject: [PATCH 06/22] docs(changelog): Add mobile-2.29.0 release notes --- docs/changelog.md | 16 ++++++++++++++++ .../current/changelog.md | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 58deff774..d74190afd 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,22 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.0 + +- **New Features** + - **IPv6**: Full IPv6 support, supports proxy forwarding for TCP/UDP/ICMPv6 traffic. + - **IPv6**: Added IPv6 related configuration options in Override settings. +- **Improvements** + - **Performance**: Optimized domain rule matching performance and DNS resolution efficiency. + - **Performance**: Improved multi-threading security and reduced JNI call overhead. + - **UI**: Fixed profile editor error message overflow issue. +- **Fixes** + - Fixed duplicate IP display issue for local proxy addresses. + - Fixed ProfileEditorActivity OOM issue. + - Fixed DashboardFragment NPE issue. + - Fixed getFetchProfileTimeout number format exception. + - Standardized log tags. + ### mobile-2.28.1 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index d01d1a257..60283783c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,22 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.0 + +- **新功能** + - **IPv6**: 完整的 IPv6 支持,支持 TCP/UDP/ICMPv6 流量代理转发。 + - **IPv6**: 在 Override 设置中添加了 IPv6 相关配置选项。 +- **改进** + - **性能**: 优化域名规则匹配性能和 DNS 解析效率。 + - **性能**: 改进多线程安全性,减少 JNI 调用开销。 + - **UI**: 修复配置文件编辑器错误信息溢出问题。 +- **修复** + - 修复本地代理地址显示重复 IP 的问题。 + - 修复 ProfileEditorActivity OOM 问题。 + - 修复 DashboardFragment NPE 问题。 + - 修复 getFetchProfileTimeout 数字格式异常。 + - 标准化日志标签。 + ### mobile-2.28.0 - **新功能** From 0192a1cd33fc024cb0f39c489ad8ddc524841d46 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Mon, 23 Mar 2026 02:23:31 +0800 Subject: [PATCH 07/22] docs(rule): Remove outdated IPv6 not supported warnings from IP-CIDR6 docs --- docs/profile-format/rule/ip.md | 6 +----- .../current/profile-format/rule/ip.md | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/docs/profile-format/rule/ip.md b/docs/profile-format/rule/ip.md index f68fa6426..51e3a451d 100644 --- a/docs/profile-format/rule/ip.md +++ b/docs/profile-format/rule/ip.md @@ -18,7 +18,7 @@ Reference: https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing # Routes traffic to the 192.168.0.0/16 private network directly IP-CIDR,192.168.0.0/16,DIRECT -# Routes IPv6 traffic to the specified CIDR range (currently ignored by Surfboard) +# Routes IPv6 traffic to the specified CIDR range IP-CIDR6,2001:db8:abcd:8000::/50,DIRECT ``` @@ -36,10 +36,6 @@ IP-CIDR6,2001:db8:abcd:8000::/50,DIRECT | route | - | true | Format: \{IP}/\{mask}, where the mask is in CIDR prefix format. | | target proxy | - | true | The specified proxy or proxy group must exist in the profile. | -:::caution -IPv6 is currently not supported by Surfboard; `IP-CIDR6` rules will be ignored. -::: - ## GEOIP Reference: diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/ip.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/ip.md index dbd7dcd2c..205e45e26 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/ip.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/ip.md @@ -18,7 +18,7 @@ CIDR 规则将流量与特定的 IP 地址范围进行匹配。 # 将发往 192.168.0.0/16 私有网络的流量直接转发 IP-CIDR,192.168.0.0/16,DIRECT -# 将 IPv6 流量路由到指定的 CIDR 范围(目前 Surfboard 会忽略此规则) +# 将 IPv6 流量路由到指定的 CIDR 范围 IP-CIDR6,2001:db8:abcd:8000::/50,DIRECT ``` @@ -36,10 +36,6 @@ IP-CIDR6,2001:db8:abcd:8000::/50,DIRECT | route | - | 是 | 格式:\{IP\}/\{mask\},其中掩码采用 CIDR 前缀格式。 | | target proxy | - | 是 | 指定的代理或策略组必须存在于配置文件中。 | -:::caution 注意 -Surfboard 目前不支持 IPv6;`IP-CIDR6` 规则将被忽略。 -::: - ## GEOIP (地理位置) 参考资料: From ba642c4e01f8297190c001319e5f18a6e0d11513 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sat, 28 Mar 2026 17:07:21 +0800 Subject: [PATCH 08/22] docs(wireguard): Add self-ip-v6 parameter documentation Add documentation for the optional self-ip-v6 parameter in WireGuard proxy configuration, supporting IPv6 address assignment for WireGuard tunnels. - Update English and Chinese documentation - Add example IPv6 address fd00:abcd:1234::2 - Mark parameter as optional in parameter table Co-Authored-By: Claude Sonnet 4.6 --- docs/profile-format/proxy/external-proxy/wireguard.md | 3 +++ .../current/profile-format/proxy/external-proxy/wireguard.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/docs/profile-format/proxy/external-proxy/wireguard.md b/docs/profile-format/proxy/external-proxy/wireguard.md index 1c98dd9b4..d36c7767d 100644 --- a/docs/profile-format/proxy/external-proxy/wireguard.md +++ b/docs/profile-format/proxy/external-proxy/wireguard.md @@ -23,6 +23,7 @@ wireguard-home = wireguard, section-name = HomeServer # Specific interface and peer settings for the WireGuard tunnel private-key = sDEZLACT3zgNCS0CyClgcBC2eYROqYrwLT4wdtAJj3s= self-ip = 10.0.2.2 +self-ip-v6 = fd00:abcd:1234::2 dns-server = 8.8.8.8 mtu = 1280 peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820) @@ -37,6 +38,7 @@ peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = [WireGuard {section name}] private-key = {private key} self-ip = {self ip} +self-ip-v6 = {self ipv6} dns-server = {dns server ip} mtu = {mtu size} peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = {endpoint address}, keepalive = {keepalive seconds}) @@ -50,6 +52,7 @@ peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = | section name | - | true | Supports domain and IP formats. | | private key | base64 encoded format | true | | | self ip | IPv4 format | true | | +| self ip v6 | IPv6 format | false | | | dns server ip | IPv4 format | true | Supports multiple values separated by commas. | | mtu size | integer greater than zero | true | | | public key | base64 encoded format | true | | diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md index ce1065877..d263a8a08 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md @@ -23,6 +23,7 @@ wireguard-home = wireguard, section-name = HomeServer # WireGuard 隧道的特定接口和对等端设置 private-key = sDEZLACT3zgNCS0CyClgcBC2eYROqYrwLT4wdtAJj3s= self-ip = 10.0.2.2 +self-ip-v6 = fd00:abcd:1234::2 dns-server = 8.8.8.8 mtu = 1280 peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820) @@ -37,6 +38,7 @@ peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = [WireGuard {section name}] private-key = {private key} self-ip = {self ip} +self-ip-v6 = {self ipv6} dns-server = {dns server ip} mtu = {mtu size} peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = {endpoint address}, keepalive = {keepalive seconds}) @@ -50,6 +52,7 @@ peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = | section name | - | 是 | 支持域名和 IP 格式。 | | private key | base64 编码格式 | 是 | | | self ip | IPv4 格式 | 是 | | +| self ip v6 | IPv6 格式 | 否 | | | dns server ip | IPv4 格式 | 是 | 支持以逗号分隔的多个值。 | | mtu size | 大于零的整数 | 是 | | | public key | base64 编码格式 | 是 | | From afdfa7610b7510c7d7384005322ed5f33ee5c0b7 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sat, 28 Mar 2026 23:56:33 +0800 Subject: [PATCH 09/22] docs(wireguard): Update allowed-ips and dns-server parameter documentation - Add quotes around allowed-ips values to avoid comma conflicts - Clarify dns-server is for resolving domain destinations through the tunnel - Update IPv4/IPv6 format support for dns-server, allowed-ips, endpoint - Update both English and Chinese documentation Co-Authored-By: Claude Sonnet 4.6 --- docs/profile-format/proxy/external-proxy/wireguard.md | 10 +++++----- .../profile-format/proxy/external-proxy/wireguard.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/profile-format/proxy/external-proxy/wireguard.md b/docs/profile-format/proxy/external-proxy/wireguard.md index d36c7767d..53d2052d2 100644 --- a/docs/profile-format/proxy/external-proxy/wireguard.md +++ b/docs/profile-format/proxy/external-proxy/wireguard.md @@ -26,7 +26,7 @@ self-ip = 10.0.2.2 self-ip-v6 = fd00:abcd:1234::2 dns-server = 8.8.8.8 mtu = 1280 -peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820) +peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = "0.0.0.0/0, ::/0", endpoint = 192.168.20.6:51820) ``` ## Format @@ -41,7 +41,7 @@ self-ip = {self ip} self-ip-v6 = {self ipv6} dns-server = {dns server ip} mtu = {mtu size} -peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = {endpoint address}, keepalive = {keepalive seconds}) +peer = (public-key = {public key}, allowed-ips = "{allowed ip routes}", endpoint = {endpoint address}, keepalive = {keepalive seconds}) ``` ## Parameters @@ -53,9 +53,9 @@ peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = | private key | base64 encoded format | true | | | self ip | IPv4 format | true | | | self ip v6 | IPv6 format | false | | -| dns server ip | IPv4 format | true | Supports multiple values separated by commas. | +| dns server ip | IPv4 or IPv6 format | true | Used to resolve domain destinations through the tunnel on the remote server. Supports multiple values separated by commas. | | mtu size | integer greater than zero | true | | | public key | base64 encoded format | true | | -| allowed ip routes | IPv4 route format | true | | -| endpoint address | IPv4 IP:PORT format | true | | +| allowed ip routes | IPv4 or IPv6 route format | true | Use quotes when specifying multiple routes, e.g., `"0.0.0.0/0, ::/0"`. | +| endpoint address | IP:PORT format | true | Supports IPv4 and IPv6 addresses. | | keepalive seconds | integer greater than zero | false | 0 means disable keepalive. | \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md index d263a8a08..7eb1141f0 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/proxy/external-proxy/wireguard.md @@ -26,7 +26,7 @@ self-ip = 10.0.2.2 self-ip-v6 = fd00:abcd:1234::2 dns-server = 8.8.8.8 mtu = 1280 -peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820) +peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = "0.0.0.0/0, ::/0", endpoint = 192.168.20.6:51820) ``` ## 格式 @@ -41,7 +41,7 @@ self-ip = {self ip} self-ip-v6 = {self ipv6} dns-server = {dns server ip} mtu = {mtu size} -peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = {endpoint address}, keepalive = {keepalive seconds}) +peer = (public-key = {public key}, allowed-ips = "{allowed ip routes}", endpoint = {endpoint address}, keepalive = {keepalive seconds}) ``` ## 参数 @@ -53,9 +53,9 @@ peer = (public-key = {public key}, allowed-ips = {allowed ip routes}, endpoint = | private key | base64 编码格式 | 是 | | | self ip | IPv4 格式 | 是 | | | self ip v6 | IPv6 格式 | 否 | | -| dns server ip | IPv4 格式 | 是 | 支持以逗号分隔的多个值。 | +| dns server ip | IPv4 或 IPv6 格式 | 是 | 用于在隧道远端解析域名格式的转发目的地。支持以逗号分隔的多个值。 | | mtu size | 大于零的整数 | 是 | | | public key | base64 编码格式 | 是 | | -| allowed ip routes | IPv4 路由格式 | 是 | | -| endpoint address | IPv4 IP:端口 格式 | 是 | | +| allowed ip routes | IPv4 或 IPv6 路由格式 | 是 | 指定多个路由时需用引号包裹,例如 `"0.0.0.0/0, ::/0"`。 | +| endpoint address | IP:端口 格式 | 是 | 支持 IPv4 和 IPv6 地址。 | | keepalive seconds | 大于零的整数 | 否 | 0 表示禁用 Keepalive。 | \ No newline at end of file From d9d0f84fb1b403ef8f213937c4eaa8ac96be8a5c Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 29 Mar 2026 23:25:05 +0800 Subject: [PATCH 10/22] update changelog --- docs/changelog.md | 14 ++++++++++++++ .../current/changelog.md | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index d74190afd..e666787da 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,20 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.1 + +- **New Features** + - **SplashScreen**: Added Android 12+ SplashScreen API support with animated vector icon. + - **Batch Import**: Support batch importing multiple profile files via SAF (Storage Access Framework) with concurrent parsing. + - **Hysteria2 URI**: Support importing Hysteria2 proxy directly via `hysteria2://` and `hy2://` URI schemes. + - **WireGuard**: Added IPv6 support and in-tunnel DNS resolution with TTL cache. +- **Fixes** + - Fixed Snell connection error when using some PSK. + - Fixed false unsaved changes prompt in ProfileEditor after saving. + - Fixed crashes caused by double close issues in WireGuard. +- **Improvements** + - Updated GeoIP database. + ### mobile-2.29.0 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index 60283783c..4b0b33beb 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,20 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.1 + +- **新功能** + - **启动屏**: 添加 Android 12+ SplashScreen API 支持,带动画矢量图标。 + - **批量导入**: 支持通过 SAF(存储访问框架)批量导入多个配置文件,支持并发解析。 + - **Hysteria2 URI**: 支持通过 `hysteria2://` 和 `hy2://` URI 方案直接导入 Hysteria2 代理。 + - **WireGuard**: 添加 IPv6 支持和隧道内 DNS 解析(带 TTL 缓存)。 +- **修复** + - 修复使用某些 PSK 时 Snell 连接失败的问题。 + - 修复 ProfileEditor 保存后仍提示有未保存更改的问题。 + - 修复 WireGuard 中重复关闭导致的崩溃问题。 +- **改进** + - 更新 GeoIP 数据库。 + ### mobile-2.29.0 - **新功能** @@ -1347,4 +1361,4 @@ sidebar_position: 5 ### 0.9.13 - 修复了第二次启动崩溃的问题。 -- 更新了策略组网格 UI。 \ No newline at end of file +- 更新了策略组网格 UI。 From 9aa102eca2dab641201cfb1c5a9839d3659e4be5 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Mon, 6 Apr 2026 18:02:05 +0800 Subject: [PATCH 11/22] docs(sshdump): Add SSHDump packet capture guide Add English and Simplified Chinese documentation for Wireshark SSH remote capture feature. Co-Authored-By: Claude Sonnet 4.6 --- docs/sshdump.md | 54 +++++++++++++++++++ .../current/sshdump.md | 54 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 docs/sshdump.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/sshdump.md diff --git a/docs/sshdump.md b/docs/sshdump.md new file mode 100644 index 000000000..1def98adc --- /dev/null +++ b/docs/sshdump.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 4 +--- + +# SSHDump Packet Capture + +SSHDump allows you to stream live VPN traffic from Surfboard directly into Wireshark via the SSH remote capture interface. This is useful for deep packet inspection and network debugging. + +:::caution +Enabling SSHDump will significantly reduce VPN performance because every packet is synchronized over an SSH socket. Use it for debugging only. +::: + +## Prerequisites + +- Android 8.0 or higher (SSHDump is disabled on Android 7 and below) +- Surfboard VPN is active +- Your computer and Android device are on the same network +- Wireshark with SSH remote capture support installed on your computer + +## Enable SSHDump + +1. Open **Surfboard** and start the VPN. +2. Go to **Settings** → **VPN Settings**. +3. Turn on **SSH remote capture**. + +Once enabled, a card appears on the Dashboard showing: + +``` +SSHDump is running on :15000 +``` + +The default port is `15000`. If that port is occupied, a different port will be assigned automatically. + +## Capture in Wireshark + +1. Open **Wireshark**. +2. Select **SSH remote capture** from the capture interface list. +3. Enter the following information: + - **Remote host**: The private IP address shown in the Surfboard Dashboard (e.g. `192.168.1.100`) + - **Remote port**: The port shown in the Dashboard (default `15000`) + - **Remote capture command**: Can be left empty or any arbitrary command +4. For authentication, enter any username and any password (or use any key). SSHDump accepts all credentials for convenience. +5. Click **Start**, and Wireshark will begin displaying live packets from the VPN tunnel. + +## Important Notes + +- SSHDump binds to `0.0.0.0` inside Surfboard, so any device on the same local network can connect. +- The captured interface type is **RAW IP** (Link-type 101), so protocol dissection starts at the IP layer. +- System DNS IPs (`198.18.0.4`, `198.18.0.5`) and the local TUN address (`198.18.0.1`) shown in the capture are internal placeholders used by the VPN engine. +- Remember to turn off SSHDump when debugging is finished to restore normal VPN performance. + +## See Also + +- [Wireshark sshdump manual](https://www.wireshark.org/docs/man-pages/sshdump.html) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/sshdump.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/sshdump.md new file mode 100644 index 000000000..5df6b62a9 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/sshdump.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 4 +--- + +# SSHDump 抓包 + +SSHDump 允许你通过 Wireshark 的 SSH remote capture 接口,将 Surfboard 的实时 VPN 流量直接导入 Wireshark 进行分析。这适用于深度包检测和网络调试。 + +:::caution +开启 SSHDump 会显著降低 VPN 性能,因为每个数据包都需要通过 SSH 套接字同步传输。请仅在调试时使用。 +::: + +## 前置条件 + +- Android 8.0 或更高版本(Android 7 及以下不支持 SSHDump) +- Surfboard VPN 已启动 +- 电脑与 Android 设备处于同一局域网 +- 电脑上已安装支持 SSH remote capture 的 Wireshark + +## 开启 SSHDump + +1. 打开 **Surfboard** 并启动 VPN。 +2. 进入 **设置** → **VPN 设置**。 +3. 打开 **SSH remote capture** 开关。 + +开启后,Dashboard 将出现提示卡片: + +``` +SSHDump is running on :15000 +``` + +默认端口为 `15000`,如果该端口被占用,系统会自动分配其他端口。 + +## 在 Wireshark 中抓包 + +1. 打开 **Wireshark**。 +2. 在捕获接口列表中选择 **SSH remote capture**。 +3. 填写以下信息: + - **Remote host**: Surfboard Dashboard 中显示的私有 IP 地址(例如 `192.168.1.100`) + - **Remote port**: Dashboard 中显示的端口(默认 `15000`) + - **Remote capture command**: 可留空或填写任意命令 +4. 认证时输入任意用户名和任意密码(或使用任意密钥)即可,SSHDump 为了方便调试会接受所有凭据。 +5. 点击 **Start**,Wireshark 就会开始实时显示 VPN 隧道中的数据包。 + +## 注意事项 + +- SSHDump 在 Surfboard 内部绑定到 `0.0.0.0`,因此同一局域网内的任何设备都可以连接。 +- 捕获的接口类型为 **RAW IP**(Link-type 101),因此协议解析从 IP 层开始。 +- 抓包中显示的系统 DNS IP(`198.18.0.4`、`198.18.0.5`)以及本地 TUN 地址(`198.18.0.1`)是 VPN 引擎内部使用的占位地址。 +- 调试完成后请关闭 SSHDump,以恢复正常的 VPN 性能。 + +## 相关链接 + +- [Wireshark sshdump 官方文档](https://www.wireshark.org/docs/man-pages/sshdump.html) From 26b162ab6fefcfbea2b7f11535054db82fa4cfd7 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Fri, 10 Apr 2026 00:05:57 +0800 Subject: [PATCH 12/22] add user-agent rule document --- docs/profile-format/rule/user-agent.md | 62 +++++++++++++++++++ .../current/profile-format/rule/user-agent.md | 62 +++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 docs/profile-format/rule/user-agent.md create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/user-agent.md diff --git a/docs/profile-format/rule/user-agent.md b/docs/profile-format/rule/user-agent.md new file mode 100644 index 000000000..7340ceec3 --- /dev/null +++ b/docs/profile-format/rule/user-agent.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 7 +--- + +# User-Agent Rules + +User-Agent rules allow you to route HTTP traffic based on the User-Agent header of the request. This rule type only works for HTTP/HTTPS traffic handled by the System HTTP Proxy. + +## Example + +```ini +# Routes Instagram app traffic through DIRECT +USER-AGENT,Instagram*,DIRECT + +# Blocks curl requests +USER-AGENT,*curl*,REJECT + +# Routes Apple TV traffic through a specific proxy with remote DNS +USER-AGENT,Apple*TV,Proxy,force-remote-dns +``` + +## Format + +```ini +USER-AGENT, {pattern}, {target proxy}[, force-remote-dns][, enhanced-mode] +``` + +## Parameters + +| Name | Value | Mandatory | Note | +|------------------|----------------|-----------|---------------------------------------------------------------------------------------| +| pattern | - | true | User-Agent pattern to match. Supports wildcard characters `*` (matches any sequence) and `?` (matches any single character). | +| target proxy | - | true | The specified proxy or proxy group must exist in the profile. | +| force-remote-dns | true
false | false | Default value: false.
If set to true, the DNS query will be triggered on the remote proxy. | +| enhanced-mode | true
false | false | Default value: false.
If set to true, a fake IP will be returned in the DNS query. | + +:::caution +**Requirements:** + +1. **Android Version**: User-Agent rules require **Android 10+** (because they depend on System HTTP Proxy). +2. **Settings**: You must enable **"Enable VPN HTTP Proxy"** in VPN Settings for User-Agent rules to work. +3. **Traffic Type**: User-Agent rules **only work for HTTP/HTTPS traffic** handled by System HTTP Proxy. They do not apply to: + - TCP traffic routed directly through the VPN tunnel + - UDP traffic + - DNS queries + +`force-remote-dns` and `enhanced-mode` attributes only work on **Android 11 and above**. +::: + +:::tip +Common User-Agent patterns: +- `Instagram*` - Matches Instagram app requests +- `*curl*` - Matches curl tool requests +- `Mozilla*` - Matches Mozilla browser requests +- `?ozilla*` - Matches any browser with "ozilla" in the name (Mozilla, Lozilla, etc.) +::: + +## See Also + +- [DOMAIN](./domain.md) - Domain-based routing rules +- [PROCESS-NAME](./process.md) - Application-based routing rules +- [FINAL](./final.md) - Final catch-all rule diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/user-agent.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/user-agent.md new file mode 100644 index 000000000..de28eef60 --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/rule/user-agent.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 7 +--- + +# User-Agent 规则 + +User-Agent 规则允许你根据请求的 User-Agent 请求头来路由 HTTP 流量。此规则类型仅适用于由系统 HTTP 代理处理的 HTTP/HTTPS 流量。 + +## 示例 + +```ini +# 将 Instagram 应用流量路由到 DIRECT +USER-AGENT,Instagram*,DIRECT + +# 阻止 curl 请求 +USER-AGENT,*curl*,REJECT + +# 将 Apple TV 流量路由到指定代理并使用远程 DNS +USER-AGENT,Apple*TV,Proxy,force-remote-dns +``` + +## 格式 + +```ini +USER-AGENT, {pattern}, {target proxy}[, force-remote-dns][, enhanced-mode] +``` + +## 参数 + +| 名称 | 值 | 必填 | 说明 | +|-------------------|----------------|-----------|---------------------------------------------------------------------------------------| +| pattern(模式) | - | 是 | 要匹配的 User-Agent 模式。支持通配符 `*`(匹配任意序列)和 `?`(匹配任意单个字符)。 | +| target proxy(目标代理) | - | 是 | 指定的代理或代理组必须存在于配置文件中。 | +| force-remote-dns | true
false | 否 | 默认值:false。
如果设置为 true,DNS 查询将在远程代理上触发。 | +| enhanced-mode | true
false | 否 | 默认值:false。
如果设置为 true,DNS 查询将返回假 IP。 | + +:::caution +**使用要求:** + +1. **安卓版本**:User-Agent 规则需要 **Android 10+**(因为依赖系统 HTTP 代理功能)。 +2. **设置开关**:必须先在 VPN 设置中开启**"启用 VPN HTTP 代理"**,User-Agent 规则才能生效。 +3. **流量类型**:User-Agent 规则**仅适用于由系统 HTTP 代理处理的 HTTP/HTTPS 流量**。不适用于: + - 直接通过 VPN 隧道的 TCP 流量 + - UDP 流量 + - DNS 查询 + +`force-remote-dns` 和 `enhanced-mode` 属性仅在 **Android 11 及以上版本**有效。 +::: + +:::tip +常见 User-Agent 模式: +- `Instagram*` - 匹配 Instagram 应用请求 +- `*curl*` - 匹配 curl 工具请求 +- `Mozilla*` - 匹配 Mozilla 浏览器请求 +- `?ozilla*` - 匹配任何包含 "ozilla" 的浏览器名称(Mozilla、Lozilla 等) +::: + +## 参见 + +- [DOMAIN](./domain.md) - 基于域名的路由规则 +- [PROCESS-NAME](./process.md) - 基于应用的路由规则 +- [FINAL](./final.md) - 最终兜底规则 From 7b6c08f8906ebe8865e7ef5f4bcd1d787c3ac1cf Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Fri, 10 Apr 2026 00:28:17 +0800 Subject: [PATCH 13/22] update changelog --- docs/changelog.md | 17 +++++++++++++++++ .../current/changelog.md | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index e666787da..2186cccb6 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,23 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.2 + +- **New Features** + - **USER-AGENT Rule**: Support routing HTTP traffic based on User-Agent headers with wildcard pattern matching. Requires Android 10+ and VPN HTTP Proxy enabled. + - **Dashboard Interaction**: Tap network speed card to open traffic list sorted by speed; tap traffic usage card to open list sorted by total usage. + - **VPN HTTP Proxy Toggle**: New setting to enable/disable HTTP proxy functionality (Android 10+ only). + - **Recent Request Quick Access**: Network speed list now supports viewing request details directly. +- **UI & Theme** + - New Material3 theme design. + - Fixed occasional theme switching issues. + - Fixed external resources menu opening animation. + - SSHDump settings now auto-scroll and highlight on navigation. +- **Fixes** + - Fixed theme settings state loss issue. + - Improved Snell protocol compatibility. + - Optimized profile save logic to preserve partial configs. + ### mobile-2.29.1 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index 4b0b33beb..75b5ac3e7 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,23 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.2 + +- **新功能** + - **USER-AGENT 规则**: 支持根据 User-Agent 请求头路由 HTTP 流量,可使用通配符匹配。需要 Android 10+ 并开启 VPN HTTP 代理。 + - **仪表盘交互**: 点击网速卡片按速度排序展示流量列表;点击流量使用卡片按总流量排序展示流量列表。 + - **VPN HTTP 代理开关**: 新增设置选项用于启用/禁用 HTTP 代理功能(仅 Android 10+)。 + - **最近请求快捷入口**: 网速监控列表支持直接查看请求详情。 +- **UI 与主题** + - 全新 Material3 主题设计。 + - 修复主题切换偶尔失效的问题。 + - 修复外部资源菜单打开效果。 + - SSHDump 设置跳转增加自动滚动和高亮效果。 +- **修复** + - 修复主题设置状态丢失的问题。 + - 提升 Snell 协议兼容性。 + - 优化配置文件保存逻辑,部分解析失败时仍可保存。 + ### mobile-2.29.1 - **新功能** From bc57bdf3882918f9f28e010ab65994f7e33e2627 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Fri, 10 Apr 2026 00:31:20 +0800 Subject: [PATCH 14/22] update Docusaurus --- package.json | 6 +- yarn.lock | 755 ++++++++++++++++++++++++++++----------------------- 2 files changed, 418 insertions(+), 343 deletions(-) diff --git a/package.json b/package.json index 796bcbf36..b2a45b2d3 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ }, "dependencies": { "@babel/runtime": "^7.27.6", - "@docusaurus/core": "^3.9.2", - "@docusaurus/plugin-pwa": "^3.9.2", - "@docusaurus/preset-classic": "^3.9.2", + "@docusaurus/core": "^3.10.0", + "@docusaurus/plugin-pwa": "^3.10.0", + "@docusaurus/preset-classic": "^3.10.0", "@easyops-cn/docusaurus-search-local": "^0.51.1", "@mdx-js/react": "^3.1.0", "clsx": "^2.1.1", diff --git a/yarn.lock b/yarn.lock index c9651166c..8d6b4d715 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,46 @@ "@algolia/requester-fetch" "5.47.0" "@algolia/requester-node-http" "5.47.0" +"@algolia/autocomplete-core@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz#702df67a08cb3cfe8c33ee1111ef136ec1a9e232" + integrity sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.19.2" + "@algolia/autocomplete-shared" "1.19.2" + +"@algolia/autocomplete-core@^1.19.2": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz#7c84c771d28643fb00d09026c05013fb97aeea23" + integrity sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.19.8" + "@algolia/autocomplete-shared" "1.19.8" + +"@algolia/autocomplete-plugin-algolia-insights@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz#3584b625b9317e333d1ae43664d02358e175c52d" + integrity sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg== + dependencies: + "@algolia/autocomplete-shared" "1.19.2" + +"@algolia/autocomplete-plugin-algolia-insights@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz#f60d21edbe2a42e6d4e2215430733e3f51641471" + integrity sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA== + dependencies: + "@algolia/autocomplete-shared" "1.19.8" + +"@algolia/autocomplete-shared@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz#c0b7b8dc30a5c65b70501640e62b009535e4578f" + integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== + +"@algolia/autocomplete-shared@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz#5d723d8bdb448efbb1b0e1c7ff94cc18e5b1dc0e" + integrity sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ== + "@algolia/client-abtesting@5.47.0": version "5.47.0" resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.47.0.tgz#0d64f45844dcf18cebe9d1dae183052ec3d3f6cb" @@ -1394,28 +1434,29 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/core@4.5.3": - version "4.5.3" - resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.5.3.tgz#b64b7855348882ba4789e6a28a51764abb1ff9a1" - integrity sha512-x/P5+HVzv9ALtbuJIfpkF8Eyc5RE8YCsFcOgLrrtWa9Ui+53ggZA5seIAanCRORbS4+m982lu7rZmebSiuMIcw== +"@docsearch/core@4.6.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.6.2.tgz#0a6fdc13b1eb12153cb19316f911479b67f7bd58" + integrity sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA== -"@docsearch/css@4.5.3": - version "4.5.3" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.5.3.tgz#359930bc8435976c574655adc9bb0574d8887a70" - integrity sha512-kUpHaxn0AgI3LQfyzTYkNUuaFY4uEz/Ym9/N/FvyDE+PzSgZsCyDH9jE49B6N6f1eLCm9Yp64J9wENd6vypdxA== +"@docsearch/css@4.6.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.6.2.tgz#986776619dccbf798176c75e858cc22f5e710bb4" + integrity sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ== -"@docsearch/react@^3.9.0 || ^4.1.0": - version "4.5.3" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.5.3.tgz#84b3bff8ca1fa7870499b1c9d28bd2b65786c18e" - integrity sha512-Hm3Lg/FD9HXV57WshhWOHOprbcObF5ptLzcjA5zdgJDzYOMwEN+AvY8heQ5YMTWyC6kW2d+Qk25AVlHnDWMSvA== +"@docsearch/react@^3.9.0 || ^4.3.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.6.2.tgz#e6c65fb87fb943eefaa936debe6d31bb51b25056" + integrity sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w== dependencies: - "@docsearch/core" "4.5.3" - "@docsearch/css" "4.5.3" + "@algolia/autocomplete-core" "1.19.2" + "@docsearch/core" "4.6.2" + "@docsearch/css" "4.6.2" -"@docusaurus/babel@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.1.tgz#db329ac047184214e08e2dbc809832c696c18506" - integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw== +"@docusaurus/babel@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.10.0.tgz#819819f107233dfcf50b59cd51158f23fb04878a" + integrity sha512-mqCJhCZNZUDg0zgDEaPTM4DnRsisa24HdqTy/qn/MQlbwhTb4WVaZg6ZyX6yIVKqTz8fS1hBMgM+98z+BeJJDg== dependencies: "@babel/core" "^7.25.9" "@babel/generator" "^7.25.9" @@ -1425,18 +1466,17 @@ "@babel/preset-react" "^7.25.9" "@babel/preset-typescript" "^7.25.9" "@babel/runtime" "^7.25.9" - "@babel/runtime-corejs3" "^7.25.9" "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" + "@docusaurus/logger" "3.10.0" + "@docusaurus/utils" "3.10.0" babel-plugin-dynamic-import-node "^2.3.3" fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/babel@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.9.2.tgz#f956c638baeccf2040e482c71a742bc7e35fdb22" - integrity sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA== +"@docusaurus/babel@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.1.tgz#db329ac047184214e08e2dbc809832c696c18506" + integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw== dependencies: "@babel/core" "^7.25.9" "@babel/generator" "^7.25.9" @@ -1448,23 +1488,23 @@ "@babel/runtime" "^7.25.9" "@babel/runtime-corejs3" "^7.25.9" "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.9.2" - "@docusaurus/utils" "3.9.2" + "@docusaurus/logger" "3.8.1" + "@docusaurus/utils" "3.8.1" babel-plugin-dynamic-import-node "^2.3.3" fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/bundler@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.1.tgz#e2b11d615f09a6e470774bb36441b8d06736b94c" - integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA== +"@docusaurus/bundler@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.10.0.tgz#878c4c46bfa3434671ea37a43da184238a6aae26" + integrity sha512-iONUGZGgp+lAkw/cJZH6irONcF4p8+278IsdRlq8lYhxGjkoNUs0w7F4gVXBYSNChq5KG5/JleTSsdJySShxow== dependencies: "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.8.1" - "@docusaurus/cssnano-preset" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" + "@docusaurus/babel" "3.10.0" + "@docusaurus/cssnano-preset" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" babel-loader "^9.2.1" clean-css "^5.3.3" copy-webpack-plugin "^11.0.0" @@ -1484,17 +1524,17 @@ webpack "^5.95.0" webpackbar "^6.0.1" -"@docusaurus/bundler@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.9.2.tgz#0ca82cda4acf13a493e3f66061aea351e9d356cf" - integrity sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA== +"@docusaurus/bundler@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.1.tgz#e2b11d615f09a6e470774bb36441b8d06736b94c" + integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA== dependencies: "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.9.2" - "@docusaurus/cssnano-preset" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" + "@docusaurus/babel" "3.8.1" + "@docusaurus/cssnano-preset" "3.8.1" + "@docusaurus/logger" "3.8.1" + "@docusaurus/types" "3.8.1" + "@docusaurus/utils" "3.8.1" babel-loader "^9.2.1" clean-css "^5.3.3" copy-webpack-plugin "^11.0.0" @@ -1514,18 +1554,18 @@ webpack "^5.95.0" webpackbar "^6.0.1" -"@docusaurus/core@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.1.tgz#c22e47c16a22cb7d245306c64bc54083838ff3db" - integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA== - dependencies: - "@docusaurus/babel" "3.8.1" - "@docusaurus/bundler" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" +"@docusaurus/core@3.10.0", "@docusaurus/core@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.10.0.tgz#642e71a0209d62c3f5ef275ed9d74a881f40df39" + integrity sha512-mgLdQsO8xppnQZc3LPi+Mf+PkPeyxJeIx11AXAq/14fsaMefInQiMEZUUmrc7J+956G/f7MwE7tn8KZgi3iRcA== + dependencies: + "@docusaurus/babel" "3.10.0" + "@docusaurus/bundler" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -1537,7 +1577,7 @@ escape-html "^1.0.3" eta "^2.2.0" eval "^0.1.8" - execa "5.1.1" + execa "^5.1.1" fs-extra "^11.1.1" html-tags "^3.3.1" html-webpack-plugin "^5.6.0" @@ -1548,32 +1588,32 @@ prompts "^2.4.2" react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" react-loadable "npm:@docusaurus/react-loadable@6.0.0" - react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-loadable-ssr-addon-v5-slorber "^1.0.3" react-router "^5.3.4" react-router-config "^5.1.1" react-router-dom "^5.3.4" semver "^7.5.4" - serve-handler "^6.1.6" + serve-handler "^6.1.7" tinypool "^1.0.2" tslib "^2.6.0" update-notifier "^6.0.2" webpack "^5.95.0" webpack-bundle-analyzer "^4.10.2" - webpack-dev-server "^4.15.2" + webpack-dev-server "^5.2.2" webpack-merge "^6.0.1" -"@docusaurus/core@3.9.2", "@docusaurus/core@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.9.2.tgz#cc970f29b85a8926d63c84f8cffdcda43ed266ff" - integrity sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw== - dependencies: - "@docusaurus/babel" "3.9.2" - "@docusaurus/bundler" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/core@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.1.tgz#c22e47c16a22cb7d245306c64bc54083838ff3db" + integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA== + dependencies: + "@docusaurus/babel" "3.8.1" + "@docusaurus/bundler" "3.8.1" + "@docusaurus/logger" "3.8.1" + "@docusaurus/mdx-loader" "3.8.1" + "@docusaurus/utils" "3.8.1" + "@docusaurus/utils-common" "3.8.1" + "@docusaurus/utils-validation" "3.8.1" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -1607,9 +1647,19 @@ update-notifier "^6.0.2" webpack "^5.95.0" webpack-bundle-analyzer "^4.10.2" - webpack-dev-server "^5.2.2" + webpack-dev-server "^4.15.2" webpack-merge "^6.0.1" +"@docusaurus/cssnano-preset@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.0.tgz#be1b435c33df09d743473d3fadda67b4568dfae3" + integrity sha512-qzSshTO1DB3TYW+dPUal5KHM7XPc5YQfzF3Kdb2NDACJUyGbNcFtw3tGkCJlYwhNCRKbZcmwraKUS1i5dcHdGg== + dependencies: + cssnano-preset-advanced "^6.1.2" + postcss "^8.5.4" + postcss-sort-media-queries "^5.2.0" + tslib "^2.6.0" + "@docusaurus/cssnano-preset@3.8.1": version "3.8.1" resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz#bd55026251a6ab8e2194839a2042458ef9880c44" @@ -1620,14 +1670,12 @@ postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/cssnano-preset@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz#523aab65349db3c51a77f2489048d28527759428" - integrity sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ== +"@docusaurus/logger@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.10.0.tgz#2bacbd004dd78e3da926dbe8f6fa9a930856575d" + integrity sha512-9jrZzFuBH1LDRlZ7cznAhCLmAZ3HSDqgwdrSSZdGHq9SPUOQgXXu8mnxe2ZRB9NS1PCpMTIOVUqDtZPIhMafZg== dependencies: - cssnano-preset-advanced "^6.1.2" - postcss "^8.5.4" - postcss-sort-media-queries "^5.2.0" + chalk "^4.1.2" tslib "^2.6.0" "@docusaurus/logger@3.8.1": @@ -1638,22 +1686,14 @@ chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/logger@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.9.2.tgz#6ec6364b90f5a618a438cc9fd01ac7376869f92a" - integrity sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA== +"@docusaurus/mdx-loader@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.10.0.tgz#1d4b050d751389ecf38dee48bcb61e53df8ffb82" + integrity sha512-mQQV97080AH4PYNs087l202NMDqRopZA4mg5W76ZZyTFrmWhJ3mHg+8A+drJVENxw5/Q+wHMHLgsx+9z1nEs0A== dependencies: - chalk "^4.1.2" - tslib "^2.6.0" - -"@docusaurus/mdx-loader@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz#74309b3614bbcef1d55fb13e6cc339b7fb000b5f" - integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w== - dependencies: - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" + "@docusaurus/logger" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -1676,14 +1716,14 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/mdx-loader@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz#78d238de6c6203fa811cc2a7e90b9b79e111408c" - integrity sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ== +"@docusaurus/mdx-loader@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz#74309b3614bbcef1d55fb13e6cc339b7fb000b5f" + integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w== dependencies: - "@docusaurus/logger" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/logger" "3.8.1" + "@docusaurus/utils" "3.8.1" + "@docusaurus/utils-validation" "3.8.1" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -1706,12 +1746,12 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz#454de577bd7f50b5eae16db0f76b49ca5e4e281a" - integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg== +"@docusaurus/module-type-aliases@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.0.tgz#749928f104d563f11f046bf0c9ab6489a470c7c8" + integrity sha512-/1O0Zg8w3DFrYX/I6Fbss7OJrtZw1QoyjDhegiFNHVi9A9Y0gQ3jUAytVxF6ywpAWpLyLxch8nN8H/V3XfzdJQ== dependencies: - "@docusaurus/types" "3.8.1" + "@docusaurus/types" "3.10.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1719,12 +1759,12 @@ react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/module-type-aliases@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz#993c7cb0114363dea5ef6855e989b3ad4b843a34" - integrity sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew== +"@docusaurus/module-type-aliases@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz#454de577bd7f50b5eae16db0f76b49ca5e4e281a" + integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg== dependencies: - "@docusaurus/types" "3.9.2" + "@docusaurus/types" "3.8.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1732,20 +1772,21 @@ react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/plugin-content-blog@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz#d5ce51eb7757bdab0515e2dd26a793ed4e119df9" - integrity sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ== - dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/plugin-content-blog@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.0.tgz#10095291b637440847854ecb2c8afcd8746debd7" + integrity sha512-RuTz68DhB7CL96QO5UsFbciD7GPYq6QV+YMfF9V0+N4ZgLhJIBgpVAr8GobrKF6NRe5cyWWETU5z5T834piG9g== + dependencies: + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" cheerio "1.0.0-rc.12" + combine-promises "^1.1.0" feed "^4.2.2" fs-extra "^11.1.1" lodash "^4.17.21" @@ -1756,20 +1797,20 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz#cd8f2d1c06e53c3fa3d24bdfcb48d237bf2d6b2e" - integrity sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg== - dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/module-type-aliases" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/plugin-content-docs@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.0.tgz#9c4ea1d5a405340f28c281d2e4586c695a7c65a5" + integrity sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ== + dependencies: + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/module-type-aliases" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -1804,89 +1845,89 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz#22db6c88ade91cec0a9e87a00b8089898051b08d" - integrity sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA== +"@docusaurus/plugin-content-pages@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.0.tgz#7670cbb3c849f434949f542bfdfded1580a13165" + integrity sha512-5amX8kEJI+nIGtuLVjYk59Y5utEJ3CHETFOPEE4cooIRLA4xM4iBsA6zFgu4ljcopeYwvBzFEWf5g2I6Yb9SkA== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-css-cascade-layers@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz#358c85f63f1c6a11f611f1b8889d9435c11b22f8" - integrity sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ== +"@docusaurus/plugin-css-cascade-layers@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.0.tgz#71e318d842be95f92be6c3dca00ceea4971d0edb" + integrity sha512-6q1vtt5FJcg5osgkHeM1euErECNqEZ5Z1j69yiNx2luEBIso+nxCkS9nqj8w+MK5X7rvKEToGhFfOFWncs51pQ== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" tslib "^2.6.0" -"@docusaurus/plugin-debug@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz#b5df4db115583f5404a252dbf66f379ff933e53c" - integrity sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA== +"@docusaurus/plugin-debug@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.10.0.tgz#e77f924604e1e09d5d90fe0bdf23a3be8ea3307e" + integrity sha512-XcljKN+G+nmmK69uQA1d9BlYU3ZftG3T3zpK8/7Hf/wrOlV7TA4Ampdrdwkg0jElKdKAoSnPhCO0/U3bQGsVQQ== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" fs-extra "^11.1.1" react-json-view-lite "^2.3.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz#857fe075fdeccdf6959e62954d9efe39769fa247" - integrity sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw== +"@docusaurus/plugin-google-analytics@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.0.tgz#22c7e976fe4d970c7cd1c73c9723d9a5786c6e37" + integrity sha512-hTEoodatpBZnUat5nFExbuTGA1lhWGy7vZGuTew5Q3QDtGKFpSJLYmZJhdTjvCFwv1+qQ67hgAVlKdJOB8TXow== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz#df75b1a90ae9266b0471909ba0265f46d5dcae62" - integrity sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA== +"@docusaurus/plugin-google-gtag@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.0.tgz#c38a2ba638257851cc845b934506b80c08d47f96" + integrity sha512-iB/Zzjv/eelJRbdULZqzWCbgMgJ7ht4ONVjXtN3+BI/muil6S87gQ1OJyPwlXD+ELdKkitC7bWv5eJdYOZLhrQ== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" - "@types/gtag.js" "^0.0.12" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" + "@types/gtag.js" "^0.0.20" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz#d1a3cf935acb7d31b84685e92d70a1d342946677" - integrity sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw== +"@docusaurus/plugin-google-tag-manager@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.0.tgz#5469c923cc1ad4608399d0b17e5fcacd8e030d56" + integrity sha512-FEjZxqKgLHa+Wez/EgKxRwvArNCWIScfyEQD95rot7jkxp6nonjI5XIbGfO/iYhM5Qinwe8aIEQHP2KZtpqVuA== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" tslib "^2.6.0" -"@docusaurus/plugin-pwa@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-pwa/-/plugin-pwa-3.9.2.tgz#44f4ca67f86e961d332ad1a6f6944bf91a8f064e" - integrity sha512-1nSKCCf3xF0W+y8AM7VbXXFXYpmXrNwb6xMQ2Aw5jqzK1qe4js5Db+1bf1neyDyuVgSisQu+gPXARUfb93TlRQ== +"@docusaurus/plugin-pwa@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-pwa/-/plugin-pwa-3.10.0.tgz#9d02589c489859a181c828af254e87d86e4a05e5" + integrity sha512-kJr50iyQcE7qRBbYJol9IKREHny4nvodvJkz88lQl7LvOIE6SIgDMl2gG+nhkHqQvuO15i+WnPNlnPVSRLZUdg== dependencies: "@babel/core" "^7.25.9" "@babel/preset-env" "^7.25.9" - "@docusaurus/bundler" "3.9.2" - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/theme-translations" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/bundler" "3.10.0" + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/theme-translations" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" babel-loader "^9.2.1" clsx "^2.0.0" core-js "^3.31.1" @@ -1897,76 +1938,77 @@ workbox-precaching "^7.0.0" workbox-window "^7.0.0" -"@docusaurus/plugin-sitemap@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz#e1d9f7012942562cc0c6543d3cb2cdc4ae713dc4" - integrity sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw== - dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/plugin-sitemap@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.0.tgz#35d59d46803f279f22aa64fc1bd18c048f12662b" + integrity sha512-DVTSLjB97hIjmayGnGcBfognCeI7ZuUKgEnU7Oz81JYqXtVg94mVTthDjq3QHTylYNeCUbkaW8VF0FDLcc8pPw== + dependencies: + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/plugin-svgr@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz#62857ed79d97c0150d25f7e7380fdee65671163a" - integrity sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw== +"@docusaurus/plugin-svgr@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.0.tgz#8ada2e6dd8318d20206a9b044fc091a5794ba3f0" + integrity sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ== dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" "@svgr/core" "8.1.0" "@svgr/webpack" "^8.1.0" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/preset-classic@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz#85cc4f91baf177f8146c9ce896dfa1f0fd377050" - integrity sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w== - dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/plugin-content-blog" "3.9.2" - "@docusaurus/plugin-content-docs" "3.9.2" - "@docusaurus/plugin-content-pages" "3.9.2" - "@docusaurus/plugin-css-cascade-layers" "3.9.2" - "@docusaurus/plugin-debug" "3.9.2" - "@docusaurus/plugin-google-analytics" "3.9.2" - "@docusaurus/plugin-google-gtag" "3.9.2" - "@docusaurus/plugin-google-tag-manager" "3.9.2" - "@docusaurus/plugin-sitemap" "3.9.2" - "@docusaurus/plugin-svgr" "3.9.2" - "@docusaurus/theme-classic" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/theme-search-algolia" "3.9.2" - "@docusaurus/types" "3.9.2" - -"@docusaurus/theme-classic@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz#6e514f99a0ff42b80afcf42d5e5d042618311ce0" - integrity sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA== - dependencies: - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/module-type-aliases" "3.9.2" - "@docusaurus/plugin-content-blog" "3.9.2" - "@docusaurus/plugin-content-docs" "3.9.2" - "@docusaurus/plugin-content-pages" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/theme-translations" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/preset-classic@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.10.0.tgz#74b6facdaf568bcd41ec90cae9aebb7ca0ac8619" + integrity sha512-kw/Ye02Hc6xP1OdTswy8yxQEHg0fdPpyWAQRxr5b2x3h7LlG2Zgbb5BDFROnXDDMpUxB7YejlocJIE5HIEfpNA== + dependencies: + "@docusaurus/core" "3.10.0" + "@docusaurus/plugin-content-blog" "3.10.0" + "@docusaurus/plugin-content-docs" "3.10.0" + "@docusaurus/plugin-content-pages" "3.10.0" + "@docusaurus/plugin-css-cascade-layers" "3.10.0" + "@docusaurus/plugin-debug" "3.10.0" + "@docusaurus/plugin-google-analytics" "3.10.0" + "@docusaurus/plugin-google-gtag" "3.10.0" + "@docusaurus/plugin-google-tag-manager" "3.10.0" + "@docusaurus/plugin-sitemap" "3.10.0" + "@docusaurus/plugin-svgr" "3.10.0" + "@docusaurus/theme-classic" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/theme-search-algolia" "3.10.0" + "@docusaurus/types" "3.10.0" + +"@docusaurus/theme-classic@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.10.0.tgz#d937915c691189f27ced649c822994d839ea565b" + integrity sha512-9msCAsRdN+UG+RwPwCFb0uKy4tGoPh5YfBozXeGUtIeAgsMdn6f3G/oY861luZ3t8S2ET8S9Y/1GnpJAGWytww== + dependencies: + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/module-type-aliases" "3.10.0" + "@docusaurus/plugin-content-blog" "3.10.0" + "@docusaurus/plugin-content-docs" "3.10.0" + "@docusaurus/plugin-content-pages" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/theme-translations" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" + copy-text-to-clipboard "^3.2.0" infima "0.2.0-alpha.45" lodash "^4.17.21" nprogress "^0.2.0" @@ -1978,15 +2020,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.1.tgz#17c23316fbe3ee3f7e707c7298cb59a0fff38b4b" - integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw== +"@docusaurus/theme-common@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.10.0.tgz#70b419ccfdf62f092299354a72d1692e81be597d" + integrity sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg== dependencies: - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/module-type-aliases" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" + "@docusaurus/mdx-loader" "3.10.0" + "@docusaurus/module-type-aliases" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1996,15 +2038,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.9.2.tgz#487172c6fef9815c2746ef62a71e4f5b326f9ba5" - integrity sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag== +"@docusaurus/theme-common@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.1.tgz#17c23316fbe3ee3f7e707c7298cb59a0fff38b4b" + integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw== dependencies: - "@docusaurus/mdx-loader" "3.9.2" - "@docusaurus/module-type-aliases" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" + "@docusaurus/mdx-loader" "3.8.1" + "@docusaurus/module-type-aliases" "3.8.1" + "@docusaurus/utils" "3.8.1" + "@docusaurus/utils-common" "3.8.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2014,19 +2056,20 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz#420fd5b27fc1673b48151fdc9fe7167ba135ed50" - integrity sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw== - dependencies: - "@docsearch/react" "^3.9.0 || ^4.1.0" - "@docusaurus/core" "3.9.2" - "@docusaurus/logger" "3.9.2" - "@docusaurus/plugin-content-docs" "3.9.2" - "@docusaurus/theme-common" "3.9.2" - "@docusaurus/theme-translations" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-validation" "3.9.2" +"@docusaurus/theme-search-algolia@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.0.tgz#0ff57fe58db6abde8f5ad2877e459cd2fa6e7464" + integrity sha512-f5FPKI08e3JRG63vR/o4qeuUVHUHzFzM0nnF+AkB67soAZgNsKJRf2qmUZvlQkGwlV+QFkKe4D0ANMh1jToU3g== + dependencies: + "@algolia/autocomplete-core" "^1.19.2" + "@docsearch/react" "^3.9.0 || ^4.3.2" + "@docusaurus/core" "3.10.0" + "@docusaurus/logger" "3.10.0" + "@docusaurus/plugin-content-docs" "3.10.0" + "@docusaurus/theme-common" "3.10.0" + "@docusaurus/theme-translations" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-validation" "3.10.0" algoliasearch "^5.37.0" algoliasearch-helper "^3.26.0" clsx "^2.0.0" @@ -2036,10 +2079,10 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz#238cd69c2da92d612be3d3b4f95944c1d0f1e041" - integrity sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA== +"@docusaurus/theme-translations@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.10.0.tgz#8fdc23d29bd7f907db49c36cf65e2123d96be300" + integrity sha512-L9IbFLwTc5+XdgH45iQYufLn0SVZd6BUNelDbKIFlH+E4hhjuj/XHWAFMX/w2K59rfy8wak9McOaei7BSUfRPA== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" @@ -2052,13 +2095,14 @@ fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/types@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.1.tgz#83ab66c345464e003b576a49f78897482061fc26" - integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg== +"@docusaurus/types@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.10.0.tgz#a69232bba74b738fcf4671fd5f0f079366dd3d13" + integrity sha512-F0dOt3FOoO20rRaFK7whGFQZ3ggyrWEdQc/c8/UiRuzhtg4y1w9FspXH5zpCT07uMnJKBPGh+qNazbNlCQqvSw== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" + "@types/mdast" "^4.0.2" "@types/react" "*" commander "^5.1.0" joi "^17.9.2" @@ -2067,14 +2111,13 @@ webpack "^5.95.0" webpack-merge "^5.9.0" -"@docusaurus/types@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.9.2.tgz#e482cf18faea0d1fa5ce0e3f1e28e0f32d2593eb" - integrity sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q== +"@docusaurus/types@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.1.tgz#83ab66c345464e003b576a49f78897482061fc26" + integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" - "@types/mdast" "^4.0.2" "@types/react" "*" commander "^5.1.0" joi "^17.9.2" @@ -2083,6 +2126,14 @@ webpack "^5.95.0" webpack-merge "^5.9.0" +"@docusaurus/utils-common@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.10.0.tgz#2a6dc76b312664fca7234d33607c085318ff1ae3" + integrity sha512-JyL7sb9QVDgYvudIS81Dv0lsWm7le0vGZSDwsztxWam1SPBqrnkvBy9UYL/amh6pbybkyYTd3CMTkO24oMlCSw== + dependencies: + "@docusaurus/types" "3.10.0" + tslib "^2.6.0" + "@docusaurus/utils-common@3.8.1", "@docusaurus/utils-common@^2 || ^3": version "3.8.1" resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.8.1.tgz#c369b8c3041afb7dcd595d4172beb1cc1015c85f" @@ -2091,12 +2142,18 @@ "@docusaurus/types" "3.8.1" tslib "^2.6.0" -"@docusaurus/utils-common@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.9.2.tgz#e89bfcf43d66359f43df45293fcdf22814847460" - integrity sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw== +"@docusaurus/utils-validation@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.10.0.tgz#a2418d7f31980d991fd3a1f39c8aad8820b36812" + integrity sha512-c+6n2+ZPOJtWWc8Bb/EYdpSDfjYEScdCu9fB/SNjOmSCf1IdVnGf2T53o0tsz0gDRtCL90tifTL0JE/oMuP1Mw== dependencies: - "@docusaurus/types" "3.9.2" + "@docusaurus/logger" "3.10.0" + "@docusaurus/utils" "3.10.0" + "@docusaurus/utils-common" "3.10.0" + fs-extra "^11.2.0" + joi "^17.9.2" + js-yaml "^4.1.0" + lodash "^4.17.21" tslib "^2.6.0" "@docusaurus/utils-validation@3.8.1", "@docusaurus/utils-validation@^2 || ^3": @@ -2113,30 +2170,16 @@ lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/utils-validation@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz#04aec285604790806e2fc5aa90aa950dc7ba75ae" - integrity sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A== +"@docusaurus/utils@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.10.0.tgz#ea7d7b0d325b60f728decc00bb3908d00ef86faf" + integrity sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA== dependencies: - "@docusaurus/logger" "3.9.2" - "@docusaurus/utils" "3.9.2" - "@docusaurus/utils-common" "3.9.2" - fs-extra "^11.2.0" - joi "^17.9.2" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/utils@3.8.1", "@docusaurus/utils@^2 || ^3": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.1.tgz#2ac1e734106e2f73dbd0f6a8824d525f9064e9f0" - integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ== - dependencies: - "@docusaurus/logger" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils-common" "3.8.1" + "@docusaurus/logger" "3.10.0" + "@docusaurus/types" "3.10.0" + "@docusaurus/utils-common" "3.10.0" escape-string-regexp "^4.0.0" - execa "5.1.1" + execa "^5.1.1" file-loader "^6.2.0" fs-extra "^11.1.1" github-slugger "^1.5.0" @@ -2154,14 +2197,14 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/utils@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.9.2.tgz#ffab7922631c7e0febcb54e6d499f648bf8a89eb" - integrity sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ== +"@docusaurus/utils@3.8.1", "@docusaurus/utils@^2 || ^3": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.1.tgz#2ac1e734106e2f73dbd0f6a8824d525f9064e9f0" + integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ== dependencies: - "@docusaurus/logger" "3.9.2" - "@docusaurus/types" "3.9.2" - "@docusaurus/utils-common" "3.9.2" + "@docusaurus/logger" "3.8.1" + "@docusaurus/types" "3.8.1" + "@docusaurus/utils-common" "3.8.1" escape-string-regexp "^4.0.0" execa "5.1.1" file-loader "^6.2.0" @@ -3136,10 +3179,10 @@ "@types/qs" "*" "@types/serve-static" "^1" -"@types/gtag.js@^0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572" - integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== +"@types/gtag.js@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.20.tgz#e47edabb4ed5ecac90a079275958e6c929d7c08a" + integrity sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg== "@types/hast@^3.0.0": version "3.0.4" @@ -4060,9 +4103,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: - version "1.0.30001727" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85" - integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q== + version "1.0.30001787" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz" + integrity sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg== ccount@^2.0.0: version "2.0.1" @@ -4400,6 +4443,11 @@ cookie@~0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== +copy-text-to-clipboard@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz#99bc79db3f2d355ec33a08d573aff6804491ddb9" + integrity sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A== + copy-webpack-plugin@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" @@ -5292,7 +5340,7 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@5.1.1, execa@^5.0.0: +execa@5.1.1, execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -7764,6 +7812,13 @@ minimatch@3.1.2, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -8990,6 +9045,13 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +react-loadable-ssr-addon-v5-slorber@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz#bb3791bf481222c63a5bc6b96ee23f68cb5614b9" + integrity sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ== + dependencies: + "@babel/runtime" "^7.10.3" + "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" @@ -9590,6 +9652,19 @@ serve-handler@^6.1.6: path-to-regexp "3.3.0" range-parser "1.2.0" +serve-handler@^6.1.7: + version "6.1.7" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.7.tgz#e9bb864e87ee71e8dab874cde44d146b77e3fb78" + integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + mime-types "2.1.18" + minimatch "3.1.5" + path-is-inside "1.0.2" + path-to-regexp "3.3.0" + range-parser "1.2.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" From a9293c14f014bb400c3030d46e0283a1855c96eb Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Sun, 12 Apr 2026 00:29:21 +0800 Subject: [PATCH 15/22] add host server doc with port --- docs/profile-format/host/server.md | 19 ++++++++++++++++++- .../current/profile-format/host/server.md | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/profile-format/host/server.md b/docs/profile-format/host/server.md index 4696e3a1f..4ffeb7db4 100644 --- a/docs/profile-format/host/server.md +++ b/docs/profile-format/host/server.md @@ -16,4 +16,21 @@ bar.com = server:8.8.8.8 ```ini title="DNS query will be sent to system DNS server" # Ensures bar.com is always resolved using the device's system DNS bar.com = server:system -``` \ No newline at end of file +``` + +```ini title="DNS query will be sent to custom port" +# Forces all DNS queries for example.com to be resolved via custom DNS server on port 5353 +example.com = server:192.168.1.100:5353 +``` + +```ini title="Wildcard domain with custom DNS port" +# All subdomains of cloud-nodes.com will use DNS server on port 1053 +*.cloud-nodes.com = server:140.205.1.13:1053 +``` + +## Syntax + +- `server:` - Use default DNS port 53 +- `server::` - Use specified custom port +- `server:system` - Use system DNS +- `server:syslib` - Use system DNS library \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md index 9cfe47aec..7543fe417 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md @@ -16,4 +16,21 @@ bar.com = server:8.8.8.8 ```ini title="DNS 查询将被发送到系统 DNS 服务器" # 确保 bar.com 始终使用设备的系统 DNS 进行解析 bar.com = server:system -``` \ No newline at end of file +``` + +```ini title="DNS 查询将发送到自定义端口" +# 强制 example.com 的所有 DNS 查询通过自定义 DNS 服务器的 5353 端口进行解析 +example.com = server:192.168.1.100:5353 +``` + +```ini title="通配符域名使用自定义 DNS 端口" +# cloud-nodes.com 的所有子域名将使用 1053 端口的 DNS 服务器进行解析 +*.cloud-nodes.com = server:140.205.1.13:1053 +``` + +## 语法 + +- `server:` - 使用默认 DNS 端口 53 +- `server::` - 使用指定的自定义端口 +- `server:system` - 使用系统 DNS +- `server:syslib` - 使用系统 DNS 库 \ No newline at end of file From 64841d1bc6c291c59f2013aa1d09a2517abc3ced Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Mon, 13 Apr 2026 00:44:26 +0800 Subject: [PATCH 16/22] update changelog.md --- docs/changelog.md | 13 +++++++++++++ .../current/changelog.md | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 2186cccb6..0f88f54c2 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,19 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.3 + +- **New Features** + - **Smart Proxy Group**: Surge configuration files with `smart` proxy group type can now be imported (treated as `url-test`/`auto` type as a temporary compatibility solution). + - **DNS Host Rule Enhancement**: Host rules now apply to proxy server domains (previously only applied to target domains). + - **Custom DNS Port**: DNS server host rules now support custom port numbers. + +- **Fixes** + - Fixed traffic list auto-scrolling issue when data updates. + +- **Improvements** + - **Performance**: Fixed throughput degradation introduced in previous versions and further optimized network performance. + ### mobile-2.29.2 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index 75b5ac3e7..57cd71e32 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,19 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.3 + +- **新功能** + - **Smart 代理组**: 支持导入包含 `smart` 代理组类型的 Surge 配置文件(暂时作为 `url-test`/`auto` 类型兼容处理)。 + - **DNS Host 规则增强**: Host 规则现可对代理服务器域名生效(之前仅对目标域名生效)。 + - **自定义 DNS 端口**: DNS server host rule 现支持自定义端口号。 + +- **修复** + - 修复流量列表在数据更新时自动滚动的问题。 + +- **改进** + - **性能**: 修复之前版本引入的吞吐率下降问题,并进一步优化网络性能。 + ### mobile-2.29.2 - **新功能** From a719fe1d85a1fe837895afc3727117f5aa9b0286 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Tue, 14 Apr 2026 00:44:52 +0800 Subject: [PATCH 17/22] update dns-server document --- docs/profile-format/general/dns_server.md | 7 +++++-- .../current/profile-format/general/dns_server.md | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/profile-format/general/dns_server.md b/docs/profile-format/general/dns_server.md index b60599502..bc0b2d0a0 100644 --- a/docs/profile-format/general/dns_server.md +++ b/docs/profile-format/general/dns_server.md @@ -9,8 +9,8 @@ Specifies the DNS servers used by the application for domain name resolution. ## Example ```ini -# Specifies multiple DNS servers, including a system default and a custom port -dns-server = system, 8.8.8.8, 8.8.4.4, 9.9.9.9:9953 +# Specifies multiple DNS servers, including a system default, a custom port, and IPv6 +dns-server = system, 8.8.8.8, 8.8.4.4, 9.9.9.9:9953, 2400:3200::1, [2606:4700:4700::1001]:53 ``` ## Format @@ -21,6 +21,9 @@ dns-server = system, {dns server}[:port], ... - Port definition is optional; the default is `53`. - `system` means use system DNS. +- IPv4 with port: `223.5.5.5:5353` +- Bare IPv6: `2400:3200::1` +- IPv6 with port: `[2606:4700:4700::1001]:53` :::tip - If `dns-server` is not specified, `system` will be used. diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/dns_server.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/dns_server.md index b417e73b5..096cab4e5 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/dns_server.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/general/dns_server.md @@ -9,8 +9,8 @@ sidebar_position: 0 ## 示例 ```ini -# 指定多个 DNS 服务器,包括系统默认值和自定义端口 -dns-server = system, 8.8.8.8, 8.8.4.4, 9.9.9.9:9953 +# 指定多个 DNS 服务器,包括系统默认值、自定义端口和 IPv6 +dns-server = system, 8.8.8.8, 8.8.4.4, 9.9.9.9:9953, 2400:3200::1, [2606:4700:4700::1001]:53 ``` ## 格式 @@ -21,6 +21,9 @@ dns-server = system, {dns server}[:port], ... - 端口定义是可选的,默认为 `53`。 - `system` 表示使用系统 DNS。 +- IPv4 带端口:`223.5.5.5:5353` +- 裸 IPv6:`2400:3200::1` +- IPv6 带端口:`[2606:4700:4700::1001]:53` :::tip 提示 - 如果未指定 `dns-server`,将使用 `system`。 From 1538fac16bcd06e32ffc52caad7afe06a9e9d0fc Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Tue, 14 Apr 2026 01:57:03 +0800 Subject: [PATCH 18/22] docs: add changelog for mobile-2.29.4 --- docs/changelog.md | 9 +++++++++ .../docusaurus-plugin-content-docs/current/changelog.md | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 0f88f54c2..3c9d412ac 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,15 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.4 + +- **UI & Theme** + - Aligned more UI components with Material 3 Expressive design (Dashboard, Profiles, ProxyGroups FABs, Hosts list, DoH override settings). + +- **Fixes** + - Fixed IPv6 DNS not being used. + - Fixed dynamic color theme not applying in MainActivity. + ### mobile-2.29.3 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index 57cd71e32..a3cd171e9 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,15 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.4 + +- **UI 与主题** + - 更多界面组件适配 Material 3 Expressive 设计(Dashboard、Profiles、ProxyGroups FAB、Hosts 列表、DoH 覆盖设置)。 + +- **修复** + - 修复 IPv6 DNS 未生效的问题。 + - 修复动态主题在 MainActivity 未应用的问题。 + ### mobile-2.29.3 - **新功能** From b125386a696c0a63155c385ecabbf56aabdddb43 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Mon, 20 Apr 2026 01:33:53 +0800 Subject: [PATCH 19/22] add doh host document --- docs/profile-format/host/server.md | 8 +++++++- .../current/profile-format/host/server.md | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/profile-format/host/server.md b/docs/profile-format/host/server.md index 4ffeb7db4..992f12fe9 100644 --- a/docs/profile-format/host/server.md +++ b/docs/profile-format/host/server.md @@ -28,9 +28,15 @@ example.com = server:192.168.1.100:5353 *.cloud-nodes.com = server:140.205.1.13:1053 ``` +```ini title="DNS over HTTPS (DoH) server" +# Forces all DNS queries for baz.com to be resolved via Cloudflare DoH +baz.com = server:https://cloudflare-dns.com/dns-query +``` + ## Syntax - `server:` - Use default DNS port 53 - `server::` - Use specified custom port - `server:system` - Use system DNS -- `server:syslib` - Use system DNS library \ No newline at end of file +- `server:syslib` - Use system DNS library +- `server:https:///` - Use DNS over HTTPS (DoH) server \ No newline at end of file diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md index 7543fe417..b0f622bd0 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/profile-format/host/server.md @@ -28,9 +28,15 @@ example.com = server:192.168.1.100:5353 *.cloud-nodes.com = server:140.205.1.13:1053 ``` +```ini title="DNS over HTTPS (DoH) 服务器" +# 强制 baz.com 的所有 DNS 查询通过 Cloudflare DoH 进行解析 +baz.com = server:https://cloudflare-dns.com/dns-query +``` + ## 语法 - `server:` - 使用默认 DNS 端口 53 - `server::` - 使用指定的自定义端口 - `server:system` - 使用系统 DNS -- `server:syslib` - 使用系统 DNS 库 \ No newline at end of file +- `server:syslib` - 使用系统 DNS 库 +- `server:https:///` - 使用 DNS over HTTPS (DoH) 服务器 \ No newline at end of file From ddbd953cf21ec35c6c17d188c198ade0ab092090 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Mon, 20 Apr 2026 01:46:59 +0800 Subject: [PATCH 20/22] add changelog for mobile-2.29.5 --- docs/changelog.md | 14 ++++++++++++++ .../current/changelog.md | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 3c9d412ac..9f2af5c32 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,20 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.5 + +- **New Features** + - **DoH Server in Host Rules**: DNS over HTTPS servers can now be configured in the `[Host]` section of profiles. + - **Proxy Group Icon URL Parsing**: Proxy groups now support parsing the `icon-url` parameter (UI display not yet supported). + - **Quoted Proxy Names**: Proxy names wrapped in quotes are now fully supported in lookup, validation, and UI display. + +- **Fixes** + - Fixed DNS leak caused by real IP queries. + - Fixed Volley queue bottleneck that slowed down external resource downloads. + +- **Improvements** + - Updated embedded GeoIP database. + ### mobile-2.29.4 - **UI & Theme** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index a3cd171e9..aca2c3628 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,20 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.5 + +- **新功能** + - **Host 规则支持 DoH 服务器**: 现在可以在配置文件的 `[Host]` 段中配置 DNS over HTTPS 服务器。 + - **代理组图标 URL 解析**: 代理组现支持解析 `icon-url` 参数(界面显示暂不支持)。 + - **引号包裹的代理名**: 代理名被引号包裹时,现可在查找、验证和界面显示中完全支持。 + +- **修复** + - 修复由真实 IP 查询导致的 DNS 泄露问题。 + - 修复 Volley 队列瓶颈导致的外部资源下载缓慢问题。 + +- **改进** + - 更新内置 GeoIP 数据库。 + ### mobile-2.29.4 - **UI 与主题** From 933e90ebd644796dd5734079539740bd1bbd0fa6 Mon Sep 17 00:00:00 2001 From: getsurfboard Date: Thu, 23 Apr 2026 01:58:05 +0800 Subject: [PATCH 21/22] docs: update changelog for mobile-2.29.6 --- docs/changelog.md | 10 ++++++++++ .../current/changelog.md | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 9f2af5c32..ae7048b67 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,16 @@ sidebar_position: 5 # ChangeLog +### mobile-2.29.6 + +- **New Features** + - **Lower MTU Limit**: MTU can now be lowered down to 1400. + - **DoH Item in Host List**: Host list now supports adding DoH server entries. + +- **Fixes** + - Fixed several crash issues. + - Fixed OOM when decoding large profiles. + ### mobile-2.29.5 - **New Features** diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md index aca2c3628..1d11a0fc3 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/changelog.md @@ -4,6 +4,16 @@ sidebar_position: 5 # 更新日志 +### mobile-2.29.6 + +- **新功能** + - **降低 MTU 下限**: MTU 现在可以最低设置为 1400。 + - **Host 列表支持 DoH**: Host 列表现在支持添加 DoH 服务器条目。 + +- **修复** + - 修复若干崩溃问题。 + - 修复大配置文件解析时的 OOM 问题。 + ### mobile-2.29.5 - **新功能** From 9fc42c1e164fd4cdef37da6c4390d286f71274fa Mon Sep 17 00:00:00 2001 From: mnfjxhycnc-source Date: Sat, 2 May 2026 15:22:11 +0800 Subject: [PATCH 22/22] 1 1 --- docs/profile-format/overview.md | 140 +++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 2 deletions(-) diff --git a/docs/profile-format/overview.md b/docs/profile-format/overview.md index dd33c80e4..7f0faea04 100644 --- a/docs/profile-format/overview.md +++ b/docs/profile-format/overview.md @@ -1,4 +1,140 @@ ---- +---#!MANAGED-CONFIG http://test.com/surfboard.conf interval=60 strict=true # Remote configuration subscription with auto-update interval in minutes + +[General] +# DNS server configuration. 'system' uses the device's default DNS. +dns-server = system, 8.8.8.8, 8.8.4.4, 9.9.9.9:9953 + +# DNS over HTTPS (DoH) servers for encrypted DNS queries. +doh-server = https://9.9.9.9/dns-query, https://1.1.1.1/dns-query + +# List of domains or IP ranges that bypass the proxy. +skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local, www.example.com + +# URL used to test latency for proxy connections. +proxy-test-url = http://www.gstatic.com/generate_204 + +# URL used to test latency for direct connections. +internet-test-url = http://www.gstatic.cn/generate_204 + +# Timeout in seconds for connectivity tests. +test-timeout = 5 + +# Domains that should always resolve to their real IP, bypassing fake IP mechanisms. +always-real-ip = *.srv.nintendo.net, *.stun.playstation.net, xbox.*.microsoft.com, *.xboxlive.com + +# Internal HTTP proxy server address and port. +http-listen = 0.0.0.0:1234 + +# Internal SOCKS5 proxy server address and port. +socks5-listen = 127.0.0.1:1235 + +# Behavior when a proxy does not support UDP relay (DIRECT or REJECT). +udp-policy-not-supported-behaviour = DIRECT + +# Disable IPv6 support. +ipv6 = false + +[Host] +# Static IP mapping for specific domains. +abc.com = 1.2.3.4 + +# Wildcard domain mapping. +*.dev = 6.7.8.9 + +# DNS alias (CNAME) mapping. +foo.com = bar.com + +# Custom DNS server for a specific domain. +bar.com = server:8.8.8.8 + +[Proxy] +# Built-in policies. +On = direct +Off = reject + +# HTTP proxy configuration. +ProxyHTTP = http, 1.2.3.4, 443, username, password + +# HTTPS proxy with TLS settings. +ProxyHTTPS = https, 1.2.3.4, 443, username, password, skip-cert-verify=true, sni=www.google.com + +# SOCKS5 proxy configuration. +ProxySOCKS5 = socks5, 1.2.3.4, 443, username, password, udp-relay=false + +# SOCKS5 over TLS for enhanced security. +ProxySOCKS5TLS = socks5-tls, 1.2.3.4, 443, username, password, skip-cert-verify=true, sni=www.google.com + +# Shadowsocks proxy with optional obfuscation. +ProxySS = ss, 1.2.3.4, 8000, encrypt-method=chacha20-ietf-poly1305, password=abcd1234, udp-relay=false, obfs=http, obfs-host=www.google.com, obfs-uri=/ + +# VMess proxy for V2Ray protocols. +ProxyVMess = vmess, 1.2.3.4, 8000, username=0233d11c-15a4-47d3-ade3-48ffca0ce119, udp-relay=false, ws=true, tls=true, ws-path=/v2, ws-headers=X-Header-1:value|X-Header-2:value, skip-cert-verify=true, sni=www.google.com, vmess-aead=true + +# Trojan proxy configuration. +ProxyTrojan = trojan, 192.168.20.6, 443, password=password1, udp-relay=false, skip-cert-verify=true, sni=www.google.com + +# AnyTLS proxy configuration. +ProxyAnyTLS = anytls, 1.2.3.4, 443, password, skip-cert-verify=true, sni=abc.com, reuse=false + +# Hysteria2 proxy configuration. +ProxyHysteria2 = hysteria2, 1.2.3.4, 443, password=pwd, download-bandwidth=100, port-hopping="1234;5000-6000", port-hopping-interval=30, skip-cert-verify=true, sni=example.com, udp-relay=true + +# Snell proxy configuration. +ProxySnell = snell, 1.2.3.4, 443, psk=yourpsk, version=3, udp-relay=true + +# WireGuard VPN integration. +ProxyWireguard = wireguard, section-name = HomeServer + +[WireGuard HomeServer] +# Specific WireGuard interface and peer configuration. +private-key = sDEZLACT3zgNCS0CyClgcBC2eYROqYrwLT4wdtAJj3s= +self-ip = 10.0.2.2 +dns-server = 8.8.8.8 +mtu = 1280 +peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820, keepalive = 30) + +[Proxy Group] +# Manual selection group. +SelectGroup = select, ProxyHTTP, ProxyHTTPS, DIRECT, REJECT + +# Automatic latency-based selection. +AutoTestGroup = url-test, ProxySOCKS5, ProxySOCKS5TLS, url=http://www.gstatic.com/generate_204, interval=600, tolerance=100, timeout=5, hidden=true + +# Group utilizing an external policy list. +ExternalGroup = select, policy-path=https://example.com/nodes.txt, policy-regex-filter=HK-.* + +# Group that includes all defined proxies. +AllProxies = select, include-all-proxies = true + +# Load balancing group for distributing traffic. +LoadBalanceGroup = load-balance, ProxyHTTP, ProxyHTTPS + +# Fallback group: switches to next proxy if current fails. +FallbackGroup = fallback, ProxySOCKS5, ProxySOCKS5TLS, url=http://www.gstatic.com/generate_204, interval=600, timeout=5 + +[Rule] +# Direct domain matching. +DOMAIN,www.apple.com,ProxyHTTP + +# Domain suffix matching (covers all subdomains). +DOMAIN-SUFFIX,apple.com,Proxy,force-remote-dns + +# Domain keyword matching. +DOMAIN-KEYWORD,google,Proxy,enhanced-mode + +# IP range matching using CIDR notation. +IP-CIDR,192.168.0.0/16,DIRECT + +# Logical rule combining multiple criteria. +AND,((DOMAIN-SUFFIX,google.com),(DEST-PORT,443)),Proxy + +# Geolocation-based matching (e.g., ISO country code). +GEOIP,US,REJECT + +# Application-based matching by process/package name. +PROCESS-NAME,com.android.vending,Proxy + +# Rule matching traffic against an external rule set sidebar_position: 0 --- @@ -168,4 +304,4 @@ FINAL,ProxyTrojan PanelA = title="Status Panel", content="System Online\nAll services operational", style=info ``` -You can read on for detailed definitions of different sections. \ No newline at end of file +You can read on for detailed definitions of different sections.