Skip to content

新增设备互联:局域网同步、HTTPS 中转与远程执行 - #204

Closed
ZhouHaoYu1 wants to merge 1 commit into
greyoak111:mainfrom
ZhouHaoYu1:feat/device-link
Closed

ZhouHaoYu1 wants to merge 1 commit into
greyoak111:mainfrom
ZhouHaoYu1:feat/device-link

Conversation

@ZhouHaoYu1

Copy link
Copy Markdown

改了什么、为什么

为同一用户自己的 cccodroid 设备增加可选的设备互联功能:

  • 支持局域网配对,以及 Claude 会话、会话名、置顶和工作区产物的双向同步。
  • 支持可选的 HTTPS 出站中转,用于设备不在同一局域网的情况。
  • 支持 @手机 / @电脑 远程执行,实时回传正文、思考和工具事件,并支持插话和停止。
  • 增加会话来源标签、同步后自动刷新会话列表,以及内置的远程设备 MCP 服务器。
  • 远程执行默认关闭,开启后仍需逐台放行。Claude 登录凭据、账户会话和模型 API 用量不会通过互联功能转发。

实现保持项目现有约束:网关只使用 Node 内置模块,界面仍为原生 JavaScript,不修改 Claude Code 程序。scripts/build.sh 只增加新运行文件的打包逻辑,以及 Windows 路径和签名兼容处理。

怎么测的

  • 网关设备互联回归测试:7/7 通过,包括真实启动两个 linkd、拉取会话并通知网关刷新。

  • 前端分段语法检查:28 段、17,253 行通过。

  • 翻译扫描:9 种非源语言均已达到 2938/2938。

  • 本地构建 targetSdk 28 和 targetSdk 36 两个 APK,均通过 apksigner v2/v3 校验。

  • 在 Xiaomi 23013RK75C(Android 13)上实测 targetSdk 36 安装包:设置入口、127.0.0.1:9377 上的 linkd、局域网开启和 Windows 设备发现均正常。

  • scripts/build.sh、linkd、中转、远程执行和 MCP 模块均通过 Shell 或 JavaScript 语法检查。

  • 新增界面文案均使用 t() 并补齐译文

  • 未引入新依赖或构建步骤

  • 未提交二进制、压缩或混淆代码,也未修改第三方代码

安全初筛说明

  • gateway/gw/link.mjs、gateway/link/core.mjs 和 gateway/link/remote-mcp.mjs 只在本机回环鉴权请求中读取现有网关令牌;令牌不会写入日志、不会同步、不会经中转发送,也不会返回给对端。
  • devkit/devkit.mjs、scripts/appjs.mjs 和 scripts/build.sh 的改动是 Windows 路径兼容与打包更新,没有加入签名密钥、口令或其他凭据。
  • 公网中转文档中的外部域名仅作部署示例;远程执行默认关闭,并需要对每台设备单独放行。

@github-actions

Copy link
Copy Markdown

PR 安全初筛 / Safety pre-check

改动 47 个文件;高 6 项、中 9 项。

档 文件 行 为什么要看
高 devkit/devkit.mjs 工具包构建配方(CI 里带签名钥匙跑)
高 gateway/gw/link.mjs 19 碰 SSH 钥匙 / 网关令牌 / 凭据文件
高 gateway/link/core.mjs 71 碰 SSH 钥匙 / 网关令牌 / 凭据文件
高 gateway/link/remote-mcp.mjs 16, 24 碰 SSH 钥匙 / 网关令牌 / 凭据文件
高 scripts/appjs.mjs 构建 / 发版 / 签名脚本
高 scripts/build.sh 构建 / 发版 / 签名脚本
中 gateway/gw/link.mjs 3 起子进程
中 gateway/link/linkd.mjs 24 起子进程
中 gateway/link/remote-exec.mjs 21 起子进程
中 gateway/link/remote-mcp.mjs 24, 27 读取密钥类环境变量
中 gateway/relay/README.md 30 新出现的外部域名 sslip.io
中 gateway/relay/README.md 101 新出现的外部域名 47.103.209.3.sslip.io
中 gateway/relay/relay.mjs 279 新出现的外部域名 relay.local
中 gateway/tests/link-device.test.mjs 8 起子进程
中 gateway/tests/link-device.test.mjs 81, 254, 255 碰 SSH 钥匙 / 网关令牌 / 凭据文件

「高」不等于有问题,只是这些地方一旦被动手脚,后果最重(能拿到签名钥匙、改到用户手机上的权限、或藏进看不见的内容),合并前请逐行看过。

@greyoak111

Copy link
Copy Markdown
Owner

感谢提交。这个 PR 我先关闭了,原因不是想法本身,而是它不适合以现在的形态进主仓库。

  1. 改变了主仓库的安全边界。 主仓库的网关只监听回环地址,靠令牌和逐次签名校验;这个 PR 增加了局域网监听、HTTPS 中继、远程执行和远程 MCP。这是另一套信任模型,需要单独的设计评审、威胁建模和长期维护,不能作为功能 PR 顺带合入。项目刚做完一轮安全收紧,这里不能开口子。

  2. 夹带了发版链的改动。 scripts/build.sh 里有大量签名参数、打包和 Windows 路径兼容改动;scripts/appjs.mjs、devkit/devkit.mjs 也各有一处路径兼容改动。这些和“设备互联”不是一件事,发版与签名脚本必须单独提、单独审。

  3. 规模没法评审。 47 个文件、+6770 行,其中新增代码约 5300 行;测试只有一个 322 行的文件(7 项),覆盖不到网络监听、中转鉴权、远程执行审批这些关键边界。

  4. 仓库里带了公网中继的部署物。 gateway/relay/ 包含 Caddyfile、systemd unit 和示例域名;主仓库不应该内置或暗示一个第三方中继服务。

按 CONTRIBUTING.md,可选扩展走 cccodroid-components 的组件流程:配方 → CI 打包/审计 → ed25519 签名索引 → 真机验证。能独立成包的部分(比如远程设备 MCP)可以作为 MCP 组件提交;中继服务请放在它自己的仓库里。如果仍要推动核心侧的互联能力,请先开 issue,写清使用场景、信任模型、默认关闭与逐台放行策略、凭据边界和分阶段落地方案,再拆成小 PR。

关闭不是否定这个方向,是这个尺寸和边界的主仓库 PR 接不住。

@greyoak111 greyoak111 closed this Nov 12, 2026
@greyoak111 greyoak111 added the wontfix This will not be worked on label Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

wontfix This will not be worked on

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants