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

只读排障工具 dsh-plugin-lab/dsh-plugin-debugging

DeepSeek Harnessv0.7.1
dsh-plugin-lab11 天前有提交已提供中文文档扫描:含敏感能力

让 DSH 智能体自检自修它身处的运行时

37/100
综合分
7
GitHub 星标
1,329
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-debugging
npm 源 · dsh-plugin-debugging 的发布者账号已校验与本仓库一致

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-plugin-debugging @ 0.7.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 13 条)
  • 读取本地文件
    lib/skills/register.js:152
    raw = readFileSync(skillFile, 'utf8');
  • 发起网络请求
    lib/tools/dsh_list_instances.js:98
    const response = await fetch(url, { signal: init.signal, redirect: init.redirect });
  • 发起网络请求
    lib/tools/dsh_list_instances.js:328
    const response = await deps.fetch(url, { signal: controller.signal, redirect: 'manual' });
  • 发起网络请求
    lib/tools/dsh_restart.js:573
    outcome = await deps.restart.approval.request(exec.agent, reason, exec.signal);
  • 发起网络请求
    lib/lib/http.js:26
    const response = await fetch(url, { signal: init.signal, redirect: init.redirect });
  • 发起网络请求
    lib/lib/http.js:57
    const response = await deps.fetch(url, {
  • 读取本地文件
    lib/lib/profile.js:65
    link = (await lstat(path)).isSymbolicLink();
  • 读取本地文件
    lib/lib/profile.js:73
    target = await readlink(path);
  • 读取本地文件
    lib/lib/profile.js:276
    return (await stat(path)).mtimeMs;
  • 读取本地文件
    lib/lib/profile.js:297
    names = await readdir(dir);
  • 读取本地文件
    lib/lib/profile.js:312
    const info = await stat(path);
  • 读取本地文件
    lib/lib/profile.js:380
    return await readFile(path, 'utf8');
  • 执行外部命令来自配置/变量
    lib/lib/exec.js:27
    const child = spawn(options.command, [...options.args], {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

界面预览

1 张 · 点击查看大图

功能亮点

  • 只读调试运行中实例
  • 定位改动不生效原因
  • 判断重载或重启

用于运行中 DSH 实例的只读调试工具包

v0.7.12026-10-20
· Changes · Bug Fixes · perf(package): 门面图不进 npm 包(4.0 MB 动画横幅占整包 78%) (#73) @zlZayn
v0.7.02026-10-19
· Changes · chore(release): 0.7.0 — 声明面改成三族并集 (#72) @zlZayn · Features · feat(compat): 补每周兼容巡检(四个插件仓里唯一缺的),并抬到 0.2.1 族 (#70) @zlZayn · Bug Fixes · feat(compat): 补每周兼容巡检(四个插件仓里唯一缺的),并抬到 0.2.1 族 (#70) @zlZayn · Documentation · chore(manifest): spell the author the same way as the sibling packages (#71) @zlZayn
v0.6.02026-10-18
· Changes · release: 0.6.0 (#68) @zlZayn · Features · fix(stop-window): 重新上膛 job 句柄 + 窗口显示带 token 的地址 (#67) @zlZayn · Bug Fixes · fix(stop-window): 重新上膛 job 句柄 + 窗口显示带 token 的地址 (#67) @zlZayn
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-debugging Let your DSH agent inspect and fix its own runtime 让 DSH 智能体自检自修它身处的运行时 Per-version changes → Releases English · 简体中文 改了东西却没生效?在 DSH 里,这通常只有三种情况: - 配置:每次改动都会重新读取,所以改完立刻生效。前提是 profile 里挂载了 hmr;没有 hmr,任何改动都会退化成必须重启。 - 宿主代码:进程只在启动时加载一次代码,所以改完要重启。 - 前端资源:浏览器按指纹替换资源,所以改完要热重载或刷新。 这个插件让智能体判断你属于哪种情况,以及接下来该做什么。 它能做什么 安装后,智能体会得到一组工具和一份技能文档。技能按需加载,你用斜杠命令调用它。 工具 只读 —— 不会改动宿主上的任何东西。 | 工具 | 参数 | 作用 | Web | 桌面端 | | dsh_list_instances | port | 列出本机正在运行的 DSH 宿主。只有未认证的 GET / 返回的正是 DSH 响应体时,这个端口才算 DSH。「探测不到」和「不是 DSH」分开上报。 | ✓ | ✓ | | dsh_check_auth | host、port | 区分「未运行」和「未认证」。
展开完整文档(README 剩余 1 节)
dsh-plugin-debugging

Let your DSH agent inspect and fix its own runtime
让 DSH 智能体自检自修它身处的运行时

Per-version changes → Releases

English · 简体中文

改了东西却没生效?在 DSH 里,这通常只有三种情况:

- 配置:每次改动都会重新读取,所以改完立刻生效。前提是 profile 里挂载了 hmr;没有 hmr,任何改动都会退化成必须重启。
- 宿主代码:进程只在启动时加载一次代码,所以改完要重启。
- 前端资源:浏览器按指纹替换资源,所以改完要热重载或刷新。

这个插件让智能体判断你属于哪种情况,以及接下来该做什么。

它能做什么

安装后,智能体会得到一组工具和一份技能文档。技能按需加载,你用斜杠命令调用它。

工具

只读 —— 不会改动宿主上的任何东西。

| 工具 | 参数 | 作用 | Web | 桌面端 |
| dsh_list_instances | port | 列出本机正在运行的 DSH 宿主。只有未认证的 GET / 返回的正是 DSH 响应体时,这个端口才算 DSH。「探测不到」和「不是 DSH」分开上报。 | ✓ | ✓ |
| dsh_check_auth | host、port | 区分「未运行」和「未认证」。 | ✓ | ✓ |
| dsh_diagnose_plugin_load | package、port、dshHome | 检查插件是否真的加载:bundle 成员关系、挂载形式、loader 树,并把实测证据和推断证据分开。 | ✓ | ✓ |
| dsh_check_effect_mode | change:config / bundle-added / host-code / client-code、alreadyInDependencies、dshHome | 判断改动是即时生效、需要重启,还是需要热重载。它直接探测运行中的 profile,不靠猜。 | ✓ | ✗ |
| dsh_dump_config | profile、dshHome | 展示 profile 解析成了什么:合成后的树,以及解释它的诊断信息。 | ✓ | ✗ |
| dsh_sign_cookie | host、port、maxAgeDays、dshHome | 为浏览器会话 cookie 签名,让脚本或命令行客户端能访问你自己的 DSH 实例。 | ✓ | ✓ |

会改变状态 —— 前两个会替换代码,或结束你正在调试的宿主。

| 工具 | 参数 | 作用 | Web | Desktop |
| dsh_hot_reload | entryId / module / serverName 三者中恰好一个,外加 dryRun | 把已挂载的 entry 换成磁盘上的最新代码,无需重启。失败时回滚。 | ✓ | ✓ |
| dsh_restart | reason、delayMs、dryRun、force | 改动确实需要时,重启这个宿主。默认关闭。 | ✓ | ✗ |

表格按你实际使用的顺序排列,所以两张表只在一处分开:它们是否改变任何东西。最后一列是按载体划分的可用性;原因见 平台支持。

三个常见陷阱:

- dsh_check_auth 返回 401 不代表会话过期。 不带 cookie 的请求永远得到 401,所以 auth probe 的 401 只能证明服务在运行、且要求认证。要区分「会话仍然有效」和「authority 不对」,你必须在浏览器里打开那个 host:port。旧 cookie 在同一端口重启后仍然可用;只有端口变了才会产生 401。
- dsh_hot_reload 可能泄漏。 框架不跟踪的资源——比如 timer 或 socket——在替换后会悄悄泄漏。
- dsh_restart 在下面有单独一节。

背后的技能文档

技能文档位于 skills/dsh-plugin-debugging/SKILL.md,完整记录了安装形式、凭据获取、进程识别和隔离实例背后的推理过程。

工具只是加速器;如果工具输出与技能文档冲突,以技能文档为准。

安装

从 Plugins 页面安装:

打开 Plugins 页面,点击右上角的 Add plugin,输入 dsh-plugin-debugging,然后安装。

从 npm 安装:

dsh plugin --profile web add dsh-plugin-debugging

从源码安装:

bash
git clone https://github.com/dsh-plugin-lab/dsh-plugin-debugging.git
cd dsh-plugin-debugging
pnpm install && pnpm run build
dsh plugin --profile web add "$PWD"

注意:

- 不要跳过 pnpm install:用 link: 方式安装时,依赖来自仓库本身;跳过这一步,插件会显示为未运行,并报 ERR_MODULE_NOT_FOUND。
- 重启后生效:安装完成后重启 dsh --profile web。
- link: 和 dsh.bundle 是两回事:link: 只决定改源码后是否需要重新安装;patch 层是否生效,取决于包有没有声明 dsh.bundle。

环境要求:

Node >= 20,且 DSH 版本满足 package.json 中的范围。

维护规则:

profile 的 dependency 和 bundle list 由 dsh plugin add 管理,不要手动编辑。不要在 $DSH_HOME 下创建包,也不要在 profile 目录里运行包管理器。

安全与边界

除 dsh_restart 外,这些工具从不重启进程、从不改写 profile、从不写入宿主数据。测试会强制这条规则:只要有任何写入指向宿主数据路径(profiles / sessions / storages / logs / cache / attachments / backups / integrations / mcp / settings.yaml / .credentials.yaml …),或者把 DSH_HOME 本身当作目标,pnpm run test 就会失败。

唯一的写入例外是本插件自己的命名空间 $DSH_HOME/<package name>/:只要求 $DSH_HOME 下第一层目录与包名完全一致,再往下不受限制。

各工具触碰的范围:

- 只读,不发请求:dsh_check_effect_mode、dsh_diagnose_plugin_load、dsh_dump_config。它们只读实例已有的文件,不产出凭据。
- 只读,发送 HTTP:dsh_check_auth 连接你指定的 host:port;dsh_list_instances 只探测回环端口。两者都不发送凭据。
- 只触碰运行中的模块树:dsh_hot_reload,不杀任何进程。
- 读取本地签名密钥:dsh_sign_cookie,为你自己的实例签 cookie。它不发请求,且 cookie 值故意不返回。
- 结束宿主:dsh_restart,这里唯一不可逆的操作。

dsh_restart

dsh_restart 是唯一不可逆的操作:它会结束你正在调试的宿主。默认关闭,运行它要通过三道关卡:

1. 四项检查:是否处于重启循环、是否有其他会话或任务正忙、bundle 表是否可读、启动命令能否确定。force 只覆盖「会话正忙」这一关;其余三项无法绕过。
2. 单独的审批检查:先读取审批策略,只有策略为 ask 时才询问你。never 表示禁用提示词,所以在 never 下询问会被拒绝;必须先读取策略,再决定是否询问。
3. 写入 marker 前的单独检查:这个插件自己的命名空间不在默认文件沙箱内,所以写入时显式使用 danger-full-access。

三项结果都会写进工具输出。 dryRun 会跑完每一道关卡,但不写入任何内容。

[!IMPORTANT]
仅限 Windows,且仅当宿主以 Web 进程方式启动。 在 Desktop 应用里,它会在写入任何内容之前拒绝执行:请从托盘退出,然后重新启动。

重启之后会发生什么:

- 新宿主读取 marker,唤醒其中列出的每个会话,并在每个会话里留一条备注。
- 这条备注是回顾,不是「请继续」:重启在何时被请求、宿主停机了多久、marker 最终如何。
- 你输入的 reason 只出现在发起重启的那个会话里;其他会话收到同样的回顾,但不带 reason。

平台支持

基于端口的进程识别设计为跨平台;目前只在 Windows 上做过真机实测。具体来说:

- 找不到可用命令时:它报告「无法检查」,而不是「没有监听者」。这是两个相反的结论。
- 较弱的回退方案:它们可能发现「有人在监听」,却识别不出进程;这种情况报告为未识别,而不是「没有监听者」。

其余部分与平台无关。dsh_restart 需要 Windows 并且宿主以 Web 进程方式启动:在 Desktop 应用里,宿主是 Electron 外壳的子进程,没有任何面向插件的通道能重新拉起那个外壳。如果你能在 Linux 或 macOS 上试一次真正的重新拉起,请到 #44 告诉我们——这个缺口正是该 issue 要解决的。

配置

字段

这些字段在 profile 组合中配置本插件。enableRestart 在本插件卡片上的 Plugins 页面也有一个开关。

| 字段 | 默认值 | 含义 |
| enableRestart | false | 是否允许运行 dsh_restart。立即生效,无需重启宿主。 |
| dshHome | $DSH_HOME,否则 <home>/.dsh | 实例存放 profiles、日志和凭据的位置。 |
| profile | $DSH_PROFILE,否则为默认 profile | 工具检查哪个 profile。 |
| port | 0 | 要探测的宿主端口;0 表示自动查找监听端口。 |
| timeoutMs | 60000 | 快速工作的超时预算:读一个文件、跑一条命令,或做一次 HTTP 探测。 |
| schemaDumpTimeoutMs | 240000 | 运行 --dump-config-schema 的超时预算(实测 10.2–15.7 s;负载下 32 s)。 |

这两个预算如何推导,以及传输层为什么必须在宿主的工具截止时间之前过期 → docs/ARCHITECTURE.md §5.1。
调试另一个实例

什么时候需要: 你在调试一个实例,但证据在另一个实例上——另一个 profile,或者另一个 DSH_HOME。

哪些工具接受 dshHome: dsh_dump_config、dsh_check_effect_mode、dsh_diagnose_plugin_load、dsh_sign_cookie。路径解析和启动的 dsh 子进程都用你传入的 home,输出会说明实际读取的是哪一个(dshHomeSource: tool-argument)。以参数传入的值,绝不会被悄悄报告成配置的默认值。

哪些不接受,为什么:

- dsh_check_auth:它回答的是某个 host:port 的认证状态,而且已经有 host / port。
- dsh_list_instances:它只做发现,能给的就只有一个 host:port。
- dsh_hot_reload:它替换的是当前进程内存里的模块,跨不到另一个实例。
- dsh_restart:它杀掉自己所在的主机,所以没有「另一个实例」可以指向。

一个坑: 发现类工具只能给出 host:port,没有任何东西把它映射到对应的 DSH_HOME;所以你得自己提供 dshHome。因此,dsh_diagnose_plugin_load 把答案分成两半:磁盘证据来自你传入的 home,loader 树那一半只反映当前进程。

License

MIT。

Contributing

Bug 和需求请提到仓库的 Issues。

维护者的文档地图 → AGENTS.md。
预览分享卡片长什么样 ↓dsh-plugin-lab/dsh-plugin-debugging
分享 · DeepSeek Harness Hub
dsh-plugin-lab/dsh-plugin-debugging

让 DSH 智能体自检自修它身处的运行时

回到顶部