🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

多角色并行论证 jiang12345-code/dsh-multi-role-debate

DeepSeek Harness
jiang12345-code62 天前有提交已提供中文文档扫描:含敏感能力

让 Codex 与 Claude 并行论证,自动汇总回对话

28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add jiang12345-code/dsh-multi-role-debate
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · skill
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/07·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 62 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 65 处,展示前 60 条)
  • 写入本地文件
    _probe-claude-tools.mjs:10
    mkdirSync(SANDBOX, { recursive: true })
  • 写入本地文件
    _probe-claude-tools.mjs:11
    writeFileSync(SANDBOX + '\\demo.json', JSON.stringify({ project: 'multi-role-debate', roles: ['codex', 'claude', 'judge'] }, null, 2))
  • 写入本地文件
    _probe-claude-tools.mjs:12
    writeFileSync(SANDBOX + '\\note.txt', '工具能力探针 by dsh-claude-agent')
  • 读取本地文件
    dsh-claude-agent/lib/index.js:27
    try { return JSON.parse(readFileSync(SESSIONS_PATH, 'utf8')) } catch { return {} }
  • 写入本地文件
    dsh-claude-agent/lib/index.js:30
    try { mkdirSync(path.dirname(SESSIONS_PATH), { recursive: true }); writeFileSync(SESSIONS_PATH, JSON.stringify(obj, null, 2)) } catch { }
  • 写入本地文件
    dsh-claude-agent/lib/index.js:30
    try { mkdirSync(path.dirname(SESSIONS_PATH), { recursive: true }); writeFileSync(SESSIONS_PATH, JSON.stringify(obj, null, 2)) } catch { }
  • 读取本地文件
    dsh-codex-agent/lib/index.js:38
    try { return JSON.parse(readFileSync(THREADS_PATH, 'utf8')) } catch { return {} }
  • 写入本地文件
    dsh-codex-agent/lib/index.js:41
    try { mkdirSync(dirname(THREADS_PATH), { recursive: true }); writeFileSync(THREADS_PATH, JSON.stringify(obj, null, 2)) } catch (e) { console.error('ds
  • 写入本地文件
    dsh-codex-agent/lib/index.js:41
    try { mkdirSync(dirname(THREADS_PATH), { recursive: true }); writeFileSync(THREADS_PATH, JSON.stringify(obj, null, 2)) } catch (e) { console.error('ds
  • 读取本地文件
    dsh-codex-agent/lib/index.js:50
    try { if (existsSync(c)) return c } catch { }
  • 发起网络请求
    dsh-codex-agent/lib/index.js:173
    await this._transport.request('initialize', {
  • 发起网络请求
    dsh-codex-agent/lib/index.js:195
    res = await this._transport.request('thread/start', model ? { ...base, model } : base)
  • 发起网络请求
    dsh-codex-agent/lib/index.js:197
    if (model) res = await this._transport.request('thread/start', base)
  • 发起网络请求
    dsh-codex-agent/lib/index.js:211
    await this._transport.request('thread/resume', model ? { ...base, model } : base)
  • 发起网络请求
    dsh-codex-agent/lib/index.js:213
    if (model) await this._transport.request('thread/resume', base)
  • 发起网络请求
    dsh-codex-agent/lib/index.js:283
    const res = await this._transport.request('turn/start', {
  • 读取本地文件
    incident-recovery/audit_sessions.mjs:18
    const buf = await readFile(path)
  • 读取本地文件
    incident-recovery/audit_sessions.mjs:26
    const ws = JSON.parse(await readFile(WS, 'utf8'))
  • 读取本地文件
    incident-recovery/audit_sessions.mjs:36
    const projects = await readdir(ROOT, { withFileTypes: true })
  • 读取本地文件
    incident-recovery/audit_sessions.mjs:40
    for (const s of await readdir(join(ROOT, p.name), { withFileTypes: true })) {
  • 读取本地文件
    incident-recovery/audit_sessions.mjs:44
    try { st = await stat(join(dir, 'session.jsonl.zstd')); lines = await decodeFirst(join(dir, 'session.jsonl.zstd')) } catch { onDisk.push({ proj: pname
  • 写入本地文件
    incident-recovery/audit_sessions.mjs:82
    await writeFile('D:/dsh/技术问题解决/incident-recovery/session-audit.json', JSON.stringify({ onDisk, ghost }, null, 2))
  • 读取本地文件
    incident-recovery/inspect_event_shape.mjs:13
    const buf = await readFile(path)
  • 读取本地文件
    incident-recovery/inspect_event_shape.mjs:33
    const projects = await readdir(ROOT, { withFileTypes: true })
  • 读取本地文件
    incident-recovery/inspect_event_shape.mjs:37
    const sessDirs = await readdir(join(ROOT, proj.name), { withFileTypes: true })
  • 读取本地文件
    incident-recovery/install_skills.mjs:13
    const idx = JSON.parse(await readFile('D:/dsh/技术问题解决/incident-recovery/skill-index.json', 'utf8'))
  • 删除本地文件递归
    incident-recovery/install_skills.mjs:17
    await rm(to, { recursive: true, force: true })
  • 读取本地文件
    incident-recovery/install_skills.mjs:24
    let body = await readFile(p, 'utf8')
  • 写入本地文件
    incident-recovery/install_skills.mjs:30
    await writeFile(p, fm.join('\n') + body)
  • 删除本地文件递归
    incident-recovery/install_skills.mjs:85
    await rm(dir, { recursive: true, force: true })
  • 读取本地文件
    incident-recovery/install_skills.mjs:91
    const content = await readFile(sidecar)
  • 写入本地文件
    incident-recovery/install_skills.mjs:93
    await mkdir(join(dest, '..'), { recursive: true })
  • 写入本地文件
    incident-recovery/install_skills.mjs:94
    await writeFile(dest, content)
  • 读取本地文件
    incident-recovery/install_skills.mjs:102
    try { raw = await readFile(src, 'utf8') } catch { report[name] = 'NO LOAD FILE'; return }
  • 写入本地文件
    incident-recovery/install_skills.mjs:106
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    incident-recovery/install_skills.mjs:108
    await writeFile(join(dir, 'SKILL.md'), fm + body)
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:45
    try { buf = await readFile(path) } catch { return null }
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:65
    await mkdir(join(OUT, 'writes'), { recursive: true })
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:66
    await mkdir(join(OUT, 'loads'), { recursive: true })
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:70
    const projects = await readdir(ROOT, { withFileTypes: true })
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:74
    const sessDirs = await readdir(join(ROOT, proj.name), { withFileTypes: true })
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:97
    await writeFile(fp, args.content)
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:132
    await writeFile(fp, best)
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:151
    await writeFile(join(OUT, 'skill-index.json'), JSON.stringify({ logs, events, globalSlugs: [...globalSlugs], hits: summary }, null, 2))
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:167
    for (const e of await readdir(dirW)) {
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:175
    for (const e of await readdir(dirL)) {
  • 读取本地文件
    incident-recovery/mine_skills_from_logs.mjs:180
    const len = (await readFile(file)).length
  • 写入本地文件
    incident-recovery/mine_skills_from_logs.mjs:191
    await mkdir(join(dest, '..'), { recursive: true })
  • 读取本地文件
    incident-recovery/reregister_sessions.mjs:15
    const cache = JSON.parse(await readFile(CACHE, 'utf8'))
  • 读取本地文件
    incident-recovery/reregister_sessions.mjs:27
    for (const p of await readdir(ROOT, { withFileTypes: true })) {
  • 读取本地文件
    incident-recovery/reregister_sessions.mjs:29
    for (const s of await readdir(join(ROOT, p.name), { withFileTypes: true })) {
  • 读取本地文件
    incident-recovery/reregister_sessions.mjs:31
    try { await stat(join(ROOT, p.name, s.name, 'session.jsonl.zstd')) } catch { continue }
  • 读取本地文件
    incident-recovery/reregister_sessions.mjs:39
    const ws = JSON.parse(await readFile(WSF, 'utf8'))
  • 写入本地文件
    incident-recovery/reregister_sessions.mjs:68
    await copyFile(WSF, WSF + '.bak-reregain-' + new Date().toISOString().replace(/[:.]/g, '').slice(0, 15))
  • 写入本地文件
    incident-recovery/reregister_sessions.mjs:69
    await writeFile(WSF + '.tmp', JSON.stringify(ws, null, 2))
  • 写入本地文件
    incident-recovery/reregister_sessions.mjs:70
    await rename(WSF + '.tmp', WSF)
  • 发起网络请求
    multi-role-debate/lib/client.js:147
    const res = await fetch("/__dsh-mrd/api", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ method, args: args
  • 读取本地文件
    multi-role-debate/lib/index.js:37
    const raw = JSON.parse(readFileSync(CONFIG_PATH, 'utf8'))
  • 写入本地文件
    multi-role-debate/lib/index.js:45
    mkdirSync(path.dirname(CONFIG_PATH), { recursive: true })
  • 写入本地文件
    multi-role-debate/lib/index.js:46
    writeFileSync(CONFIG_PATH, JSON.stringify(cfg, null, 2))
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 并行多角色论证
  • 自动汇总结果
  • 结果回写对话

多角色并行论证 DSH 插件:codex/claude 实体 + DSH Judge 汇总 + 结果回对话 + 直接对话(聚合包 dsh-multi-role-debate)

README

由 DeepSeek 最新模型翻译生成
多角色并行论证 DSH 插件(multi-role-debate) CI dsh-plugin 在 DeepSeek Harness 里跑一套多角色并行论证 + 单 Agent 直接对话系统:真实 Codex 与 Claude CLI 并行论证,DSH 主会话模型(Judge)做第三方汇总并回对话,另有 Obsidian 式单 Agent 直接对话。 ⚠️ 前置依赖(必读):本插件是真实 Codex 与 Claude CLI 的薄封装,不内置二进制。使用前你的机器必须已安装: - Codex CLI —— @openai/codex(提供 codex 命令;DSH 侧须能经 node spawn) - Claude Agent SDK —— @anthropic-ai/claude-agent-sdk-*(或 claude 命令)缺这两者,插件能装上但"开始论证/直接对话"起不来。 一套能调用 codex/claude、实现多模型论证的实体功能。dsh-multi-role-debate 是聚合安装包:装它 = 装齐下面全部 3 个组件。 效果演示 | 多角色并行论证 | 模型自由配置 | 结果回对话 | - 论证面板:Codex / Claude 两栏并行流式 + DSH 汇总,各自徽章(完成/Streaming)+ 字数 + markdown 正文。
展开完整文档(README 剩余 1 节)
多角色并行论证 DSH 插件(multi-role-debate)

CI
dsh-plugin

在 DeepSeek Harness 里跑一套多角色并行论证 + 单 Agent 直接对话系统:真实 Codex 与 Claude CLI 并行论证,DSH 主会话模型(Judge)做第三方汇总并回对话,另有 Obsidian 式单 Agent 直接对话。

⚠️ 前置依赖(必读):本插件是真实 Codex 与 Claude CLI 的薄封装,不内置二进制。使用前你的机器必须已安装:
- Codex CLI —— @openai/codex(提供 codex 命令;DSH 侧须能经 node spawn)
- Claude Agent SDK —— @anthropic-ai/claude-agent-sdk-*(或 claude 命令)缺这两者,插件能装上但"开始论证/直接对话"起不来。

一套能调用 codex/claude、实现多模型论证的实体功能。dsh-multi-role-debate 是聚合安装包:装它 = 装齐下面全部 3 个组件。

效果演示
| 多角色并行论证 | 模型自由配置 | 结果回对话 |

- 论证面板:Codex / Claude 两栏并行流式 + DSH 汇总,各自徽章(完成/Streaming)+ 字数 + markdown 正文。
- 模型配置:⚙ 弹窗,Judge 模型下拉 + 推理档 + maxTokens,Codex/Claude 模型自由填,保存持久化。
- 结果回对话:论证完成后,DSH 主会话自动把汇总呈现到对话流(agent.followup(),turn 安全)。

组成
| 包 | 作用 |
| dsh-multi-role-debate(本次新增,入口) | 聚合包:cordis.patch.yml 注册 3 个组件;依赖它们 |
| dsh-codex-agent | host 实体:长驻真实 codex app-server(JSON-RPC 2.0) |
| dsh-claude-agent | host 实体:长驻真实 claude-agent-sdk query() |
| multi-role-debate | 编排 + 前端:多角色论证 / 对话流触发 / DSH 汇总 / 结果回对话 / 直接对话 UI / 模型配置 |

能力
- 能力1 · 多角色并行论证:tab 按钮或主对话流触发(发"多角色论证/辩论/开始论证 X")→ Codex+Claude 并行流式 → DSH Judge(独立强模型)生成汇总 → agent.followup() 自动回对话呈现。
- 能力2 · 单 Agent 直接对话:Obsidian 式点选 Codex/Claude,权限弹窗(Read Only / Full access)。
- 模型自由配置:tab 顶栏 ⚙ 弹窗,Judge 下拉 + Codex/Claude 自由填,持久化。
- UI:GitHub Dark 主题,手写 CSS + React.createElement(无 JSX/Tailwind)。

前置依赖(重要)见顶部「⚠️ 前置依赖(必读)」:本机需已装 Codex CLI(@openai/codex)与 Claude Agent SDK(@anthropic-ai/claude-agent-sdk)。本插件是这两个真实 CLI 的薄封装,不内置二进制。

安装(用户侧)方式一 · 一键脚本(推荐,Windows):在仓库根执行 pwsh install.ps1 -Profile web # 默认安装到 web profile;用 -Profile 换 pwsh install.ps1 -Profile web --uninstall # 撤销:恢复 3 个单独条目脚本会:把 dsh-codex-agent / dsh-claude-agent / multi-role-debate / dsh-multi-role-debate 复制进目标 profile 的 node_modules,并把 dsh.profile.bundles 里的 3 个单独条目换成聚合包一条。然后重启 DSH。

方式二 · 手工(参考):
1. 克隆本仓库(或拿到 dsh-multi-role-debate 目录)。
2. 把 4 个包装进你的 DSH profile:cd ~/.dsh/profiles/web && npm install /path/to/repo/(或复制到 node_modules)。
3. 编辑 ~/.dsh/profiles/web/package.json,在 dsh.profile.bundles 把旧的 dsh-codex-agent/dsh-claude-agent/multi-role-debate 三条去掉,追加 "dsh-multi-role-debate"。
4. 重启 DSH;对话视图顶部出现"多角色论证" tab 即成功。
说明:聚合包 cordis.patch.yml 会插入 dsh-codex-agent、dsh-claude-agent、multi-role-debate 三行(实体在前、编排在后),一次安装即注册全部组件。前置依赖:本机需已装 Codex CLI(@openai/codex)与 Claude Agent SDK(@anthropic-ai/claude-agent-sdk)——本插件是这两个真实 CLI 的薄封装,不内置二进制。

使用
- tab(多角色论证):输入问题 → 开始论证;或切“直接对话”点选 Codex/Claude。
- 主对话流触发:直接发“多角色论证:”。
- 配置模型:顶栏 ⚙ → 选 Judge 模型 + 填 Codex/Claude 模型 → 保存。

已知坑 / 项目记忆改写代码前先读本项目根 AGENTS.md(含 7 条血泪坑:pull() 增量累加、agent.followup() 回对话、触发器跳过插件消息、CSS/SVG、router/spawn、模型路由、无 JSX;以及会话日志安全红线)。

文档 / 开发
- CHANGELOG.md — 版本变更
- docs/INSTALL.md — 独立安装指南(含打包/发布步骤)
- docs/example-config.json — 模型配置 schema 示例
- CONTRIBUTING.md — 开发/贡献指引
- AGENTS.md — 项目记忆 SSOT(自动注入)

License
MIT
预览分享卡片长什么样 ↓jiang12345-code/dsh-multi-role-debate
分享 · DeepSeek Harness Hub
jiang12345-code/dsh-multi-role-debate

让 Codex 与 Claude 并行论证,自动汇总回对话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部