前言¶
在 DeepSeek Harness (DSH) 的 Web 客户端开发工作流中,频繁在聊天界面内管理 Git 分支是一个常见痛点。开发者通常需要离开对话界面,去终端执行 git checkout 或 git stash,这会打断心流。dsh-git-status 插件直接在 DSH Web 的 Composer 工具行中集成了实时状态显示与切换能力,让分支管理回归对话上下文。
插件介绍¶
这是一个面向 DSH Web 客户端的插件,由 weiyuou-chowbus 维护。其核心价值在于将 Git 的状态感知与分支切换操作本地化、安全化,使其成为开发者与代码仓库交互的一个轻量级入口。
核心功能¶
- 实时分支指示器:在 Composer 工具栏右侧显示当前分支的芯片,每 3 秒轮询一次状态。芯片上会附带一个圆点来指示工作区是否干净(有未提交更改时显示脏状态)。
- 工作区感知:插件跟随当前会话的工作目录(
cwd)。当你切换 DSH 会话的工作区时,指示器会自动更新为对应目录的当前分支。 - 分支切换:点击指示器可打开一个过滤列表,列出所有本地分支(按最新提交者排序,并附带上游追踪信息)。点击目标分支后,系统会弹出确认对话框。
- 脏状态安全:这是该插件的一个重要安全特性。如果工作区有未提交的更改,默认情况下会阻止 checkout 操作。插件提供显式的“Stash & switch”操作,在切换前自动执行
git stash push --include-untracked,并在切换失败时恢复 stash,防止代码丢失。 - 安全设计:插件采用“无 Shell”的调用方式,所有 Git 命令通过
child_process.execFile执行。所有路径在请求时经过realpath解析,仅接受注册的工作区路径或配置的repoPath。分支名仅限本地分支枚举结果,输入不经过 shell 转义。
安装与启用¶
安装此插件需要系统中已配置 DSH Web 配置文件,且 pnpm 已在系统 PATH 中。
dsh plugin --profile web add dsh-git-status
安装完成后,需要重启 Web 服务以加载新插件:
npm exec @deepseek-ai/dsh web
配置与用法¶
默认情况下,插件会使用 DSH 进程的当前工作目录作为仓库路径。如果你希望为没有工作区的会话指定一个默认仓库,可以通过配置文件覆盖。
编辑 ~/.dsh/profiles/web/cordis.patch.yml,添加或修改以下配置:
- id: git-status
config:
repoPath: /absolute/path/to/your/default/repo
插件通过 HTTP 路由提供接口:
* GET /git-status?cwd=<workspace path>:获取当前分支、脏状态及本地分支列表。
* POST /git-checkout:切换分支,仅在 POST 请求下有效,且需要确认。
注意事项¶
- 依赖要求:必须依赖 DSH Web 配置文件以及 PATH 中的
pnpm。 - 路径要求:配置项
repoPath必须是绝对路径。 - 交互确认:所有切换操作(checkout)都需要用户确认,属于 POST-only 操作。
- 脏状态处理:脏状态默认被阻止。只有显式启用
stash: true或使用 UI 中的“Stash & switch”按钮才能在脏状态下切换分支。 - 安全原则:该插件不使用 Shell 执行命令,所有输入均经过白名单校验,适合对安全性要求较高的开发环境。
结语¶
dsh-git-status 通过在 DSH Web 界面中嵌入轻量级的 Git 操作,解决了开发者在对话流中管理代码状态的痛点。它既提供了直观的视觉反馈,又通过严格的白名单和脏状态保护机制,确保了操作的安全性。你可以通过 GitHub 仓库 查看源码或提交反馈。