dsh-svn:DSH 里的 TortoiseSVN 风格 SVN 面板

前言

在 DeepSeek Harness(DSH)里做带 SVN 工作副本的项目时,常见做法是打开终端手敲 svn status、svn log、svn diff。对话里的模型同样只能依赖你口述或临时拼命令,且提交、还原一类写操作一旦交给自动化,误伤整库的风险很难从流程上挡住。

dsh-svn 把 TortoiseSVN 那套交互搬进 DSH:在浏览器里看更改、翻历史、看版本差异、逐行溯源,并支持更新、提交、还原、解决冲突;同时向 Agent 暴露 5 个只读工具,让模型能查仓库而不越权写盘。插件由 EastChilde 维护,分类为客户端,已在 DSH desktop profile 实测通过。仓库见 GitHub,社区目录见 SkillHub。说明:非 TortoiseSVN 官方项目,也非 DeepSeek 官方项目;「TortoiseSVN 风格」仅指交互参考。

这是什么

dsh-svn 是 DSH 的 SVN 版本控制插件:服务端为 Cordis 插件,经宿主 webServer 挂载 /dsh-svn/* 路由;浏览器端通过 window.__ModuleLoader__ 注入,React 与纯 DOM 实现,无单独构建步骤。版本号以 package.json 为准为 0.1.0,许可证 MIT。

核心功能

更改(工作副本状态)

工作副本状态与 TortoiseSVN 常用记号一致:M 修改、A 新增、D 删除、! 丢失、C 冲突、R 替换、? 未纳入、I 忽略。支持按状态筛选、按路径过滤、勾选文件;可通过「对比服务器」(底层 svn status -u)查看远端是否有新版本。一键操作包括还原、纳入版本控制、删除、标记冲突已解决、提交所选。

历史与差异

历史列表展示版本号、作者、时间、提交信息、改动文件数;可按作者、关键词、路径、日期区间过滤,分页加载更早提交。点进某次提交可看完整提交信息与改动路径清单,支持复制版本号、查看整版差异;点单个路径只看该文件在此版本中的差异,「溯」可跳到该版本做 blame。

差异查看为标准 unified diff:行号、增删高亮、@@ 段、属性变更;可切换换行、复制差异、看 +N / -N 统计。未纳入版本控制的文件按「新增」合成 diff;二进制文件会明确提示。

逐行溯源(blame)

展示行号、版本、作者、行内容;点版本号可跳到该版本的差异视图。本地有未提交改动时,对应行显示为 -。

写操作与工作副本管理

写操作包括:更新(svn update --accept postpone,冲突会标出)、提交(提交信息 UTF-8 写入,减轻 Windows 乱码)、还原(svn revert -R)、纳入(svn add)、删除(svn delete)、解决冲突(保留工作副本 / 我的版本 / 仓库版本 / BASE)、清理(svn cleanup)。危险操作有确认弹窗;同一工作副本的写操作串行执行。

首次打开会扫描当前目录、用户目录、各盘符(最多 8 个)自动发现工作副本;内置目录浏览器可选含 .svn 的目录,并记住上次位置。也支持手动输入路径、多工作副本切换。侧栏显示仓库 URL、仓库根、最后提交版本 / 作者 / 时间。设置里可指定 svn.exe 路径、关闭自动发现。

Agent 工具(只读)

模型在对话中可直接调用下列工具,无需自行拼 shell:

工具 用途
svn_info URL、仓库根、当前版本、最后提交
svn_status 本地更改清单,可选 remote 对比服务器
svn_log 提交历史,支持 path / author / keyword / 日期 / 分页
svn_diff 工作副本差异、某版本差异、版本区间差异
svn_blame 逐行溯源,可指定起始行与行数

刻意不提供 commit、update、revert 等写操作:提交由人在面板里确认,模型只读,避免误提交整个工作副本。

Windows 中文路径

svn.exe 在中文 Windows 上对命令行路径的编码限制会导致中文路径参数损坏。插件在读操作、提交、纳入、还原等路径上做了分流与降级策略:读侧 diff / blame / 历史等可用;部分含中文路径的还原、删除、局部提交 / 纳入会拒绝并提示,必要时可改用 TortoiseSVN。提交信息始终通过 -F file --encoding UTF-8 写入。

入口

入口 位置
会话头部「SVN」按钮 对话页顶部工具栏,全屏面板
右侧栏「SVN」标签 侧栏概览:状态统计、改动文件、最近提交
设置 → SVN 版本控制 设置页整页入口
深链 http://127.0.0.1:<DSH 端口>/#svn(历史 #svn/history)

安装与启用

装到其他 profile 或另一台机器时,使用 README 中的 link 安装方式(将路径换成你本机插件目录):

dsh plugin --profile desktop add link:D:\path\to\dsh-svn

也可手动:把插件目录放到任意位置;在 profile 的 node_modules 下建 junction / symlink 指向该目录;在 profile package.json 的 dsh.profile.bundles 追加 dsh-svn;重启 DSH(浏览器刷新即可,服务端改动需重启或 POST /dsh-svn/reload)。卸载时从 bundles 移除 dsh-svn、删除 node_modules\dsh-svn 后重启。

配置

配置文件位于 %DSH_HOME%\dsh-svn\config.json,示例:

{
  "version": 1,
  "workingCopies": [{ "path": "D:\\projects\\my-repo", "name": "my-repo", "auto": false }],
  "svnPath": null,
  "autoDiscover": true,
  "seeded": true
}

svnPath 为空时会查找 TortoiseSVN 默认安装位置或 PATH,也可用环境变量 DSH_SVN_PATH。删除该文件可在下次打开时重新自动发现。

典型用法

  1. 安装并重启 DSH 后,从会话头「SVN」或侧栏标签打开面板,选择或浏览含 .svn 的工作副本。
  2. 在「更改」页勾选文件,查看 diff,确认后填写提交信息并提交;有冲突时在面板内 resolve 或按提示处理。
  3. 在「历史」里按作者或路径过滤,点某版本看整库或单文件差异,需要追责时用 blame。
  4. 若希望模型协助排查,在对话中让其调用 svn_status、svn_log、svn_diff 等只读工具;写操作仍应在面板中由人确认执行。

开发与自测时,在插件目录可运行:

cd dsh-svn
node test/setup-fixture.mjs
node test/smoke.mjs
node test/http.mjs

test/http.mjs 默认请求 http://127.0.0.1:61382/dsh-svn,可用环境变量 DSH_SVN_BASE 指向实际 DSH 端口下的 /dsh-svn 前缀。

适用场景与注意

适合仍在使用 Subversion、且日常在 DSH 里写代码或驱动物理机的开发者:一套 UI 覆盖 status / log / diff / blame / 基本写操作,又能把只读查询交给 Agent。

安装前建议阅读仓库源码与 MIT 许可证。插件以当前 DSH 进程权限执行 svn.exe,不采集、不上传数据;SVN 凭据由 svn.exe / TortoiseSVN / 系统凭据缓存管理。路径会折算到已登记工作副本内的相对路径,拒绝 .. 越界;写操作有 UI 二次确认与超时、输出上限(如 diff 1.8 MB)。

DSH 生态侧秉持「一切皆插件」;SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,本文介绍对象为维护者发布的独立插件。

结尾

dsh-svn 把 SVN 工作副本的日常操作收进 DSH 界面,并用只读 Agent 工具补齐「让模型看得懂仓库、但不能替你提交」这条边界。需要安装说明与接口列表时,以 GitHub README 为准;在插件市场浏览时可打开 SkillHub 目录页。

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

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

Xiaoye