dsh-doctor

DSH PLUGIN开发与运行时

仓库 moonquake2004/dsh-doctor

开发与运行时 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

离线诊断工具:环境/Profile/会话共 19 项检查,带设置「诊断」面板与只读 JSON API。

一句话选型结论

按资料字段整理

dsh-doctor 是开发与运行时类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类开发与运行时 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 3 复刻 未标注 · 未关闭 issue 未标注
最近更新 2026-09-16 创建于 未标注
README 16.2 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add @moonquake2004/dsh-doctor
  1. 1
    确认版本与运行环境

    兼容的 DSH 版本为 0.2.0-rc.2 等 4 个;版本不匹配时安装会报错。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本0.2.0-rc.2 等 4 个版本版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

开发与运行时
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

文件读写终端命令

同仓库子包(1 个)

这是一个多包仓库,上游还列出了下列子包。本站按仓库合并成一条记录,安装时注意区分具体子包名。

plugin

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.2.0-rc.2 等 4 个),按版本装不容易报错。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在开发与运行时场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-doctor当前 L5 · 运行验证通过 低风险 3 0.2.0-rc.2 等 4 个 有
deepseek-harness L3 · 安装规范通过 低风险 24.6 万 未标注 无
rea L4 · 沙盒安装通过 低风险 2.6 万 0.1.1-rc.2 有
dsh-TUI L4 · 沙盒安装通过 中风险 4,292 0.1.7-rc.2 等 5 个 有
mirage L3 · 安装规范通过 低风险 3,681 未标注 无
dashi-taskboard L4 · 沙盒安装通过 低风险 3,311 0.1.1-rc.2 有

仓库档案

开发与运行时
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方moonquake2004仓库 dsh-doctor · 默认分支 未标注
分类开发与运行时developer
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue3 / 未标注 / 未标注收录时的数值,非实时
创建 / 更新未标注 · 2026-09-16最后推送 未标注
本站收录2026-10-14首次进入本站目录的时间

README 全文

16.2 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-doctor

已针对 DSH 0.1.5-rc.1 验证(会话格式 v3;dsh-session 定位覆盖 npx / 全局 / profile 三种布局;v0 旧事件按已装 dsh-session-format-* 迁移链读取)。

DeepSeek Harness 的离线诊断工具——在启动前或安装插件前跑一次,它会告诉你社区反复报告的哪几类故障会在你机器上咬人。

零 npm 依赖。单文件。任何有 node 的环境都能跑(zstd 只在扫 .zstd 会话日志时需要,E1 会检查它)。

为什么

dsh 的插件树"装出来就是脆的":一个悬空引用、一个断掉的 file: 链接、一个重复的 entry id、一段损坏的会话日志,都能让 profile 在启动时直接挂掉或拖垮整个 web 服务器——而 --dump-config 从不挂载 loader,所以在坏配置上也"一切正常"。这类故障被汇总在 dsh discussion #1496(Advisory:插件安装路径需要护栏)。dsh-doctor 就是这个护栏——26 项内置检查(env 7 / profile 11 / session 8)映射到 18 个社区报告,每一项都用合成负样例验证过;外加一个自更新的远程检查目录(声明式规则,v0.2.0 起)。

用法

node dsh-doctor.mjs                      # 全部检查(env + profile + session)
node dsh-doctor.mjs --profile web        # 仅 profile 检查
node dsh-doctor.mjs --session      # 仅会话检查(默认自动找最新会话)
node dsh-doctor.mjs --env                # 仅环境检查
node dsh-doctor.mjs --json               # 机器可读输出
node dsh-doctor.mjs --no-catalog         # 不拉远程目录(只用内置副本)

退出码:0 = 全部通过 · 1 = 发现问题(内置检查 + 目录中 severity: error 的项)· warn 级目录失败不改退出码。

检查项(28 内置 + 5 目录)

env

ID 检查 对应讨论
E1 node/pnpm/zstd 在 PATH #1270
E2 .env 是文件而非目录 #71
E3 node 版本 / --expose-internals 可及性 #113, #1313
E4 node-pty 原生二进制在位(prebuilds/-/pty.node) #1219
E5 存储 JSON 文件合法(严格 UTF-8 + 可解析) #1357
E6 锚点 tripwire:S6/S7/S10 依赖的契约仍在当前版本存放它的位置(npx / 全局 / profile 三布局;dsh-session 或 dsh-session-format-* 迁移链) anti-rot idea
E10 启动前 Web 端口 3080 可用性(dsh web 自身占用=正常;其他进程=FAIL;DSH_DOCTOR_PORT 可覆盖) #1719

profile

ID 检查 对应讨论
P2 bundle 层与用户 patch 的 insert id 冲突(启动必崩) #1404
P3 用户 patch 的 insert name: 能从 profile 锚点解析 #1197, #880
P4 file: 依赖完整 #1197
P5 顶层无 @deepseek-ai/* 重复(双模块实例) #1486, #1697
P7 cordis.patch.yml 结构 lint(~ insert: null 字面量、tab 缩进、缺冒号、顶层映射+序列混排 → UI 打不开) #1724
P12 profile 内 bundle 版本 vs 运行 CLI(发词汇名 installed_bundle,#1719 v1.1:未声明=skip / manifest 撒谎或分歧=warn / 一致=pass;web「诊断」面板 / /dsh-doctor/run API 跑的是 bundle) #1719
P13 client 半 provide 服务名抢注核心客户端服务(chatFileMentions 等 @deepseek-ai/dsh-client-*,warn)或跨 bundle 同名(浏览器端 service already registered → UI 白屏、服务端日志无感知) #2752
P14 声明 bin 可执行性(目标文件在位 + 文本 bin 必须带 shebang;仅可执行位不识别解释器 → 直接执行 ENOEXEC,#1846) #1846
P16 插件导入了已装包未提供的命名导出(warn;单条坏 entry 即 boot 硬失败) #5864
P17 client 端 require() 的模块宿主模块表无法服务(平台种子 ∪ 已装图行 ∪ 声明的 external)——warn 级;抓浏览器 Failed to load plugins 白屏 #5719

session

ID 检查 对应讨论
S1 孤儿 tool_call(无对应 tool result) #1363, #1544
S2 未闭合 turn(会话卡"运行中") #466, #1265
S6 seq == index 连续性(官方语义,chunk 行按 expandRow 展开) #1333, #1452, #1469
S7 end-seed 后重放(重放已提交尾部) #1497
S8 未知事件类型且无 ignorable(整包拒绝)——可读集 = 当前表 ∪ 已装 dsh-session-format-* 迁移包认的旧类型 #1538
S9 zstd 容器帧数(单帧日志 → session.list 整体 500) #1043
S10 sourceEventSeqs 引用非更早事件 #1469
S11 全会话扫描:损坏 → 隔离建议;超大 / 工作区估算物化堆(max(事件×600B, 字节×6),默认 1GiB,DSH_DOCTOR_HEAP_MB)→ 冷启动卡顿风险 #1550
S12 迁移拒载预检:会被已装 dsh-session-format-* 迁移链拒绝的会话日志(v0 subagent/descriptor 版本门;v2→v3 source.kind 白名单)——列表里看着在、点开却打不开 #6045, #6328, #6311

备注

  • S 类检查复刻了 harness 自身的校验(如 SessionLogScanner 的 seq == events.length + expandRow chunk 展开),所以离线结论与 boot/resume 实际行为一致。
  • 尊重 $DSH_HOME(默认 ~/.dsh),可以用临时 home 干跑,不碰真实数据。
  • 当前活跃 turn 的尾部 in-flight 工具调用按警告而非错误处理,扫活会话不会误报。
  • 同生态位兄弟实现:boyin111-1/dsh-doctor —— 两工具用同一批坏 fixture 交叉验证过。

相关社区工具

> dsh-doctor/v1 词汇表 r5 兼容,v1.1 installed_bundle 待认领 —— 起草 @ciceroyang(ciceroyang/dsh-doctor),审阅 @sjh9714(dsh-win32)与 @moonquake2004(#1719)。我们的 node/pnpm 检查按 r5 语义输出词汇名(pass/warn/fail/skip;summary.skip 常驻);P12 直接发 v1.1 词汇名 installed_bundle(四态 skip/warn/pass/warn,r6 表待发)。

  • zoahdev/dsh-plugin-doctor —— 发布前插件 bundle 健康检查(manifest/patch/entry/files/build/pack+全新 profile 安装)+ 宿主遮蔽 profile-shadow 哨兵(作者/CI 侧)。与本工具的用户侧 profile/session/env 诊断互补;它的 profile-shadow 与我们的 P5 从两个方向标记同一个宿主遮蔽前置条件。
  • boyin111-1/dsh-doctor —— 同生态位离线诊断兄弟实现,用同一批坏 fixture 交叉验证。

Symptom → check quick-start (dsh-diagnose alignment)

If you're coming from a symptom (rather than from the machine), these are the checks to run first. Coverage is honest: ✅ = direct offline coverage, ⚠️ = partial (we see the log/profile effects, not the runtime internals), ❌ = gap (runtime-only, no offline probe today).

Symptom family dsh-doctor checks What they catch
session log corruption / can't resume S1, S2, S6, S7, S8, S9, S10 orphan tool calls, unclosed turns, seq gaps, end-seed replay, unknown event types, zstd single-frame, sourceEventSeqs drift
oversized / cold-start stall S11 estimated materialization heap, corrupt-session quarantine
boot failure (UI won't open) P1–P10, E10 dangling bundles, id collisions, patch syntax, host shadowing, adapter conflicts, client-service injects, port 3080
tool registry gaps (tools missing) P1, P2, P8, P10, P9 unresolved/conflicting/duplicated tool registrations, client-only service injects
compaction / history unavailable S10, S6, S8 sourceEventSeqs not remapped after compaction
agent-loop lifecycle (session stuck "running") S2, S1, S6 unclosed turns, orphan tool calls, broken seq
llm retry storms S6, S11, S2 retry traffic effects on log integrity/size
token metering off S11, S1, S2 metering derives from the event stream
workflow script failures P7, S6, S8, S1 patch syntax (boot), workflow event integrity
approval policy pending S2, S1 open turns / orphan calls from pending or rejected approvals
credentials resolution E2, E5, P4 .env shape, storage JSON, file: links
web internals E10, P10, E5 port, client half, workspace storage
subagent depth S11, S8 session size, subagent event types
sandbox denials E4 node-pty binary (infra only) — ❌ runtime policy not offline-checkable
approval internals S2 ⚠️ runtime policy; only the turn-level effect
credentials internals E2, E5 ⚠️ file-level only

The dsh-doctor/v1 envelope (--json --envelope) is the machine-readable form of any of these runs, so a symptom tool can consume the verdict directly. --remediation(配合 --json --envelope)输出 v1.1 可选 remediation 数组——失败项的有序 [检查名] 修复 行;不带该 flag 时字段不存在,r5 消费者字节稳定。

自更新检查(v0.2.1,层 B)

工具也会盯着自己的 npm 版本:每次运行对比已装版本与 dist-tags.latest(与目录同样的 6h TTL 缓存 + 离线回退)。有新版时打印提示、JSON 里报 update: { current, latest, available }——未经你要求绝不改动你的安装。

  • --update —— 立即执行更新:在宿主 profile 里跑 pnpm install(可用 DSH_DOCTOR_UPDATE_CMD 覆盖),然后提示重启 dsh web。
  • DSH_DOCTOR_AUTO_UPDATE=1 —— 有新版时自动更新。
  • 诚实边界:cordis 启动时加载插件,新引擎要重启才生效——层 B 是"换文件 + 提醒重启",不做热替换。
  • --no-catalog 同时禁用更新检查(纯离线模式)。

远程检查目录(v0.2.0,层 A)

内置 26 项检查编译在工具里。目录是第二层、自更新的:本仓库的 plugin/checks.json 放声明式规则(规则是数据,不是代码),所有已装实例自动获取新规则——无需重装。

  • 工作机制:每次运行尝试从 GitHub 拉 plugin/checks.json(3s 超时)→ 成功后缓存到 $DSH_HOME/.cache/dsh-doctor/checks.json(TTL 6h)→ 失败回退 last-known-good 缓存 → 再回退内置副本。新检查因此在上游提交后 ≤6h 内自动到达。
  • 安全性:规则是只读探测原语,由内置引擎执行(command-exists、path-*、json-valid、text-contains / text-not-contains、file-size-above、glob-count)。远程内容永远无法执行代码——只能新增模式检查。
  • 严重级别:error(默认,改退出码)或 warn(只报告,不影响退出码)。--no-catalog 关闭远程拉取。
  • 加一条检查(这就是重点——无需发版):往 plugin/checks.json 追加一条并提交即可。目前已随目录发布的检查:
ID 探测 检查 对应讨论
E7 command-exists dsh 在 PATH #1270 家族
E8 text-contains(warn) profile .npmrc 含 ignore-workspace-root-check=true dsh-market #20
E9 json-valid config/workspace.json 可解析 #1357 家族
P6 text-not-contains patch insert name: 含空格(Windows spawn lint) #1420

目录检查的结果在 JSON 输出中标 src: "catalog",CLI 输出标 [目录]。

LLM 观察者(v0.3.0,层 C)

第三层把"现场信号 → 目录条目"的回路半自动化:从诊断运行产出候选检查提案,人做最后把关(认证门禁不变)。设计与细节见 docs/layer-c-observer.md。

  • dsh-doctor --observe run.json —— 聚类诊断运行的 fail/warn 信号(--json / --envelope 输出,或含 JSON 的目录),按目录 schema 起草候选检查(确定性,默认 severity: warn)。
  • --observe-llm ""(或 DSH_DOCTOR_LLM_CMD)—— 用 LLM 富化草稿:cmd 从 stdin 收 prompt,stdout 回 JSON。回复被封闭探测词表约束,任何解析/词表违规静默回退草稿。
  • --observe-apply proposals.json —— 把校验通过的提案并入本地覆盖层 plugin/checks.local.json(幂等)。覆盖层参与本地诊断直到你认证该检查,但永不随包分发——认证后的检查应进 plugin/checks.json。

安全不变量:封闭探测词表(LLM 输出永远是数据、不是代码)、提案默认 warn、不自动上目录、不依赖任何外部服务(不带 --observe-llm 即确定性模式)。

也可作为 dsh 插件安装

工具以标准 dsh bundle 形态发布(plugin/),可以在 web UI 里跑同样的检查(28 内置 + 5 目录规则):

# 装进 profile(checkout 或已发布路径均可)
dsh plugin --profile web add file:/path/to/dsh-doctor/plugin

装完你会得到:

  • 设置 → 诊断面板:一键跑全部检查,按 env / profile / session 分组渲染结果,带逐项修复建议与隔离建议(只展示建议,绝不自动执行);
  • HTTP API:GET /dsh-doctor/run 返回同样的 JSON(可选 ?profile= / ?session= 收窄范围)。

架构:插件的服务端路由 shell 出 plugin/dsh-doctor.mjs --json——与 CLI 同一份真相源(检查按设计是离线/文件系统导向的,不需要 harness 内部接口)。仓库根目录的 dsh-doctor.mjs 是兼容 node dsh-doctor.mjs 的薄封装。

License

MIT

常见问题

8 问
答案由本站依据条目字段整理,不引用上游原文
dsh-doctor 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add @moonquake2004/dsh-doctor` 即可。

dsh-doctor 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-doctor 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-doctor 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-doctor 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2、0.1.7-rc.2、0.1.6-alpha.2、0.1.6-alpha.1。

dsh-doctor 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-doctor 仓库里有多个插件吗?

这是一个多包仓库,上游还列出了 1 个子包:plugin。安装时注意区分具体子包。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

8 条
不同作者的仓库分开列,请确认你要装的是哪一个
开发与运行时
按星标排序,可作替代方案

rea

rea

L4 · 沙盒安装通过 2.6 万 星

dsh-TUI

dsh-TUI

Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。

L4 · 沙盒安装通过 4,292 星

mirage

mirage

把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Sla

L3 · 安装规范通过 3,681 星

dashi-taskboard

dashi-taskboard

把当前已安装并运行中的 Codex Taskboard 嵌入 DeepSeek Harness 侧边栏,并通过 Launcher 运行时描述

L4 · 沙盒安装通过 3,311 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。