Skip to content

[Feature] 探测工具过滤 + 端口层重绑模式开关 / Tool filter for auto-select & port rebind mode switch - #31

Merged
PIKACHUIM merged 6 commits into
PIKACHUIM:mainfrom
suantea:feat/linereg-policy
Aug 28, 2026
Merged

PIKACHUIM merged 6 commits into
PIKACHUIM:mainfrom
suantea:feat/linereg-policy

Conversation

@suantea

@suantea suantea commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

功能说明 / Overview

承接 #9/#10 延伸,两项独立的线路策略能力(基于 #16 自动选线主线)。

Two independent line-policy capabilities extending the auto line-selection work (#16).

1. 探测工具过滤 / Probe tool filter

兑现 issue #3 讨论承诺的「按工具过滤」:只让指定工具的线路参与自动选线,其余工具线路仍展示/可手动锁定。

Honors the "filter by tool" commitment from issue #3: only lines of allowed tools join auto-selection; others stay visible/manually lockable.

  • selector 新增 SetToolFilter:空集合=全部参与;非空时仅 Tool 命中的线路进入自动选线,防抖逻辑同步跳过被过滤线路
  • linereg/handlers 新增 probe_tool_filter 配置(逗号分隔,空=全部),GET/PUT /v1/linereg/config 读写
  • 前端线路策略 Modal 新增「参与选线的工具」输入框 + i18n(zh/en)
  • 测试:过滤后仅允许工具参与自动选线、手动锁定不受过滤影响、空过滤=全部参与

2. 端口层重绑模式开关 / Port rebind mode switch

端口层切换落地(#10)的保守选项:auto(选线变化自动重绑)/ manual(只记录待重绑清单,手动触发)/ off(关闭)。

Conservative option for port-level switch landing (#10): auto / manual (queue rebinds, apply manually) / off.

  • linereg 新增 rebindMode,manual 模式记录待重绑清单(svcID->lineID),新增 rebind-pending / rebind-apply 端点
  • SystemConfig 键 port_rebind_mode 持久化,启动时加载
  • 前端线路策略 Modal 新增模式选择 + 手动重绑按钮 + i18n(zh/en)
  • 测试:manual 排队+手动应用+清空、off 跳过

依赖 / Dependencies

@PIKACHUIM PIKACHUIM left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 感谢 @suantea 提交!
🤖 AI 自动审核声明:本评审报告由 AI 自动生成,当前使用 gpt-5.6-sol 模型进行分析。
⚠️ AI 分析结果仅供参考,可能存在误判或遗漏。如有不同意见,欢迎讨论和纠正。
⚠️ 重要提醒:项目维护者目前很忙,且需要先回顾当前代码整体情况与这组 stacked PR 的依赖关系,因此 PR 合并可能会滞后;最终是否合并仍由维护者人工判定。

🎯 结论

🔄 Request Changes — 存在阻塞性问题,建议修复并重新评审

📖 概要

[Feature] 探测工具过滤 + 端口层重绑模式开关 / Tool filter for auto-select & port rebind mode switch · 作者 @suantea
目标:围绕 NetPanel 的功能、监控、安全或 UI 能力进行增量改动。
整体方案按后端模型/服务/路由与前端 API/页面分层组织,方向与项目现有结构基本一致。

🧭 整体改动方案

  • 方案思路:沿用现有 Go 服务、Gin 路由、GORM 模型和 React/TypeScript 页面分层,新增能力通过已有 API 与配置模型接入。
  • 改动组织:后端负责状态、探测、隧道或安全逻辑,前端负责配置和结果展示;stacked PR 之间存在共享基础改动,合并顺序需要维护者统一安排。
  • 方案评估:整体路线可行,但需要重点确认错误处理、并发边界、API 签名兼容及前端编译完整性。

📊 变更统计与评分

  • 改动文件:? 个(+? / -? 行)
  • 评分:功能 ⭐⭐⭐⭐ | 最小改动 ⭐⭐⭐⭐ | 前向兼容 ⭐⭐⭐ | 方案设计 ⭐⭐⭐⭐

🚨 关键问题(按优先级分级)

  • P0 webpage/src/i18n/locales/en.ts, webpage/src/i18n/locales/zh.ts:同一 locale 对象中重复定义 cftunnel 键,会触发 TypeScript TS1117 并阻塞前端编译。
  • P1 webpage/src/api/index.ts / MCP integration:本 PR 与相邻 stacked PR 共享 API/配置改动,需确认 GetLogs 等签名变更的所有调用方已同步。

📂 文件改动分析(意图 + 合理性)

文件 改动意图 合理性 问题
backend/api/handlers/linereg.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/api/router.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/main.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/model/models.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/cert/manager.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/cftunnel/manager.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/linereg/linereg.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/linereg/linereg_test.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/mcp/server.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/selector/selector.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/selector/selector_test.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/tunservice/manager.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
backend/service/wireguard/manager.go 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
webpage/src/api/index.ts 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 P1: 本 PR 与相邻 stacked PR 共享 API/配置改动,需确认 GetLogs 等签名变更的所有调用方已同步。
webpage/src/i18n/locales/en.ts 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 P0: 同一 locale 对象中重复定义 cftunnel 键,会触发 TypeScript TS1117 并阻塞前端编译。
webpage/src/i18n/locales/zh.ts 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 P0: 同一 locale 对象中重复定义 cftunnel 键,会触发 TypeScript TS1117 并阻塞前端编译。
webpage/src/pages/CfTunnel.tsx 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题
webpage/src/pages/TunService.tsx 支撑本 PR 的后端/前端功能接入、配置或展示 ✅ 方向与改动目标一致,需结合整体合并顺序验证 ✅ 未发现直接问题

✅ 待处理清单

  • [P0] webpage/src/i18n/locales/en.ts, webpage/src/i18n/locales/zh.ts:确认并处理上述问题
  • [P1] webpage/src/api/index.ts / MCP integration:确认并处理上述问题

🎯 结论:🔄 Request Changes — 存在阻塞性问题,建议修复并重新评审。

@PIKACHUIM PIKACHUIM left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 感谢 @suantea 提交!
🤖 AI 自动审核声明:本评审报告由 AI 自动生成,当前使用 Claude 模型进行分析。
⚠️ AI 分析结果仅供参考,可能存在误判或遗漏。如您发现任何问题或有不同意见,欢迎随时提出讨论和纠正。
⚠️ 重要提醒:即使 AI 评审认为代码质量良好且建议合并,最终是否合并仍需由项目维护者进行人工判定。项目维护者会综合考虑代码质量、项目规划、技术方向、团队资源等多方面因素做出是否合并的决策。

🔄 增量评审:v1 → v2

本轮新增 1 个 commit(20db762),改动文件:webpage/src/i18n/locales/en.ts、webpage/src/i18n/locales/zh.ts

新增改动的问题:
无新增问题。

旧问题解决情况:

  • ✅ en.ts/zh.ts 重复定义 cftunnel 键(TS1117)→ 已删除重复块、quickUrl 并入完整对象,P0 解决
  • ⏳ GetLogs 等共享签名变更 → 仍为 stacked PR 合并顺序问题,建议维护者合并时统一确认调用方

🎯 结论:✅ Approve — 阻塞问题已解决

PIKACHUIM
PIKACHUIM previously approved these changes Aug 24, 2026

@PIKACHUIM PIKACHUIM left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 代码评审通过

增量确认:上轮阻塞问题已通过新增 commit 完整修复,本轮无新增问题。

质量评分:⭐⭐⭐⭐(功能完整、健壮性良好)


🙏 感谢贡献 @suantea!

@PIKACHUIM

Copy link
Copy Markdown
Owner

🔧 PR #31 冲突解决指南

PR #38(初始化向导)已合并,导致本 PR 出现 18 个文件冲突。

解决步骤

git fetch origin
git checkout feat/linereg-policy
git rebase origin/main
# 解决冲突后:
git add <冲突文件>
git rebase --continue
git push origin feat/linereg-policy --force

关键冲突

  • backend/service/linereg/linereg.go:线路注册逻辑
  • backend/service/selector/selector.go:探测工具选择器
  • backend/api/router.go:保留 /api/init + 自己的路由
  • i18n 文件:保留 init.* 键 + 自己的翻译

验证清单

  • go build 通过
  • npm run build 通过
  • 探测工具过滤功能正常
  • 端口重绑模式开关可用

完整指南见 conflict-resolution-guide.md

@PIKACHUIM

This comment has been minimized.

PIKACHUIM
PIKACHUIM previously approved these changes Aug 26, 2026

@PIKACHUIM PIKACHUIM left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 代码评审通过

确认事项:

  • 上轮阻塞问题已完整修复
  • 代码质量优秀,功能完整
  • 无合并冲突

质量评分:⭐⭐⭐⭐


🙏 感谢贡献 @suantea!本 PR 已获项目所有者批准,可安全合并。

@PIKACHUIM

Copy link
Copy Markdown
Owner

🔧 PR #31 冲突解决指南(更新)

原因:PR #19/39/40 已合并(2026-08-26 10:28-10:29),导致本 PR 出现新的冲突。

解决步骤

git fetch origin
git checkout feat/linereg-policy
git rebase origin/main
# 解决冲突后:
git add <冲突文件>
git rebase --continue
git push origin feat/linereg-policy --force

关键冲突点

  • backend/service/linereg/linereg.go:线路注册逻辑整合
  • backend/service/selector/selector.go:探测工具过滤逻辑
  • backend/api/router.go:保留已有路由定义
  • i18n 文件:合并翻译键

验证清单

  • go build 通过
  • npm run build 通过
  • 探测工具过滤功能正常
  • 端口重绑模式开关可用

由 github-pr-reviewer Expert 自动生成(2026-08-26 18:30)

suantea and others added 6 commits August 28, 2026 08:55
- CftunnelConfig 新增 QuickURL 字段:从 cloudflared stdout 提取
  trycloudflare.com 临时地址并落库,进程停止/退出时自动清理
- 前端表格新增 Quick 入口列(可点击直达),补全缺失的 cftunnel i18n 键

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
- probe_config_get:读取探测策略(间隔/失败阈值/容差/并发/工具过滤/重绑模式)
- probe_config_set:部分字段更新 + 范围校验,持久化并立即应用
- tunservice_diag:服务状态 + 最近错误 + 选线快照 + 待重绑清单一站式诊断

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
- CftunnelConfig 新增 QuickURL 字段:从 cloudflared stdout 提取
  trycloudflare.com 临时地址并落库,进程停止/退出时自动清理
- 前端表格新增 Quick 入口列(可点击直达),补全缺失的 cftunnel i18n 键

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
工具过滤(按工具限制参与自动选线,兑现 issue PIKACHUIM#3「仅 WG 参与」承诺):
- selector 新增 SetToolFilter:非空集合时仅 Tool 命中的线路参与自动选线,
  其余线路仍注册展示/可手动锁定;防抖逻辑同步跳过被过滤的当前线路
- linereg/handlers 新增 probe_tool_filter 配置(逗号分隔,空=全部),
  GET/PUT /v1/linereg/config 支持读写
- 前端线路策略 Modal 增加「参与选线的工具」输入框 + i18n(zh/en)
- selector 测试:过滤后仅允许工具参与自动选线、手动锁定不受过滤影响、
  空过滤=全部参与

端口层重绑模式开关(PIKACHUIM#10 延伸,保守部署可选):
- linereg 新增 rebindMode(auto 自动 / manual 半自动 / off 关闭):
  manual 模式只记录待重绑清单(svcID->lineID),由用户手动触发;
  off 模式完全跳过端口层重绑
- 新增 GET /v1/linereg/rebind-pending、POST /v1/linereg/rebind-apply
- SystemConfig 键 port_rebind_mode 持久化,LoadProbeConfig 启动加载
- 前端线路策略 Modal 增加模式选择 + 手动重绑按钮 + i18n(zh/en)
- linereg 测试:manual 排队+手动应用+清空、off 跳过

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
- cftunnel Manager.GetStatus/Stop 签名改为上游单返回值形式
- webpage: 移除重复 tunserviceApi 声明、cftunnel 重复 quickUrl 键
- ProbeConfig 补齐 tool_filter/rebind_mode 字段
@suantea

suantea commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

👋 状态同步:分支 feat/linereg-policy 已基于最新 main(6ac408f,含 #19/#38/#39/#40)完成 rebase 并推送,当前 head=2be372a,mergeable=MERGEABLE,无冲突。已重新验证 go build 与前端 build 均通过(i18n 重复 cftunnel 对象已去重)。感谢增量评审 ✅,等待可合并。

@PIKACHUIM

Copy link
Copy Markdown
Owner

🙏 感谢 @suantea 提交!
🤖 AI 自动审核声明:本评审报告由 AI 自动生成,当前使用 Claude Opus 5 模型进行分析。
⚠️ AI 分析结果仅供参考,可能存在误判或遗漏。如您发现任何问题或有不同意见,欢迎随时提出讨论和纠正。
⚠️ 重要提醒:即使 AI 评审认为代码质量良好,最终是否合并仍需由项目维护者人工判定。

🔄 增量评审(rebase 适配)

本轮新增 1 个 commit 2be372a:适配上游 #40 cftunnel 签名 + i18n/TS 去重与补齐,恢复构建通过。

新增改动问题:无。cftunnel.Manager.GetStatus/Stop 已正确改为上游单返回值形式;ProbeConfig 补齐 tool_filter/rebind_mode 字段;移除重复 tunserviceApi 声明与 i18n 重复 quickUrl 键。适配完整,顺带修复了 #40 合并后 main 上的 tunserviceApi 重复声明(TS2451)与后端 GetStatus 签名不一致问题。

旧问题回查:

  • ✅ i18n 重复 cftunnel 对象(TS1117,P0)→ 已解决

🎯 结论:✅ Approve — rebase 适配正确,无新增问题,旧问题已解决。

@PIKACHUIM
PIKACHUIM merged commit f6e321f into PIKACHUIM:main Aug 28, 2026
@suantea
suantea deleted the feat/linereg-policy branch September 11, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants