Skip to content

[P1] 前端:app/shared/src/workbench 独立为第 6 个包(先破循环依赖) #1759

Description

@DeliciousBuding

背景

app/shared 单包 112K LOC,其中 workbench/ 独占 54K、737 文件里的 159 个顶层文件。shared 本应是跨端原语层,却承载了端级 workbench 巨石,导致:

  • app/shared/src/index.ts 再导出 workbench(258-279/358/415-422 行)
  • workbench 反向 import shared 的 ui/transcript/hub 达 72 个文件(双向耦合)
  • shared/ui/MessageSearchPanel.tsxshared/ui/PageErrorBoundary.tsx 又 import workbench

mobile-rn 仅 1 处 import workbench,却被迫把整个巨石打进依赖图。

方案

  1. 先破环(前置,必须):把 shared/ui 里依赖 workbench 的 2 个组件迁到 workbench 侧,或抽成无依赖原语,消除 shared→workbench 反向边。
  2. 新建 app/workbench 包(第 6 个),依赖 shared(单向 workbench→shared)。
  3. 改 web/desktop 从 @agenthub/workbench 直接 import,移除 shared/index.ts 对 workbench 的再导出。
  4. mobile-rn 不再传递依赖 workbench,验证其 bundle 减小。

依赖 / 阻塞

  • 无外部阻塞,但步骤 1 是硬前置;未破环直接搬目录会产生循环依赖,构建必挂。
  • 建议在独立 worktree + 独立分支执行,逐包跑 typecheck。

风险

  • 高:涉及 web+desktop+shared 三包 import 重写;re-export 面广,易漏。
  • 缓解:先加一条"shared 不得 import workbench"的 lint/依赖规则固化方向,再搬迁。

验收

  • app/workbench 成为独立 pnpm 包,shared 不再含 workbench/
  • shared 无任何 import 指向 workbench(加依赖方向 lint 固化)
  • pnpm -r typecheck + web/desktop build 全绿
  • mobile-rn 依赖图不含 workbench,bundle size 有可测下降

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High prioritycleanup-baselineAgentHub cleanup baseline programjavascriptPull requests that update javascript codelane-BParallel lane B

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions