整体架构
dsh-mytable 的核心不是某一个组件,而是服务端插件、客户端工作台和 DSH 宿主之间的协作。
三个层次
1. 插件入口与打包
dsh.plugin.json 声明插件名称、版本和 Web 客户端平台;cordis.patch.yml 负责把插件接入 DSH 配置。build.mjs 使用 esbuild 分别生成服务端入口 lib/index.js 与客户端入口 lib/client.js,最终再通过 npm 包交付。
2. 服务端能力
src/index.ts 注入 DSH 的 webServer 和 sessions 服务,并在 /api/worktable/* 下提供私有协议。主要职责包括:
- 列出与搜索工作区文件;
- 读取文件并按类型返回正确的 MIME;
- 获取 Git 仓库、分支和工作区改动;
- 从会话事件中收窄并整理工具调用、输出和 token 统计;
- 在宿主依赖允许时注册终端 WebSocket;
- 探测外部网页是否允许被 iframe 嵌入。
服务端会优先通过官方 @deepseek-ai/dsh-home-paths 解析数据目录,不可用时再按 DSH_HOME 与 ~/.dsh 规则回退,避免不同 profile 或桌面环境读错数据。
3. 客户端工作台
客户端入口位于 src/client/index.tsx。它把工作台侧边栏、布局编辑、文件预览、终端、浏览器、Git 改动、任务、提示词空间和 Flowglass 等能力接入 DSH Web UI。
其中 split.tsx 负责通用分栏引擎,mytable-service.ts 提供第三方插件扩展入口,各类具体窗口则被拆分为 explorer-pane.tsx、browser-pane.tsx、changes-pane.tsx、jobs-pane.tsx 等模块。
一次典型交互
- 用户在工作台里选择一个项目和会话。
- 客户端根据布局配置创建窗格与标签页。
- 文件树、Git 或会话统计通过
/api/worktable/*请求插件服务端。 - 服务端基于会话目录或客户端传入目录解析目标工作区。
- 结果回到对应窗格,布局与偏好保存在浏览器本地存储中。
这种结构让 UI 可以快速组合,同时把文件系统、Git 和终端等高权限能力留在服务端边界内。
下一篇:分栏工作区模型
阿源的知识库