扫描失效补丁与被覆盖的配置字段
28.9/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-doctor」归属 astra3294/dsh-doctor,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add asdf17128/dsh-doctor该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 扫描失效补丁
- 识别丢失配置字段
- 发现无人维护插件
找出 DeepSeek Harness(dsh)补丁悄悄弄坏的东西——失效补丁、整份配置替换时丢掉的配置字段、没人维护的插件。只读,零依赖。
README
由 DeepSeek 最新模型翻译生成dsh-doctor
ci
你的 dsh 配置里有一些设置已经悄悄失效了。这个工具告诉你是哪些。
npx github:asdf17128/dsh-doctor
一条命令、十秒钟、只读。零配置、零注册、零依赖。
为什么你改的设置没生效
dsh 有两个行为会正常启动、退出码 0,所以没有任何东西提醒你:
patch 会整体替换一个条目的 config。 你只改了一个字段,同一条目下所有你没重写的字段全部从启动的树里消失,插件于是跑在你从没选过的默认值上。
config:
fallbackMaxWords: 12
- fallbackMaxBytes: 40 ← 静默消失
- maxTitleBytes: 80 ← 静默消失
entry id 打错等于没写。 写成 agent-defualt-model,dsh 往 stderr 打一行就照常启动。用 Web UI 起的话你根本看不见那一行——只会觉得「我明明改了怎么没反应」。
升级改了 entry id 之后这两种情况都会变多,而且都要等到行为漂移了几周才被发现。
展开完整文档(README 剩余 1 节)
dsh-doctor ci 你的 dsh 配置里有一些设置已经悄悄失效了。这个工具告诉你是哪些。 npx github:asdf17128/dsh-doctor 一条命令、十秒钟、只读。零配置、零注册、零依赖。 为什么你改的设置没生效 dsh 有两个行为会正常启动、退出码 0,所以没有任何东西提醒你: patch 会整体替换一个条目的 config。 你只改了一个字段,同一条目下所有你没重写的字段全部从启动的树里消失,插件于是跑在你从没选过的默认值上。 config: fallbackMaxWords: 12 - fallbackMaxBytes: 40 ← 静默消失 - maxTitleBytes: 80 ← 静默消失 entry id 打错等于没写。 写成 agent-defualt-model,dsh 往 stderr 打一行就照常启动。用 Web UI 起的话你根本看不见那一行——只会觉得「我明明改了怎么没反应」。 升级改了 entry id 之后这两种情况都会变多,而且都要等到行为漂移了几周才被发现。 效果 dsh-doctor · profile web · 130 entries (25 disabled) ✗ patch on "session-title" dropped 2 default config fields config-clobber @deepseek-ai/dsh-session-title dsh replaces an entry's whole config when a patch targets it. These fields were in the shipped defaults but are missing from the tree that boots, so the plugin now runs without them. - fallbackMaxBytes: 40 - maxTitleBytes: 80 fix Restate them in your patch for "session-title": fallbackMaxBytes: 40 maxTitleBytes: 80 ✗ patch targets "agent-defualt-model", which is not in the composed tree dead-patch ~/.dsh/profiles/web/cordis.patch.yml patches an entry id that does not exist, so dsh prints one stderr warning and boots without it. Everything in that patch is inert. fix Did you mean "agent-default-model"? Rename the id, or delete the patch block if the plugin is gone. 2 error 作为 dsh 插件使用 装进 profile 后,dsh-doctor 会注册一个 config_doctor 工具,让 agent 能检查它自己正跑在什么配置上: dsh plugin --profile web add dsh-doctor 然后直接问它「我改的 session-title 怎么没生效」,它会从合成树里给答案而不是猜。 只读;--fix 保持只在 CLI 里可用——改写你的 patch 文件不该由 agent 在一轮对话里做。 检查项 | 规则 | 级别 | 检出什么 | | config-clobber | error | patch 因为没重写而丢掉的默认配置字段 | | dead-patch | error | patch 指向树里不存在的 entry id(带拼写纠正建议) | | tool-collision | error | 两个已挂载插件注册了同名工具——dsh 会直接拒绝启动 | | plugin-not-mounted | warn | 装进 profile 但根本没被加载的插件 | | plugin-stale | warn | 超过 180 天没发新版的第三方插件 | | entry-removed | warn | 被你的 patch 层移除的官方条目 | | entry-toggled / entry-added | info | 与官方 profile 的其他差异,让改动可见 | explain 模式 配置健康的人只会看到「no problems found」,这句话没告诉他任何东西。--explain 用来回答「我这套 dsh 到底装了什么」: Your harness: 130 entries, 103 active, 25 disabled, 2 conditional Web UI 32 Tools 18 (16 off) Sessions & history 11 Agent loop 5 (1 off) ... Conditional (2) — enablement is decided at mount time, not here bash-sandbox !!js process.platform === 'win32' pwsh-sandbox !!js process.platform !== 'win32' disabled: 是 !!js 表达式的条目会被单独列为 conditional,而不是压成布尔值——它到底开不开取决于启动时的机器,本工具不会执行你的配置去猜这个答案。 用法 npx dsh-doctor # 检查 web profile npx dsh-doctor --explain # 描述这棵树,而不是检查它 npx dsh-doctor --profile headless # 指定 profile npx dsh-doctor --verbose # 显示 info 级别提示 npx dsh-doctor --json # 机器可读输出 npx dsh-doctor --fix # 自动把被抹掉的字段补回去 npx dsh-doctor --offline # 跳过 npm registry 查询 npx dsh-doctor --quiet # 只在有问题时输出 退出码:0 正常或仅有警告 · 1 至少一个 error · 2 无法检查。 适合放进 CI,或者在升级 dsh 前跑一次: npx dsh-doctor --quiet || echo "升级 dsh 前先检查一下你的 patch" --fix --fix 会把 patch 丢掉的字段按官方默认值补回同一个 config: 块: - id: session-title config: fallbackMaxWords: 12 + fallbackMaxBytes: 40 + maxTitleBytes: 80 只在这个块内部改动——注释、顺序、其他条目全部逐字节不变——写之前先在旁边生成 .bak。嵌套路径会列出来让你手动处理而不是猜着写;dead-patch 永远不自动修,因为"改名还是删掉"是你的判断。 原理 直接复用 dsh 自己的合成结果: - dsh --profile --dump-config —— 真正启动的树(bundles → profile patch → home patch → overlay) - dsh --profile --dump-default-config —— 去掉你的用户层之后的同一棵树 所有结论都来自这两者的差异,所以能把问题归因到你自己的 patch,而不是上游默认值。此外还会读取 profile 的 package.json 和各层 cordis.patch.yml。 任何情况下都不会加载插件,也不会执行配置里的 !!js 表达式。 关于"只读"这件事有两个必须说清的例外: - --fix 是会写的,这是设计如此——只动被标记的那个 config: 块,写前留 .bak。 - 合成 profile 是 dsh 自己的动作,而 dsh 在一个 profile 首次被使用时会落地模板。 所以如果你的 $DSH_HOME 里还没有任何 profile,跑一次会留下 profiles// ——是 dsh 建的不是本工具建的,但指向全新目录前值得知道。 安装与卸载 当 CLI 用不需要安装,npx dsh-doctor 直接跑。 当插件用: dsh plugin --profile web add github:asdf17128/dsh-doctor # 安装 dsh plugin --profile web remove dsh-doctor # 卸载 卸载后 config_doctor 工具消失,不留任何残留——这个插件从不写入你的 Harness home。 兼容性 基于 @deepseek-ai/dsh 0.1.0-rc.5 验证。dsh 处于 developer preview,会有破坏性变更;检查逻辑读的是 --dump-config 的输出,所以那个格式一旦变动会最先受影响。 如果新版 dsh 下报出奇怪结果,提 issue 我来定位差异。 环境要求 Node 18+,以及一个可用的 dsh(优先用本地 node_modules/.bin/dsh,否则用 PATH 上的)。 为什么做这个 dsh 处于 developer preview,会有破坏性变更;「一切皆插件」意味着你的树是一叠 patch 层,而分层规则在一个方向上格外不留情——上面那些失败模式全是静默的。这个工具负责把它们说出来。 行为基于 @deepseek-ai/dsh 0.1.0-rc.5 实测验证。 参与 欢迎提 issue 和 PR,尤其欢迎带复现步骤的新检查规则。npm test 跑测试。 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
asdf17128/dsh-doctor
扫描失效补丁与被覆盖的配置字段
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,288已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。