Files
zn-ai/docs/ClawX-Agents-Migration-Plan.md
duanshuwen ee72cf7261 feat: refactor HomePage to integrate agents store and update related components
feat: add runtime event handling for providers in ProvidersSection

feat: update routing to include Channels and Agents pages

feat: extend route types and navigation items for Channels and Agents

feat: implement agents store for managing agent data and interactions

fix: update chat store to utilize agents store for agent-related functionality

chore: export agents store from index

fix: enhance runtime types for better event handling

fix: update Vite config to handle dev server URL correctly
2026-04-18 14:56:32 +08:00

547 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ClawX Agents 功能迁移到 zn-ai 的更新版计划
## 1. 背景与本次修正
本版文档基于两条新的约束重新整理:
- 最新 Agents 参考图已经明确,页面信息架构必须回到 `ClawX` 的列表主视图。
- 开发需求已经明显变化,后续实现必须严格对齐 `ClawX` Agents 功能,而不是继续延展一版“更强的 Models/Agent 控制台”。
这意味着上一版计划里最重要的一条判断需要作废:
- 上一版曾把 `zn-ai``/agents` 页面导向“列表 + 固定右侧详情”的控制台详情页。
- 这个方向与最新参考图和 `ClawX` 真实交互不一致,后续不应继续推进。
本轮统一后的基线结论如下:
1. `/agents` 必须保持独立路由与侧边栏入口,不能再并回 `/models`
2. 页面 IA 必须切回 `ClawX` 的“列表主视图”。
3. Agents 页主内容只保留卡片摘要、刷新、新增和设置入口,不把设置详情常驻在主布局中。
4. `Add Agent` 必须是独立弹窗,且字段极简,只收:
- `name`
- `inheritWorkspace`
5. Settings 详情建议改为 `modal``sheet`,而不是主布局双栏右侧 inspector。
6. Channels 继续作为 channel/account 归属绑定的唯一写入口。
7. Models 继续负责 Provider、默认模型、Usage不承载 Agent 实体管理。
8. Home/Chat/Cron 继续作为 Agents 域的消费页面,不反向定义 Agents 页形态。
一句话总结:
- 当前 `zn-ai` 已经补上了不少 Agents 基础设施。
- 下一轮的重点不再是“有没有 `/agents`”,而是“把 `/agents` 的页面 IA、交互层级和职责边界重新拉回 `ClawX`”。
## 2. ClawX 基线:严格对齐什么
### 2.1 路由入口与页面装配
`ClawX` 的 Agents 是独立域,不是 Models 的子视图。
基线文件主要集中在:
- `ClawX/src/pages/Agents/index.tsx`
- `ClawX/src/pages/Channels/index.tsx`
- `ClawX/src/stores/agents.ts`
- `ClawX/electron/api/routes/agents.ts`
它的装配方式很明确:
- 侧边栏有独立 `Agents` 入口。
- `/agents` 是独立页面。
- `/models``/agents` 是并列关系,不混用页面职责。
### 2.2 页面 IA列表主视图而不是控制台详情页
`ClawX` 的 Agents 首页首先是一个列表工作台,不是一个主布局双栏的详情编辑器。
页面骨架应理解为:
1. 顶部标题区
- Title
- Subtitle
- `Refresh`
- `Add Agent`
2. Warning / Error banner
3. Agent card 列表
4. 卡片上的 `Settings` / `Delete` 入口
5. 二级弹层
- `AddAgentDialog`
- `AgentSettingsModal`
- `AgentModelModal`
明确不要做的事:
- 不要在页面右侧常驻一个大号设置面板。
- 不要把“选中某个 agent 后右边出现详情”的双栏结构作为主交互。
- 不要把创建、命名、模型、绑定全部平铺到首页主布局。
- 不要让卡片列表承担复杂表单职责。
这也是本轮文档更新里最核心的 IA 修正。
### 2.3 Add Agent 弹窗:字段与交互
`ClawX``AddAgentDialog` 很克制,创建阶段只做最小信息采集。
建议严格对齐以下字段与交互:
- 标题与简短说明
- `name` 输入框
- 必填
- 非空后才能提交
- `inheritWorkspace` 开关
- 含义是“是否继承主 Agent 工作区”
- 默认保持轻量,不在创建弹窗里叠加更多高级参数
- `Cancel`
- `Save / Create`
创建阶段明确不应该出现的字段:
- Provider 选择
- Model override
- Channel binding
- Workspace 路径高级配置
创建成功后的回流建议也对齐 `ClawX`
- 关闭弹窗
- 回到列表主视图
- 列表出现新卡片
- 可给 toast但不要自动把用户带进重型详情页
### 2.4 Agents 首页卡片:只保留摘要与设置入口
`ClawX` 的卡片不是“迷你详情页”,而是摘要卡片。
建议卡片层面保留这些信息:
- 头像 / icon
- `name`
- `default` badge
- 模型摘要
- 当前模型
- 是否继承默认模型
- 频道归属摘要
- 只展示结果,不提供写操作
建议卡片层面只保留这些动作:
- `Settings`
- `Delete`
不建议放在卡片正面的内容:
- 大段 workspace / agentDir / sessionKey 技术细节
- channel/account 绑定下拉
- provider/model 大表单
- 右侧伴随卡片选中状态的持久编辑区
如果需要展示更多运行时信息,优先放进设置弹层,而不是挤进首页卡片。
### 2.5 设置详情:建议 modal / sheet而不是主布局双栏
`ClawX` 的设置入口是二级层级,不是首页主布局的一部分。
因此在 `zn-ai` 中更推荐:
- 桌面端使用 `modal``side sheet`
- 移动端使用全屏 `sheet` / `dialog`
不推荐继续保留当前这类形态:
- 左侧列表
- 右侧常驻详情 inspector
- 页面刷新或切换 agent 时整块右栏一起抖动
原因有三点:
1. 不符合 `ClawX` 的交互层级。
2. 会把“列表主视图”错误拉成“详情驱动”页面。
3. 不利于后续继续保持 Cards 摘要化。
Settings 弹层建议承载的内容:
- Identity
- 名称
- Agent ID
- Model
- provider account
- model ref
- inherit default model
- 预览当前 effective provider / model
- Channel binding summary
- 只读展示当前 channel/account 归属
- 提供“去 Channels 管理”的入口
如果仍需要二级模型编辑体验,可以继续保留嵌套的 `AgentModelModal`,但它依然属于弹层体系,而不是首页主布局。
### 2.6 与 Channels / Models 的职责边界
这是本轮必须写死的边界。
#### Agents 页负责什么
- Agent 实体列表
- 新建 / 删除 / 重命名
- per-agent model override
- 归属摘要展示
- 设置入口
#### Agents 页不负责什么
- channel/account 绑定写操作
- provider account CRUD
- 默认 provider 设定
- usage 历史查询主视图
#### Channels 页负责什么
- channel 级归属
- account 级归属
- binding 写操作唯一入口
- routing fallback 关系说明
#### Models 页负责什么
- provider account CRUD
- default provider / default model
- provider catalog / vendors
- usage history
- provider 视角的 models snapshot
边界落地后的页面关系应该是:
- `Agents` 看 Agent 和摘要
- `Channels` 改归属
- `Models` 管 Provider
### 2.7 与 Home / Chat / Cron 的联动
`ClawX` 的 Agents 不孤立存在,它是多个页面共享的域。
最关键的消费关系如下:
- Home / Chat
- 当前 Agent 名称
- 当前 Agent 模型
- 会话切换与发送路由
- Cron
- 任务归属 `agentId`
- delivery channel / account / target
- 编辑时展示 Agent 与 delivery 摘要
因此后续实现时要记住:
- Home/Chat/Cron 是 Agents 域的消费者。
- 它们的联动验证很重要。
- 但它们不应该反过来决定 `/agents` 首页长什么样。
## 3. zn-ai 当前现状:已经落地的部分与剩余偏差
### 3.1 已经落地的部分
与上一版文档相比,`zn-ai` 当前已经不是“Agents 完全缺失”的状态。
已经具备的基础包括:
1. 独立 `/agents` 路由与侧边栏入口
2. `agentsStore`
3. 本地 `/api/agents`
4. 本地 `/api/channels/accounts`
5. 本地 `/api/channels/targets`
6. Channels 页的 channel/account 归属写操作
7. Cron 页的:
- `agent`
- `channel`
- `account`
- `target`
8. provider runtime sync 与 gateway reload/restart 链路
9. Home 聊天顶部 Agent 切换与发送前模型校验
换句话说:
- “Agents 域基础设施缺失”已经不再是主问题。
- “UI/IA 没有回到 ClawX 基线”才是当前最主要的剩余问题。
### 3.2 仍然存在的关键偏差
尽管能力已经补了不少,当前 `zn-ai` 仍然和 `ClawX` 有几个显著偏差。
#### 偏差 1页面仍然太像“详情页”
当前实现已经是“列表 + 右侧设置区”的形态,这比最早的 `/agents -> /models` 已经前进很多,但仍然不是 `ClawX` 的列表主视图。
需要明确回退:
- 去掉“固定右侧详情”作为主布局
- 恢复“卡片列表 + 设置弹层”
#### 偏差 2Add Agent 还是 prompt / confirm 式流转
当前实现仍然偏命令式:
- `prompt` 输名字
- `confirm` 选 inherit workspace
这不符合 `ClawX` 的统一弹层体验,也不利于后续继续扩展创建态文案和校验。
#### 偏差 3Agents 页承担了过多常驻编辑语义
当前页面把:
- identity
- model
- binding summary
长期固定在主布局中展示,导致首页不再是纯列表。
这会让视觉重心从“列表工作台”滑向“控制台详情页”。
#### 偏差 4需要继续守住 Channels / Models 边界
`zn-ai` 当前的方向整体是对的:
- Channels 已经承担 binding 写操作
- Agents 已经开始只读展示 binding summary
但文档和实现都要继续避免回摆:
- 不要因为 Agents settings 看起来“顺手”,就再把绑定下拉搬回去
- 不要因为 Agents 能改 model就把 provider CRUD 一并塞进 Agents
#### 偏差 5Models Snapshot 仍然不能替代 Agents 页
`/api/models` 当前仍然更接近“provider account 视角的合成 snapshot”不是 Agent 域真相。
因此后续文档、QA 和页面说明都应避免混淆:
- Models Snapshot 只能验证 provider 视角
- Agent override 与 Agent 路由应以 `/api/agents`、Agents 页和 Home/Chat 行为为准
## 4. 新一轮 sub-agent 数量估算与分工
### 4.1 推荐并行规模
按当前代码基础判断,下一轮如果目标是“严格对齐 ClawX Agents UI 与职责边界”,推荐按 `6` 个 sub-agent 并行推进。
这不是为了把任务拆得更碎,而是为了减少 UI / store / local route / cross-page 联动之间的冲突。
但结合 `zn-ai` 当前已经具备的 `/agents` 页面骨架、`agentsStore`、本地 `/api/agents`、Channels 绑定链路,以及这轮需求已经明显收敛到“参考图驱动的 UI / IA 重构”,本轮实际执行建议按 `4` 个 sub-agent 推进更合适:
- `1` 个负责 `Agents` 首页 IA 与视觉重构
- `1` 个负责 `Add Agent / Settings` 弹层与文案收口
- `1` 个负责 store / backend 能力缺口与回归风险核对
- `1` 个负责迁移计划、验收口径和回归说明同步
### 4.2 推荐分工
| sub-agent | 写入范围 | 目标 |
| --- | --- | --- |
| 1 | `src/pages/Agents/**`, `src/router/**`, `src/components/layout/**` | 把 `/agents` 页面 IA 调回列表主视图,保证入口、标题区、刷新、新增和卡片层对齐 ClawX |
| 2 | `src/pages/Agents/**` | 重做 `Add Agent` 弹窗,以及 `Settings modal/sheet``Agent model modal` 的交互层级 |
| 3 | `src/stores/agents.ts`, shared agent types, 页面数据拼装逻辑 | 收口 Agents 页面所需字段,确保卡片摘要、设置详情、只读 binding summary 的数据来源稳定 |
| 4 | `electron/api/routes/agents.ts`, runtime sync 相关实现, `agent-config` | 校验 create / rename / model override / delete 的 runtime sync、reload、restart 语义是否与 UI 新交互一致 |
| 5 | `src/pages/Channels/**`, `src/pages/Models/**`, `src/pages/Home/**`, `src/pages/Cron/**` | 守住 Channels/Models/Home/Cron 的职责边界,避免 Agents IA 回正后引入新耦合 |
| 6 | `docs/**`, smoke tests, regression notes | 更新迁移文档、手工冒烟路径、验收标准和回归清单 |
### 4.3 资源不足时的降配方案
如果并行资源不足,可以降到 `4` 个 sub-agent但不要把下面两类工作混在一个人身上
- 首页 IA 重构
- runtime / route / sync 硬逻辑
推荐合并方式:
- `1 + 2`
- `5 + 6`
### 4.4 本轮实际执行分工
结合当前会话的资源与改动范围,本轮按 `4` 个 sub-agent 推进:
| sub-agent | 本轮职责 | 产出 |
| --- | --- | --- |
| A | 参考图与 `ClawX` IA 差异分析 | 列表主视图、卡片字段、弹层层级修正建议 |
| B | backend / store 能力核对 | 确认 `createAgent(inheritWorkspace)`、rename、model override、delete 是否足够支撑新 UI |
| C | 迁移计划文档更新 | 把“控制台详情页”基线修正为“ClawX 列表主视图” |
| D | i18n 与页面文案收口 | 让标题、副标题、添加弹窗和设置语义贴近参考图与 ClawX 心智 |
## 5. 分阶段实施建议
本轮建议不再按“从零搭 Agents 域”的顺序推进,而改成“在已落地能力上收口 UI 和边界”。
### 5.1 阶段 0冻结新基线
目标:
- 明确上一版“控制台详情页 / 双栏布局”判断失效
- 团队统一采用 `ClawX` 列表主视图基线
产出:
- 更新后的本计划文档
- 统一的页面 IA 草图
- 明确的职责边界
验收标准:
- 团队确认 `/agents` 首页不做固定右侧详情栏
- 团队确认 `Add Agent` 只收最小字段
- 团队确认 Channels / Models / Agents 三页边界
预计工作量:
- `0.5`
### 5.2 阶段 1把首页 IA 从双栏拉回列表主视图
目标:
- 先把首页结构改对,再谈细节
建议改动:
- 首页只保留:
- title
- subtitle
- refresh
- add
- banner
- card list
- 去掉常驻右侧 inspector
验收标准:
- `/agents` 首屏看起来就是列表主视图
- 即使不打开任何设置,也能完整浏览所有 Agent 卡片
预计工作量:
- `0.5 ~ 1`
### 5.3 阶段 2补齐 Add Agent 弹窗与设置弹层
目标:
- 把所有二级编辑交互收进 overlay 层
建议改动:
- `Add Agent dialog`
- `name`
- `inheritWorkspace`
- `Agent settings modal / sheet`
- identity
- model
- binding summary
- `Agent model modal`
- provider + model ref
验收标准:
- 创建、重命名、模型覆盖都不再依赖首页双栏
- 桌面和窄屏下的弹层层级都清晰
预计工作量:
- `1 ~ 1.5`
### 5.4 阶段 3收口首页卡片摘要
目标:
- 让首页卡片真正回到摘要视角
建议改动:
- 卡片只保留必要摘要
- workspace / agentDir / sessionKey 等技术细节尽量移入设置层
- hover 动作保持轻量
验收标准:
- 卡片读起来像 `ClawX`
- 首页不出现重型编辑表单
预计工作量:
- `0.5`
### 5.5 阶段 4守住 Channels / Models / Agents 边界
目标:
- 在 UI 回正后,避免功能重新耦合
建议改动:
- Agents settings 里的绑定区继续只读
- “Manage bindings” 统一跳转 `Channels`
- Models 保持 provider / default / usage不接 Agent CRUD
- 默认模型语义留在 ModelsAgent override 语义留在 Agents
验收标准:
- 团队对“去哪改什么”没有歧义
- QA 能明确知道每类问题该在哪页验证
预计工作量:
- `0.5`
### 5.6 阶段 5联动与回归验证
目标:
- 验证 UI 改造没有破坏现有 Agents 域能力
重点验证链路:
1. Agents 创建后Home/Chat 能看到新 Agent
2. Agent model override 更新后Home 发送仍可走通
3. Channels 绑定变更后Agents settings 摘要能反映
4. Cron 里 agent/channel/account/target 仍然可用
5. `/api/channels/targets` 与手工输入兜底都正常
6. 删除 Agent 后 reload/restart 行为仍稳定
预计工作量:
- `1`
## 6. 风险清单
| 风险 | 描述 | 应对 |
| --- | --- | --- |
| 旧判断残留 | 团队继续沿用“右侧详情栏”思路实现后续 UI | 在阶段 0 明确作废旧 IA 结论,并把弹层方案写死 |
| Add Agent 范围膨胀 | 创建弹窗被不断塞入 provider/model/channel 字段 | 规定创建阶段只收 `name + inheritWorkspace` |
| 绑定边界回摆 | 因为 settings 层已有 binding summary顺手加下拉写操作 | Agents 只读展示Channels 保持唯一写入口 |
| Models 语义漂移 | Provider CRUD 再次被拉进 Agents | Models 专注 provider/default/usage不承载 Agent 实体管理 |
| runtime sync 假通过 | UI 保存成功,但真实 runtime 文件或 gateway 状态没同步 | 回归必须覆盖 create / update model / delete 三类动作 |
| Cron targets 体验退化 | 因为 UI 改造误伤 target 自动加载与手输兜底 | 把 `/api/channels/targets` 与手工输入都纳入冒烟清单 |
## 7. 验收重点
严格对齐 `ClawX` 时,验收不要只看“功能能不能点”,还要看“页面是不是回到了正确的形态”。
本轮建议把下面几条列为强验收项:
1. `/agents` 首页是否是列表主视图,而不是双栏详情页
2. `Add Agent` 是否是正式弹窗,而不是 prompt / confirm
3. 首页卡片是否只保留摘要与设置入口
4. Settings 是否是 modal / sheet而不是主布局常驻
5. Agents 是否只读展示 binding summary并把写操作引导到 Channels
6. Models 是否仍然只负责 provider/default/usage
7. Home / Cron 是否继续消费同一份 Agents 域数据
## 8. 最终建议
当前 `zn-ai` 已经把独立 `/agents``agentsStore`、本地 routes、runtime sync、Channels/Cron 联动这些“底座”补得差不多了。
所以下一轮不要再把重心放在“有没有 Agents 能力”,而要放在下面四件事:
1.`/agents` 的页面 IA 严格拉回 `ClawX`
2.`Add Agent` 与 Settings 改成标准弹层体系
3. 把 Agents / Channels / Models 的职责边界写死并落实到 UI
4. 用 Home / Cron / targets / runtime sync 做真实闭环回归
如果这四件事做对,`zn-ai` 的 Agents 才会从“功能拼装完成”真正进入“体验与职责都对齐 ClawX”的阶段。