安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add @lsq64737/dsh-workbench-layout
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
简体中文 | English
为 DeepSeek Harness Web 提供三栏工作区:左侧导航、中间文件与终端、右侧 DSH 原生对话。


概览
DSH 工作台布局在不替换原生对话和输入框的前提下重排官方 AppFrame。文件、Git 状态、编辑器标签和终端跟随所选工作区;聊天仍由当前会话管理。
| 区域 | 提供的功能 |
|---|---|
| 左栏 | 会话、文件目录、Git 更改与提交图、终端列表 |
| 中栏 | 多文件标签、Markdown 预览、单文件 Diff、交互式终端 |
| 右栏 | DSH 原生对话、任务状态、工具与输入框 |
布局、图标、颜色、菜单、弹窗、悬浮提示和响应式行为都会在官方客户端提供能力时优先复用 DSH 组件与设计变量。
功能
文件与 Markdown
- 按需展开目录,并支持新建、重命名和删除文件或文件夹。
- 文件目录和中栏标签使用工作区 Git 状态着色:未跟踪、删除或冲突为红色,新增为绿色,修改和重命名为警告色;未跟踪状态只装饰文件本身,目录聚合其他后代状态中优先级最高的一项。
- 源码编辑器将当前缓冲区与 Git
HEAD比较,在可点击的变更边栏中以绿色显示新增、蓝色显示修改、红色标记删除位置,不给代码内容铺设底色。点击标记可打开带上下文、旧/新双行号、-/+行及字符级变更强调的局部 Unified Diff,在变更间导航,或仅还原这一块;还原只修改当前草稿并支持撤销。拖动弹层右边缘可调整宽度,也可以聚焦边缘后用方向键微调;宽度会限制在当前视口内,并在切换变更、文件和刷新页面后保留。点击弹层之外会将其关闭。已暂存、未暂存和尚未保存的编辑会合并呈现,并随输入、保存、外部修改和分支切换更新。Markdown 渲染预览保持干净,切换到源码后显示这些标记。 - 在同一标签栏打开多个文件;标签溢出时可在顶栏使用滚轮横向滚动。
- 使用
Ctrl/Cmd + S保存当前文件。写入会检查 DSH 文件版本,避免静默覆盖外部修改。 - 页面可见时约每秒批量检查已打开文件;从其他软件切回页面时立即检查。未编辑的标签会自动更新,未保存草稿遇到外部修改时会提示选择重新加载或保留当前内容。
- 编辑器按 CodeMirror 的规范化文本比较修改状态,并在保存时保持文件原有的 CRLF、LF 或 CR 换行风格,避免仅因换行格式产生黄色未保存标记。
- Markdown 默认以渲染后的预览模式打开,也可以切换到源码编辑。
- 在文件右键菜单复制工作区相对路径或绝对路径。
- 将 DSH 工具产生的文件索引直接打开到中栏。
Git 工作区
- 以列表或目录树查看已暂存和未暂存更改。
- 通过明确操作完成暂存、取消暂存、放弃更改和提交;长文件名在静止时使用整行宽度,文件行悬浮后再按一个或两个按钮的实际宽度收缩,直接悬浮按钮时显示圆形底色。
- 将工作区、暂存区、历史提交或比较结果中的每个文件作为独立 Diff 标签打开。
- 使用 CodeMirror MergeView 渲染文本 Diff,包含行号、字符级变更、未修改区域折叠、左右对照/统一/行内三种始终可选的模式和长行换行。
- 从本地与远程引用构建轨道式提交图,展示分支、合并、标签、作者、时间和文件统计;滚动时自动按每页 40 条加载更早提交。
- 在原位置展开提交,按列表或目录树排列文件,并逐个打开。
- 创建、切换、重命名和安全删除本地分支,也可从指定引用或提交创建分支。
- 管理远端,并针对上游或明确指定的远端与分支执行 Fetch、快进 Pull、Push、发布分支和同步。
- 在提交菜单中复制提交号、Cherry-pick、Revert、创建分支或与当前工作区比较。
终端
- 通过 xterm.js 与
node-pty在所选工作区根目录运行交互式终端。 - 在文件和 Diff 标签旁保留多个终端会话。
- 切换标签时保持终端状态,并在中栏宽度稳定后统一适配尺寸。
- 使用宿主机配置的 Shell:Windows 使用
ComSpec,类 Unix 系统使用SHELL。
对话与布局
- 右栏继续使用 DSH 原生对话和输入流程。
- 沿用官方 AppFrame 分隔线行为调整中栏与右栏宽度;右栏默认宽度随窗口变化,大屏下可继续向宽处拖动,同时为中栏保留可用空间。
- 可从左栏底部收起中栏;选择文件、Diff 或终端时会自动重新展开。
- 即使工作区会话还没有消息,也能访问该工作区的文件与 Git。
- 对话栏变窄时会适配输入工具栏、菜单、失败信息、Session Log 操作和助手消息统计。
- 收起中栏后,对话会回到官方中间位置和原始表面颜色。
安装
将公开包安装到 DSH Web 配置:
dsh plugin --profile web add @lsq64737/dsh-workbench-layout
如果 DSH Web 正在运行,请在安装后重启。
终端功能依赖原生模块 node-pty。如果 pnpm 报错 ERR_PNPM_IGNORED_BUILDS,请在 DSH Web 配置目录中运行 pnpm approve-builds,批准 node-pty,然后重新安装插件或重启 DSH Web。
再次执行相同的 add 命令即可更新。卸载命令:
dsh plugin --profile web remove @lsq64737/dsh-workbench-layout
基本使用
- 选择一个 DSH 工作区。
- 使用左栏模式切换会话、文件、Git 和终端。
- 选择文件、Diff、提交文件或终端,将其打开到中栏。
- 拖动中栏与右栏之间的分隔线,调整编辑区和对话区宽度。
- 使用左栏底部右侧按钮收起或恢复中栏。
Git 功能要求所选工作区根目录本身就是 Git 仓库。远端操作使用运行 DSH 的机器上已经配置好的 Git 凭据;插件不会索取或保存远端凭据。
安全与隐私
- 宿主接口只解析官方工作区 id 和工作区相对路径,不接受浏览器提供的绝对路径作为文件目标。
- 拒绝访问工作区外路径和符号链接。
- 新建文件采用原子写入,保存检查版本,重命名不会主动覆盖已有项目。
- 外部文件刷新通过官方 DSH 文件系统批量比较版本;有未保存草稿时不会自动替换内容。
- 递归删除文件夹和破坏性 Git 操作需要确认。文件与文件夹删除是永久操作。
- Pull 和同步只允许快进;Cherry-pick 与 Revert 要求工作区干净,Git 报告冲突时会自动中止。
- Git 命令使用固定参数且不经过 Shell,并禁用 Git 操作中的终端凭据提示。
- 日志使用工作区 id 和相对路径,不记录宿主文件路径。
- 终端意味着可以操作运行 DSH 的机器,因此只应向你信任的用户和网络开放 DSH Web。
已知限制
- 已打开标签和未保存草稿只存在于当前页面,刷新后会丢失。
- 文件编辑器只读取文本;二进制文件只显示二进制变更提示,不渲染内容。
- 关闭标签、刷新页面、连接断开、切换工作区或停止插件都会结束终端进程;默认组合最多允许八个终端同时运行。
- DSH 目前没有公开的对话栏位置 API,因此插件通过官方 AppFrame 的稳定标记调整列顺序。未来 AppFrame 重构后可能需要同步更新插件。
- 窗口非常窄时,AppFrame 官方让步规则会暂时关闭中栏,宽度恢复后再自动打开。
开发
需要 Node.js 24 或更高版本,以及兼容的 DSH 开发工作区。
npm ci
npm run typecheck
npm test
npm run build
npm run test:bundle