Files
zn-ai/docs/ClawX-Channels-Migration-Plan.md
duanshuwen ef46c73c3e Add unit tests for channel utilities and configure testing environment
- Created a new test file `channels.test.ts` to cover utilities related to channel configurations and targets.
- Implemented tests for normalizing and grouping selected channels by type, as well as building channel targets from account data and cron history.
- Mocked necessary dependencies to isolate tests and ensure accurate results.
- Updated `vite.config.ts` to set up the testing environment with jsdom and enable global variables for tests.
2026-04-18 16:12:49 +08:00

28 KiB
Raw Blame History

ClawX 消息频道功能迁移到 zn-ai 的开发计划

1. 背景与目标

这次迁移的目标不是把 zn-ai 当前的 /channels 页面做得“更好看”,而是把它从“频道/账号归属管理页”升级成接近 ClawX 的完整消息频道控制台。

期望对齐的能力边界如下:

  1. 渲染层页面结构对齐 ClawX
    • 顶部标题区
    • Refresh
    • Gateway 健康横幅与 diagnostics
    • 已配置频道列表
    • 支持的频道列表
    • 频道配置弹窗
    • 删除确认与收敛刷新
  2. 主进程 / Host API 对齐 ClawX
    • /api/channels/accounts
    • /api/channels/targets
    • /api/channels/config
    • /api/channels/default-account
    • /api/channels/binding
    • /api/channels/config/enabled
    • /api/channels/credentials/validate
    • QR 登录相关接口
  3. 运行时链路对齐 ClawX
    • 多账号配置
    • 默认账号切换
    • gateway reload / restart 策略
    • runtime health summary
    • diagnostics snapshot
  4. 测试基线对齐 ClawX
    • 单测覆盖配置、账号 ID、状态推断
    • E2E 覆盖绑定、诊断、账号编辑与回归场景

一句话总结:

  • zn-ai 需要从“只会改归属”升级为“可配置、可诊断、可验证、可收敛”的消息频道域。

2. ClawX 基线结论

2.1 页面职责不是“绑定页”,而是“频道控制台”

ClawX/src/pages/Channels/index.tsx 承担的不是单一绑定入口,而是完整控制台:

  • 管理已配置频道与账号
  • 展示支持的频道目录
  • 打开配置弹窗
  • 修改账号到 Agent 的绑定
  • 删除账号或整条频道配置
  • 展示 Gateway 健康状态
  • 复制 / 展开 diagnostics
  • 在 gateway 重启或 channel-status 事件后做收敛刷新

这决定了 zn-ai 不能继续停留在“表单 + 下拉框”的结构。

2.2 渲染层 IA

ClawX 的 UI 信息架构可以概括成三层:

  1. 页面层
    • 标题、副标题、刷新按钮
  2. 运行态层
    • gateway warning
    • gateway degraded / unresponsive banner
    • diagnostics 操作与展开区
  3. 资源层
    • Configured Channels
    • Supported Channels
    • ChannelConfigModal

其中两个关键特征必须保留:

  • “已配置频道”和“支持的频道”是并列区块,不是同一张表的两种状态。
  • ChannelConfigModal 是核心交互入口,不是可有可无的附属表单。

2.3 关键交互流程

ClawX 的前端交互主线如下:

  1. 页面初次加载时并行拉取 /api/channels/accounts/api/agents
  2. Refresh 触发 probe=true 的强探测拉取
  3. gateway:channel-status 事件到达后节流刷新
  4. Gateway 状态从非 running 变为 running 后触发一轮收敛刷新
  5. 点击“添加账号”后根据频道类型决定是否生成默认 accountId
  6. 配置弹窗内根据 connectionType 分为:
    • token
    • qr
    • oauth/webhook 扩展位
  7. 保存配置后不是立即认为状态稳定,而是继续做延迟回拉
  8. 删除配置后先本地移除,再补一次延迟拉取,避免旧状态回刷

这说明 zn-ai 迁移时不能只做 API 调用本身,还要迁移“刷新与收敛策略”。

2.4 前端状态模型

ClawX 页面目前虽然写在单文件里,但隐含了一套很清晰的状态模型:

  • channelGroups
  • agents
  • gatewayHealth
  • diagnosticsSnapshot
  • selectedChannelType
  • selectedAccountId
  • allowExistingConfig
  • allowEditAccountId
  • existingAccountIds
  • initialConfigValues
  • deleteTarget
  • fetchInFlight
  • queuedFetchOptions
  • convergenceRefreshTimers

迁移到 zn-ai 时,建议不要继续把这些状态直接堆在页面组件里,而要拆成:

  • channelsApi
  • useChannelsPageController
  • ChannelConfigModal
  • ChannelDiagnosticsPanel
  • ChannelGroupCard

2.5 主进程 API 面

ClawX 的 electron/api/routes/channels.ts 是一个“厚路由”,负责:

  • 构建频道账号视图
  • accountId canonical 校验与 legacy 兼容
  • 默认账号切换
  • binding 写入与清理
  • config 读写
  • credentials validate
  • channel enabled 切换
  • WeChat / WhatsApp 登录流程
  • target 目录发现
  • gateway reload / restart 调度

也就是说,消息频道域在 ClawX 中是“本地 Host API 优先”的能力,而不是依赖远端 API 的薄代理。

2.6 配置持久化模型

ClawX 的配置核心语义不是“频道只有一条 token”而是

  • 一个频道类型可有多个账号
  • defaultAccount 是路由与展示的重要字段
  • 普通频道使用 accounts.<accountId> 多账号结构
  • 某些 strict-schema channel 仍需扁平写法
  • 默认账号配置会镜像到 channel 顶层
  • 旧 flat 结构仍然兼容
  • 绑定关系与频道配置共享同一份配置语义

这对 zn-ai 的启示是:

  • 需要先定义消息频道的持久化模型,再谈 UI。
  • 如果只补页面而不补多账号配置模型,后面会反复返工。

2.7 Gateway 与 Diagnostics

ClawX 的运行态处理有三个关键点:

  1. channels.status 不等于“纯连接态”
    • 会结合 running
    • lastError
    • recent activity
    • probe 结果
  2. 并非所有 channel save 都能通过热 reload 收敛
    • 很多频道命中 FORCE_RESTART_CHANNELS
  3. degraded != stopped
    • gateway 仍在运行时也可能因为 health timeout 被标成 degraded

迁移到 zn-aiGateway 状态与频道状态不要混为一谈。

2.8 测试基线

ClawX 的消息频道测试不是只测接口返回,而是测整条用户链路:

  • unit
    • channel routes
    • channel config
    • channel status
    • channels page
  • e2e
    • binding regression
    • account ID validation
    • account persistence
    • health diagnostics

这意味着 zn-ai 迁移计划必须从一开始就带测试分工,不能把测试留到最后补。

3. zn-ai 当前现状

3.1 已有能力

zn-ai 当前已经具备以下基础:

  1. 独立 /channels 路由与侧边栏入口
  2. 频道页可拉取 /api/channels/accounts
  3. 频道页已支持:
    • 频道级归属
    • 账号级归属
  4. 本地已有:
    • /api/channels/accounts
    • /api/channels/targets
    • /api/channels/binding
  5. electron/utils/channels.ts 已能做:
    • selected channel 归一化
    • channel/account 分组
    • target 候选构建
    • 与 Cron 历史目标复用
  6. agentsStore 已保存:
    • channelOwners
    • channelAccountOwners
  7. Agents 页已经把 Channels 视为归属写入口

3.2 当前最大缺口

相对于 ClawXzn-ai 目前缺少的不是某一个按钮,而是整个消息频道域的“控制面”:

  1. 没有 supported channels 目录区
  2. 没有 ChannelConfigModal
  3. 没有账号新增 / 编辑 / 删除链路
  4. 没有默认账号切换
  5. 没有 channel enabled / disabled 语义
  6. 没有 credentials validate
  7. 没有 plugin install / QR login 流程
  8. 没有 Gateway 健康横幅与 diagnostics
  9. 没有 ClawX 那套收敛刷新机制
  10. /api/channels/targets 仍优先走 upstream而不是本地闭环

因此当前 zn-ai/src/pages/Channels/index.tsx 更像“归属控制页”,而不是“消息频道控制台”。

3.3 可复用资产

迁移时不需要全部推倒重来,以下内容建议保留并扩展:

  • zn-ai/src/pages/Channels/index.tsx
    • 现有页面容器
    • refresh / error / feedback 壳
  • zn-ai/electron/api/routes/channels.ts
    • 现有 binding 与 catalog 路由骨架
  • zn-ai/electron/utils/channels.ts
    • 目录归一化
    • target 候选生成
  • zn-ai/electron/utils/agent-config.ts
    • channelOwners
    • channelAccountOwners
  • zn-ai/src/stores/agents.ts
    • runtime changed 刷新链路
  • zn-ai 现有 router / sidebar / i18n 基础

4. 迁移原则

4.1 功能对齐 ClawX存储实现适配 zn-ai

不建议机械复制 ClawX 的 ~/.openclaw/openclaw.json 存储方式。

更适合 zn-ai 的方式是:

  1. 交互、API 语义、运行态策略对齐 ClawX
  2. 底层存储适配 zn-ai 当前 userData 模式
  3. 需要兼容 OpenClaw runtime 的字段时,优先采用兼容 schema

建议方案:

  • 新增 channels.json 作为频道配置真相源
  • agents.json 继续保存 Agent 域信息
  • Phase 1 先保留 channelOwners / channelAccountOwnersagents.json
  • Phase 3 再评估是否合并成统一 runtime-config.json

这样可以先拿到功能对齐,再决定是否做配置域收敛。

4.2 Host API 以本地优先为原则

消息频道迁移完成后,zn-ai 不应该继续把关键频道能力优先转发到 upstream。

最低要求:

  • /api/channels/accounts 本地完成
  • /api/channels/targets 本地完成
  • /api/channels/config* 本地完成
  • diagnostics 本地完成

否则 UI 与 runtime 的一致性会很差。

4.3 维持页面职责边界

迁移后依然保持:

  • Agents
    • 展示摘要
    • 提供跳转入口
  • Channels
    • channel/account 配置与绑定唯一写入口
  • Cron
    • 消费 channel/account/target 目录

不要把 Channels 的写操作再反向塞回 Agents 页。

5. 推荐的目标文件映射

ClawX 参考 zn-ai 目标
src/pages/Channels/index.tsx src/pages/Channels/index.tsx 扩展为控制台
src/components/channels/ChannelConfigModal.tsx 新增 src/components/channels/ChannelConfigModal.tsx
src/types/channel.ts 新增 src/lib/channel-meta.ts 或扩展 src/lib/channel-types.ts
electron/api/routes/channels.ts 扩展 electron/api/routes/channels.ts
electron/utils/channel-config.ts 新增 electron/utils/channel-config.ts
electron/utils/channel-status.ts 新增 electron/utils/channel-status.ts
electron/utils/wechat-login.ts / whatsapp-login.ts 新增 electron/utils/channel-integrations/*
electron/utils/plugin-install.ts 新增 electron/utils/channel-plugin-install.ts
tests/unit/channels-page.test.tsx 新增 tests/unit/channels-page.test.tsx
tests/e2e/channels-*.spec.ts 新增 tests/e2e/channels-*.spec.ts

6. 分阶段迁移计划

Phase 0模型冻结与接口清单

目标:

  • 先冻结频道域模型,避免 UI 和后端分头实现后再返工。

交付:

  1. 设计 channels.json 结构
    • channel type
    • accounts
    • defaultAccountId
    • enabled
    • metadata
  2. 明确 binding 真相源暂时仍在 agents.json
  3. 明确 channel meta schema
    • name
    • description
    • connectionType
    • configFields
    • instructions
    • docsUrl
    • isPlugin
  4. 列出本地 Host API 终态清单

完成标准:

  • 频道配置模型定稿
  • route 清单定稿
  • 前后端字段命名定稿

Phase 1后端基础设施对齐

目标:

  • 先补齐本地配置读写与目录构建,让前端有可依赖的数据面。

交付:

  1. 新增 electron/utils/channel-config.ts
  2. 扩展 electron/api/routes/channels.ts
    • GET /api/channels/accounts
    • GET /api/channels/config/:type
    • POST /api/channels/config
    • DELETE /api/channels/config/:type
    • PUT /api/channels/default-account
    • PUT /api/channels/config/enabled
  3. /api/channels/targets 收回本地优先
  4. accounts 视图同时拼接:
    • channel config
    • agent binding
    • runtime snapshot

完成标准:

  • zn-ai 本地已能维护多账号频道配置
  • 默认账号切换可用
  • 无需 upstream 也能拿到 targets

Phase 2运行时与诊断链路对齐

目标:

  • 把 ClawX 的 runtime 行为补进来,而不是只有配置文件。

交付:

  1. 新增 electron/utils/channel-status.ts
  2. 增加 credentials validate
  3. 增加 diagnostics snapshot 与 gateway health summary
  4. 增加 gateway reload / restart 策略
  5. 引入 QR / plugin channel 的集成层
    • WeChat
    • WhatsApp
    • 其他 plugin channel 预留
  6. 在 runtime changed 里补齐:
    • channels
    • channel-targets
    • agents

完成标准:

  • 配置保存后能正确触发 reload / restart
  • 页面可感知 degraded / unresponsive
  • diagnostics 可复制 / 展开

Phase 3前端页面与弹窗对齐

目标:

  • zn-ai/channels 从绑定页升级成控制台。

交付:

  1. 重构 src/pages/Channels/index.tsx
    • 标题区
    • Refresh
    • 健康横幅
    • diagnostics 面板
    • configured groups
    • supported channels
  2. 新增 src/components/channels/ChannelConfigModal.tsx
    • 类型选择
    • token 配置
    • QR 流程
    • accountId 编辑与校验
    • 预加载已有配置
  3. 引入前端 channel meta schema
  4. 引入收敛刷新策略
    • gateway:channel-status
    • gateway running 过渡
    • 删除后延迟刷新
  5. 补消息频道相关 i18n 文案

完成标准:

  • 视觉结构与 ClawX 接近
  • 新增 / 编辑 / 删除 / 绑定 / 刷新 / 诊断链路闭环

Phase 4回归测试与联调收口

目标:

  • 在 parity 接近完成后补齐防回归能力。

交付:

  1. unit tests
    • channel routes
    • channel config
    • channel status
    • channels page
  2. e2e tests
    • 新增账号默认不自动绑定
    • 非 canonical accountId 被拦截
    • 编辑已有账号保持配置值
    • diagnostics 复制 / 展开 / restart
  3. 更新迁移文档与 smoke checklist

完成标准:

  • 关键回归路径有自动化覆盖
  • 频道页不再依赖人工回归

7. Sub-agent 数量估算与分工建议

7.1 分析阶段建议3 个 sub-agent

分析阶段建议 3 个 sub-agent正好对应这次拆法

  1. Renderer Explorer
    • 负责 ClawX 页面 IA、弹窗、事件收敛与前端测试
  2. Main Process Explorer
    • 负责 ClawX routes、config、gateway、diagnostics、QR / plugin 流程
  3. Gap Explorer
    • 负责 zn-ai 现状、可复用模块与差距评估

这样能最快把“前端长什么样”“后端怎么跑”“zn-ai 现在到哪一步了”三件事拆开。

7.2 实施阶段建议5 个 sub-agent结构性对齐基线

真正进入开发阶段,建议 5 个 sub-agent已经接近并行上限再多会明显增加冲突成本。

Agent 1Channels 页面壳与 Diagnostics UI

负责文件:

  • src/pages/Channels/index.tsx
  • src/components/channels/ChannelDiagnosticsPanel.tsx
  • src/components/channels/ChannelGroupCard.tsx

职责:

  • 页面 IA
  • configured / supported 列表
  • health banner
  • diagnostics 展开与复制
  • 页面级收敛刷新

Agent 2ChannelConfigModal 与前端 schema / i18n

负责文件:

  • src/components/channels/ChannelConfigModal.tsx
  • src/components/channels/*
  • src/lib/channel-meta.ts
  • src/lib/channel-types.ts
  • src/i18n/messages.ts 或新增 locale 文件

职责:

  • 类型选择
  • token / QR 表单
  • accountId 编辑校验
  • docs / instructions / badge
  • 文案与 schema 收敛

Agent 3配置持久化与 Host API 核心

负责文件:

  • electron/api/routes/channels.ts
  • electron/utils/channel-config.ts
  • electron/utils/agent-config.ts

职责:

  • config CRUD
  • default account
  • enabled / disabled
  • binding 与视图拼装
  • canonical / legacy accountId 处理

Agent 4Runtime / Gateway / Targets / Channel Integrations

负责文件:

  • electron/utils/channel-status.ts
  • electron/utils/channels.ts
  • electron/main.ts
  • electron/gateway/**
  • electron/utils/channel-integrations/*

职责:

  • local targets
  • gateway health summary
  • reload / restart 策略
  • runtime 事件广播
  • QR / plugin channel 集成

Agent 5测试与联调收口

负责文件:

  • tests/unit/**
  • tests/e2e/**
  • docs/**

职责:

  • 建单测 / E2E 基线
  • 做回归矩阵
  • 跟进 smoke checklist
  • 收敛文档和验收口径

7.3 推荐执行顺序

建议顺序:

  1. Agent 3 与 Agent 4 先行
  2. Agent 2 在 schema 稳定后进入
  3. Agent 1 在 API 能返回完整视图后进入
  4. Agent 5 全程跟进,但在 Phase 3 后集中补全

原因:

  • 消息频道功能是典型的“后端语义先行”场景。
  • 如果没有 config 模型、runtime 状态和 targets 本地化,前端很容易做成半成品。

7.4 完全对齐 ClawX 的 sub-agent 数量估算

如果目标从“结构性对齐”提升到“功能与运行时行为尽量完全对齐 ClawX”建议按“不包含主控 Codex”的口径重新估算 sub-agent 数量。

建议口径如下:

  1. 最小编制:5 个 sub-agent
    • 适合完成页面结构、核心 Host API、多账号配置、基础 diagnostics
    • 风险是 QR / plugin channel、target 目录发现、自动化测试会相互挤压
  2. 推荐编制:7 个 sub-agent
    • 适合并行推进后端配置、Host API、runtime/gateway、频道集成、前端控制台、弹窗/i18n、测试收口
    • 这是“期望完全对齐 ClawX”时最均衡的方案
  3. 峰值编制:8 个 sub-agent
    • 仅建议在 Phase 2 到 Phase 4 短时启用
    • 用于把“核心 token 类 channel 集成”和“QR / plugin channel 集成”拆成两个独立实施包

结论:

  • 如果只是完成可演示版本,5 个 sub-agent 足够。
  • 如果目标是尽量完全对齐 ClawX,推荐采用 7 个 sub-agent。
  • 如果要求在较短周期内把 connector 细节与测试一起收口,峰值可以提升到 8 个 sub-agent但不建议长期保持。

7.5 完全对齐场景下的推荐分工

推荐编制:7 个 sub-agent + 1 个主控 Codex。

主控 Codex 职责:

  • 维护总计划
  • 冻结接口契约
  • 处理跨 agent 冲突
  • 合并阶段成果
  • 做最终验收与回归判断

Agent A配置模型与持久化 Owner

负责范围:

  • electron/utils/channel-config.ts
  • electron/utils/agent-config.ts 中与 channelOwners / channelAccountOwners 交界的部分
  • channels.json 或等价配置模型定义

核心任务:

  • 定义多账号配置模型
  • 定义 defaultAccountId
  • 定义 enabled
  • 定义 legacy accountId / canonical accountId 兼容规则
  • 定义配置读写与删除语义

交付件:

  • 本地频道配置真相源
  • config CRUD 基础能力
  • 配置 schema 文档

Agent BHost API 与视图拼装 Owner

负责范围:

  • electron/api/routes/channels.ts
  • electron/api/router.ts
  • electron/main.ts 中 Host API 优先级分流逻辑

核心任务:

  • 扩展 /api/channels/accounts
  • 扩展 /api/channels/config/:type
  • 扩展 /api/channels/config
  • 扩展 /api/channels/default-account
  • 扩展 /api/channels/config/enabled
  • 收回 /api/channels/targets 的本地优先权

交付件:

  • 完整本地 channels Host API
  • 视图层所需的统一返回结构
  • upstream fallback 清理方案

Agent CRuntime / Gateway / Diagnostics Owner

负责范围:

  • electron/utils/channel-status.ts
  • electron/gateway/**
  • electron/main.ts
  • diagnostics 相关 route / util

核心任务:

  • 构建 channel runtime status 推断逻辑
  • 接入 gateway health summary
  • 定义 reload / restart 策略
  • 广播 channels / channel-targets / agents runtime event
  • 提供 diagnostics snapshot

交付件:

  • 页面可消费的 runtime health 数据
  • 配置保存后的收敛刷新能力
  • diagnostics / restart 链路

Agent D频道集成 Owner

负责范围:

  • electron/utils/channel-integrations/*
  • electron/utils/wechat-login.ts
  • electron/utils/whatsapp-login.ts
  • electron/utils/channel-plugin-install.ts
  • electron/utils/channels.ts 中与远程目录发现相关的逻辑

核心任务:

  • 对齐 WeChat / WhatsApp 登录流程
  • 对齐 plugin install / detect 流程
  • 对齐 credentials validate
  • 对齐 target 目录发现
  • 梳理各 channel 的 connectionType 与特殊字段规则

交付件:

  • connector 能力矩阵
  • QR / plugin channel 接入层
  • channel-specific validate / target discovery

说明:

  • 如果进入峰值 8 个 sub-agent 模式,优先把 Agent D 拆成两个:
  • D1 负责 Telegram / Discord / Feishu / QQ Bot 等 token 类 channel
  • D2 负责 WeChat / WhatsApp / DingTalk / WeCom 等 QR / plugin 类 channel

Agent EChannels 控制台页面 Owner

负责范围:

  • src/pages/Channels/index.tsx
  • src/components/channels/ChannelDiagnosticsPanel.tsx
  • src/components/channels/ChannelGroupCard.tsx

核心任务:

  • 对齐标题区与 refresh
  • 对齐 configured / supported 双区块
  • 对齐 health banner
  • 对齐 diagnostics 展开 / 复制
  • 对齐删除确认与收敛刷新体验

交付件:

  • ClawX 风格的频道控制台页面壳
  • 配置组卡片与账号行展示
  • diagnostics UI

Agent FChannelConfigModal / 前端 schema / i18n Owner

负责范围:

  • src/components/channels/ChannelConfigModal.tsx
  • src/components/channels/*
  • src/lib/channel-meta.ts
  • src/lib/channel-types.ts
  • src/i18n/messages.ts 或拆分 locale 文件

核心任务:

  • 对齐 channel meta schema
  • 对齐 ChannelConfigModal
  • 对齐 token / QR / docs / instructions
  • 对齐 accountId 编辑与校验
  • 对齐频道名称、badge、文案和提示语

交付件:

  • 可复用的 channel meta schema
  • 可测试的配置弹窗
  • 对齐 ClawX 的文案与交互层

Agent G测试与联调收口 Owner

负责范围:

  • tests/unit/**
  • tests/e2e/**
  • docs/**

核心任务:

  • 为 route / config / status / page 建立单测
  • 建立 binding / diagnostics / account validation / persistence 的 E2E
  • 维护 smoke checklist
  • 跟踪阶段性回归

交付件:

  • 自动化回归基线
  • 联调问题清单
  • 阶段验收记录

7.6 按波次推进的开发安排

为了减少冲突,建议按 4 个波次推进,而不是 7 个 sub-agent 同时全量开工。

Wave 0契约冻结

参与:

  • 主控 Codex
  • Agent A
  • Agent B
  • Agent C

目标:

  • 冻结 channels.json 模型
  • 冻结 Host API 响应结构
  • 冻结 runtime event topic
  • 冻结前端 channel meta schema

产出:

  • 字段命名表
  • route contract
  • runtime contract

Wave 1数据面与本地 Host API

参与:

  • Agent A
  • Agent B
  • Agent C

目标:

  • 让本地能完整提供 accounts / config / default-account / enabled / targets
  • 去掉 /api/channels/targets 对 upstream 的优先依赖

进入下一波条件:

  • 前端已能拿到稳定的 accounts view
  • target 列表本地可用
  • default account 读写闭环

Wave 2运行时与 channel 集成

参与:

  • Agent C
  • Agent D

目标:

  • 接通 diagnostics
  • 接通 reload / restart
  • 接通 validate
  • 接通 QR / plugin channel

进入下一波条件:

  • 配置保存后能触发正确的 runtime 收敛
  • 至少核心 channel 流程能跑通

Wave 3页面与弹窗对齐

参与:

  • Agent E
  • Agent F

目标:

  • 对齐 ClawX 页面结构
  • 对齐 ChannelConfigModal
  • 对齐 supported channels 与 configured groups
  • 对齐删除、刷新、诊断与弹窗交互

进入下一波条件:

  • 消息频道控制台可端到端演示
  • 页面层不再依赖临时 mock 字段

Wave 4测试收口与完全对齐验收

参与:

  • Agent G
  • 主控 Codex
  • 视需要回拉 Agent C / D / E / F 修复回归

目标:

  • 补齐 unit / e2e
  • 做 channel parity checklist
  • 收敛剩余差距

最终验收以两份清单为准:

  1. 功能清单
    • 是否完全覆盖 ClawX 页面、Host API、diagnostics、runtime、绑定、多账号、默认账号、modal、targets
  2. channel 清单
    • 是否覆盖 ClawX 当前支持的 channel 类型与对应连接方式

7.7 并行边界与冲突规避规则

为了让 sub-agent 真正能推进开发,而不是互相打架,建议明确以下边界:

  1. Agent A 不直接改前端文件
  2. Agent E / F 不直接改 electron/api/routes/channels.ts
  3. Agent C 不直接改 ChannelConfigModal
  4. Agent G 默认不改生产代码,除非明确接手缺陷修复
  5. electron/main.ts 只允许 Agent B 与 Agent C 协调改动
  6. src/lib/channel-types.ts 只允许 Agent F 主导,其他 agent 通过契约消费
  7. 如果启用峰值 8 个 sub-agent必须把 D1 / D2 的 channel 列表先写死,避免重复改同一 connector

7.8 当前推进状态2026-04-18

本轮已经按推荐编制的一部分开始落地,当前实际分工与产出如下。

已投入的 sub-agent

  1. 主控 Codex
    • 负责总装、接口收敛、页面整合、验证与文档回写
  2. Agent B/C 合流实施
    • 已完成 channel-config.tschannels.tsagent-config.tsroutes/channels.tsroutes/gateway.tsmain.ts 的首轮闭环
  3. Agent F
    • 已完成 src/components/channels/*src/lib/channel-types.tssrc/lib/channel-meta.tssrc/i18n/messages.ts 的首轮 schema 与弹窗骨架
  4. Agent E
    • 已完成 src/pages/Channels/index.tsx 的控制台化改造首版
  5. Agent G
    • 已完成 tests/channels.test.tsvitest 基础接线与首批 util 测试

当前等价于已经启用 5 个实施向 sub-agent / owner 角色;如果继续追求完全对齐 ClawX下一轮建议补齐 Agent D并在测试压力上升时扩展到推荐编制 7 个。

当前已完成事项

  1. Wave 1 基本完成
    • 本地 channels.json 配置真相源已经落地
    • config/default-account/enabled/delete/targets 本地 Host API 已闭环
    • /api/channels/targets 已切回本地优先
  2. Wave 2 部分完成
    • gateway health summary 已接入
    • channel status 推断已接入
    • runtime changed topic 已补到 channels/channel-targets/agents
  3. Wave 3 已启动并形成首版可用页面
    • Channels 页已升级为“支持的频道 + 已配置频道 + 默认账号 + Agent 绑定 + Gateway 健康”的控制台结构
    • ChannelConfigModal 已能承接 channel schema、账号新增、账号编辑和保存
    • 频道矩阵已从业务占位类型切换为 ClawX channel meta

当前仍未完成的差距

  1. diagnostics snapshot 仍未补齐复制 / 展开面板
  2. credentials validate 尚未补齐
  3. WeChat / WhatsApp 的 QR 登录事件链路尚未接入
  4. plugin install / detect 仍未接入
  5. 页面级单测与 E2E 还缺失
  6. 删除后的延迟收敛刷新、gateway 运行态过渡探测,仍弱于 ClawX

下一轮 sub-agent 投入建议

如果继续按“完全对齐 ClawX”推进建议下一轮这样补齐

  1. Agent D
    • 专注 QR / plugin / validate / target discovery
  2. Agent G
    • 补 channels page unit test 与 diagnostics / binding / account regression E2E
  3. 主控 Codex
    • 继续负责跨层集成,把 diagnostics 面板、延迟收敛刷新和 page controller 拆分补上

8. 关键风险与决策点

  1. zn-ai 当前 /api/channels/targets 仍有 upstream 优先逻辑
    • 这是本次迁移必须消除的分叉点
  2. 是否立即统一 agents.jsonchannels.json
    • 建议先分开Phase 3 再评估是否合并
  3. plugin / QR channel 是否首批全部上线
    • 建议先完成架构支持,再按频道类型灰度
  4. reload 与 restart 边界
    • 建议一开始保守,优先正确性
  5. canonical accountId 与 legacy 兼容
    • 必须在 Phase 1 明确规则,否则 UI 与后端会反复打架
  6. WeChat / WhatsApp 的状态目录清理
    • 删除与取消登录要加保护,避免误删

9. 验收标准

迁移完成后,至少满足以下标准:

  1. zn-ai/channels 具备 ClawX 同级别页面结构
  2. 能本地完成频道与账号配置,不依赖 upstream 才能工作
  3. 支持 default account、多账号配置、binding、targets
  4. 支持 gateway diagnostics 与 restart
  5. 关键配置保存后能正确收敛到 runtime 状态
  6. Agents 页继续只展示摘要,不回收写操作
  7. 自动化测试覆盖新增账号、校验、诊断、绑定、编辑回归

10. 本轮建议结论

最合理的推进方式不是“一口气把 ClawX 代码整体搬过来”,而是:

  1. 对齐 ClawX 的交互与 API 语义
  2. 复用 zn-ai 已有的本地 route、agent store、channel utils
  3. zn-ai 内补一个真正的频道配置与运行时域
  4. 7 个 sub-agent 作为完全对齐的推荐编制,按波次推进,先后端、再前端、最后测试收口
  5. 若要压缩周期,可在 Phase 2 到 Phase 4 短时提升到峰值 8 个 sub-agent

这样既能尽量对齐 ClawX又不会把 zn-ai 现有结构全部打散。