Skip to content

[P2] Workbench 合同切片:用领域 assembler 收口项目/Agent/市场 prop-bag #1528

Description

@DeliciousBuding

目标

不重写整个 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 核心:

  1. Projects:projectsactiveProjectIdprojectsStatusonActiveProjectChangeonProjectCreateonProjectUpdate
  2. Agents:agentsagentProfilesStatusonAgentCreateonAgentUpdateonAgentDeleteonAgentsRetry
  3. Catalog/market:modelCatalogccSwitchStatusccSwitchProvidersskillMarketItemsskillMarketLoadingmcpMarketItemsmcpMarketLoading

最终命名由实现决定,但建议形成:

  • 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 实现

设计约束

  1. assembler 位于各平台边界或 shared 纯 helper;shared Workbench 不直接读取平台私有 store。
  2. 对象应按领域稳定性划分,而不是按“所有 data / 所有 callbacks”分两包。
  3. 同一 action 的 loading/error/data 必须一起归属,避免状态与动作错配。
  4. 兼容迁移可分两步:先支持新对象并保留 deprecated flat props,再在同一 PR 内完成两个真实 consumer 迁移后删除兼容层;不允许长期双入口。
  5. 测试覆盖缺字段、loading、error、无 callback fallback,以及 Web/Desktop 实际装配。
  6. 本切片完成后,公共顶层 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions