DSH Code Review
精简、只读的 Git/SVN 代码审查插件。读取指定变更及显式上下文,复用当前 DSH Agent 的模型,输出有证据和可校验位置的问题。不会自动修复、提交、回滚或发布。
当前状态
当前代码版本为 0.6.2,包含有界覆盖预检、显式项目规则及候选证据与反证复核;发布状态以 npm 和 GitHub Release 为准。已通过真实临时 Git/SVN 仓库测试,以及隔离进程中的真实 DSH ToolRuntime 注册验证。当前开发会话的实际预览已返回0.6.0的plan/rules字段,空变更预览与默认关闭外发已验证;已进行经宿主审批的六次小规模真实试跑,累计12次模型调用;四组合成正负例与历史修复对照符合预期,历史引入方向检出候选但引用复核未完成(partial)。不是独立盲测或整体质量证明。详情见 试跑结果。
项目规则(0.5.0)
code_review_preview 可传 rulePaths: ["review-rules.md"],只读显式选入的仓库相对路径;不会自动搜索父目录、加载远程规则或执行 include。仅接受 UTF-8 .md/.txt,最多4个、单个16 KiB、合计32 KiB。规则还占用快照和模型输入预算,超限不静默截断。
规则不能与 contextPaths 重复,不能绕过已排除/删除文件;未跟踪规则须同时通过 selectedPaths 显式选入变更范围。预览与审批列出路径和SHA-256,并告知全文外发;变更使旧预览失效。初审和复核使用同一规则快照,报告仅列来源/哈希,不重复全文。规则是非可信约束数据,不增加工具或权限;风格违规不自动算缺陷,模型遵循规则的质量尚未实测。
大变更覆盖(0.6.0)
预览返回 plan:逐文件初始输入字节、关联回退状态和 ready/input-blocked/excluded/blocked。预检包括提示词、检索目录、规则及上下文,不外发模型。minimumCalls 仅是所有ready主文件各一次初始请求的下限,不是费用估算或可完成承诺;检索、复核会增加调用。200文件全ready仍可能被100次全局调用额度截断。
执行报告的 files/coverage 才是实际覆盖;关联上下文发送不等于作为主文件审查。initialInputBytes 仅在进入预检的文件上存在。followup.suggestedPaths 列出未完成项(包括初审完成但复核未完成),不自动续审,也不代表阻断原因已解决。再次执行需新预览、新审批,并显式重选规则/上下文。空建议不代表没有限制或代码正确。
本阶段不抬高200文件/4MiB快照硬限,不拆分超大文件或hunk,不支持跨审批自动恢复。
环境
- Node.js 22+,Git,SVN(测试还需要 svnadmin)。
- DSH 提供 tools、llm、approval 服务;当前已核对宿主 API,尚未承诺稳定跨版本兼容。
- Windows SVN 必须支持 UTF-8 路径;CI 对临时 SVN 工具设置 UTF-8 manifest,不修改用户安装的 SVN。
安装
在 DSH 插件管理器中添加本仓库 Git 地址,或克隆后添加本地绝对路径。包包含组合声明,启用时默认 allowModelSending: false,只能预览。需要审查时在插件配置中显式设为 true,每次执行仍需宿主审批。
dsh plugin add https://github.com/f-e-n-g-0531/dsh-code-review.git
本项目不自动修改已有 profile;安装成功也不等于模型与审批链路已验收。
使用流程
插件入口为 index.mjs,由 DSH 插件加载器装载(本项目不自动修改 profile)。配置 allowModelSending: true 才能执行模型审查;缺省只允许本地预览。
- 在目标仓库的活跃 Agent 会话中调用
code_review_preview。 - 可用
selectedPaths精确选择变更文件;未跟踪文件必须显式选入。contextPaths提供仓库相对路径的额外上下文。 - 展示预览中的仓库范围、文件、排除原因及模型提供方。调用
code_review_execute,传入previewId和confirmed: true。 - 服务另外请求宿主审批,只有
allowed-once允许外发;确认参数不能绕过审批。宿主never策略、无应答者或拒绝均不发送代码。 - 返回
json(结构化报告字符串)及markdown(中文报告)。文件、模型或目录变化时需重新预览。
默认在发现的仓库根目录审查,而不是仅当前子目录;预览会显示实际根目录。发送内容包括可审查文件的两侧完整文本、属性和显式上下文,可能包含敏感信息。选择前请检查范围,不要把密钥文件作为上下文。
升级后检查
安装版本号不等于当前进程已重新加载。升级后可先调用本地预览:0.6.0应返回 plan 和 rules(未选择规则时为空数组)。若缺失,核对当前profile的依赖和加载来源,必要时经用户确认重启DSH,再重新预览;不要因此开启外发或重复安装。ready仅表示初始输入可容纳,不代表已审查。
支持与限制
- Git:HEAD 到工作区净变化,含暂存和未暂存变化;支持未出生 HEAD、重命名、新增和删除。没有独立 staged/unstaged 审查模式。
- SVN:本地每节点 BASE 到工作副本,包含目录属性,无需连接远端。复制、替换、switched、externals、冲突及目录结构变化目前阻断并说明,不宣称完整 SVN 历史支持。
- 二进制、不能解码的内容、链接、非普通文件和超限文件明确阻断。不会转码写回。
- SVN 配置
svn:keywords的文件目前明确阻断,避免把关键字展开误认为代码变化;CRLF/LF 保留原始文本并提示模型不应仅因换行差异报缺陷。 - 当前逐文件审查;模型可在已批准的可审查文件两侧及显式上下文中搜索和读取行段,不访问范围外文件,不开放 shell 或模型工具调用。JS/TS实现与测试可按唯一命名关系分组,每组最多4个文件,同组两侧作为主文件上下文;仍逐主文件审查,不是一次联合审查或通用依赖图。组输入超预算回退单文件并报告限制;大文件超预算不截断,标记未完成。
- v0.2.0 提供有界 diff/hunk 与紧凑编辑引用。发现的归因引用可校验,但因果解释仍未经独立验证;缺失归因保留发现并标记 partial。检索截断同样进入报告限制。
- JSON 报告包含检索来源目录和本地已成功读取的审计元数据,不保存重复源码;retrieved-locally 不表示模型已接收或采用证据。
- 快照双次采集和内容复验用于发现普通并发修改,不是文件系统原子快照,不承诺防御恶意并发链接置换。
- 程序校验定位不等于证明缺陷成立;模型结果需人工判断。
partial/failed/cancelled不表示通过;无发现也不证明代码正确。 - 运行默认最多 200 个变更,单文件 256 KiB,总快照 4 MiB;上下文最多 20 个。单模型输入约 96 KiB,最多 100 次调用,每文件的完整模型/检索循环共用 120 秒超时。开发版每文件的候选生成与复核两阶段各最多 3 轮检索及随后结论调用;全局检索最多 50 次,序列化输出累计 256 KiB,单次最多 64 KiB,读取最多 200 行。取消后等待模型适配器清理完成;适配器必须遵守 AbortSignal,不合作的同进程实现无法强制终止。
候选复核(0.4.0)
审批后的候选生成结果会进入证据与反证复核;无候选不追加调用。两阶段共享同一单文件超时、全局模型调用和只读检索预算,复核也不开放可执行工具或扩大快照范围。
报告保留全部候选与原定位,分别显示模型支持、模型反驳、不确定或未完成。支持/反驳必须附带批准快照的来源、SHA-256、完整行范围及精确原文;这些校验不证明缺陷或因果成立。反驳不会静默删除候选;不确定、预算耗尽及无效复核均记入限制。生成阶段的限制在复核超时后仍保留。证据核验的本地读取也消耗共享读取预算。
目前通过受控模型协议和安全回归测试,尚未证明真实模型的误报/漏报改善。真实缺陷评测仍待完成。
开发与验证
npm ci --ignore-scripts
npm test
node scripts/host-smoke.mjs <DSH-checkout>
测试在 OS 临时目录创建仓库并清理,不修改用户业务仓库。宿主 smoke 只加载真实 Cordis/ToolRuntime;模型与审批为桩,不代表 GUI 或真实模型验收。
CI 覆盖 Ubuntu/Windows × Node 22/24,版本 tag 或手动触发,普通 push 不触发。正式发布需在版本 tag 上手动运行 CI 并勾选 publish;普通 tag 测试不会发布。
正式发布
- 在本仓库 Actions Secrets 中配置
NPM_AUTOMATION_TOKEN,需要目标 npm 包的发布权限;工作流仅在 npm 发布步骤映射为NODE_AUTH_TOKEN。 - 确认包名
@feng0531/dsh-code-review的所有权、版本号和分发许可;更新版本及锁文件,提交并推送同名vX.Y.Z标签。 - 在 Actions → CI → Run workflow 选择该标签,设置
publish: true。四组测试全部通过后才进入发布任务。 - 打包一次,在临时目录安装检查,然后先发布 npm,核对 registry 的 SHA-512 完整性,再用同一 tgz 和 SHA256SUMS.txt 创建 GitHub Release。
正式发布只通过 GitHub Actions,不使用本地 npm publish。该流程已在 v0.1.1 完成实际发布及两端同工件核验。若 npm 已成功而后续步骤失败,不要更换同版本安装包或盲目重跑发布;需核对 registry 工件并补齐 GitHub Release。缺少 token、版本不符、安装检查或 npm 发布失败均不会创建 Release。
项目与许可
本仓库独立维护、测试和交付,采用 DSH Code Review 非商业源码公开许可证 1.0。
允许非商业用途的使用、学习、修改和分发;禁止未经书面授权的商业使用,包括公司内部用于商业项目的开发、测试和维护,以及收费服务和商业交付。修改和分发须保留版权、许可证及适用的第三方声明,并注明修改内容。商业用途须另行取得相关权利人的书面授权。
本许可证属于源码公开许可证,不是 OSI 认可的开源许可证。依赖项及另行标明许可的组件仍适用各自许可证。
No comments yet. Be the first to write one.