Conversation
The member count on group cards previously counted every generated member, so DIRECT/REJECT fallbacks and references to other groups inflated the node number. Count only entries that match real node names. Reported-by: AAEE86
There was a problem hiding this comment.
Pull request overview
This PR prepares the SubBoost v2.6.0 release by improving advanced proxy-group member management in the UI, expanding parser compatibility for Clash/Mihomo YAML and ECH parameters, hardening self-hosted backup behavior, and bumping versions/docs to 2.6.0.
Changes:
- Adds bulk add/remove/restore controls for advanced proxy-group members, plus more accurate node/proxy-group counting and cycle avoidance.
- Improves subscription parsing compatibility (inline flow YAML proxy lists, indentation repair) and standardizes ECH handling across protocols + sanitization.
- Makes self-hosted backups fail safely, adds configurable retention, and bumps release versions/badges/notes to v2.6.0.
Reviewed changes
Copilot reviewed 40 out of 42 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/selfhost-release-assets.cjs | Hardens installer default replacement and clarifies image tag defaults. |
| README.md | Updates version badge to 2.6.0. |
| README-CN.md | Updates version badge to 2.6.0 (CN). |
| packages/ui/src/styles/globals.css | Adds responsive container-query styling for new proxy-group member toolbar/actions. |
| packages/ui/src/store/config-store/actions/proxy-group-rule-set-helpers.ts | Removes now-unused module-rules import. |
| packages/ui/src/store/config-store/actions/custom-actions.ts | Extracts state typing and clarifies variable naming in rule-set cleanup. |
| packages/ui/src/product/converter/use-subscription-sources-controller.ts | Introduces shared controller hook for quick/advanced source management. |
| packages/ui/src/product/converter/quick-mode/sources-section.tsx | Refactors quick-mode source UI to use the shared controller. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-rules-library.test.ts | Formatting/indent normalization in test mocks. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-custom-rules.tsx | Avoids accidental state drift by snapshotting rule type during add. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-custom-groups-panel.tsx | Removes unused ProxyGroupTypeMenu import (types only). |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-categories.tsx | Fixes node-count logic to count only real nodes (exclude DIRECT/REJECT/group refs). |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-categories.test.ts | Updates tests for corrected node-count behavior. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-groups-added-rule-sets.tsx | Removes unused addModuleRules prop. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-member-section-header.tsx | Adds reusable member-section header with bulk actions + counts. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-member-bulk.ts | Adds bulk member manipulation helpers + cycle detection utilities. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-member-bulk.test.ts | Adds test coverage for bulk member helpers and cycle blocking. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-advanced-panel.tsx | Implements bulk node/group actions, restore-default confirmation, and cycle-safe additions. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-advanced-panel.test.ts | Updates rendering tests for new member toolbar and labels. |
| packages/ui/src/product/converter/advanced-mode/sections/proxy-group-advanced-panel-interactions.test.ts | Adds interaction tests for bulk add/remove/restore + cycle skipping toast. |
| packages/ui/src/product/converter/advanced-mode/sections/input-section.tsx | Refactors advanced input section to use shared sources controller. |
| packages/core/src/parser/protocols/vmess.ts | Routes ECH parsing to shared Mihomo ECH helper. |
| packages/core/src/parser/protocols/vmess.test.ts | Updates expectations for ECH values (now treated as share-value format). |
| packages/core/src/parser/protocols/vless.ts | Routes ECH parsing to shared Mihomo ECH helper. |
| packages/core/src/parser/protocols/trojan.ts | Routes ECH parsing to shared Mihomo ECH helper. |
| packages/core/src/parser/protocols/ech-protocols.test.ts | Adds cross-protocol contract tests ensuring ECH query-server-name preserved in YAML output. |
| packages/core/src/parser/protocols/anytls.ts | Routes ECH parsing to shared Mihomo ECH helper. |
| packages/core/src/parser/parser-contracts.test.ts | Updates AnyTLS contract expectations for ECH share value handling. |
| packages/core/src/parser/content-parsers.ts | Detects top-level inline flow proxy lists to route them into YAML parsing. |
| packages/core/src/parser/content-parsers.test.ts | Adds tests for inline flow proxy list detection + malformed long input routing. |
| packages/core/src/parser/clash-yaml.ts | Adds repair step for inconsistent indentation in root flow proxy lists. |
| packages/core/src/parser/clash-yaml.test.ts | Adds tests for root flow proxy list parsing/repair and related edge cases. |
| packages/core/src/mihomo/proxy-sanitizer.ts | Improves ECH sanitization and centralizes Base64/ECH helpers. |
| packages/core/src/mihomo/proxy-sanitizer-ech.test.ts | Adds sanitizer tests for legacy domain-valued config behavior. |
| packages/core/src/mihomo/ech.ts | Adds Mihomo ECH helper utilities (Base64 validation, query-server-name classification). |
| packages/core/src/mihomo/ech.test.ts | Adds unit tests for Mihomo ECH helpers. |
| package.json | Bumps root version to 2.6.0. |
| package-lock.json | Updates lock metadata versions to 2.6.0. |
| local/scripts/subboost.sh | Makes backups fail safely, adds retention config, and refines health checks. |
| local/scripts/selfhost-shell.test.ts | Updates expected curl call counts due to health-check behavior change. |
| local/package.json | Bumps local package version to 2.6.0. |
| docs/release-notes.md | Updates release notes content/version to v2.6.0 (CN/EN). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+23
to
+31
| export function buildMihomoEchOptsFromShareValue(value: unknown): MihomoEchOpts { | ||
| const normalized = typeof value === "string" ? value.trim() : ""; | ||
| if (!normalized) return { enable: true }; | ||
| if (isStandardBase64String(normalized)) return { enable: true, config: normalized }; | ||
| if (isMihomoEchQueryServerName(normalized)) { | ||
| return { enable: true, "query-server-name": normalized }; | ||
| } | ||
| return { enable: true }; | ||
| } |
Comment on lines
251
to
+255
| const config = normalizeString(raw); | ||
| if (config && isStandardBase64String(config)) out[key] = config; | ||
| if (config && isStandardBase64String(config)) { | ||
| out[key] = config; | ||
| } else if (config && !explicitQueryServerName && isMihomoEchQueryServerName(config)) { | ||
| out["query-server-name"] = config; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
npm run lintnpm run test:unitnpm run check:local-app