READMESource: main@d1b1b594
项目工作台
设计稿与产品边界见 docs/design.md。
项目工作台是一个兼容普通 DeepSeek Harness Web profile 与 DSH Desktop 的本地 bundle。它会在现有侧边栏旁新增一列全高工作台,以“项目 → 需求组 → 会话”组织原生会话,而不替换侧边栏、会话视图或输入框。
解决的问题
- 一个开发需求通常需要多个会话分别处理分析、实现和验证,而原生会话彼此不共享需求上下文,切换会话时需要重复了解背景和改动。
- 原生侧边栏以工作区和时间顺序展示会话,难以直接看到某个需求的状态、关联会话和未完成工作。
- 为了保留现有开发流程,项目管理能力不能遮挡或替换原生工作区、会话导航和输入框。
设计思路
- 以附加列接入现有 Web 界面:原生界面继续负责工作区、会话和对话,工作台只维护需求组及其元数据。
- 使用“项目 → 需求组 → 会话”层级把同一需求的原生会话聚合起来,并在顶部汇总进行中、待验证和已完成的需求状态。
- 每个需求组维护摘要、改动点和证据三层本地记忆。摘要会随组内会话的下一次请求自动带出;其余两层仅在用户打开或复制时读取,避免把无关细节写入每次请求。
- 工作台以本地单用户数据为边界。归档需求组时先归档关联的原生会话,确保工作台列表与原生会话状态一致。
界面预览
项目与需求组

渐进式组记忆

折叠状态

安装
插件需要使用包含 @deepseek-ai/dsh-web-app 的配置文件。
pnpm dsh plugin --profile web add ./plugins/dsh-project-workbench
pnpm dsh --profile web
配置文件会在已有 Web bundle 之后加载本 bundle。浏览器从 dsh.client 声明中发现 client.js,并注册一个 shell.overlay 入口。
兼容性
- 普通 DSH Web profile 和 DSH Desktop 使用同一份 bundle、Web route、client metadata 与 slot;插件不依赖 Electron API,也不把 Desktop service 声明为顶层必需依赖。
- 在 Desktop 中,插件通过公开的
desktopProfiles.current.dir将状态保存到当前 profile 的project-workbench/state.json;普通 DSH 继续使用$DSH_HOME(默认~/.dsh)下的同一路径。 - 没有
webServer的 headless profile 仍可加载 Host 插件,但不会提供工作台界面或本地状态 route。需要管理需求组时,请使用包含@deepseek-ai/dsh-web-app的 profile。
功能
- 工作台在原生侧边栏右侧占用独立列,并在中间对话列预留同等宽度;原生侧边栏、工作区和会话列表始终保持可见、可操作。设置上方的“项目工作台”入口始终可用;展开时显示选中态,点击即可折叠或展开工作台。
- 项目选择器读取已有原生工作区,并使用可键盘操作的工作台菜单。一个项目可创建多个需求组;每个需求组都维护自己的状态、会话关联和三层记忆,并持久化在本机的 DSH 数据目录中;浏览器本地存储只作为离线缓存和旧数据迁移来源。
- 点击需求组标题行的加号会在工作台内展开名称输入框,不依赖浏览器提示框。需求组行尾的编辑按钮可改名、设置该组状态或归档该组;归档在工作台内二次确认,会先归档组内原生会话,再隐藏需求组。创建、关联或归档失败会在面板内提示恢复操作。
- 文案会跟随 DSH 当前界面的语言自动切换;切换系统语言时无需重启插件。
- 选择需求组会列出其关联的原生会话;选择会话会调用原生会话导航。创建组内会话使用原生工作区会话流程,随后将返回的会话记录到当前需求组。
- 组记忆包含摘要、改动点和证据三个可独立展开的层级。面板一次只显示一层;摘要会在组内会话的下一次模型请求前自动带出,改动点和证据仍按需读取、复制或粘贴。
- 归档需求组时,工作台会先通过宿主 API 归档所有关联会话。只有全部成功后需求组才会从默认列表隐藏;任一会话归档失败时,需求组保持可见以便重试。
模型交互
宿主端会在组内会话进入第一步模型请求前,将当前需求组的摘要作为带来源标识的上下文消息加入该会话。该消息会和本轮输入一起进入会话日志及模型请求;同一版本不会重复加入,摘要更新后会在下一次请求自动带入新版本。若摘要与用户本轮明确要求冲突,以用户本轮要求为准。
“改动点”和“证据”保持渐进式披露:它们不会被自动注入,用户可在工作台中按需打开并复制,以避免每个请求携带无关细节。
已知限制与后续工作
- 这是本地单用户工作台:数据位于当前设备的 DSH 数据目录,不会在设备或用户之间同步。
- 公开的覆盖层插槽不提供原生侧边栏宽度。插件通过测量第一个框架列来对齐覆盖层;若宿主提供覆盖层锚点,即可消除这一 DOM 布局依赖。
- 外部 API 尚未提供向输入框草稿插入内容的操作。摘要通过会话上下文自动带入;按需层仍可复制到原生输入框。
No comments yet. Be the first to write one.