dsh-source-control:DSH 原生右侧栏的 Git 源代码管理面板

前言

DeepSeek Harness(DSH)采用插件化架构,通过扩展点扩展能力。在智能体开发流程中,直接在 DSH 内完成 Git 操作是常见需求。此前有插件试图通过直接修改宿主布局(如 grid-template-columns)来实现类似 VS Code 的面板,但在 DSH 0.1.6-alpha.2 中,由于外壳对网格的持续重写,这些做法会导致插件列宽失效或隐藏。

dsh-source-control 避免了与宿主布局的冲突。它仅使用官方扩展点 ctx.sidebarRightTabs 和 ctx.slots.register,将一个 VS Code 风格的源代码管理面板挂载到 DSH 原生右侧栏的标签系统中。

核心能力

该插件在 DSH 右侧栏提供完整的 Git 交互能力:

  • 改动与提交:展示已暂存/更改/未跟踪/冲突四组状态,支持批量操作、单文件 diff 展开和二次确认的提交。
  • 分支管理:列出本地与远程跟踪分支,支持按关键字搜索(匹配名称或提交信息)、切换、合并、删除及新建。
  • 远程同步:提供抓取、拉取(默认 --ff-only)、推送及“拉取(合并)”操作。新建分支时若无上游,按钮会自动变为“发布分支”。
  • Git Worktree:支持列出、新建、删除及清理失效记录。新建的 worktree 会自动注册为 DSH 工作区,可在“新建会话”中直接选中。
  • 历史记录:展示最近提交的 Hash、标题、作者与日期。

安装

通过官方 CLI 安装插件:

dsh plugin --profile web add github:jackchen13755/dsh-source-control

安装完成后,在 DSH 会话中点击右侧栏的“+”号,选择“源代码管理”即可加载。

配置

插件通过 cordis.patch.yml 注入配置,默认值如下:

- insert:
    - id: source-control
      name: 'dsh-source-control'
      config:
        recentCommits: 20        # 历史记录条数
        pollMs: 5000             # 面板自动刷新间隔,0 为关闭
        defaultRemote: origin    # 同步操作的默认远程源,空则使用分支 upstream
        worktreeHome: ''         # Worktree 托管目录,空则使用 $DSH_HOME/source-control/worktrees

使用说明

  • 分支切换:支持从远程分支直接检出(建立跟踪并切换),新建分支时可指定基点或远程分支。
  • Worktree 注册:新建 worktree 后,插件会将其注册到 DSH 工作区列表中,实现任务隔离。
  • 安全确认:执行破坏性操作(如 push、删除分支、删除 worktree)时,浏览器会弹出 window.confirm 确认框。

安全模型

插件通过以下机制确保操作安全:

  1. 网络边界:只监听本机请求,非 loopback 请求一律返回 403。
  2. 路径围栏:调用方仅提供 sessionId,宿主解析出工作目录后,所有仓库路径必须落在该目录、已注册工作区或工作树托管目录之内。
  3. 无 Shell 拼接:所有 git 调用通过 execFile 传递参数,不拼接 shell 字符串,防止命令注入。
  4. 请求限制:仅接收 JSON POST 请求,限制 512KB 请求体。

已知限制

  • 冲突处理:冲突清单仅列出冲突文件,不提供三方合并编辑器,需手动编辑文件后暂存。
  • 功能取舍:不提供 rebase、cherry-pick、stash、tag、submodule 等操作,也不支持强制推送。
  • Pull 策略:默认使用 --ff-only,分叉时需明确选择“拉取(合并)”。
  • 兼容性:依赖 DSH 版本 >= 0.1.5-rc.1。

结语

dsh-source-control 通过官方扩展点,为 DSH 原生环境补齐了源代码管理能力。它不干扰外壳布局,专注于 Git 流程(暂存、提交、分支、worktree),并提供了严格的安全围栏,适合需要在 DSH 内直接进行代码协作的开发者。

项目地址:github.com/jackchen13755/dsh-source-control

羽毛球分组比赛记分
小程序二维码

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

小夜