diff --git "a/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256.yml" "b/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256.yml" new file mode 100644 index 000000000..aacd9e3f3 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256.yml" @@ -0,0 +1,74 @@ +name: 功能建议 +description: 改进或新功能等 +title: "[FR] " +body: + - type: dropdown + id: request-type + attributes: + label: 建议类型 + description: 请选择最接近的类型。 + multiple: false + options: + - 新功能 + - 现有功能改进 + - UI/交互优化 + - 文档/示例改进 + - 其他 + validations: + required: true + - type: dropdown + id: runtime + attributes: + label: 运行环境 + description: 请选择这个建议涉及的运行环境。 + multiple: false + options: + - Node.js + - Android + - Docker + - 自部署 + - Surge + - Loon + - Quantumult X + - Stash + - Shadowrocket + - 其他 + validations: + required: true + - type: dropdown + id: affected-areas + attributes: + label: 影响范围 + description: 可多选,请选择这个建议涉及的部分。 + multiple: true + options: + - 后端 + - 前端 + - 订阅转换 + - 节点/策略组 + - 同步/缓存 + - 配置/部署 + - 代理 App 兼容 + - 文档 + - 其他 + validations: + required: true + - type: textarea + id: requirement + attributes: + label: 需求描述 + description: 建议把需求讲清楚,不要一下子跳到一个解决方案。 + validations: + required: true + - type: textarea + id: proposed-solution + attributes: + label: 解决方案 + description: 建议先把上面的需求讲清楚,然后根据需求提解决方案。 + validations: + required: true + - type: textarea + id: additional-context + attributes: + label: 其他信息 + description: 例如参考链接、截图、替代方案或额外背景。 diff --git "a/.github/ISSUE_TEMPLATE/\351\227\256\351\242\230\345\217\215\351\246\210.yml" "b/.github/ISSUE_TEMPLATE/\351\227\256\351\242\230\345\217\215\351\246\210.yml" new file mode 100644 index 000000000..ca1b097db --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/\351\227\256\351\242\230\345\217\215\351\246\210.yml" @@ -0,0 +1,104 @@ +name: 问题反馈 +description: 先读完排查方法再反馈 +title: "[BUG] " +body: + - type: markdown + attributes: + value: | + **先读我** + + [排查方法](https://t.me/zhetengsha/218) + - type: checkboxes + id: read-troubleshooting + attributes: + label: 阅读确认 + options: + - label: 我已阅读上方排查方法 + required: true + - type: dropdown + id: runtime + attributes: + label: 运行环境 + description: 请选择主要出现问题的运行环境。 + multiple: false + options: + - Node.js + - Android + - Docker + - 自部署 + - Surge + - Loon + - Quantumult X + - Stash + - Shadowrocket + - 其他 + validations: + required: true + - type: dropdown + id: affected-areas + attributes: + label: 影响范围 + description: 可多选,请选择和问题相关的部分。 + multiple: true + options: + - 后端 + - 前端 + - 订阅转换 + - 节点/策略组 + - 同步/缓存 + - 配置/环境变量 + - 代理 App + - 其他 + validations: + required: true + - type: input + id: runtime-version + attributes: + label: 上述运行环境版本/App 版本 + description: 例如 Node.js 版本、Android 版本、Docker 镜像版本或代理 App 版本。 + validations: + required: true + - type: input + id: backend-version + attributes: + label: 后端版本 + description: 填写当前使用的后端版本。 + validations: + required: true + - type: input + id: frontend-version + attributes: + label: 前端版本 + description: 填写当前使用的前端版本。 + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: 复现方式 + description: 请按步骤说明如何复现。 + value: | + 1. + 2. + 3. + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: 期望表现 + description: 描述你认为应该发生什么。 + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: 实际表现 + description: 描述实际发生了什么。 + validations: + required: true + - type: textarea + id: additional-context + attributes: + label: 其他信息 + description: 例如截图、日志、配置片段或相关链接。 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 879145c2b..0cd05e256 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,6 @@ name: build on: + workflow_dispatch: push: branches: - master @@ -35,10 +36,11 @@ jobs: with: vercel-token: ${{ secrets.VERCEL_TOKEN }} # Required # github-token: ${{ secrets.GITHUB_TOKEN }} # Optional - vercel-args: "--prod" # Optional + vercel-args: "--prod --debug" # Optional vercel-org-id: ${{ secrets.ORG_ID}} # Required vercel-project-id: ${{ secrets.PROJECT_ID}} # Required working-directory: dist + vercel-version: '48.9.0' - name: zip run: | zip -r dist.zip dist diff --git a/.github/workflows/update-vercel-project-settings.yml b/.github/workflows/update-vercel-project-settings.yml new file mode 100644 index 000000000..1f019f18d --- /dev/null +++ b/.github/workflows/update-vercel-project-settings.yml @@ -0,0 +1,16 @@ +# 该 workflow 用于更新 Vercel 项目的 Node.js 版本 +name: Update Vercel project settings +on: + workflow_dispatch: + +jobs: + update-nodejs-version: + runs-on: ubuntu-latest + steps: + - name: Update Vercel project Node.js version + run: | + curl --request PATCH \ + --url https://api.vercel.com/v9/projects/${{ secrets.PROJECT_ID }} \ + --header 'Authorization: Bearer ${{ secrets.VERCEL_TOKEN }}' \ + --header 'Content-Type: application/json' \ + --data '{ "nodeVersion":"22.x"}' \ No newline at end of file diff --git a/.gitignore b/.gitignore index fc5ae9f0c..b3c829abc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ # Logs logs +!src/api/logs/ +!src/api/logs/** *.log npm-debug.log* yarn-debug.log* @@ -23,3 +25,7 @@ dist-ssr *.sln *.sw? .vercel +CODEMAP.md +CONTEXT_BUNDLE.md +mydocs +.github/copilot-instructions.md \ No newline at end of file diff --git a/README.md b/README.md index ab1f67c93..84b52a851 100644 --- a/README.md +++ b/README.md @@ -16,54 +16,7 @@ Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket. Core functionalities: -1. Conversion among various formats. -2. Subscription formatting. -3. Collect multiple subscriptions in one URL. - -## 1. Subscription Conversion - -### Supported Input Formats - -- [x] SS URI -- [x] SSR URI -- [x] SSD URI -- [x] V2RayN URI -- [x] QX (SS, SSR, VMess, Trojan, HTTP) -- [x] Loon (SS, SSR, VMess, Trojan, HTTP) -- [x] Surge (SS, VMess, Trojan, HTTP) -- [x] Stash & Clash (SS, SSR, VMess, Trojan, HTTP) - -### Supported Target Platforms - -- [x] QX -- [x] Loon -- [x] Surge -- [x] Stash & Clash -- [x] ShadowRocket - -## 2. Subscription Formatting - -### Filtering - -- [x] **Regex filter** -- [x] **Discard regex filter** -- [x] **Region filter** -- [x] **Type filter** -- [x] **Useless proxies filter** -- [x] **Script filter** - -### Proxy Operations - -- [x] **Set property operator**: set some proxy properties such as `udp`,`tfo` - , `skip-cert-verify` etc. -- [x] **Flag operator**: add flags or remove flags for proxies. -- [x] **Sort operator**: sort proxies by name. -- [x] **Regex sort operator**: sort proxies by keywords (fallback to normal - sort). -- [x] **Regex rename operator**: replace by regex in proxy names. -- [x] **Regex delete operator**: delete by regex in proxy names. -- [x] **Script operator**: modify proxy by script. - +[Sub-Store](https://github.com/sub-store-org/Sub-Store) ### Development diff --git a/docs/brainstorms/2026-05-04-collection-first-sub-flow-requirements.md b/docs/brainstorms/2026-05-04-collection-first-sub-flow-requirements.md new file mode 100644 index 000000000..10184c190 --- /dev/null +++ b/docs/brainstorms/2026-05-04-collection-first-sub-flow-requirements.md @@ -0,0 +1,47 @@ +--- +date: 2026-05-04 +topic: collection-first-sub-flow +--- + +# 组合订阅单条订阅流量透传 + +## Summary + +在组合订阅编辑页增加一个集合级开关,用来控制是否透传单条订阅的流量信息,并保持现有默认开启行为。 + +## Problem Frame + +组合订阅当前默认透传第一个单条订阅的流量信息。用户如果不希望继承这份流量信息,需要一个可见、可按组合订阅单独配置的控制项,而不是依赖隐藏数据修改或脚本。 + +## Requirements + +- R1. 组合订阅编辑页展示一个名为“透传单条订阅流量信息”的开关。 +- R2. 新建组合订阅时默认开启;已有组合订阅未存储该值时也按开启处理。 +- R3. 开关开启时,组合订阅下载继续透传第一个单条订阅的流量信息。 +- R4. 开关关闭时,组合订阅下载不透传单条订阅流量信息,但组合订阅自身手动配置的流量信息仍然生效。 +- R5. 开关提供 tips,说明默认透传第一个单条订阅流量信息;如需合并组合订阅中所有单条订阅的流量,可使用 https://t.me/zhetengsha/3070 的脚本。 +- R6. tips 包含“查看”按钮,点击后在新窗口打开 https://t.me/zhetengsha/3070。 + +## Acceptance Examples + +- AE1. **Covers R1, R2.** 用户新建组合订阅时,编辑页可见该开关,并且开关处于开启状态。 +- AE2. **Covers R2, R3.** 已有组合订阅未存储该配置时,下载行为保持现状,继续透传第一个单条订阅的流量信息。 +- AE3. **Covers R4.** 组合订阅关闭该开关后,下载时不透传单条订阅流量信息。 +- AE4. **Covers R5, R6.** 用户打开开关 tips 后,点击“查看”会打开 Telegram 脚本链接。 + +## Success Criteria + +- 用户能在组合订阅编辑页直接发现并修改流量透传行为。 +- 旧组合订阅在用户主动关闭开关前保持原有行为。 +- 需求边界足够清晰,不需要规划或评审时再发明内置合并所有单条订阅流量的行为。 + +## Scope Boundaries + +- 不内置实现合并所有单条订阅流量信息。 +- 不修改单条订阅编辑页。 +- 不重构现有流量信息处理链路。 + +## Key Decisions + +- 复用后端已有行为字段作为组合订阅开关,前端只暴露当前运行时能力,不引入并行配置。 +- 默认开启,以保证向后兼容。 diff --git a/index.html b/index.html index 62c6d2cf4..08cd4d09e 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,7 @@
++ {{ nonSimplePrimaryLine }} +
++ {{ nonSimpleSecondLine }} +
+ + ++ {{ detailLineWithInlineRemark }} +
++ {{ archiveTimeLine }} +
++ {{ remark }} +
+ +{{ $t(`syncPage.addArtForm.includeUnsupportedProxy.label`) }}
-{{ $t(`syncPage.addArtForm.includeUnsupportedProxy.label`) }}
+