15 KiB
移动端远程控制整体方案报告(V2)
创建时间:2026-03-12 最后更新:2026-03-13 适用范围:CodePilot 桌面端 + Android Companion + 多设备控制 + Feishu 能力扩展
一、这次更新后的结论
在引入 OpenClaw 官方飞书插件和 claude-to-im-skill 作为参考后,CodePilot 的远程方案应从“桌面 Bridge + 移动端控制器”升级为三层结构:
Remote Core负责 Host / Controller / Session / Lease、流式事件、审批、结果摘要、多设备接管。Channel Plugin Layer负责 Telegram / Discord / Feishu / QQ 的配对、策略、交互、状态、运维接口。Platform Capability Layer负责飞书文档、消息搜索、资源下载、任务、日历等平台深度能力。
这意味着:
- 现有远程 App 方向是对的,不需要推翻。
- 现有 Bridge 架构要升级,但不应该重写桌面 Chat 主链路。
claude-to-im-skill仍然有参考价值,但应定位为“轻量守护进程包装层”,不是未来总架构本身。- OpenClaw 官方飞书插件值得重点借鉴,但要借的是接口模型、交互方案、权限编排和配置层,不是整套运行时。
二、更新背景
本次方案修订基于三条输入:
- 当前 CodePilot 已有桌面 Bridge、远程审批、流式输出、文件预览和多 IM 通道
claude-to-im-skill已经验证了“守护进程 + 配置映射 + 轻量桥接”的落地方式- OpenClaw 官方飞书插件已经把 Feishu 从“消息桥接”提升成“完整渠道插件 + 平台能力工具集”
其中最重要的新信息是:飞书这次官方插件已经暴露出一套更完整的渠道抽象和能力模型,远超传统 bot 适配器。
三、现状与约束
3.1 当前项目已经有的能力
当前仓库里,远程与移动方案所需的底层能力已经具备不少基础:
- 聊天主链路:
src/app/api/chat/route.ts - 会话读写:
src/app/api/chat/sessions/[id]/route.ts - 权限审批:
src/app/api/chat/permission/route.ts - 文件预览:
src/app/api/files/preview/route.ts - 原始文件查看:
src/app/api/files/raw/route.ts - 前端切换会话后继续追流:
src/lib/stream-session-manager.ts - 现有多 IM Bridge:
src/lib/bridge/
3.2 当前主要限制
当前限制仍然成立:
- 桌面服务默认只监听本地
127.0.0.1 - API 默认假设调用方是本地可信桌面 UI
- Bridge 现在更像“多 IM 远程会话层”,还不是“远程控制平台层”
3.3 当前 Bridge 的定位需要调整
当前 docs/handover/bridge-system.md 描述的是现状:多 IM 远程操控 Claude 会话。
这套系统已经很好,但目标态不应只停留在“消息桥接”,而应把它视为未来 Channel Plugin Layer 的雏形。
四、参考输入的核心结论
4.1 OpenClaw 官方飞书插件给出的启发
OpenClaw 官方飞书插件最值得借的不是“功能数量”,而是能力组织方式。
它不是简单 bot,而是完整插件协议:
- pairing
- capabilities
- configSchema
- security
- setup / onboarding
- messaging / actions
- status / gateway
- 平台工具集
这说明飞书这条线在 CodePilot 中也不应继续停留在“一个 adapter 文件 + 几个设置项”的层级。
此外,它已经证明以下能力组合是合理且有用户价值的:
- 群聊 / 私聊策略分离
- 多账号与按群精细配置
- block streaming 卡片
- 交互式卡片与回调
- OAuth / Device Flow / App Scope 自动授权
- 状态探测、诊断、运维入口
- 消息读取、搜索、资源下载
- 文档 / 表格 / 日历 / 任务等平台工具
4.2 claude-to-im-skill 给出的启发
claude-to-im-skill 的价值不在“提供新架构”,而在于它展示了一个非常实际的落地方式:
- 它把桥接包装成一个本地守护进程
- 它用简单配置文件和脚本完成安装、启动、诊断
- 它用配置映射把自身配置转换成现有 bridge 设置
- 它已经验证了多通道、SSE 流、权限等待、消息持久化这些基础机制
这说明 CodePilot 后续在做远程能力升级时,应该把“桌面主产品”和“轻量守护进程/skill 包装层”视为两个不同交付面。
五、修订后的目标架构
5.1 三层结构
Layer 1: Remote Core
这是 CodePilot 下一阶段应重点建设的核心层。
职责:
- Host / Controller / Session / Lease 建模
- 流式事件总线
- 权限审批统一协议
- 结果产物 / run summary / changed files 统一表示
- 多设备接管
- 多 Host 管理
- 远程 App 与 IM 渠道共享的会话控制协议
Layer 2: Channel Plugin Layer
这一层吸收 OpenClaw 的渠道插件思路。
每个渠道应显式建模:
- pairing
- capabilities
- config schema
- access policy
- status / probe / doctor
- onboarding / setup
- messaging / actions
- gateway lifecycle
这样,飞书不再是 feishu-adapter.ts 的单文件逻辑,而是一个完整的渠道模块。
Layer 3: Platform Capability Layer
这一层用于承载“飞书本身的能力”,而不是“远程控制能力”。
例如:
- IM 消息读取 / 搜索 / 资源下载
- Doc / Wiki / Drive
- Task / Calendar
- Bitable / Sheets
这层可以先对接飞书,未来也可对接 Slack / Notion / Google Workspace 等平台能力。
六、角色模型保持不变,但职责更清晰
定义四个核心对象:
Host一台运行 CodePilot 的执行主机。负责工作目录、数据库、Claude CLI、Provider 凭证和会话运行。Controller一个远程控制端,可以是 Android App,也可以是另一台桌面设备或 IM 渠道。Session某个 Host 上的对话单元。Lease某个 Controller 对某个 Session 的临时写控制权。
与 V1 相比,这里最重要的变化是:
- IM 渠道现在被视作 Controller 的一种
- Android App 与 Feishu / Telegram / Discord 将共享同一套 Remote Core
七、控制模型仍然成立,但要和渠道层解耦
7.1 多读者、单写者
继续坚持:
- 多端可同时观察
- 单 session 单写者
- 写操作必须持有 lease
- 另一个端如需控制,必须
take over
7.2 为什么这个模型更重要了
因为一旦引入 Feishu 官方插件式能力,控制端不止手机:
- Android App
- 另一台桌面 Controller
- 飞书会话
- Telegram / Discord / QQ
只有把所有写操作统一收拢到 Lease 体系,后续 Feishu 深度能力接进来时才不会出现控制权失序。
八、Feishu 目标能力应拆成两组
8.1 第一组:远程控制增强能力
这组能力应纳入当前远程方案修订目标。
- pairing / onboarding
- 群聊 / 私聊策略
- allowlist / requireMention
- status / probe / diagnose
- 更完整的消息动作
- 更完整的卡片流式展示
- 审批卡片 / 回调机制
- app scope / user scope 自动授权编排
这组能力会直接影响:
- 现有 Bridge 抽象
- 远程 App 协议
- 控制权和审批模型
8.2 第二组:飞书平台深度能力
这组能力建议明确列为第二阶段或后续能力层目标,不要和远程 App MVP 绑死。
- 历史消息读取
- 消息搜索
- 资源下载
- 文档 / Wiki / Drive
- Task / Calendar
- Bitable / Sheets
这些能力非常有价值,但它们更接近“飞书集成产品线”,而不只是“远程会话控制”。
九、claude-to-im-skill 在新方案里的定位
9.1 应保留的借鉴点
推荐明确借鉴以下点:
- 守护进程入口结构
- 配置文件与脚本化运维
- 配置到桥接设置的映射方式
- 权限等待网关的简洁接口
- 本地 JSON store 的轻量交付模式
9.2 不应继承的假设
以下假设不适合作为 CodePilot 远程总架构:
- 单用户本地 daemon 是唯一运行模型
- 无入站监听就是最终安全边界
- 平台凭证 + allowlist 足以覆盖所有控制权问题
- 权限等待只需本地 Map 即可
原因很简单:一旦我们做远程 App、多 Controller、多 Host,这些前提都不再成立。
9.3 推荐定位
因此建议把 claude-to-im-skill 视为:
Remote Core的一种轻量封装与运维入口- CLI / daemon 交付形态的参考实现
- CodePilot 桌面产品之外的配套分发层
而不是未来总架构的主导来源。
十、对现有项目方案的具体修订
10.1 从“Bridge 系统”升级成“Remote + Channel Plugin”
当前项目的描述应从:
- “多 IM 远程会话桥接系统”
升级成:
- “Remote Core + Channel Plugin + Platform Capability”
其中当前 src/lib/bridge/ 的很多模块仍可保留,但语义要调整:
bridge-manager更接近 channel runtime / gateway coordinatorpermission-broker应向统一 remote approval broker 靠拢channel-adapter应逐步升级为 channel plugin contract
10.2 Feishu 模块不应继续只做适配器
飞书建议逐步拆出独立模块族,而不是把所有增长都继续堆在:
src/lib/bridge/adapters/feishu-adapter.ts
建议目标结构:
src/lib/channels/feishu/- plugin.ts
- config-schema.ts
- policy.ts
- status.ts
- onboarding.ts
- gateway.ts
- messaging/
- cards/
- auth/
- tools/
10.3 远程 App 需要同步调整的点
远程 App 不只是“看聊天内容”,后续必须适配以下统一协议:
- Host 列表与在线状态
- Session 列表与 lease 状态
- 审批 inbox
- 结果产物摘要
- 渠道侧 pairing / onboarding 状态
- 平台授权状态
这意味着远程 App 要预留:
- Host dashboard
- approvals center
- run summary / artifacts feed
- multi-host routing
- controller identity
十一、桌面端改动边界(修订版)
11.1 可以新增的区域
建议优先新增而非重构:
src/lib/remote/Remote Coresrc/lib/channels/渠道插件层src/lib/capabilities/平台能力层src/app/api/remote/远程专用 APIsrc/app/api/channels/渠道状态 / 配置 / onboarding / pairing / probe
11.2 尽量不动的区域
继续保持以下主链路稳定:
- 本地桌面聊天入口
- 本地流式 UI 逻辑
- 本地权限执行链路
- 现有文件预览基础能力
11.3 兼容性原则不变
必须继续坚持:
remote disabled = current desktop behavior unchanged
十二、远程 App 视角下的改动
12.1 App 不再只是 Chat 页面
在 V2 架构下,远程 App 的首页不应只是 session list,而应包括:
- Hosts
- Active sessions
- Pending approvals
- Channel / pairing health
- Recent runs / artifacts
12.2 App 需要适配更多状态
新增状态包括:
- 当前 Host 是否在线
- 当前 Session 是否被其他 Controller 接管
- 渠道是否配置完成
- Feishu app / user scope 是否缺失
- 是否需要重新配对或重新授权
12.3 App 的核心优势仍然是控制,不是重展示
即使 V2 引入更多能力,移动端仍然不应承担:
- 全功能文件树编辑
- 全量复杂卡片构造
- 平台工具配置与调试主入口
复杂展示和复杂运维仍然更适合桌面端。
十三、仓库组织建议(修订版)
仍然建议同仓 monorepo,不建议拆成两个仓库。
推荐结构:
apps/mobileAndroid Companionpackages/remote-contractHost / Controller / Session / Lease / events / approvals / artifacts 的共享协议packages/channel-contractpairing / capabilities / status / gateway / config schema 的共享接口packages/remote-clientController 访问 SDKsrc/lib/remote/桌面端 Remote Coresrc/lib/channels/渠道插件层
这样最适合当前以 AI 协作为主的开发方式:
- 协议不漂移
- 上下文集中
- 变更边界清晰
- 可以分层逐步迁移
十四、数据模型建议(修订版)
在 V1 数据模型基础上,建议新增或明确以下对象:
hostspaired_devicescontroller_sessionssession_leasesremote_audit_logshost_presencechannel_accountschannel_pairingschannel_authorizationscapability_credentials
其中:
session_leases负责控制权channel_accounts负责多账号渠道配置channel_pairings负责 Feishu / Telegram 等 pairing 状态channel_authorizations负责 app scope / user scope / device flow 状态
十五、实施顺序(修订版)
Phase 0:方案与边界重构
- 明确三层结构
- 抽出
remote-contract - 抽出
channel-contract - 修订 Bridge 与远程方案文档
Phase 1:Remote Core 落地
- Host / Controller / Session / Lease
- 远程专用 API
- 单 Host + 单移动端控制
- 审批 / 结果摘要 / 流式统一事件
Phase 2:Feishu V2 渠道能力
- pairing / onboarding
- status / probe / diagnose
- 群聊 / 私聊策略
- 更完整卡片流式交互
- 自动授权编排
Phase 3:多 Controller / 多 Host
- take over
- 审批中心
- 多 Host dashboard
- 渠道 / Host 健康总览
Phase 4:飞书平台能力层
- 消息读取 / 搜索 / 资源下载
- 文档 / Drive / Wiki
- Task / Calendar
十六、明确不做的事情
本轮方案修订后,仍然不建议在第一阶段做:
- 运行中 Session 跨 Host 迁移
- 把飞书全部平台工具一次性塞进远程 App MVP
- 重写当前桌面 Chat 主链路
- 让
claude-to-im-skill反向主导桌面产品架构
十七、关键风险与控制策略
风险一:把现有 Bridge 改坏
控制策略:
- 先抽象,再迁移
- 旧 Bridge 行为保持可回退
- 文档中区分“现状”和“目标态”
风险二:OpenClaw 参考范围过大,导致范围失控
控制策略:
- 区分渠道能力与平台能力
- 先借接口设计,再借高级工具
- 先完成 Feishu V2 控制面,再做平台工具面
风险三:claude-to-im-skill 的轻量假设和 CodePilot 主产品冲突
控制策略:
- 借守护进程包装,不借总架构假设
- 继续让桌面端作为权威状态源
风险四:远程 App 和 IM 渠道各做一套协议
控制策略:
- 统一沉到底层
remote-contract - 所有 Controller 共享 Session / Lease / Approval / Artifact 协议
十八、推荐决策
建议当前确认以下决策:
- 远程方案升级为三层结构
- 现有 Bridge 作为
Channel Plugin Layer前身继续演进 - 飞书本轮先做“控制面增强”,平台工具列入下一阶段
claude-to-im-skill继续作为轻量封装层参考,不作为总架构- 远程 App 与 IM 渠道共享同一套 Remote Core
十九、下一步建议
如果继续推进,下一份文档最值得做的是:
✅ 已完成 →远程方案 V2 执行计划docs/exec-plans/active/feishu-v2-channel-plugin.md✅ 已完成 →Remote Contract / Channel Contract 草案src/lib/channels/types.ts+src/lib/remote/types.ts✅ 已完成 →Feishu V2 渠道模块拆分设计src/lib/channels/feishu/Remote App 信息架构 + API 清单— 待后续实施