@feng0531/dsh-vcs
Read-only Git and SVN change review inside DeepSeek Harness, with repository browsing and side-by-side diffs.
Install
dsh plugin --profile web add @feng0531/dsh-vcs
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
DSH VCS
在 DeepSeek Harness(DSH)Web 中查看 Git / SVN 文件变更和提交历史,默认只读预览。
你可以查看差异、浏览历史、追溯文件。已有确认式本地 Git 分支切换会改变 HEAD、暂存区和工作文件。当前冻结源码在 0.7.3 基础上累积了受限整文件/变更块/逐行暂存与取消暂存、commit/amend、从当前 HEAD 创建分支及两类标签、图片叠加/滑动比较和只读分支删除评估,已以 0.8.0 收口,不再扩展功能。写操作必须先预览再明确确认,正文比较仍只读;不提供 fetch/pull/push、stash、merge 或冲突解决。
0.8.0 已正式发布至 npm 与 GitHub。 本地完整验收 3352/3352,同标签四矩阵 CI、浏览器及五精确宿主合同均通过;未更新或重启日常 DSH。最终工件与校验信息见[发布回执](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/releases/0.8.0-RECEIPT.md>)。见[本版说明](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/releases/0.8.0.md>)及[当前能力](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/CURRENT-CAPABILITIES.md>)。
能做什么
场景 · 功能
查看工作区变更 · Git 全部、已暂存、未暂存文件;SVN 本地基线与工作副本、属性差异
阅读代码差异 · 默认 Monaco 只读 Diff,支持并排/行内、换行、忽略行尾空白、上一处/下一处差异
浏览 Git 历史 · 搜索提交说明、作者、路径与提交时间范围(since/until,含边界,按 committer date);查看本地分支、提交图、提交详情与目录
比较历史版本 · 比较提交与选定父提交,或选择两个本地提交进行 A/B 比较
追溯代码来源 · 文件历史、唯一来源重命名追踪(含改名同时修改)、Blame(逐行查看最后修改者和提交)
搜索与定位 · 在固定提交中分页搜索内容,点击结果定位命中行;高级、基础与分段阅读支持目标行,返回保留结果与阅读设置
查看其他内容 · 支持部分静态图片并排/叠加/滑动比较与双侧同步缩放;较大历史 UTF-8 文件可分段阅读
查看 HEAD 移动记录 · Reflog 只读查看最近200项,点击固定提交查看详情;不提供恢复、reset或checkout
浏览 SVN 历史 · 明确同意连接后,查看 HTTPS 仓库日志、修订差异和文件历史
切换本地 Git 分支(0.6.0 起) · 独立入口预览当前/目标分支与提交,明确确认后执行;不是历史引用导航
提供中英文界面。编辑器加载失败时会显示基础文本比较;它不是完整的 Monaco 替代品。
安装
需要:
- Node.js 22 或更新版本。
- DSH Web:声明兼容 0.1.7-rc.2、0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.5 或 0.2.2-rc.1。
- 系统 PATH 中有 Git 或 SVN;只使用 Git 时无需安装 SVN。
profile是DSH的配置和插件环境,不是Session。下面的web是示例,请先确认运行中的DSH使用哪个profile;若不同,替换命令中的web。宿主插件命令通过pnpm执行,需确保该工具可用。
在终端执行:
dsh plugin --profile web add "@feng0531/dsh-vcs@<已确认发布到 npm 的版本>"
GitHub 与 npm 的可用版本可能不同;例如 0.4.11 仅发布 GitHub。安装前核对目标渠道,候选源码版本不等于已发布版本。
安装后由你自行重启 DSH,再刷新原来的 Web 页面。安装会改变所选 profile;升级前请备份配置。本项目的发布不会自动升级或重启你的 DSH。
也可以从 GitHub Release 下载 tgz 和校验文件,核对 SHA-256 后安装:
dsh plugin --profile web add "<tgz 的绝对路径>"
升级、旧包迁移和回滚见安装指南。
更新与免重启加载
VCS 顶部“更新插件”提供更新检查、宿主插件管理器与最新发布链接。明确勾选确认后,更新按钮会委托宿主安装指定正式版本,修改当前插件环境;不会自动重启,缺少宿主更新接口时改用插件管理器。安装新版后点击“检查并加载已安装更新”:后端指纹一致才重新挂载前端,否则提示自行重启 DSH。第一次引入此功能需要重启一次。后端、依赖锁、加载器、字典或编辑器资源变化均需重启。加载失败保留旧版或显示恢复操作,不自动重启。
开始使用
1. 在 DSH 中选择一个 Session,确认它的工作目录在项目内。
2. 打开 VCS 页面,发现仓库,再从顶部下拉框选择仓库。
3. 点击文件查看差异,或进入历史视图浏览提交。
4. SVN远程历史需先审阅并明确同意。复制成员可主动查看范围内的固定来源历史,不自动跨复制追溯。
5. 外部工具修改了项目后,手动刷新;可见窗口重新获得焦点时也会刷新。没有定时轮询。
默认发现当前目录、一级子目录以及包含当前目录的上级仓库。项目更深时,输入相对 Session 目录的子目录,例如 packages/example;不接受任意绝对路径或越界路径。
注意:Session 位于仓库子目录时,发现后的查看范围可以覆盖整个仓库。
左右两侧比较的是什么
模式 · 左侧 · 右侧
Git 全部 · 最近提交(HEAD) · 当前工作区
Git 已暂存 · 最近提交(HEAD) · 暂存区(Index)
Git 未暂存 · 暂存区(Index) · 当前工作区
SVN 本地变更 · 本地基线(BASE) · 当前工作副本
新增文件可能使用空白左侧。冲突文件只供查看,不提供三方合并或冲突解决。
确认式本地 Git 分支切换
历史页的分支下拉只改变阅读起点,不会切换工作区。实际切换使用独立的“切换本地分支”入口:先读取已有本地分支,选择目标并预览当前/目标完整引用及提交,再明确确认。预览约 60 秒失效,确认仅能使用一次;取消预览不执行切换,切换过程中不能重复提交。
仅支持已有的本地 refs/heads 分支和干净、普通的 Git 工作副本。已暂存、未暂存、未跟踪以及被忽略的文件都会阻止操作;不会自动保存、stash、强制覆盖、创建分支或连接远端。配置了过滤器或命令 hooks、存在 Git attributes、稀疏/部分克隆、assume-unchanged/skip-worktree、符号链接/子模块、未完成的合并/变基等操作或锁时也会保守拒绝。Git 元数据或工作路径硬链接(含本地克隆共享的对象文件)、元数据符号链接/alternates、linked worktree、分离/符号链接的 Git 元数据目录、core.worktree、detached/未创建首个提交的 HEAD,以及与目标分支同名的 tag 均不支持;目标被其他 worktree 占用时不绕过 Git 的拒绝。
确认前重新检查仓库和分支状态,但不保证与其他 Git 工具之间的原子隔离。写入已开始后取消、超时或失败可能表示结果未知,不能当作已回滚;先手动刷新并核对当前分支、暂存区和工作文件,不要盲目重试。成功后界面重新发现并刷新仓库。
SVN 历史需要单独同意
本地 SVN 变更比较不连接服务器。打开远程历史前,需要审阅服务器与路径范围并勾选同意;授权约 5 分钟后过期,须重新手动同意。
目前仅支持系统信任、无需额外认证的 HTTPS SVN 服务。不提供用户名/密码、自定义证书或其他协议。历史范围固定在本地工作副本的修订,不自动获取服务器最新版本。
候选:确认式单文件取消暂存
在Git“已暂存”模式选中普通修改文件后,使用“取消暂存”预览,核对路径、固定HEAD、原Index与目标OID/模式,再勾选确认。它只恢复该文件的Index条目,不改工作文件或其他暂存内容;不是逐行取消暂存,不执行reset。
只支持工作字节仍等于Index的既有普通文件,拒绝选中MM、增删改名、冲突、unborn/detached、linked worktree、特殊Index、attributes/filters/hooks及扫描到的链接/硬链接。工作区含ignored/untracked也会扫描,每文件2MiB、总正文16MiB、最多2万节点,超限拒绝。过期或状态变化须重新预览;确认失败/取消可能结果未知,先点击恢复入口刷新核对,不自动重试或回滚。源码与隔离测试不等于正式发布或当前GUI已更新。
候选:确认式单文件暂存
Git“未暂存”模式选择普通修改文件后,预览原Index与捕获字节对应的目标OID,勾选并确认。仅支持Index仍等于固定HEAD的既有文件,不支持所选MM/增删改名/冲突和内容转换;工作树扫描与取消暂存同样受限。浏览器不发送正文或路径,确认仅用一次性token。
Stage先追加已确认原始字节的blob,再CAS发布Index。取消/失败可能留下不可达blob,即使Index未改变也不能保证整个仓库毫无副作用;不会删除对象或GC回滚。结果未知时stage和unstage共用该仓库恢复门禁,显式刷新核对后再操作。
候选:按完整变更块暂存
Git“未暂存”模式选中支持的普通文件后,读取精确块计划,勾选完整变更块,先生成候选预览,再核对并明确确认。计划和选择预览都只读;选择后重新修改勾选须重新获取计划。每侧最多256KiB、4000原始行及20万精确LCS格,显示真实换行标记,无近似写入。
此入口按原子块选择,块内逐行使用下方独立入口;支持MM文件连续选择剩余块(按当前Index→Work,不重放HEAD差异);整文件stage/unstage仍拒绝MM。二进制/非UTF8、新增/删除/改名/冲突仍不支持;候选部分unstage见下文。工作文件保留所有修改,Index仅选中块;确认后取消的append-only副作用及恢复门禁与单文件stage一致。
候选:按恢复块部分取消暂存
Git“已暂存”模式选中支持的M-space/MM文件后,读取Index→HEAD恢复计划。只撤回勾选的暂存块,其余暂存与全部工作修改保持。选择预览后核对候选OID,再独立确认;不是丢弃工作修改,不运行reset/checkout。
每端256KiB/4000原始行/20万精确格,UTF8保留原始换行,原子块不可拆成任意逐行。计划/预览只读,确认可追加合成blob,取消后不保证对象不存在,不GC回滚。与其他Index操作共用pending/unknown门禁。
候选:块内逐行选择
精确逐行暂存(Index→Work)与逐行取消暂存(Index→HEAD)为每条删除/插入分别提供选择。未选旧行保留,选中目标行按目标序位于块内保留行之后;删除与插入不自动配对。先生成只读候选OID预览,再独立确认;工作文件不改。
每输入及候选256KiB/4000行、精确LCS20万格、最多8000行操作。会合并原始行边界的EOF/CR-LF组合拒绝,不补换行。其余受限MM/仓库guard/append-only孤立对象及恢复门禁不变,不代表支持所有Git文件类型或配置。
候选:显式提交预览与确认
Git已暂存模式可显式填写author/committer姓名邮箱、秒级时间/时区与消息,读取只读预览,核对父HEAD/分支、新tree/commit OID和原文,再独立确认一次token。内容仅来自完整Index,不自动暂存、不amend、不push,工作文件保留。
初期仅支持已出生loose本地分支及既有reflog、普通stage0 Index、严格配置子集。initial/signed/hooks/packedrefs/shared-worktree/属性转换等拒绝,非一般Git提交兼容。提交作者与固定machine reflog审计身份不同;外部Git竞争不提供跨Index/ref全局原子性。确认中断需核对HEAD和Index,可能留下仅追加对象,不自动重试或回滚。
候选:最近提交消息复用
提交编辑器可显式读取最近HEAD的身份和原始消息。读取不会改草稿,点击复用才仅复制消息原文,不自动替换作者/提交者。复用立即作废旧预览,必须重新核对并确认;不是amend。CRLF/BOM/EOF状态保留,不支持的写入消息明确拒绝而不自动转换。
候选:Amend历史替换
独立amend编辑器显式填写提交者与消息,预览旧HEAD/旧tree、保留原作者和父列表,以及新tree/commitOID,再单独确认历史替换。支持受限same-tree消息修改,不自动stage、push或forc
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::81,最后更新 2026-11-06