v0.2.5 更新日志(在新标签页打开)MIT · npm · macOS · Linux · Windows

仓库,
就在会话里。

一个可移植插件就能给 DSH 宿主带来完整的 Git 界面:右侧边栏中的状态、差异、历史和分支操作。同一个包可以运行在 web profile 和 Rivetdeck 中——后者已经预装。

  • 右侧边栏中的 Changes、Diff 与 Graph 标签页
  • Git 通过 ctx.subprocess 启动——从不经过 shell
  • 不注册任何模型工具,不注入提示词
Rivetdeck 窗口:左侧是工作区侧边栏和新会话输入框,右侧 Git 变更面板列出 feat/checkout-flow 分支上的两个已修改文件和一个未跟踪文件。
Rivetdeck 中的 Changes 标签页:feat/checkout-flow 分支上的两个已修改文件和一个未跟踪文件。

功能

完整的审阅闭环,不用离开窗口。

三种标签类型通过标准注册接入上游右侧边栏——Changes 与 Graph 是页面型标签,每个文件比较都是一个 dsh-resource 差异页。

Changes

状态、暂存与提交,集中在一个标签页

porcelain v2 状态按已暂存、未暂存和未跟踪分区列出,每一行都带有字母徽标。加号或减号切换暂存区;撤销操作需要先经过一次指名路径的二次确认。

  • 分段提交按钮:Commit、Amend、Commit & Push、Commit & Sync
  • 提交信息输入框自动生长,旁边是 Generate 生成按钮
  • 刷新和在文件管理器中显示等操作位于 Git 界面内部
Rivetdeck 窗口:左侧是工作区侧边栏和新会话输入框,右侧 Git 变更面板列出 feat/checkout-flow 分支上的两个已修改文件和一个未跟踪文件。
已暂存、未暂存与未跟踪分区;分支名显示在刷新按钮旁。

差异

一个文件、一侧对比、一个可寻址的标签页

每次比较都是一个 dsh-resource://git/diff 地址,因此同一个文件的暂存区差异与工作区差异可以并排打开。请求一个已存在的地址只会唤出对应标签页,并按 revision 计数器刷新。

  • 渲染交给官方 DSH DiffBlock——复制、折叠和按行换行由宿主提供
  • 二进制、仅元数据、空文件和被截断的输出都有各自的区分,而不是一律抹平
  • 地址即标签身份,差异视图随布局一并恢复

同一个文件的两个地址

  • dsh-resource://git/diff/src%2Fcart.tsx/staged

    暂存区对比

  • dsh-resource://git/diff/src%2Fcart.tsx/worktree

    工作区对比

Graph

会自己翻页的车道图

提交历史以 Canvas 绘制的车道图呈现,整条曲线在同一坐标系中连续延伸,轨道与合并边不会在行边界处断开。滚动哨兵按需追加更早的提交,而不是一次加载全部历史。

  • Auto、All 与 First-parent 三种范围,旁边是刷新按钮
  • 每行带有按类型着色的 HEAD、分支、远端与标签芯片
  • 悬停卡片给出完整标题、哈希、作者与日期
main
AutoAllFirst-parent
  • Merge pull request #14: status panel UI

    cherrchen · 2 小时前

    HEAD → main
  • fix(client): restore graph node hover emphasis

    cherrchen · 5 小时前

    status-panel-ui
  • fix(compat): support DSH 0.1.5-rc.3 and 0.2.1-alpha.1

    cherrchen · 1 天前

    origin/main
  • feat(client): staged diff opens beside the worktree one

    cherrchen · 1 天前

    v0.2.5

输入框

先看到分支和改动数,再开始输入

分支选择器和变更文件指示器位于输入区左侧,点击即可打开 Changes 标签页。创建分支走同一个对话框;在 git init 尚无提交时,菜单会说明必须先有第一个提交。

  • 宿主发布了工作目录投影时,选择器跟随该会话的有效目录
  • 链接检出会显示 worktree 标签;“Use in this session” 通过宿主目录服务进入该检出
  • 每个会话保有各自的仓库状态——两个会话绝不共享一份快照

描述你想构建的内容…

feat/checkout-flow3 个改动

提交信息

只给建议,从不替你提交

当宿主暴露 LLM 运行时时,Generate 会把暂存区差异——上限为 commitMessage.maxDiffBytes——发给会话模型,或发给插件配置里固定的一组 provider/model。流式草稿落在可编辑的输入框里。

  • 生成从不暂存、提交或推送任何内容
  • 系统提示词默认是 Conventional Commits 指令,可在插件配置中修改
  • 没有可解析的模型时,控件如实报告不可用,而不是猜测
pnpm-workspace.yaml · 组合配置
 plugins:   - entry: @dsh-electron/dsh-plugin-git     config:       commitMessage:         mode: custom         provider: anthropic         model: claude-haiku-4-5

设计边界

Git 还是 Git,什么都没被重造。

插件把调用交给机器上的 Git,并把每一处有风险的边缘都写得明明白白——包括它拒绝去做的那几件事。

  1. 01

    从不经过 shell

    ctx.subprocess 以可执行文件加独立 argv 参数启动 Git。每个来自调用方的路径、分支和提交信息始终是一个 argv——没有插值,也没有引号陷阱。

  2. 02

    破坏性操作要点两次

    撤销通过明确的 index、worktree 和 clean 步骤恢复一个已暂存、未暂存或未跟踪的改动——并且始终先经过一次指名路径的二次确认。

  3. 03

    凭据留在 Git 一侧

    push 和 sync 以 argv 形式调用 git push 与 git pull --rebase。缺少 origin 或鉴权被拒时呈现的是 Git 自己的错误;插件没有凭据界面可供误信。

  4. 04

    桌面增强是可选的

    子 fiber ctx.inject(['desktop']) 在提供者存在时增加“在文件夹中显示”和“打开路径”。仓库、状态、差异、暂存、提交和分支操作没有它照常工作。

  5. 05

    输出有上限

    单条命令的每路输出默认封顶 8 MiB;超过后收集器保留尾部。这是经过校验的配置项,而不是隐藏常量。

  6. 06

    不接触模型

    插件不注册任何模型工具、提示词段落或请求上下文。提交信息生成是独立的宿主 LLM 请求,不占用会话 token。

快速开始

web profile 上两条命令。

插件通过 DSH 插件管理器安装,共四种来源——在 Rivetdeck 中它已经预装,无需任何操作。

  1. 1

    安装插件包

    在受支持的 DSH 运行时中执行。Electron 桌面版请替换 profile。

    推荐。安装预构建产物;安装时不会有包内代码在你的机器上运行。

    install · npm
    $ dsh plugin --profile web add @dsh-electron/dsh-plugin-git$ dsh --profile web
  2. 2

    批准 GitHub 来源的构建步骤

    只有 github: 安装会在你的机器上构建——也就是包自己的 prepare。pnpm 10+ 会以 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 拒绝,直到把它打印出的键写进该 profile 的 pnpm-workspace.yaml;建议锁定标签,使之后的推送不会改变实际运行的内容。

    pnpm-workspace.yaml
     allowBuilds:   '@dsh-electron/dsh-plugin-git@git+https://github.com/cherrchen/dsh-plugin-git#v0.2.5': true
  3. 3

    在仓库里打开一个会话

    会话目录是仓库时,分支芯片和变更文件指示器就会出现在输入框里。

    所有受支持版本都自带该插件注册所需的右侧边栏——不需要额外的宿主插件。

说明

  • Rivetdeck 预装了 Git;预装版本可能落后于 npm 最新版。如需新版,请安装到对应 profile。
  • 以上命令以 web profile 为例。Electron 桌面版把 --profile web 换成 --profile desktop。
  • 从源码检出运行 DSH?请用 pnpm dsh 代替 dsh。

兼容性

一份确切的清单,而不是一个范围。

客户端要注册进侧边栏和设置插槽,而这些插槽的形态在尚未稳定的版本之间会变,所以支持范围就是 CI 实际跑过的确切清单。标注为仅限开发分支的行已在 main 上验证,但不在已发布的 v0.2.5 包中。

插件版本 0.2.5 与开发分支支持的 DSH 版本
DSH 版本状态加入于说明
0.1.5-rc.2已验证v0.2.0基线:最早提供本插件所需右侧边栏的版本。
0.1.5-rc.3仅限开发开发分支仅含 manifest 修订的重发版本;已在开发分支上验证。
0.1.6-alpha.1已验证v0.2.2插件配置位于“设置 → 插件 → 插件配置”。
0.1.6-alpha.2已验证v0.2.2配置移到组合包详情页;会话查找探测新的列表形态。
0.1.7-alpha.1已验证v0.2.2configForms 取代 settingsScope;图标改为字重命名。
0.1.7-alpha.2已验证v0.2.2对本插件而言接口形态与 0.1.7-alpha.1 相同。
0.1.7-rc.1已验证v0.2.2从该版本起安装时强制要求精确的 peerDependencies。
0.1.7-rc.2已验证v0.2.3接口形态与 0.1.7-rc.1 相同。
0.2.0-rc.1已验证v0.2.4DSH 0.2 候选版本。
0.2.0-rc.2已验证v0.2.4开发 pin;Rivetdeck 0.2.0-beta.3 内置的运行时。
0.2.1-alpha.1仅限开发开发分支已在开发分支上验证;不在已发布的包中。
0.2.1-alpha.2已验证v0.2.5有效会话工作目录与链接检出切换。
其他任何版本不支持—未验证。在 0.1.7-rc.1 及以后的宿主上,安装时的 peer 范围会拒绝;更早的宿主或许能装上,但未经过测试。

平台

  • macOS已验证

    web 与桌面端共用同一份可移植构建;有桌面提供者时提供文件管理器操作

  • Linux已验证

    同一份可移植构建;无平台专属代码路径

  • Windows已验证

    同一份可移植构建;push 与 sync 的 Git 错误原样呈现

状态按版本逐项声明,绝不按版本号顺序推断。从 DSH 0.1.7-rc.1 起,插件管理器会在安装时强制要求精确的 peer 版本。各版本的适配说明见兼容性参考(在新标签页打开)。

在改动发生的地方审阅它。

受支持的宿主上一条命令即可——在 Rivetdeck 中则已就位。卸载后窗口与上游一模一样。