中文EN

@feng0531/dsh-code-review

git已测通过npmSEE LICENSE IN LICENSE

复用当前 DSH Agent 模型只读审查 Git 与 SVN 变更,支持变更预览、显式上下文及经审批的模型请求。

下载量 / Downloads
24,764
依赖体积 / node_modules
2.97 MB
测试时间 / Tested
2026-11-06

安装

dsh plugin --profile web add @feng0531/dsh-code-review

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载—
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

DSH Code Review

在 DeepSeek Harness(DSH)的 Agent 对话里审查 Git / SVN 代码变更。插件先预览并核对审查范围,再在当前人类明确授权内,用当前 Agent 选择的模型生成中文问题报告;已明确要求审核且预览匹配时,不重复询问确认。

只读:不修改代码,不自动修复,不提交、回滚或更新你的业务工作副本。

快速开始:第一次怎么用

1. 安装并启用插件

在 DSH 插件管理器中安装并启用本项目,或在终端执行:

dsh plugin add https://github.com/f-e-n-g-0531/dsh-code-review.git

需要 Node.js 22+,以及已安装的 Git 或 SVN 命令行工具。插件依赖 DSH,不是独立命令行审查程序,不能用 npm test 或直接运行源码来发起审查。

安装或升级后,确认当前 DSH 已加载插件。仓库发布新版本不会自动升级正在运行的插件;如当前会话仍未获得新工具,按 DSH 的插件加载提示重新加载或新建会话。

2. 在目标代码仓库创建 Agent 会话

将会话的工作目录设为要审查的 Git 仓库根目录或 SVN 工作副本根目录,并在 DSH 中选好模型。不需要另给本插件配置 API Key。

例如,你的 SVN 工作副本是 D:/work/my-project,就以该目录作为会话工作目录。不要把网页地址或仓库远端 URL 当作本地工作目录。

如果会话工作区中有多个子仓库,见下方“多个仓库”示例。

3. 把这段话发给 Agent

使用 code_review_preview 预览当前仓库所有已跟踪文件的改动。
先告诉我:审查哪个仓库、哪些文件、额外读取哪些上下文、发送给哪个模型,以及哪些文件不能审查。
先不要调用 code_review_execute,等我确认。全程不要修改代码。

这是发在 DSH 对话输入框里的请求,不是终端命令。Git 默认比较 HEAD 与当前工作区的净变化;SVN 默认比较本地 BASE(工作副本记录的基础版本)与当前文件。

预览不调用审查模型,但 Agent 对话本身仍可能使用模型。工作副本模式默认不读 SVN 远端;SVN 历史模式会读取仓库版本,必须另行明确允许远端访问。

4. 检查预览,再确认执行

检查 Agent 展示的:

  • 仓库和文件是否选对,有没有遗漏或意外包含的文件。
  • 额外上下文是什么;上下文是辅助理解的文件,也可能随执行发送给模型。
  • 模型提供方和模型名称是否符合你的数据使用要求。
  • 阻断、排除和预算限制;不能审查的文件不能当作已通过。

确认无误后,在同一会话回复:

确认刚才展示的预览范围和模型,使用该 previewId 执行只读审查。

以上是“只预览,等我确认”的流程。若你已明确要求“审核 r7364”(SVN 远端访问仍须单独授权),Agent 应先内部预览,固定并核对范围、模型路由、预算与权限;预览符合当前明确授权时,直接执行,不再要求你重复确认。只要求预览或明确要求等待确认时不得执行;范围、模型或发送目的地超出授权,或授权边界不明确时,先询问。

插件使用预览返回的 ID 执行。默认预览有效期约 5 分钟,返回 expiresAt 与 validForMs;到期、文件、模型或会话目录变化后,需要新预览并重新核对当前授权,不能复用旧预览批准。confirmed:true 表示当前人类已明确授权且本次预览与授权一致,不是无授权绕过。计划最少调用只是初始下限,不是总调用数或耗时上限,后续取证、复核与综合会增加工作量。会话工具权限与宿主安全校验照旧,确认不能绕过限制。

后台执行如何等待

后台任务推荐调用 code_review_wait({jobId, waitFor:"terminal"}),一次最多等待 60 秒,中间检查点继续逐条保存但不会逐条唤醒等待方。任务仍在运行就继续等待;超时返回 changed:false 不代表结束。需要逐事件进度时使用 waitFor:"progress",把返回的 waitRevision 原样作为下一次 after,不要自行加一,也不必每次再查 status。code_review_status 用于主动分页取完整结果或检查点。等待调用取消只停止等待,不取消后台审核。

5. 查看结果

执行工具默认在对话中返回 一份人可读的中文 Markdown 报告,同时保留完整结构化 JSON。首屏先回答所选范围是否查完、记录了哪些候选和哪些结论尚不能下;问题卡按“本次新增(复核支持)”“当前源码问题(复核支持)”“待核实”“原有问题(复核支持)”“已反驳”分区,说明位置、触发条件、影响、依据及已有建议。分区仍遵循严格证据判定:仅 supported 或缺少有效旧新对照不能算本次新增,当前源码模式不作历史新增归因;复核支持和引用校验不等于事实、运行复现或因果证明。

主文聚合未完成原因并给出下一步;完整证据与判定、逐项覆盖、风险计划、执行诊断及聚合限制保留在单独的技术报告;后台任务可用 code_review_status({jobId,detail:"technical"}) 读取,不需要拼接批报告。通俗主文只是已有结果的呈现,不代做源码复审、不隐藏限制、不放宽证据门槛,也不会为改写报告额外调用模型或改变取证算法。执行诊断列出实际加载的插件版本、阶段调用和墙钟统计;累计调用耗时可能并发重叠,不代表纯提供方耗时或可相加的总耗时。

如需保存报告,可以另行告诉 Agent:“将本次报告保存到我指定的位置”。插件本身不会自动在业务仓库创建报告文件。

按场景直接使用

下面的自然语言可以直接发给 Agent。其中只要求预览或明确要求等待确认的示例,不得直接执行;若直接明确要求审核,则按上面的授权规则内部核对预览后执行,不重复询问。

只审查几个文件(Git / SVN 工作副本)

使用代码审查插件,只预览 src/api.ts 和 src/client.ts 的当前改动。
自动补充理解它们所需的依赖文件。先展示范围和模型,等我确认再执行,不修改代码。

对应 code_review_preview 参数(工具参数,不是 shell 命令):

{"selectedPaths":["src/api.ts","src/client.ts"],"autoContext":true}

文件名要替换成仓库中实际存在的变更路径。未跟踪文件不会默认纳入,必须用 selectedPaths 显式选择。省略该参数时,范围是整个仓库的变更,不限于当前子目录。

审查 Git 单个提交

使用代码审查插件预览 Git 提交 abc1234,先展示范围,等我确认后再执行。
{"commit":"abc1234"}

将 abc1234 换成实际提交号。与该提交的唯一父提交比较;根提交与空旧版本比较。合并提交请改用两个版本比较,明确选择旧、新端点。

审查 Git 两个版本之间的变化

预览 Git 的 v1.0.0 到 v1.1.0 之间的代码变化,自动读取必要依赖。先展示范围,不直接执行。
{"baseRevision":"v1.0.0","targetRevision":"v1.1.0","autoContext":true}

比较两个版本的文件树,不自动计算合并基点,也不会把工作区中的未提交正文当作历史正文。commit 不能与这两个参数混用。

只审查 Git 暂存区或未暂存改动

提交前只看已暂存内容,或只想确认工作区里还没暂存的修改:

{"changeScope":"staged"}

staged 比较 HEAD 与索引(相当于 git diff --cached):右侧是已暂存内容,工作区里尚未 git add 的修改不作为变更内容,也不会作为变更正文发送给模型。把值换成 "unstaged" 则比较索引与工作区(相当于 git diff):左侧是已暂存内容,仅作为旧侧基线,右侧是工作区文件。省略 changeScope 时默认仍是 HEAD 到工作区的净变化。

这两个范围只用于 Git 工作副本,不能与 commit、baseRevision、targetRevision、SVN 参数或 reviewMode:"project" 同时使用。未跟踪文件仍默认排除;worktree / unstaged 下用 selectedPaths 显式选择后才会纳入。预览和报告都会标明实际比较的是哪两个内容。

staged 下显式上下文、自动依赖、调用方候选和规则文件仍按工作区当前内容读取,可能包含尚未暂存的修改;预览会列出这些文件。

审查 SVN 单个 revision

例如审查 r7315 引入的净变化,即 r7314 → r7315:

使用代码审查插件预览 SVN r7315(与 r7314 比较)。
允许为这次预览读取当前工作副本对应的远端仓库固定版本。
先展示来源、范围和模型,不发送源码给审查模型,等我确认再执行。不要更新工作副本。
{"svnRevision":"7315","svnAllowNetwork":true}

必须在 SVN 工作副本根目录运行。插件从该工作副本对应的仓库 URL 读取固定版本,不要求先把工作副本更新到 r7315,也不会执行 update。远端认证不可用时会明确报错,不会改用本地文件冒充历史版本。

审查 SVN revision 区间

预览 SVN r7300 到 r7315 两个版本端点的净变化。
允许读取当前工作副本对应远端仓库的固定版本,自动补充同版本依赖。
先展示范围和来源,等我确认后执行,不修改或更新工作副本。
{"svnBaseRevision":"7300","svnTargetRevision":"7315","svnAllowNetwork":true,"autoContext":true}

这是两个版本端点的比较,不是逐一审查区间内的每个提交。revision 使用带引号的十进制数字,不写 r7315、HEAD 或日期;同一路径比较要求旧版本小于新版本;不同分支可使用相同 revision(见下一节)。svnRevision 与区间参数不能同时使用,也不能混用 Git 版本参数。

svnAllowNetwork:true 只允许读取本次工作副本对应仓库的固定版本,不授权更新、合并或任意远端 URL。本地 file: 仓库通常无需此参数。

比较 SVN 两个分支

跨分支、有效继承属性和独立基线替换从正式版 v0.80.1 提供。请先确认当前 DSH 加载的版本;仅更新仓库不会升级宿主插件。

{"svnBaseRevision":"7315","svnTargetRevision":"7315","svnBasePath":"branches/release","svnTargetPath":"trunk","svnAllowNetwork":true,"autoContext":true}

分支路径相对于当前SVN仓库根,不是本地目录或任意URL。旧、新两侧分别固定URL、peg与operative revision;同revision可以比较不同分支。只能在同仓库UUID内比较;嵌套重叠根和不明确来源拒绝,不能推断merge提交归属。

查看有效继承 mergeinfo

{"svnRevision":"7315","svnAllowNetwork":true,"svnEffectiveMergeinfo":true}

显式允许读取选中节点及最近祖先的合并属性,额外读取受共享预算限制;工作副本模式也可使用该开关并保持离线。空属性屏蔽继承,祖先证据不完整、混合BASE或不安全来源显示unknown;结果仅为属性导航,不证明相关revision已经审核。

审查未提交替换

{"selectedPaths":["src/module","src/module/old.cpp","src/module/new.cpp"],"svnReplacementBaseRevision":"7314","svnReplacementAllowNetwork":true}

替换比较的旧侧是你显式选择的目标URL固定历史节点,不是本地BASE,也不证明它就是被删除节点的原始revision。目录后代必须独立选入;只选父目录不能算后代均已批准。远端读取使用独立许可,默认不访问。没有可确认旧来源时明确拒绝,不读取复制源冒充旧节点。

加入业务要求、规则和调用方

只预览 src/api.ts 的改动;业务要求是“请求失败时必须释放连接”。
把 src/types.ts 作为辅助上下文,使用 review-rules.md 的项目规则,
并在 src/clients 目录中寻找引用该变更文件的代码。先展示读取范围,等我确认。
{
  "selectedPaths": ["src/api.ts"],
  "contextPaths": ["src/types.ts"],
  "rulePaths": ["review-rules.md"],
  "callerScopePaths": ["src/clients"],
  "busine

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:165,最后更新 2026-11-06

链接

GitHub · Homepage · npm

同类插件