feature+windows — 项目 TODO

生成于 2026-07-08 · 真相源 todo/todo.json
33全部
12待开始
0开发中
6待验收
15已验收
1待确认
重要度
状态
改动等级
平台 / 标签
📋 待开始 12 ▴ 收起
  • #1 macOS 原生 KillSwitch 补齐 L0→L3
    待开始 重要 二级
    现状 L0(stub):VpnChannel.swift:69 setKillSwitch 直接 result(nil)、includeAllNetworks()→false。天花板 L3。改 NetworkExtension:includeAllNetworks=true + NEOnDemandRule 常开 + enforceRoutes,由 neagent 系统级强制、扛 app 崩溃。性价比最高的跨端缺口。依据见 docs/killswitch-design.md §4-6。
    ✓ 已确认 二级改动说明 2026-06-30
    macOS L0→L3,改 2 个原生文件(不动 Dart/服务端)。【VpnChannel.swift】①加缓存 killSwitchEnabled(默认true);②setKillSwitch 落地:存标志+manager已存在则重新applyKillSwitchConfig+saveToPreferences即时生效;③loadOrCreateManager 按标志设 proto.includeAllNetworks/enforceRoutes=true/excludeLocalNetworks=true(放行LAN)+mgr.onDemandRules=[NEOnDemandRuleConnect()]+isOnDemandEnabled;④stop() gotcha:先关 isOnDemandEnabled+save 再 stopVPNTunnel,否则on-demand把断开拉回;⑤start() options 带 killSwitch 传扩展。【PacketTunnelProvider.swift】startTunnel 读 killSwitch option 缓存,includeAllNetworks() 回调返回该值与NE层对齐。无需新增entitlement。验证靠真机:连上后杀扩展/拔网验证流量被阻断(过L1→L2质变线)+on-demand开机/掉线自动拉起+手动断开不反弹。
    📄 详见 docs/killswitch-design.html
  • #2 Android KillSwitch L1 + 引导系统 Always-on
    待开始 重要 二级
    现状 L0(stub):MainActivity.kt setKillSwitch 只打日志(TODO 11G)。目标:app 内做到 L1(config TUN strict_route,复刻 Windows 的 applyKillSwitchToConfig 语义) + 深链引导用户开系统设置「始终开启 VPN + 无 VPN 时阻止连接」拿 L3,UI 诚实标注「彻底防泄漏需在系统设置开启」。属 Android 客户端 11G。依据见 docs/killswitch-design.md §4-6。
  • #4 线上启用 TOTP 两步验证并验 2FA
    待开始 重要 三级
    pangolin1 的 /etc/pangolin/server.env 配 USER_TOTP_ENC_KEY(32字节或64位hex)并重启 pangolin-server,启用后验 A.1 客户端 2FA:绑定 Authenticator→重登 6 位码校验→备份码可用。当前该键未设置,/auth/login/totp 与 /me/totp/* 未挂载,2FA 无法测。属 A.1 手动验证清单第 4 项的前置。
  • #8 agent 掉线告警 + 静默吞错全量审计
    待开始 重要 二级
    TODO #7 的剩余两块:① Hub 检测到 agent gRPC 流断开时触发告警(alert 包),避免再像这次停 6 天没人知道;② 全仓审计 _ = err / 忽略错误的静默吞错点(今天已遇邮件/连接500/connect-push 三处),逐一改为记日志或上抛。
  • #12 协议选择(REALITY/Hysteria2/自动)端到端
    待开始 重要 一级
    让用户选数据面隧道协议:auto(服务端自决)/reality(TCP443隐蔽)/hysteria2(UDP443弱网更快)。客户端 settings 加 ProtocolChoice 枚举+持久化+三段选择器、connect 时下发。关键:protocol 必须走 query(?protocol=)不走 body(与 split_cn 一致,nodes.go:183),旧 WIP 误移 body 会破坏分流。服务端 nodes.go connect 读 query + clientconfig BuildClientConfig 按 proto 渲染。(从本地 main todo 合并而来)
  • #14 移动端真·常连:Android Always-on + iOS/iPad On-Demand(无UI自连)
    待开始 重要 一级
    系统在 app 未开时拉起隧道:Android Always-on VPN(系统设置开启+VpnService 支持 onStartCommand 无UI拉起+配置缓存)、iOS/iPad On-Demand(NEOnDemandRule + PacketTunnelProvider 用缓存 lastConfigJson 自连)。难点:paid 凭证 TTL 仅24h,长期常连需原生侧刷新配置/凭证。桌面自启+全平台自动连接已在另一轮做(plan crystalline-exploring-lerdorf)。
  • #31 官网文档页:撰写 快速开始/FAQ/协议与安全/隐私政策 4 页,接回 Docs 卡片链接
    待开始 重要 二级
    web/website Docs 区当前 4 张卡为占位信息卡(不可点)。需撰写真实文档页(可用 Astro content/MDX 或 docs 站),写好后把 Docs.astro 卡片改回 <a href> 并恢复「阅读」CTA、页脚 文档/FAQ/隐私政策 指向对应页。注意:隐私政策属法律文本,由创始人审定,Claude 仅出初稿;对「无日志」VPN,隐私政策是软性上线门槛。
  • #32 控制面 fallback:CF 域名被 SNI 封时客户端退回直连节点 IP 的 https 控制口
    待开始 重要 二级
    #25 采用 CF Tunnel 前置控制面(api.yanmeiai.com)。已知弱点:该域名可被 GFW 单独 SNI 封锁,届时登录/拉配置不可用(已连隧道不受影响,数据面 REALITY:443 直连也不受影响)。加固:客户端 api 层保留一个直连某健康节点 IP 的 https 控制面 fallback——域名连不上/握手被 RST 时自动退回直连,保证仍能登录/刷新配置/换节点。服务端需在节点上也暴露一个可直连的 https 控制口(或复用现有端口+证书)。属 #25 的后续加固,不在 #25 本轮范围。
  • #34 独角数卡 + USDT 收款闭环
    待开始 重要 一级
    自建发卡网(独角数卡,独立小 VPS 隔离部署,不放 pangolin1)+ USDT(TRC20)收款,打通『下单→付款→自动发激活码→客户端/用户中心兑换→订阅生效』闭环。复用已就绪后端:POST /webhook/store/codes(HMAC+时间戳+nonce)、POST /v1/redeem(JWT)、批次生成/导出(server/internal/codes)。收款终点=单一自托管 USDT 钱包,变现经交易所出金到 US LLC(记账走 accounting)。真相源三文档:docs/payment-a-selfhosted-store-plan.html · payment-channels-overview.html · payment-reseller-fulfillment-design.html。tier-1:含新增 /internal/codes/mint(模型B 单源产码)+ 跨 server/发卡网/客户端/运维。待定:钱包(自托管热钱包 vs 交易所地址)、USDT 路子(自建 TronGrid watcher vs 加密网关)、起步用模型A(预充卡密,零胶水当天可卖)。开工前按 tier-1 走 plan→propose→approve。
  • #3 Windows KillSwitch L1→L2 (WFP 防火墙强制)
    待开始 一般 / 优化 一级
    现状 L1:desktop_vpn_bridge.dart strict_route + 子进程重载,进程被硬杀仍泄漏。目标 L2:app 装 WFP(Windows Filtering Platform) 过滤器阻断非隧道流量,做成系统服务持久化才能扛崩溃。工作量较大,backlog。依据见 docs/killswitch-design.md §4-6。
  • #19 连接页 resume 时整页闪 spinner(锁屏久重开)
    待开始 一般 / 优化 三级
    长锁屏重开 app 连接页整页 blank 成全屏转圈再回来。根因:MeNotifier.build 里 watch(authProvider),token 过期后 resume 首个请求 401 刷 token,authProvider 变,meProvider 重建进 AsyncLoading,meLoadingProvider(=me.isLoading)true,connect_page:38 整页转圈。功能无碍(VPN 没断),仅体验跳。改:meLoadingProvider 只在真首次(还没成功拿过账户数据)整页转圈;已有数据后的刷新保持连接页不动、后台静默更新,同时保留原意(别先闪免费再跳会员)。
  • #24 联系我们渠道二级页:Telegram/LINE 多频道/群组,DB 配置
    待开始 一般 / 优化 一级
    点渠道进二级页,按 kind 分组(频道/群组/Bot)列多条链接,内容 DB 配置。新表 contact_link + GET /v1/contact + 各端 UI。设计:docs/contact-telegram-channels-design.html。待用户统一交互后开发。
🔨 开发中 0 ▴ 收起

    暂无条目

🔍 待验收 6 ▴ 收起
  • #25 控制面上 TLS:域名 + 反代证书,客户端默认 https(F1)
    待验收 高优 · 紧急 二级
    审查 F1(P0 安全):当前客户端默认 http://103.119.13.48:8080 明文,密码/JWT 裸奔公网。需先有域名/HTTP 服务:域名解析到 pangolin1 → Caddy/nginx 自动 Let's Encrypt 反代 :8080 → 客户端 api_config.dart 默认改 https → Android 移除 usesCleartextTraffic → 8080 收回 loopback。见 docs/code-review-2026-07.html
    ✓ 已确认 二级改动说明 2026-07-06
    控制面上 TLS 走 CF Tunnel:cloudflared 出站隧道前置 api.yanmeiai.com→127.0.0.1:8080(不占 :443,sing-box REALITY 不动)。6 个 Task:①建隧道+装 cloudflared(加法上线,与旧口并存)②客户端默认切 https+去 Android 明文③CI 守护禁明文④PANGOLIN_PUBLIC_URL 切 https(规则集下载基址)⑤待客户端迁移后收 8080 loopback+关防火墙+修健康检查⑥文档。fallback 拆到 #32。
    📄 详见 docs/superpowers/plans/2026-07-06-control-plane-tls-tunnel.md
  • #26 SQLite 每日备份 + 异地容灾(F2)
    待验收 高优 · 紧急 三级
    审查 F2(P0 运维):pangolin1 生产 SQLite 无任何备份,单盘单机。最简:cron 每日 sqlite3 .backup + rclone 推 R2/S3 异地保留 30 天;更优 Litestream 持续复制。恢复流程写 runbook 并演练。见 docs/code-review-2026-07.html
    改动说明三级 · 可直接执行
    定时 Gitea Actions 备份工作流(镜像 jiu backup.yml):scripts/ci/backup-db.sh(ssh pangolin1 → sqlite3 online .backup 取 WAL 一致快照 + 远端 integrity_check → gzip 流回 → 存 NAS /volume1/docker/backups/pangolin,保留30天)+ .gitea/workflows/backup.yml(每日02:00北京 cron + 手动,ubuntu-latest,复用 DEPLOY_SSH_KEY,Telegram 通知)。异地=家里NAS≠VPS机房。不动 pangolin1。
  • #29 给 pangolin1 挂 Cloudflare WARP 出站分流:信誉敏感站走 WARP 干净 IP
    待验收 高优 · 紧急 一级
    背景与目标: pangolin1 出口是机房脏 IP,访问 Reddit 会触发 403 / 验证码。用 Cloudflare WARP 作为 pangolin1 的一条出站(egress),按目的地分流——把信誉敏感流量(Reddit 等)从 WARP 出,出口 IP 变成 Cloudflare 干净 IP,验证码/403 基本消失;其余流量仍直出保满速。WARP 免费(住宅代理按 GB 收费)。参考本地知识库 /Users/wangjia/code/reddit-karma/docs/sni-throttle-warp.html。 实现步骤(pangolin1,sing-box 数据面): 1) 在 pangolin1 用 wgcf(或 warp-go)注册并生成 WARP 的 WireGuard 配置 profile。 2) sing-box 增加一个 wireguard 类型 outbound,tag=warp。 3) 增加路由规则:下方「走 WARP 的域名」匹配到 outbound=warp;其余走 direct。 4) 重启 sing-box 并验证。 走 WARP 的域名(用 domain_suffix,自动覆盖子域): - reddit.com(含 www / old / new / sh / oauth.reddit.com API) - redd.it(短链) - i.redd.it、v.redd.it(图片/视频媒体) - redditstatic.com(静态资源) - redditmedia.com(媒体) 先只放 Reddit 全家桶;后续若遇其它易弹验证码的社交站,再按同样方式往这条规则里追加,规则集可扩展。 保持直出(不走 WARP): - 其余所有流量,尤其大流量/大下载——避免 WARP 免费版吞吐瓶颈,保满速。 约束: - 改机器前遵循 notify-before-system-changes:先只读勘察 pangolin1 现有 sing-box 配置与是否已装 wgcf → 给出改动清单请用户确认 → 再改 + 重启验证。 - WARP 配置/密钥不入 git;wgcf 生成的 profile 落 pangolin1 本地(/etc 下),敏感值走 Bitwarden 记录,不提交明文。 - WARP 本质仍是数据中心 IP,对最严反欺诈可能仍被标记,但对 Reddit 足够;WARP 不作翻墙用途。 验收标准: - 经 pangolin 访问 reddit.com 不再出现 403 / 验证码; - curl 确认 reddit 路由的出口 IP 属 Cloudflare 段,而其它流量出口仍为 pangolin1; - 直出流量速度不受影响。
  • #30 CI/CD 全流程:tag 触发编译/发版/部署到 pangolin1(server+agent+client 产物+官网)
    待验收 高优 · 紧急 一级 2/2 子任务
    参考 jiu 的 .gitea/workflows(checks/deploy-server/deploy-site/deploy-client/build-windows/backup),套路:tag 触发(server-v*/site-v*/client-v*)→ checkout → provision(幂等)→ compile(scripts/ci/*.sh)→ go test/flutter test → 建 Gitea/Forgejo release 传产物 → ssh 部署目标机;国内镜像 goproxy.cn/flutter-io.cn。pangolin 差异:①部署机=pangolin1(103.119.13.48,非 jiu 的 ali/EC2),走 ssh 别名;②runner label=nas;③server 端要跑 migrate(SQLite,先备份再迁);④client 产出 apk(split-per-abi arm64)+ macOS 公证 dmg + Windows exe + 未来 iOS,这些产物正是官网下载链接的来源(接 web/website Download.astro 的 href)。现有仅 .gitea/workflows/ci.yml(校验,无部署)。含:官网 Astro 构建+部署、server/agent/migrate 编译部署、客户端多端出包与 release 挂载。
    ✓ 已确认 一级方案规划 2026-07-05
    三期 11 任务(基座+官网+服务端 / Android / macOS+Windows);镜像 jiu scripts/ci+workflows,runner nas/mac/windows,tag 触发;服务端部署固化 F3/F4 备份/迁移/回滚;下载链接接 release;密钥已建对齐 jiu。设计 docs/cicd-design.html,计划 docs/cicd-plan.html。
    📄 详见 docs/superpowers/plans/2026-07-05-cicd.md
    子任务 2 / 2 完成
    • 30A 官网入口接真实 URL:部署后恢复 Header 登录(→usercenter)+ 下载按钮 href(→客户端产物)
      二级待验收
    • 30B 官网部署:静态站发布到 pangolin.yanmeiai.com + CF DNS 记录指向服务器
      二级待验收
  • #33 三端多语言(6语)+ 默认英文
    待验收 重要 一级
    客户端/官网/用户中心新增 日/韩/俄/西(共6语 zh/en/ja/ko/ru/es),默认语种改英文。官网根路由/=英文、中文挪/zh/、新增/ja//ko//ru//es/;用户中心补入 site-v* CI 部署。B1:硬编码UI文案6语化+修auth错误消息永远显中文bug;B2:语言选择持久化(shared_preferences)。红线扫描0违规。已发 client-v1.0.60 + site-v0.0.6;B1/B2 待 client-v1.0.61。
  • #18 节点判死无备用时自动重连当前节点(而非断开报错)
    待验收 一般 / 优化 三级
    长挂机后数据面睡死→看门狗 path A 正确判上游死,但智能模式仅1节点/找不到备用时只会 _disconnect+报节点异常,逼用户手动重连(实测挂机2h回来即遇)。改 _onNodeUnhealthy:无备用节点时自动重连当前节点重建通路,加有限次数保护避免节点真挂时死循环。connection_provider.dart 一处。
✅ 已验收 15 ▾ 展开