dsh-workbench-layout:为 DSH Web 提供三栏工作区布局

前言

用 DeepSeek Harness Web(下称 DSH Web)做开发时,会话窗口是主角。想看一眼某个文件的改动、确认哪些代码还没提交,或者跑一条构建命令,通常要在会话和其它视图之间来回切换,上下文一再被打断。

DSH 的理念是「一切皆插件」,这类布局层面的需求同样可以由插件解决。dsh-workbench-layout 做的事情是:把官方 AppFrame 重排成三栏——左侧导航、中间文件与终端、右侧保留原生会话——让你在看文件、查 Git、开终端的同时不丢掉当前对话。

这是什么

dsh-workbench-layout 是一个 DSH Web 插件,npm 包名为 @lsq64737/dsh-workbench-layout,当前版本 0.1.5,作者 lsq64737,许可证 MIT,engines 要求 Node >= 24.0.0,由 GitHub 上的 lsq-dsh-plugins 组织维护,仓库地址见文末。

它不替换会话本身:文件、Git 状态、编辑器标签和终端跟随所选 Workspace,右侧的官方 DSH 会话、任务状态、工具与输入区保持原样。

整体结构是三栏:

  • 左侧:Sessions、文件浏览器、Git 变更与 Commit Graph、终端列表;
  • 中间:多文件标签编辑器;
  • 右侧:官方 DSH 会话、任务状态、工具与输入区。

核心功能

文件与编辑

  • 文件树懒加载浏览,支持创建、重命名、删除文件与文件夹,可通过上下文菜单复制工作区相对路径或绝对路径。
  • 按 Workspace 的 Git 状态给文件树和编辑器标签着色:untracked / deleted / conflicted 为红色,added 为绿色,modified / renamed 使用警告色。
  • 编辑器缓冲与 Git HEAD 比较,提供可点击的变更槽标记;点击后打开本地 Unified Diff 弹窗,含上下文、成对新旧行号与字符级强调,可逐个跳转变更,或只撤销当前块(撤销落在草稿上,仍可再撤销)。弹窗宽度可调,且跨变更、跨文件、跨页面刷新记忆。
  • 多文件标签页;标签溢出时可用滚轮横向滚动。
  • Ctrl/Cmd+S 保存。写入使用 DSH 版本令牌,外部修改过的文件不会被静默覆盖;页面可见时约每秒批量检查一次打开文件的外部变更,脏草稿会给出 Reload / Keep Current 两个选择。
  • 保存时保留文件原有的 CRLF / LF / CR 行尾风格,避免行尾归一化造成假的脏标记。
  • Markdown 默认以渲染后的 Preview 模式打开,编辑时切换到 Source 模式。
  • DSH 工具产出的文件引用,可以直接在中间编辑器打开。

Git 工作区

  • staged / unstaged 变更以列表或目录树查看,通过显式操作执行 stage、unstage、discard 与 commit。
  • 工作树、staged、commit、比较 Diff 均以独立编辑器标签打开,使用 CodeMirror MergeView 渲染,支持 Side by side、Unified、Inline 三种模式、未变区域折叠与长行折行。
  • lane 式 Commit Graph 展示本地与远程 ref 的分支、合并、标签、作者、时间戳与文件统计;滚动时按 40 条分页自动加载更早提交。提交可原地展开,文件以列表或树排列。
  • 本地分支的创建、切换、重命名与安全删除;可从选定 ref 或 commit 创建分支。
  • 配置 remote 后可执行 Fetch、快进 Pull、Push、Publish、Sync。
  • 提交操作:复制 hash、Cherry-pick、Revert、创建分支、与当前 Workspace 比较。

终端

  • 基于 xterm.js 与 node-pty 的交互终端,在所选 Workspace 根运行。
  • 可保留多个终端会话,与文件、Diff 标签并列;切换标签时终端状态保留。
  • 使用主机配置的 shell:Windows 为 ComSpec,类 Unix 为 SHELL

布局

  • 使用官方 AppFrame 分隔条调整中/右列宽度。
  • 可从侧栏页脚折叠中间编辑器;选择文件、Diff 或终端时自动恢复。
  • 会话变窄时,输入区、菜单与统计信息会相应适配。

安装与启用

把公共包安装进 DSH Web profile:

dsh plugin --profile web add @lsq64737/dsh-workbench-layout

安装后如果 DSH Web 正在运行,需要重启。

终端功能依赖原生 node-pty 包。如果 pnpm 报 ERR_PNPM_IGNORED_BUILDS,在 DSH Web profile 目录运行 pnpm approve-builds,批准 node-pty,然后重新执行安装或重启 DSH Web。

更新时重新运行同一条 add 命令。卸载:

dsh plugin --profile web remove @lsq64737/dsh-workbench-layout

典型用法

按 README 给出的流程:

1、选择一个 DSH Workspace。

2、用侧栏模式在 Sessions / Files / Git / Terminal 之间切换。

3、选择文件、Diff、提交文件或终端,在中间列打开。

4、拖动中/右分隔条,分配编辑与会话各自的空间。

5、用右下角侧栏操作折叠或恢复中间列。

适用场景与注意

适合主要在 DSH Web 里工作、希望不离开会话就能看代码、查 Git 状态、开终端的人。如果你习惯把编辑器、终端和会话放在同一个窗口里,这套布局可以省去在多个窗口之间的切换。

使用前注意以下几点:

  • Git 功能要求所选 Workspace 根是一个 Git 仓库;远程操作使用运行 DSH 的机器上已配置的 Git 凭据,插件不请求也不存储远程凭据。
  • Pull 与 Sync 仅快进;Cherry-pick 与 Revert 要求干净工作树,Git 报告冲突时自动中止。
  • 递归删除文件夹与破坏性 Git 操作需要确认;文件与文件夹删除是永久的。
  • 安全设计上:拒绝 Workspace 外的路径遍历与符号链接访问;文件创建为原子操作,保存使用版本检查,重命名不会替换已有条目;外部刷新通过官方 DSH 文件系统批量比较版本,从不自动替换未保存草稿;Git 命令使用固定参数不经 shell,Git 操作禁用终端凭据提示。

最后提醒:插件以当前 dsh 进程的权限运行,能访问该进程能访问的资源。安装前建议查看其源码与许可证(本项目为 MIT),确认符合自己的安全要求。

小结

dsh-workbench-layout 在不动官方会话与输入流程的前提下,把文件编辑、Git 操作与终端搬进 DSH Web 的三栏布局,安装和卸载各只需一条命令。相关链接:

  • 目录页(社区维护的独立插件目录,与 DeepSeek / 幻方无官方从属关系):https://www.skillhub.cn/plugins/lsq-dsh-plugins/dsh-workbench-layout
  • GitHub:https://github.com/lsq-dsh-plugins/dsh-workbench-layout
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜