目前场景
用户无法在app端便捷地添加自己想要的工作区,添加新工作区的体验不好
目标
引入了一个新的前端运行时方法 pickWorkspaceDirectory(),用于拆分 Electron 新建工作区弹窗里的“临时目录选择”和状态栏里的“全局工作目录选择”。
目标是让新建工作区弹窗只负责收集路径输入,不直接改变全局运行时状态。用户只有点击“创建”后,才通过现有 Gateway 工作区 API 注册并切换工作区。
改动范围
-
web/src/context/RuntimeProvider.tsx
- 新增
pickWorkspaceDirectory(): Promise<string | null> 到运行时上下文。
- Electron 模式下调用
window.electronAPI.pickDirectory()。
- 选择成功返回路径;取消、异常、浏览器模式返回
null。
- 不修改
workdir,不调用 selectWorkdir()。
-
web/src/components/layout/Sidebar.tsx
- 新建工作区弹窗改用
runtime.pickWorkspaceDirectory。
onPickDirectory 返回值改为 string | null。
- “浏览”按钮设置为
type="button"。
- 选择成功只更新弹窗本地
path,取消不修改输入框。
-
web/src/components/layout/Sidebar.test.tsx
- 扩展 Runtime mock,覆盖
pickWorkspaceDirectory。
- 增加浏览器模式不显示“浏览”按钮测试。
- 增加 Electron 选择目录、取消目录选择、提交创建工作区测试。
-
web/src/context/RuntimeProvider.lifecycle.test.tsx
- 增加浏览器模式
pickWorkspaceDirectory() 返回 null 的测试。
- 增加 Electron 选择目录返回路径且不调用
selectWorkdir() 的测试。
- 增加 Electron 取消选择返回
null 且不修改全局 workdir 的测试。
实现设计
selectWorkdir() 继续保留给状态栏旧入口使用。
pickWorkspaceDirectory() 作为新建工作区弹窗专用的无副作用目录选择入口。
- Electron preload API 不变,继续使用已有
window.electronAPI.pickDirectory()。
- Gateway、Runtime、Tools、Session 后端链路不改。
- 工作区创建仍由
useWorkspaceStore.createWorkspace() 触发现有 gateway.createWorkspace 和 gateway.switchWorkspace。
验收标准
测试验证
已验证或需在合入前确认:
风险与回滚
风险:
- 新增运行时上下文字段后,遗漏 mock 会导致测试失败。
- 后续开发可能再次混用
selectWorkdir() 和 pickWorkspaceDirectory()。
回滚:
- 回滚
RuntimeProvider 新增方法。
- 将 Sidebar 新建工作区弹窗恢复为仅手动输入或原调用方式。
- 不涉及后端数据结构和 Gateway 协议迁移。
目前场景
用户无法在app端便捷地添加自己想要的工作区,添加新工作区的体验不好
目标
引入了一个新的前端运行时方法
pickWorkspaceDirectory(),用于拆分 Electron 新建工作区弹窗里的“临时目录选择”和状态栏里的“全局工作目录选择”。目标是让新建工作区弹窗只负责收集路径输入,不直接改变全局运行时状态。用户只有点击“创建”后,才通过现有 Gateway 工作区 API 注册并切换工作区。
改动范围
web/src/context/RuntimeProvider.tsxpickWorkspaceDirectory(): Promise<string | null>到运行时上下文。window.electronAPI.pickDirectory()。null。workdir,不调用selectWorkdir()。web/src/components/layout/Sidebar.tsxruntime.pickWorkspaceDirectory。onPickDirectory返回值改为string | null。type="button"。path,取消不修改输入框。web/src/components/layout/Sidebar.test.tsxpickWorkspaceDirectory。web/src/context/RuntimeProvider.lifecycle.test.tsxpickWorkspaceDirectory()返回null的测试。selectWorkdir()的测试。null且不修改全局workdir的测试。实现设计
selectWorkdir()继续保留给状态栏旧入口使用。pickWorkspaceDirectory()作为新建工作区弹窗专用的无副作用目录选择入口。window.electronAPI.pickDirectory()。useWorkspaceStore.createWorkspace()触发现有gateway.createWorkspace和gateway.switchWorkspace。验收标准
selectWorkdir()。pickWorkspaceDirectory()不修改全局workdir。测试验证
已验证或需在合入前确认:
npm test -- RuntimeProvider.lifecycle.test.tsx Sidebar.test.tsxnpm testnpm run verify:electron-preloadnpm run build风险与回滚
风险:
selectWorkdir()和pickWorkspaceDirectory()。回滚:
RuntimeProvider新增方法。