并行调用多个编码智能体评审代码改动并合并结论
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/yutingzhao1991/dsh-review.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 64 处,展示前 32 条)
- 读取本地文件index.js:99
return statSync(executable).isFile() ? '' : '(⚠️ 不是普通文件,调用会失败)'; - 读取本地文件index.js:410
if (statSync(path).isDirectory()) return; - 删除本地文件递归index.js:606
await rm(workdir, { recursive: true, force: true }).catch(() => undefined); - 删除本地文件递归index.js:716
await rm(workdir, { recursive: true, force: true }).catch(() => undefined); - 删除本地文件递归index.js:720
await rm(workdir, { recursive: true, force: true }).catch(() => undefined); - 删除本地文件递归index.js:729
await rm(workdir, { recursive: true, force: true }).catch(() => undefined); - 读取本地文件lib/changes.js:228
const info = await lstat(absolute); - 读取本地文件lib/changes.js:270
const stat = lstatSync(absolute); - 读取本地文件lib/changes.js:281
buffer = readFileSync(absolute); - 读取本地文件lib/reviewers.js:324
text = await readFile(task.reportPath, 'utf8'); - 读取本地文件lib/schema.js:56
for (const entry of readdirSync(join(home, 'profiles'))) push(join(home, 'profiles', entry)); - 读取本地文件selftest.mjs:28
return readdirSync(tmpdir()).filter((name) => name.startsWith('dsh-review-') && !name.startsWith('dsh-review-selftest-')).length; - 写入本地文件selftest.mjs:86
if (reportPath !== undefined && options.report !== undefined && options.skipReportFile !== true) writeFileSync(reportPath, options.report); - 写入本地文件selftest.mjs:233
mkdirSync(join(WORK, 'src'), { recursive: true }); - 写入本地文件selftest.mjs:234
writeFileSync(join(WORK, 'src', 'b.js'), 'export const b = 2;\n'); - 删除本地文件递归selftest.mjs:235
process.on('exit', () => rmSync(WORK, { recursive: true, force: true })); - 读取本地文件selftest.mjs:658
return match !== null && readFileSync(match[1], 'utf8').length > 500; - 删除本地文件递归selftest.mjs:662
if (kept !== null) rmSync(join(kept[1], '..'), { recursive: true, force: true }); - 读取本地文件selftest.mjs:933
if (!existsSync(command)) throw new Error('not an executable file'); - 写入本地文件selftest.mjs:1039
writeFileSync(huge, 'x\n'.repeat(HUGE_LINES)); - 删除本地文件selftest.mjs:1051
rmSync(huge, { force: true }); - 写入本地文件selftest.mjs:1058
mkdirSync(binDir, { recursive: true }); - 写入本地文件selftest.mjs:1062
writeFileSync(join(binDir, `blob-${index}.bin`), blob); - 删除本地文件递归selftest.mjs:1077
rmSync(binDir, { recursive: true, force: true }); - 读取本地文件selftest.mjs:1096
if (!existsSync(command)) throw new Error('not an executable file'); - 读取本地文件selftest.mjs:1120
if (!existsSync(command)) throw new Error('not an executable file'); - 读取本地文件selftest.mjs:1142
if (!existsSync(command)) throw new Error('not an executable file'); - 删除本地文件递归selftest.mjs:1413
if (match !== null) rmSync(join(match[1], '..'), { recursive: true, force: true }); - 执行外部命令来自配置/变量selftest.mjs:2416
const result = spawnSync(process.execPath, ['--input-type=module', '-e', script], { encoding: 'utf8' }); - 删除本地文件递归selftest.mjs:2419
rmSync(root, { recursive: true, force: true }); - 执行外部命令来自配置/变量selftest.mjs:2663
const out = spawnSync(spec.argv[0], spec.argv.slice(1), { cwd: spec.cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }); - 执行外部命令固定命令selftest.mjs:2676
const out = spawnSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
让你的 dsh 自由调用任意智能体或模型来审查。
README
由 DeepSeek 最新模型翻译生成dsh-review
代码评审不该绑死在一家身上。把改动交给一个 CLI 编码智能体,或交给一个跑 DSH 配置里模型的子智能体——最后读一份合并好的结论。
配置页
它能做什么
- 两种评审者,都是真智能体。 codex / claude / gemini / opencode / cursor,或你自己拼命令行的任意 CLI;或者一个跑 DSH 配置里模型的子智能体。
- 多个评审者,一份报告。 并行跑;每个评审者一节,按你勾选的顺序排列。
- 评审模式。 强度与提示词起个名字(quick、balanced、deep……)配一次就能复用,不必每次重写评审要求。
- 在 GUI 里配置,而且自动保存。 勾选要用的评审者,其余都收在「高级配置」里;停止输入约半秒后自动落盘,顶部会显示保存状态,最下面仍留一个「立即保存」按钮作手动重试。
- 不碰密钥、不碰端点。 provider 与凭据都留在你的 DSH 配置里,插件只用已经有的。
展开完整文档(README 剩余 1 节)
dsh-review
代码评审不该绑死在一家身上。把改动交给一个 CLI 编码智能体,或交给一个跑 DSH 配置里模型的子智能体——最后读一份合并好的结论。
配置页
它能做什么
- 两种评审者,都是真智能体。 codex / claude / gemini / opencode / cursor,或你自己拼命令行的任意 CLI;或者一个跑 DSH 配置里模型的子智能体。
- 多个评审者,一份报告。 并行跑;每个评审者一节,按你勾选的顺序排列。
- 评审模式。 强度与提示词起个名字(quick、balanced、deep……)配一次就能复用,不必每次重写评审要求。
- 在 GUI 里配置,而且自动保存。 勾选要用的评审者,其余都收在「高级配置」里;停止输入约半秒后自动落盘,顶部会显示保存状态,最下面仍留一个「立即保存」按钮作手动重试。
- 不碰密钥、不碰端点。 provider 与凭据都留在你的 DSH 配置里,插件只用已经有的。
安装
clone 到一个长期保留的位置,然后装进 profile:
git clone git@github.com:yutingzhao1991/dsh-review.git ~/code/github/dsh-review
dsh plugin --profile web add ~/code/github/dsh-review # web 换成你的 profile 名
也可以让智能体调 plugin_manager 的 install_bundle,target 传上面的绝对路径。
装完重启宿主。升级同理:git pull 之后重启。
怎么用
review() // 用你启用的评审者,评审未提交的改动
review({ reviewers: ["codex", "deep-dive"] }) // 这次指定评审者
review({ mode: "deep" }) // 深度模式:多个评审者
review({ base: "main" }) // 工作区相对某个分支的改动
review({ commit: "abc1234" }) // 某个提交引入的改动
review({ instructions: "只看并发与错误处理" })
评审要跑几分钟,所以调用默认立即把 job id 交回(不等):用 job_output 读结论、 job_kill 终止,或者就等着——跑完会自动通知。
评审者是显式启用的:一个都没启用时,不带 reviewers 的调用会直接报错,而不是悄悄把能用的都跑一遍。
评审者
| 类型 | 跑什么 | 自己会读代码吗 | 依赖 |
| cli | 你已经信得过的编码智能体 | 看预设(codex 会自己读仓库) | 本机装了那个 CLI |
| subagent | DSH 子智能体 | 会,它有工具 | 一个 subagent provider |
CLI 预设:codex、claude、gemini、opencode、cursor,或 custom 自定义命令模板。
有一点值得知道:subagent 不写 agentModel 就会继承父会话的模型,所以它不自动等于「第二意见」——想要独立意见就显式指定模型。
子智能体默认带两道保险:不给它 review 工具(免得评审者再起评审者),以及 30 分钟墙钟上限 (timeoutMs 按评审者覆盖;hardTimeoutMs 仍然限制整次调用)。运行期间会报进度,跑得久也不像卡住。
这里刻意没有「把 diff 丢给一个裸模型」这种类型:能自己打开仓库的评审者,比只看到手头材料的更有价值。
- id: review
name: dsh-review
config:
agents:
- preset: codex
model: gpt-5.6-sol
- preset: claude
reviewers:
- id: deep-dive
kind: subagent
provider: spawn
agentProvider: bailian # 你 DSH 配置里的任意 provider agentModel: deepseek-v4.1-flash
子智能体的模型同样来自你的 DSH 配置(provider、密钥、上下文窗口),GUI 里直接列出已注册的那些,插件里不复制任何一份。
评审模式
一个模式就是一束「盯多严、额外说什么、用谁」。
| 字段 | 含义 |
| strength | light / standard / deep——内置的评审措辞 |
| prompt | 这个模式自己的评审指令 |
| reviewers | 这个模式用哪些评审者 |
| when | always / complex / never——给智能体看的评审策略 |
config:
defaultMode: balanced
modes:
balanced:
strength: standard
reviewers: [ codex ]
deep:
strength: deep
reviewers: [ codex, deep-dive ]
一个模式都不配时,插件不追加任何约束——你继续用自己的提示词管智能体就行。when 只有在同时打开 injectPolicy: true 时才生效,而且它只是写进系统提示词的要求,不是强制闸门。
配置项
所有配置都能在 GUI 里改;下面是同一批键在 YAML 里的样子,只列值得知道的:
| 键 | 默认 | 说明 |
| defaultReviewers | 一个都没有 | 调用没给 reviewers 时用哪些;空 = 不启用任何评审者 |
| defaultMode | 不设 | 调用没给 mode 时套用的模式 |
| language | auto | zh / en / auto 报告语言(auto 跟随你的指令) |
| injectPolicy | false | 把各模式的 when 规则写进系统提示词 |
| agents / reviewers | [] | 定义 CLI 与子智能体评审者(agents 是预设简写,reviewers 是完整写法) |
| modes | {} | 命名评审模式 |
| waitMs | 0 | 调用阻塞多久后交回 job id。0 = 立即交回(评审要跑几分钟,等着基本是白等) |
| hardTimeoutMs | 0 | 墙钟上限;0 = 不限制——什么时候停由你决定 |
| maxResultChars | 80000 | 报告上限;超出会截断并给出完整报告路径 |
| maxDiffChars | 160000 | 需要 diff 的评审者能看到的变更正文上限 |
已知限制
- 评审始终在会话工作目录里跑,不能指向别的仓库。
- 一次调用只评一种范围(未提交 / 某个分支 / 某个提交),与底层 CLI 一致;base 与 commit 互斥。范围 + instructions 对子智能体可用,但 codex 这类 CLI 不行(范围开关与 PROMPT 互斥):选中的评审者全都是这种 CLI 时调用会被直接拒绝,否则在报告脚注里点名没收到关注点的那几个。
- 模式的提示词只在没给范围时才能到达 codex(它的 CLI 不允许两者同时出现);范围永远生效,提示词被跳过时报告里会写明。
- codex 只在它信任的目录里能跑(~/.codex/config.toml)。
- base/commit 写了不存在的分支/提交会在起评审者之前直接报错,而不是跑几分钟再报一个「什么都没评」的批次。
- 报告骨架(标题、脚注、错误信息)目前固定中文;language 只影响评审者自己的指令。
- 被截断的报告留在 $TMPDIR/dsh-review-*/report.md;未截断的运行会自己清理。
开发
node selftest.mjs # 用假宿主驱动插件:不需要 DSH、不跑 codex、不调模型
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yutingzhao1991/dsh-review
并行调用多个编码智能体评审代码改动并合并结论
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9