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

环境诊断医生 jorinyang/dsh-doctor

DeepSeek Harness
jorinyang81 天前有提交已提供中文文档扫描:高危

诊断 DSH 崩溃原因并一键修复回滚

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add jorinyang/dsh-doctor
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · dev
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 05:58:42

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 110 处,展示前 47 条)
  • 发起网络请求
    lib/index.js:48
    const req = http.get({
  • 读取本地文件
    lib/index.js:69
    return JSON.parse(readFileSync(path, "utf8"));
  • 读取本地文件
    lib/index.js:114
    if (existsSync(dshHome)) {
  • 读取本地文件
    lib/index.js:129
    if (existsSync(p)) checks.push({
  • 读取本地文件
    lib/index.js:146
    if (existsSync(profileDir)) {
  • 读取本地文件
    lib/index.js:160
    if (existsSync(p)) checks.push({
  • 读取本地文件
    lib/index.js:172
    if (existsSync(join(profileDir, "node_modules"))) checks.push({
  • 写入本地文件
    lib/index.js:411
    mkdirSync(join(this.dir, "backups"), { recursive: true });
  • 写入本地文件
    lib/index.js:419
    copyFileSync(path, backupPath);
  • 写入本地文件
    lib/index.js:420
    writeFileSync(path, newContent);
  • 写入本地文件
    lib/index.js:434
    writeFileSync(path, content);
  • 写入本地文件
    lib/index.js:447
    mkdirSync(path, { recursive: true });
  • 写入本地文件
    lib/index.js:482
    writeFileSync(tmp, JSON.stringify(journal, null, 2));
  • 删除本地文件
    lib/index.js:520
    if (existsSync(op.path)) rmSync(op.path, { force: true });
  • 删除本地文件
    lib/index.js:526
    rmdirSync(op.path);
  • 删除本地文件
    lib/index.js:576
    rmSync(dir, {
  • 发起网络请求
    lib/index.js:817
    const req = http.get({
  • 发起网络请求
    lib/cli.bundle.js:48
    const req = http.get({
  • 读取本地文件
    lib/cli.bundle.js:69
    return JSON.parse(readFileSync(path, "utf8"));
  • 读取本地文件
    lib/cli.bundle.js:114
    if (existsSync(dshHome)) {
  • 读取本地文件
    lib/cli.bundle.js:129
    if (existsSync(p)) checks.push({
  • 读取本地文件
    lib/cli.bundle.js:146
    if (existsSync(profileDir)) {
  • 读取本地文件
    lib/cli.bundle.js:160
    if (existsSync(p)) checks.push({
  • 读取本地文件
    lib/cli.bundle.js:172
    if (existsSync(join(profileDir, "node_modules"))) checks.push({
  • 写入本地文件
    lib/cli.bundle.js:411
    mkdirSync(join(this.dir, "backups"), { recursive: true });
  • 写入本地文件
    lib/cli.bundle.js:419
    copyFileSync(path, backupPath);
  • 写入本地文件
    lib/cli.bundle.js:420
    writeFileSync(path, newContent);
  • 写入本地文件
    lib/cli.bundle.js:434
    writeFileSync(path, content);
  • 写入本地文件
    lib/cli.bundle.js:447
    mkdirSync(path, { recursive: true });
  • 写入本地文件
    lib/cli.bundle.js:482
    writeFileSync(tmp, JSON.stringify(journal, null, 2));
  • 删除本地文件
    lib/cli.bundle.js:520
    if (existsSync(op.path)) rmSync(op.path, { force: true });
  • 删除本地文件
    lib/cli.bundle.js:526
    rmdirSync(op.path);
  • 删除本地文件
    lib/cli.bundle.js:576
    rmSync(dir, {
  • 发起网络请求
    lib/cli.bundle.js:817
    const req = http.get({
  • 执行外部命令固定命令
    lib/cli.bundle.js:898
    const prefix = execSync("npm config get prefix", {
  • 执行外部命令固定命令
    scripts/postinstall.mjs:28
    const prefix = execSync('npm config get prefix', { encoding: 'utf8', stdio: 'pipe' }).trim()
  • 读取本地文件
    scripts/postinstall.mjs:54
    if (shell.includes('zsh') || existsSync(join(home, '.zshrc'))) {
  • 读取本地文件
    scripts/postinstall.mjs:58
    if (shell.includes('bash') || existsSync(join(home, '.bashrc'))) {
  • 写入本地文件
    scripts/postinstall.mjs:75
    writeFileSync(join(globalBin, 'dsh-doctor.cmd'), '@ECHO off\nnode "' + targetPath + '" %*\n')
  • 写入本地文件
    scripts/postinstall.mjs:76
    writeFileSync(join(globalBin, 'dsh-doctor.ps1'), '& node "' + targetPath + '" @args\n')
  • 写入本地文件
    scripts/postinstall.mjs:80
    writeFileSync(binPath, '#!/bin/sh\nexec node "' + targetPath + '" "$@"\n')
  • 写入本地文件
    scripts/postinstall.mjs:81
    chmodSync(binPath, 0o755)
  • 读取本地文件
    scripts/postinstall.mjs:94
    if (!existsSync(globalBin)) {
  • 写入本地文件
    scripts/postinstall.mjs:95
    mkdirSync(globalBin, { recursive: true })
  • 读取本地文件
    scripts/postinstall.mjs:101
    if (existsSync(bundleSource)) {
  • 写入本地文件
    scripts/postinstall.mjs:103
    copyFileSync(bundleSource, bundleDest)
  • 读取本地文件
    scripts/postinstall.mjs:109
    if (existsSync(cliSource)) {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 检查环境与配置
  • 诊断崩溃原因
  • 一键修复回滚

DeepSeek Harness 环境诊断工具:dsh_doctor 检查环境、配置档、配置、打包、挂载、端口、健康和磁盘

README

由 DeepSeek 最新模型翻译生成
🩺 dsh-doctor DeepSeek Harness 的私人医生 崩溃诊断 · 可逆修复 · 一键回滚 · 运行时自愈 npm downloads license stars English · README.en.md 崩溃报错,无法启动? 两行命令接住你的情绪,解决你崩溃的源头。 ① 安装 dsh plugin --profile web add @jorinyang/dsh-doctor ② 修复 dsh-doctor 自带 CLI,安装自动注册到系统 PATH,直接执行即可。修复全程可逆,改坏了随时回滚。 💡 它是什么 DeepSeek Harness 没有内置 doctor 命令。当 DSH 崩溃、启动失败、或某个插件破坏了 profile 时,你只能对着报错干瞪眼,靠重启进程碰运气。
展开完整文档(README 剩余 1 节)
🩺 dsh-doctor

DeepSeek Harness 的私人医生

崩溃诊断 · 可逆修复 · 一键回滚 · 运行时自愈

npm
downloads
license
stars

English · README.en.md

崩溃报错,无法启动?

两行命令接住你的情绪,解决你崩溃的源头。

① 安装
dsh plugin --profile web add @jorinyang/dsh-doctor

② 修复 dsh-doctor

自带 CLI,安装自动注册到系统 PATH,直接执行即可。修复全程可逆,改坏了随时回滚。

💡 它是什么

DeepSeek Harness 没有内置 doctor 命令。当 DSH 崩溃、启动失败、或某个插件破坏了 profile 时,你只能对着报错干瞪眼,靠重启进程碰运气。

dsh-doctor 是 DSH 的第一款「诊断 + 修复 + 回滚」一体化工具,同时也是一个运行时自愈服务:

| 能力 | 形态 | 说明 |
| 🔍 诊断 | dsh_doctor 工具 / dsh-doctor CLI | 只读检查 9 大类,报告哪里坏了、为什么 |
| 🔧 修复 | dsh_doctor_fix 工具 / dsh-doctor fix | 分级修复,每个可逆改动都记录 undo 步骤 |
| ↩️ 回滚 | dsh_doctor_rollback 工具 / dsh-doctor rollback | LIFO 逆序回滚,恢复到修复前 |
| ⚡ 运行时服务 | dsh-doctor Cordis 服务 | DSH 存活时动态诊断、自愈、监控生命周期 |

✨ 为什么选择它

🎯 两行命令,救活崩溃的 DSH

不需要读懂报错,不需要手改配置文件:

dsh-doctor # 先诊断,看问题出在哪 dsh-doctor fix # 再修复,自动处理

↩️ 修复可逆,敢改才敢修

每次修复都会生成一个 journal,记录每个改动的 undo 步骤。改坏了?一条命令回到解放前:

dsh-doctor rollback # 回滚最近一次修复 dsh-doctor rollback --list # 列出所有修复日志 dsh-doctor rollback --id # 回滚指定日志

⚡ 运行时自愈,DSH 活着也能调

不是只能「停机修复」。dsh-doctor 通过 Cordis 原生能力接入运行时:

- ctx.provide('dsh-doctor') — 暴露诊断/修复/回滚 API 给其他插件
- ctx.on('internal/status') — 响应式监控插件生命周期,检测 FAILED 自动告警
- ctx.effect() — 可逆效应,卸载无残留

🌍 跨平台,开箱即用

安装后自动注册到系统 PATH,Windows / macOS / Linux / fish 全覆盖,无需手动配置。

🚀 快速开始

方式一:DSH 插件(Agent 内使用)

从 npm 安装
dsh plugin --profile web add @jorinyang/dsh-doctor

重启 dsh web
dsh web

安装后,在对话中告诉 agent:

运行 dsh_doctor # 诊断用 safe 范围运行 dsh_doctor_fix # 修复运行 dsh_doctor_rollback # 需要时回滚

方式二:全局 CLI(命令行直接使用)

npm install -g @jorinyang/dsh-doctor
或
npx @jorinyang/dsh-doctor

演示

$ dsh-doctor diagnose --profile web

DSH Diagnostic Report (profile: web, port: 3080)
DSH home: ~/.dsh

[OK] Node.js v24.15.0
[OK] pnpm 11.9.0
[OK] DSH 0.1.0-rc.6
[OK] DSH home exists
[OK] profile dir exists: web
...
[XX] bundle missing: some-broken-plugin
fix: Run pnpm install in profile dir

48 pass 0 fail 3 warn
✓ No blocking issues found; DSH should start normally.

📖 命令速查表

| 命令 | 说明 | 别名 |
| dsh-doctor | 只读诊断(默认) | diagnose / check |
| dsh-doctor fix | 修复(可回滚) | repair |
| dsh-doctor rollback | 回滚(LIFO) | undo |
| dsh-doctor rollback --list | 列出修复日志 | journals / list |
| dsh-doctor setup | 注册到系统 PATH | install / register |

通用选项

| 选项 | 说明 | 默认 |
| --profile | DSH profile 名称 | web |
| --port | Web 端口 | 3080 |
| --scope | safe / deps / full | safe |
| --id | 回滚目标 journal id | 最近一次 |
| -h, --help | 帮助 | |
| -V, --version | 版本 | |

修复范围(scope)

| 范围 | 动作 | 风险 |
| safe ⭐ | 创建缺失目录/文件;修复 allowBuilds 占位符 | 🟢 低 — 仅文件/配置 |
| deps | safe 全部 + pnpm install --fix-lockfile | 🟡 中 — 网络 + 依赖 |
| full | deps 全部 + 停止残留进程(健康时跳过) | 🔴 较高 — 进程终止 |

🏗️ 工作原理

dsh-doctor 对齐 DeepSeek Harness / Cordis 的「时空可组合(Spatiotemporal Composability)」范式:

flowchart LR
subgraph CLI["🔧 dsh-doctor CLI(离线)"]
D[诊断]
F[修复]
R[回滚]
end

subgraph Runtime["⚡ 运行时服务(在线)"]
SVC[dsh-doctor 服务]
WATCH[生命周期监控]
end

DSH["🖥️ DeepSeek Harness"]

D -->|发现问题| F
F -->|记录 journal| R
R -->|LIFO 恢复| DSH
F -->|可逆改动| DSH

SVC -->|diagnose/repair/rollback| DSH
WATCH -->|internal/status| DSH

时间可组合(Temporal)— 修复可逆

每个改动都记录反向撤销函数,回滚按 LIFO 逆序执行:

- 覆盖文件 → 保存原始内容,回滚时恢复
- 新建文件/目录 → 回滚时删除(仅空目录)
- 系统边界操作(pnpm install、杀进程)→ 标记「需手动补偿」

空间可组合(Spatial)— 运行时自愈

通过 Cordis 原生能力声明依赖、响应变化:

- ctx.provide — 提供服务
- ctx.on — 响应式监听
- ctx.effect — 可逆效应

🆚 为什么不用传统方案

| | 传统「重启大法」 | 手动改配置 | dsh-doctor |
| 诊断 | ❌ 靠猜 | ⚠️ 靠经验 | ✅ 9 大类自动检查 |
| 修复 | ❌ 杀进程重来 | ⚠️ 手改易错 | ✅ 分级自动修复 |
| 回滚 | ❌ 无 | ❌ 无 | ✅ 一键 LIFO 回滚 |
| 运行时调整 | ❌ 只能重启 | ❌ 停机 | ✅ Cordis 动态服务 |
| 跨平台 | — | — | ✅ Win/macOS/Linux/fish |

❓ FAQ

Q:DSH 崩溃到连插件都加载不了,还能用吗?

能。dsh-doctor 是自包含 CLI,不依赖 DSH 运行。DSH 崩了也能直接 dsh-doctor fix。

Q:修复会破坏我的配置吗?

不会。每个可逆改动都先记录 undo 步骤,改坏了 dsh-doctor rollback 一键恢复。

Q:safe / deps / full 怎么选?

先用 safe(仅文件/配置,零风险)。没解决再升级 deps(重装依赖),最后 full(清理进程)。

Q:它和 DSH 自带的命令冲突吗?

不冲突。dsh-doctor 是独立插件 + 独立 CLI,不修改 DSH 核心。

🤝 贡献

欢迎提 Issue、PR。Bug 报告请附带 dsh-doctor diagnose 的输出。

📄 许可证

MIT

无痛折腾 DeepSeek Harness 🎉

如果你觉得有用,点个 ⭐ Star 支持一下吧!
预览分享卡片长什么样 ↓jorinyang/dsh-doctor
分享 · DeepSeek Harness Hub
jorinyang/dsh-doctor

诊断 DSH 崩溃原因并一键修复回滚

这是你的仓库?认领条目

回到顶部