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

晨式多智能体 DRQRTS/dsh-cds-mode

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

CDS 模式(Chen's DS)— DeepSeek Harness 的多智能体开发模式。你只跟一个角色对话,它派出 56 个角色,彼此直接交接工作。

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add DRQRTS/dsh-cds-mode
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · skill
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@local/dsh-cds-mode(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 07:32:47

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 138 处,展示前 55 条)
  • 读取本地文件
    index.js:314
    raw = readFileSync(absolute, 'utf8')
  • 读取本地文件
    index.js:354
    if (!existsSync(join(corpusDir, 'CORE.md'))) {
  • 读取本地文件
    _check-docs-sync.mjs:30
    const from = candidates.find((c) => existsSync(c))
  • 读取本地文件
    _check-docs-sync.mjs:32
    const t = readFileSync(from, 'utf8')
  • 读取本地文件
    _check-encoding.mjs:13
    const b = readFileSync(p)
  • 读取本地文件
    _check-icon.mjs:15
    const svg = readFileSync(join(PKG, 'icon.svg'), 'utf8')
  • 读取本地文件
    _check-locale.mjs:13
    for (const f of readdirSync(dir).sort()) {
  • 读取本地文件
    _check-locale.mjs:14
    const bytes = readFileSync(join(dir, f))
  • 读取本地文件
    _check-png.mjs:16
    if (!existsSync(DIR)) {
  • 读取本地文件
    _check-png.mjs:24
    const b = readFileSync(file)
  • 读取本地文件
    _compare-extract.mjs:22
    const manifest = JSON.parse(readFileSync(join(PKG, 'package.json'), 'utf8'))
  • 读取本地文件
    _compare-extract.mjs:26
    for (const n of readdirSync(d).sort()) {
  • 读取本地文件
    _compare-extract.mjs:30
    if (statSync(f).isDirectory()) walk(f)
  • 读取本地文件
    _compare-extract.mjs:46
    const src = readFileSync(join(PKG, rel))
  • 读取本地文件
    _compare-extract.mjs:48
    if (!existsSync(other)) { miss.push(rel); continue }
  • 读取本地文件
    _compare-extract.mjs:49
    if (src.equals(readFileSync(other))) ok++
  • 读取本地文件
    _pack.mjs:25
    const manifest = JSON.parse(readFileSync(join(PKG, 'package.json'), 'utf8'))
  • 执行外部命令来自配置/变量
    _pack.mjs:35
    execFileSync(cmd, args, { stdio: 'inherit', cwd: PKG })
  • 读取本地文件
    _pack.mjs:57
    for (const name of readdirSync(dir).sort()) {
  • 读取本地文件
    _pack.mjs:61
    if (statSync(full).isDirectory()) walk(full)
  • 读取本地文件
    _pack.mjs:69
    for (const name of readdirSync(dir).sort()) {
  • 读取本地文件
    _pack.mjs:73
    if (statSync(full).isDirectory()) collect(full)
  • 读取本地文件
    _pack.mjs:153
    for (const n of readdirSync(dir).sort()) {
  • 删除本地文件递归
    _pack.mjs:171
    if (existsSync(DIST)) rmSync(DIST, { recursive: true, force: true })
  • 写入本地文件
    _pack.mjs:172
    mkdirSync(STAGE, { recursive: true })
  • 写入本地文件
    _pack.mjs:175
    mkdirSync(dirname(dest), { recursive: true })
  • 写入本地文件
    _pack.mjs:176
    writeFileSync(dest, readFileSync(join(PKG, rel)))
  • 写入本地文件
    _pack.mjs:194
    writeFileSync(ZIP, makeZip(zipEntries.filter((e) => !e.isDir)))
  • 删除本地文件递归
    _pack.mjs:201
    if (existsSync(VERIFY_DIR)) rmSync(VERIFY_DIR, { recursive: true, force: true })
  • 写入本地文件
    _pack.mjs:202
    mkdirSync(VERIFY_DIR, { recursive: true })
  • 删除本地文件
    _pack.mjs:227
    rmSync(TGZ, { force: true })
  • 删除本地文件
    _pack.mjs:228
    rmSync(ZIP, { force: true })
  • 删除本地文件递归
    _pack.mjs:229
    rmSync(VERIFY_DIR, { recursive: true, force: true })
  • 删除本地文件递归
    _pack.mjs:234
    rmSync(VERIFY_DIR, { recursive: true, force: true })
  • 写入本地文件
    _pack.mjs:240
    mkdirSync(ZIP_VERIFY, { recursive: true })
  • 读取本地文件
    _sync-corpus.mjs:54
    for (const name of readdirSync(dir).sort()) {
  • 读取本地文件
    _sync-corpus.mjs:58
    if (statSync(full).isDirectory()) listFiles(full, base, out)
  • 读取本地文件
    _sync-corpus.mjs:64
    if (!existsSync(join(SRC, 'CORE.md'))) {
  • 读取本地文件
    _sync-corpus.mjs:73
    if (!existsSync(DEST)) {
  • 读取本地文件
    _sync-corpus.mjs:82
    if (readFileSync(join(SRC, f), 'utf8') !== readFileSync(join(DEST, f), 'utf8')) problems.push('内容不一致: ' + f)
  • 读取本地文件
    _sync-corpus.mjs:99
    if (existsSync(DEST)) rmSync(DEST, { recursive: true, force: true })
  • 删除本地文件递归
    _sync-corpus.mjs:99
    if (existsSync(DEST)) rmSync(DEST, { recursive: true, force: true })
  • 写入本地文件
    _sync-corpus.mjs:102
    mkdirSync(dirname(to), { recursive: true })
  • 读取本地文件
    _verify-corpus.mjs:17
    const HAS_AUTHORING = existsSync(join(AUTHORING, 'CORE.md'))
  • 读取本地文件
    _verify-corpus.mjs:52
    if (!existsSync(path)) { check(false, id + ' ' + file + ' 不存在'); continue }
  • 读取本地文件
    _verify-corpus.mjs:53
    const t = readFileSync(path, 'utf8')
  • 读取本地文件
    _verify-corpus.mjs:64
    const t = readFileSync(P + file, 'utf8')
  • 读取本地文件
    _verify-corpus.mjs:71
    const chen = readFileSync(P + 'chen.md', 'utf8')
  • 读取本地文件
    _verify-corpus.mjs:83
    const missing = refs.filter((f) => !existsSync(P + f))
  • 读取本地文件
    _verify3.mjs:19
    const raw = readFileSync(DIR + 'cordis.patch.yml', 'utf8')
  • 读取本地文件
    _verify3.mjs:20
    const src = readFileSync(DIR + 'index.js', 'utf8')
  • 读取本地文件
    _verify3.mjs:45
    const missingFiles = [...(injected ?? []), ...(onDemand ?? [])].filter((p) => !existsSync(CORPUS + p))
  • 读取本地文件
    _verify3.mjs:64
    const onDisk = [...PERSONA_FILES, 'chen.md'].filter((f) => existsSync(CORPUS + 'personas/' + f))
  • 读取本地文件
    _verify3.mjs:255
    check(existsSync(readmePath), '包内有公开 README.md')
  • 读取本地文件
    _verify3.mjs:256
    check(existsSync(installPath), '包内有 INSTALL.md')
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 多智能体开发模式
  • 单入口调度56个角色
  • 角色间直接交接任务

README

由 DeepSeek 最新模型翻译生成
CDS 模式(Chen's DS) 一个把「多智能体协作」真正跑起来的工作模式,装进 DeepSeek Harness。 你和唯一的主人格晨对话。它带着 56 个人格分头干活,互相直接交接,最后把结果交回你手上。 56 是怎么算的:主模式 21 个(A/B/C/D/E 五组)+ 网络安全模式 35 个(八组)。两个模式各自还有一位"晨"——主模式的晨和它的安全模式版本。所以你实际会看到 58 份人格卡,但对你说话的自始至终只有一个。 语言: English · 简体中文 · 日本語 一、这是什么 大多数 AI 编程助手的工作方式是:你问,它答。 CDS 模式不一样。你面对的是一个人格 —— 晨。它不会立刻动手,而是先问清楚,然后把活拆开、派人、验收,最后给你一个交代。 用一句话说:它把"一个人干活"变成了"一个团队干活,但只有一个人跟你汇报"。
展开完整文档(README 剩余 1 节)
CDS 模式(Chen's DS)

一个把「多智能体协作」真正跑起来的工作模式,装进 DeepSeek Harness。

你和唯一的主人格晨对话。它带着 56 个人格分头干活,互相直接交接,最后把结果交回你手上。

56 是怎么算的:主模式 21 个(A/B/C/D/E 五组)+ 网络安全模式 35 个(八组)。两个模式各自还有一位"晨"——主模式的晨和它的安全模式版本。所以你实际会看到 58 份人格卡,但对你说话的自始至终只有一个。

语言: English · 简体中文 · 日本語

一、这是什么

大多数 AI 编程助手的工作方式是:你问,它答。

CDS 模式不一样。你面对的是一个人格 —— 晨。它不会立刻动手,而是先问清楚,然后把活拆开、派人、验收,最后给你一个交代。

用一句话说:它把"一个人干活"变成了"一个团队干活,但只有一个人跟你汇报"。

| 你可能遇到的麻烦 | CDS 的做法 |
| 需求没说清,AI 就开始写,写完发现方向错了 | 晨先问 5 道题校准专业度,再问需求,不问清不动手 |
| AI 说"已经修好了",你一测还是坏的 | 修完必须由另一个人格验证,而且验证方式是重放原问题,不是自己说"好了" |
| 每次改都冒出新的坏 | 每轮必须报净变化量,连续 5 轮不收敛就自动熔断停下来 |
| 代码一看就是 AI 写的,一股塑料味 | 有专人(D4)专门抓 AI 味,而且有一票否决权 |
| 聊天里说过的话,下次就不记得了 | 所有结论必须落盘成文件,以文件为准,不以对话记忆为准 |
| 问着问着,AI 自己把活干了,派出去的人没派 | 明文禁止抢活,晨越权产出的东西直接作废 |
| 一堆 AI 同时干活,互相覆盖 | 同批并行但有互斥切片声明,禁止重复劳动 |

二、核心是什么:九条铁律

整个模式的行为由九条规则锁死。这些不是口号,违反会有明确后果。

| # | 铁律 | 违反了会怎样 |
| L1 | 只有晨能跟你说话。 其他人格不许直接输出 | 越权,输出作废 |
| L2 | 需求没澄清,不许开工。 首次对话做校准+需求采集,之后每次新要求先追问 5–10 题 | 违规开工,回退 |
| L3 | 不藏 bug。 所有问题都要进台账,连"知道但先不修"的也要写清理由 | 严重违规 |
| L4 | 循环必须收敛。 每轮修复后要给出这轮的净变化量 | 失控,触发熔断 |
| L5 | 改版本要你明确说。 你没说"更新/重构/改版本号",一切改动按普通功能问题处理 | 越权变更 |
| L6 | 同组不许互相掩盖。 发现了别人的 bug 必须写进台账,不许偷偷改掉不记录 | 违规 |
| L7 | 结论必须落盘。 人格之间的结论以文件为准 | 无效结论 |
| L8 | 派活要交出完整人格卡。 只给路径等于没派,子 Agent 会变成普通助手 | 无效委任,产物作废 |
| L9 | 问你必须用提问工具(结构化选项卡片),不许一大段散文问你 | 流程违规 |

其中 L2 和 L9 是你感受最直接的:晨会用选择题卡片问你,而不是丢一大段话让你自己找重点。

三、56 个人格,分两种模式

主模式:晨 + 21 个人格(日常开发、文档、设计)

晨 是主人格。另外 21 个分五组:

| 组 | 特质 | 成员 | 擅长的活 |
| 调查组 | 情感冷漠 | A1 官方派 · A2 复用派 · A3 个性化派 · A4 汇总验证 | 查资料、盘代码、去 AI 味、整合验证 |
| 设计组 | 贪欲 / 精进 | B1 古怪奇想 · B2 务实 · B3 美观与人因 · B4 汇总收口 | 出方案、务实红线、视觉与操作、一票收口 |
| 开发组 | 懒惰 + 完美主义 | C1 前端 · C2 后端 · C3 细节与修 bug · C4 安全层 | 写代码、跑一遍、修细节、安全清单 |
| 测试组 | 真诚 | D1 代码级跑测 · D2 实机体验 · D3 长远 bug · D4 AI 味猎手 · D5 安全红队 · D6 分类汇总 | 五个视角独立找问题,D4 有否决权 |
| 其他组 | —— | E1 文员 · E2 演示文稿 · E3 宣传片视频 | 一切文字、PPT、视频 |

附属模式:C-WEB 网络安全工作流(35 个人格)

做安全任务时启用,不影响日常开发。八个组:
| 组 | 特质 | 人数 | 干什么 |
| A 情报侦察 | 情感冷漠 | 4 | 资产边界、威胁情报、公开信息、供应链 |
| B 检测分析 | 求真 | 5 | 告警分诊、数字取证、漏洞分析、恶意代码、流量分析 |
| C 响应恢复 | 克制 | 4 | 执行响应、验证恢复、遏制策略、业务连续性 |
| D 治理合规 | 固执 | 4 | 策略门、报告复盘、合规、隐私 |
| E 安全架构与工程 | 远见 | 6 | 架构、应用安全、云安全、身份、数据安全、密码学 |
| F 攻防对抗 | 攻防思维 | 4 | 渗透测试、红队、逆向、漏洞研究 |
| G 安全运营与自动化 | 效率 | 3 | 检测工程、安全自动化、安全工具开发 |
| I 实时防御反击 | 快准狠 | 5 | 实时指挥、攻击阻断、欺骗防御、攻击溯源、反击执行 |

安全模式有两条特别的设计:

D-web1 是「策略门」,连晨都不能绕过它。 任何会改变系统状态的动作都要过它,判定只有三种结果:允许 / 需审批 / 拒绝。没有第四种 —— "先做着,同时补审批"不算一种结果,算违规。

D-web4 有一票否决权。 涉及个人数据的操作,它可以直接否掉,不需要请示晨,但必须给出不涉及个人数据的替代路径。

四、最有意思的设计:晨不许抢活

这是整个模式里最反直觉、也最实用的一条。

AI 手上什么工具都有。默认行为倾向就是「顺手把这块也写了」。 一旦晨自己动手,派出去的人格就永远不会被派出去 —— 而模式承诺的所有保障(测试组的真诚、B4 的收口、D4 的 AI 味否决、A 组的对立验证)就全部不会发生。

所以有一条明文判据:

如果晨产出了一份本该由某个人格落盘的东西,那就是抢活,产物作废,退回去重做。

晨只被允许写「编排记录」类的文件,业务产物一律不许碰。

还有配套的症状 → 人格对照表:什么症状派给谁,表里有的不许自己硬上;表里没有的,先考虑该不该新增人格,或者停下来问你。

五、什么时候会停下来等你

这条很重要 —— 不是每件事都会来烦你。

| 必须停下来问你 | 不许停,自己继续 |
| 需求摘要等你确认 | 轮内推进(调查 → 设计 → 开发 → 测试) |
| 接手项目时等你确认「不可动清单」 | 修 bug → 复测这个循环 |
| 判定为版本变更 / 推倒重做 | 单个子任务完成(这不叫停点) |
| 熔断触发 | —— |
| 需求出现矛盾 | —— |
| 碰到安全红线 | —— |
| 准备交付 | —— |

另外还有一条纪律:不要每派完一个人格就来汇报一句。 那是骚扰,不是负责。

六、怎么防「越修越乱」

模式内置了六种熔断,达到条件自动停下:

| 编号 | 触发条件 | 含义 |
| CB-1 | 连续 5 轮测试循环没收敛 | 陷入死循环 |
| CB-2 | 任一轮新增 3 个以上致命 bug | 修引入的问题比修掉的多 |
| CB-3 | 代码连续 3 轮净增长,且 bug 没减少 | 越修越乱 |
| CB-4 | 你和晨在需求上出现无法用选择题收敛的分歧 | 方向性分歧 |
| CB-5 | 预算/时间到上限 | 资源熔断 |
| CB-6 | 同一个 bug「修」了 3 次还没好 | 根因判断错了 |

问题分成五级,从 S1(致命)到 S5(建议)。其中有一条硬规定:

「不报错但结果是错的」这类问题,至少按 S2 算,跟它是不是核心功能无关。

静默错误数据是最危险的 —— 界面一切正常,账却算错了。

七、装完之后你看到什么

两张预设卡片

| 卡片 | 说明 |
| CDS 模式(晨的DS) | 日常用这个。 零实验依赖,一定激活 |
| CDS 模式 · 同伴频道版 | 多挂 Agent Teams:人格之间可直接互相说话、共享任务板 |

协同功能只在第二张卡里。 第一张卡故意不挂任何实验包 —— 实验包出问题时,CDS 主体仍然能用。

选「同伴频道版」的会话,对话头部会多一个 Agent Teams 入口,点开能看到队友名册、共享任务板、点进某个队友的会话。

看不到协同入口,只有一个原因:你选的是第一张卡。

八、安装

前置条件:装好 DeepSeek Harness,能跑 dsh web。不需要 npm 登录,本包零外部依赖。

四种装法,选一种就行。推荐先看第一种(最省事),或者直接跳到第四种(最不依赖网络)。

方式一:Web 界面装(最省事)

1. 打开 DSH 的 Web 界面(dsh web 后面板)
2. 侧边栏点 Plugins
3. 点 Add plugin
4. 在输入框里填仓库地址:

https://github.com/DRQRTS/dsh-cds-mode

5. 选好 Registry(默认即可),勾选上方的信任确认框
6. 点 Install
7. 重启 dsh web

注意信任框里那句话:已安装的插件不会自动更新 —— 升级的做法是卸载再装新版本。

勾选它代表你确认了这一点。装插件会在你的 profile 里执行包里的代码(这是插件机制的通用性质,不是本包的特殊要求)。装之前你可以自己读一遍 index.js,约 400 行,只用 Node 内建模块。

方式二:命令行装(适合脚本化)

dsh plugin --profile web add https://github.com/DRQRTS/dsh-cds-mode

(web 是你的 profile 名。不指定 --profile 会报错,这个参数是必需的。)

装完同样重启。

方式三:让 agent 装

在一个 DSH 会话里说:

帮我安装插件:https://github.com/DRQRTS/dsh-cds-mode

agent 会调用 plugin_manager 工具的 install_bundle。这一步需要 danger-full-access 权限。

方式四:从压缩包装(不依赖 GitHub)

如果 GitHub 连不上(中国大陆常见,见下面第十一节),用这条:

mkdir -p ~/dsh-bundles
unzip dsh-cds-mode-1.5.0.zip -d ~/dsh-bundles
得到 ~/dsh-bundles/package/

然后让 agent 装这个目录:

plugin_manager action: install_bundle
target: /绝对路径/到/解压出的/package

为什么强调「长期保留」:安装用软链接方式,DSH 会指向这个目录。目录删了,插件就加载失败。

install_bundle 接受 registry 包、git 地址、tarball、绝对路径四种。不接受 .zip 本身 —— 所以要先解压。路径必须是绝对路径。

四种装法对比

| 方式 | 需要 GitHub 可达 | 需要重启 | 适合 |
| Web 界面 | 是 | 是 | 大多数人 |
| 命令行 | 是 | 是 | 批量 / 脚本 |
| agent 工具 | 视 spec 而定 | 是 | 已经习惯用对话 |
| 压缩包 | 否 | 是 | GitHub 不通时 |

最后一步:重启

dsh web

重启是必需的,刷新页面不够。 JS 模块是进程启动时加载的,新增或替换一个包必须重启才会加载。

然后新建会话,预设里选「CDS 模式」。

卸载与升级

卸载:Web 界面的 Plugins 页找到 CDS 卡片 → 卸载;或让智能体执行

plugin_manager action: remove_bundle target: @local/dsh-cds-mode

升级:因为插件不自动更新,升级 = 先卸载,再按上面任一方式装新版本,然后重启。

卸载不影响你的项目产物 —— 那些在你的项目工作区里。

九、装完怎么验(三步)

第一步 · 卡片不标红。 打开预设列表,两张 CDS 卡片应当没有红色「加载失败」徽标。有的话,把诊断原文贴出来 —— 那是逐行的,会直接写明哪一行、什么原因。

第二步 · 它知道自己是谁。 新开会话问:

你是谁?

应当得到晨的自述。再问:

你手上的 CDS 规范里有几条铁律?第一条是什么?

应当答出 九条,第一条是「晨是唯一对用户说话的人格」。

第三步 · 提问走工具。 随便说个需求,比如"帮我做个管理学生作业的小工具"。应当看到晨弹出选择题卡片(不是一大段散文),每批不超过 5 题,而且第二批发问接得上你的回答 —— 你答"就我们班用",它就不该再问支付、发票、备案。

十、常见问题

| 现象 | 原因 | 怎么办 |
| 预设列表里没有 CDS 卡片 | 装完没重启 | 重启 dsh web |
| 卡片标红「加载失败」 | 某一行激活失败 | 把诊断原文给发布者 |
| 诊断说「内置语料缺失」 | 压缩包不完整 | 重新解压完整压缩包 |
| 安装时报 Cannot access GitHub | GitHub 连不上 | 见第十一节:配代理,或改用压缩包方式 |
| 侧边栏没有 Plugins 页 | 这个配置档没有托管 | 改用命令行或智能体工具 |
| 模型说"我是 coding agent…" | 选的是别的预设 | 确认会话预设是「CDS 模式」 |
| 找不到任何协同入口 | 用的是「CDS 模式」 | 换「CDS 模式 · 同伴频道版」 |
| 重复安装报 ambiguous-install | 同一目标已装 | 正常现象,重启即可 |
| 装了新版没变化 | 插件不自动更新 | 先卸载再装新版,然后重启 |
| 缓存命中率突然变低 | 语料被改过(前缀变了) | 看包内 cds/CHANGELOG.md 的缓存影响记录 |

十一、GitHub 连不上怎么办

这是中国大陆用户最可能卡住的地方,所以单独说。

插件本身不需要联网(零外部依赖、语料随包自带)。但前三种安装方式都要访问 GitHub(要 clone 仓库)。

症状

- Web 界面弹 Cannot access GitHub 或 GitHub connection timed out
- 命令行里 git ls-remote 或 dsh plugin add 卡住约 22 秒后失败
- 报错形如 Failed to connect to github.com port 443

怎么办

办法一:给 git 配代理(如果你有代理)

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

把端口换成你自己的。配完验证:

git ls-remote https://github.com/DRQRTS/dsh-cds-mode HEAD

能打印出一串 commit hash 就通了。

办法二:改用压缩包方式(不需要代理,最稳)

按第八节的方式四,把 zip 解压到本地目录,让智能体从绝对路径安装。这条路完全绕开 GitHub 和 npm registry。

顺带说明:npm registry 的国内镜像(npmmirror)帮不了这个问题 —— 它镜像的是 registry 上的包,不镜像 GitHub 仓库。所以「换镜像」对 GitHub 地址无效,这就是 Web 界面会提示 Try another way 的原因。

十二、要如实说明的几点

能保证的

- 零外部依赖:核心代码只 import Node 内建模块。不会因为某个包解析不到而在你机器上失效(这条是踩过坑之后定死的)。
- 自带完整验证:包内两套校验脚本覆盖结构、接线、可移植性、真实装载。断言数以脚本自己输出的那行为准(跑完会打印 断言数:N)——文档不写死数字,避免与真实结果漂移。你可以自己跑:

node _verify3.mjs && node _verify-corpus.mjs

- 语料可核对:node _sync-corpus.mjs --check 会逐字节比对包内语料与源语料。
- .zip 与 .tgz 内容逐字节一致,两种格式都用独立解压器验证过。

要如实说明的

- 「同伴频道版」依赖两个实验包(dsh-experimental-agent-team / dsh-experimental-tool-agent-team)和一个实验 UI 包。它们无稳定性承诺;上游若破坏性变更,那张卡可能激活失败。这不影响「CDS 模式」(保底卡)。
- 同一批并发上限 8 个实例。这是刻意的,不是缺陷。
- 本包按 DSH 0.2.0-rc.2 开发。换 DSH 大版本前,请先跑一遍上面的验证脚本。
- 四个功能面尚未在真实会话中做端到端验证:预设不标红、子智能体角色扮演、提问走工具、同伴频道界面与队友互发。校验断言覆盖的是"接线对、语料全、能装载",不是"跑起来好用"。第一次用建议按第九节的三步验一遍。

关于安全模式的边界

- 反击执行(I-web5)有准入七项,缺一项直接拒收,不接受"先做后补""口头同意""情况紧急"。
- 还有一份"绝对不做"清单:入侵、破坏、DDoS、植入后门、窃取数据、攻击未列入范围的目标、对自然人报复 —— 无论授权书写得多宽,都不做。
- 理由很简单:授权可以扩大"允许做什么",但不能把犯罪行为变成合法行为。

十三、想改点什么

改语料:包内 cds/ 就是全部规范文本。改完重启。
用自己的语料库:把 cds/ 复制到别处,在 cordis.patch.yml 的 cds-mode 行加 corpusDir 指向它。

没有热重载:语料在插件激活时读一次,此后不再重读。改了语料必须重启。这是刻意的 —— 提示词前缀就是缓存键,中途换语料等于让前后两轮的缓存对不上。这个模式很在意缓存命中,所以宁可要求你重启。

卸载:plugin_manager action: remove_bundle target: @local/dsh-cds-mode。卸载后预设卡片消失,系统提示恢复默认。你的项目产物不受影响(它们在你的项目工作区里)。

十四、文件在哪

dsh-cds-mode/ ← GitHub 仓库根目录(也是 bundle 根目录) ├── README.md ← 中文(默认,本文件) ├── README.en.md ← English ├── README.ja.md ← 日本語 ├── INSTALL.md ← 安装与故障排查(偏操作) ├── LICENSE ← MIT 许可证正文 ├── package.json ← 包定义:名称、版本、dsh.bundle.patch 指向 ├── index.js ← 插件本体,约 400 行,零外部依赖 ├── cordis.patch.yml ← 预设与挂载配置(两个预设 + 同伴频道行) ├── icon.svg ← 图标源文件:单色 currentColor,跟随主题 ├── icon.png ← 图标位图 512×512(浅底用,透明背景) ├── icon-dark.png ← 图标位图 512×512(深底用,透明背景) ├── icon-64.png ← 图标位图 64×64 ├── locale/ ← 界面上显示的名称与描述 └── cds/ ← 全部规范语料(90 个文件) ├── CORE.md 运行契约:九条铁律、状态机、门禁、委任协议、编排纪律 ├── README.md 模式总入口与人格总览 ├── CHANGELOG.md 变更记录(含每次缓存失效登记) ├── personas/ 晨 + 21 个人格委任书 + 5 份组索引 │ └── web/ 网络安全模式的 36 份(含 chen-web) ├── workflow/ 5 条工作流(新项目 / 接手 / 迭代 / 熔断 / 网络安全) ├── protocol/ 协同协议、产物契约、bug 分类法 ├── questions/ 提问总纲 + 题库(校准 / 新项目 / 接手 / 追问) ├── selfrescue/ 省钱部分:缓存命中与前缀稳定化 └── web/ 网络安全工作流的 8 份支撑文档

想深入了解,从 cds/CORE.md 开始 —— 那是运行契约,其余都围绕它展开。

校验脚本(可选,自测用)

仓库里还有几个只用于开发和校验的文件,安装插件用不到它们:

| 文件 | 作用 |
| _verify3.mjs | 插件层校验:结构、接线、可移植性、真实装载 |
| _verify-corpus.mjs | 语料层校验:委任书要素、组特质一致性、死链 |
| _sync-corpus.mjs | 语料同步(--check 只比对不写入) |
| _check-specs.mjs | 验证各种安装写法能否被官方解析器接受 |
| _check-icon.mjs | 校验图标 SVG:结构、几何、主题跟随 |
| _check-locale.mjs | 按字节检查 locale JSON(防编码损坏) |
| _compare-extract.mjs | 比对"解压产物 vs 源"是否逐字节一致 |
| _patch-reader.mjs | 零依赖的 patch 结构读取器 |
| _zip.mjs | 零依赖的 ZIP 写入器 |
| _pack.mjs | 打包出 .zip 与 .tgz |

你可以自己跑前两个(断言数以脚本输出为准):

node _verify3.mjs && node _verify-corpus.mjs

语言: English · 简体中文 · 日本語
预览分享卡片长什么样 ↓DRQRTS/dsh-cds-mode
分享 · DeepSeek Harness Hub
DRQRTS/dsh-cds-mode

CDS 模式(Chen's DS)— DeepSeek Harness 的多智能体开发模式。你只跟一个角色对话,它派出 56 个角色,彼此直接交接工作。

回到顶部