目标
不重写整个 Workbench,先完成一个可验证的领域切片:把 AgentHubWorkbenchProps 中分散的项目、Agent 配置、模型/Skill/MCP 市场数据与动作收拢为少量领域 assembler/controller 对象,降低 Web/Desktop 两个入口的 prop wiring 与遗漏风险。
当前问题
app/shared/src/workbench/AgentHubWorkbenchTypes.ts 的公共 props 合同已接近 50 个字段,混合:
- 平台与会话核心;
- projects 状态与 CRUD;
- agents 状态与 CRUD;
- model catalog / cc-switch;
- Skill/MCP market;
- transcript/message actions;
- 用户、连接、审批等横切状态。
Web 与 Desktop 都直接装配该组件。继续新增功能会扩大入口文件、测试 fixture 和 optional callback 矩阵。
本切片范围
只收口以下相邻领域,不碰 transcript/message/approval 核心:
- Projects:
projects、activeProjectId、projectsStatus、onActiveProjectChange、onProjectCreate、onProjectUpdate;
- Agents:
agents、agentProfilesStatus、onAgentCreate、onAgentUpdate、onAgentDelete、onAgentsRetry;
- Catalog/market:
modelCatalog、ccSwitchStatus、ccSwitchProviders、skillMarketItems、skillMarketLoading、mcpMarketItems、mcpMarketLoading。
最终命名由实现决定,但建议形成:
projectsController / projectsModel
agentsController / agentsModel
catalogModel
每个对象要有明确 required/optional 语义,不能只是把 20 个 props 原样套进一个 Record<string, unknown>。
允许修改
app/shared/src/workbench/AgentHubWorkbenchTypes.ts
app/shared/src/workbench/AgentHubWorkbench.tsx
app/shared/src/workbench/AgentHubWorkbenchHelpers.ts
- 新增
app/shared/src/workbench/*Assembler*.ts / *Controller*.ts
- 对应 shared tests
app/web/src/App.tsx 及其直接 assembler/hooks
app/desktop/src/App.tsx 及其直接 assembler/hooks
- shared/workbench exports
docs/progress/MASTER.md(仅更新该切片)
禁止修改
- Hub/Edge API 合同与后端
- transcript block shape、message action shape、approval flow
- UI 视觉样式和布局
- 一次性把所有 props 改成单个 mega-context
- 新增全局 mutable store 或在 shared 组件内直接抓平台私有 store
- 删除 Desktop/Web 差异化能力
hubClient 实现
设计约束
- assembler 位于各平台边界或 shared 纯 helper;shared Workbench 不直接读取平台私有 store。
- 对象应按领域稳定性划分,而不是按“所有 data / 所有 callbacks”分两包。
- 同一 action 的 loading/error/data 必须一起归属,避免状态与动作错配。
- 兼容迁移可分两步:先支持新对象并保留 deprecated flat props,再在同一 PR 内完成两个真实 consumer 迁移后删除兼容层;不允许长期双入口。
- 测试覆盖缺字段、loading、error、无 callback fallback,以及 Web/Desktop 实际装配。
- 本切片完成后,公共顶层 props 数必须有可量化下降,且不能只是挪到
...rest。
必须运行
cd app
corepack pnpm typecheck
corepack pnpm test
按项目现有命令额外运行:
cd app/web
corepack pnpm typecheck
corepack pnpm build
cd ../desktop
corepack pnpm typecheck
corepack pnpm test
仓库级:
pwsh ./scripts/verify/verify-shared-boundary.ps1
pwsh ./scripts/verify/verify-shared-ui-hubclient.ps1
pwsh ./scripts/verify/verify-shared-barrel.ps1
pwsh ./scripts/verify/verify-coverage-baseline.ps1
git diff --check
完成条件
- 本范围至少收口为 2–3 个有类型的领域对象。
AgentHubWorkbenchProps 顶层字段数明显下降;PR 描述给出 before/after 数量。
- Web 与 Desktop 两个真实 consumer 全部迁移,无长期双合同。
- shared 不新增平台私有依赖,不扩大 hubClient runtime import 面。
- 现有行为、视觉、路由、API 请求保持不变。
- unit/typecheck/build/coverage gate 全绿。
分支建议
git worktree add .worktrees/workbench-domain-assemblers -b refactor/workbench-domain-assemblers origin/master
目标
不重写整个 Workbench,先完成一个可验证的领域切片:把
AgentHubWorkbenchProps中分散的项目、Agent 配置、模型/Skill/MCP 市场数据与动作收拢为少量领域 assembler/controller 对象,降低 Web/Desktop 两个入口的 prop wiring 与遗漏风险。当前问题
app/shared/src/workbench/AgentHubWorkbenchTypes.ts的公共 props 合同已接近 50 个字段,混合:Web 与 Desktop 都直接装配该组件。继续新增功能会扩大入口文件、测试 fixture 和 optional callback 矩阵。
本切片范围
只收口以下相邻领域,不碰 transcript/message/approval 核心:
projects、activeProjectId、projectsStatus、onActiveProjectChange、onProjectCreate、onProjectUpdate;agents、agentProfilesStatus、onAgentCreate、onAgentUpdate、onAgentDelete、onAgentsRetry;modelCatalog、ccSwitchStatus、ccSwitchProviders、skillMarketItems、skillMarketLoading、mcpMarketItems、mcpMarketLoading。最终命名由实现决定,但建议形成:
projectsController/projectsModelagentsController/agentsModelcatalogModel每个对象要有明确 required/optional 语义,不能只是把 20 个 props 原样套进一个
Record<string, unknown>。允许修改
app/shared/src/workbench/AgentHubWorkbenchTypes.tsapp/shared/src/workbench/AgentHubWorkbench.tsxapp/shared/src/workbench/AgentHubWorkbenchHelpers.tsapp/shared/src/workbench/*Assembler*.ts/*Controller*.tsapp/web/src/App.tsx及其直接 assembler/hooksapp/desktop/src/App.tsx及其直接 assembler/hooksdocs/progress/MASTER.md(仅更新该切片)禁止修改
hubClient实现设计约束
...rest。必须运行
按项目现有命令额外运行:
仓库级:
完成条件
AgentHubWorkbenchProps顶层字段数明显下降;PR 描述给出 before/after 数量。分支建议