Bliveren/dsh-doctor ↗★ 0

dsh-doctor

One-command health check for a DeepSeek Harness installation: profiles, bundles, patch layers, links, credentials, disk, and stale backups — with a redacted report you can paste into Discussions.

パッケージ
dsh-doctor
互換性
未検証
Harness ピア範囲
>=0.2.0 <0.3.0
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/11/01

同名パッケージの別リポジトリ

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Bliveren/dsh-doctor

ドキュメント

README 全文を読む ↗

dsh-doctor

One-command health check for a DeepSeek Harness installation.

When a DSH install misbehaves, the interesting facts are spread across the home directory: which profile launched, whether every bundle in dsh.profile.bundles still resolves, whether a link: dependency points at a moved checkout, whether the patch layer still parses, whether the volume has room left. dsh_doctor collects those facts read-only and returns a redacted Markdown report that is safe to paste into a Discussion thread.

Install

dsh plugin --profile  add github:Bliveren/dsh-doctor

The package is plain ESM with no build step, so a git install needs no build-script allowlist. Pinning a commit (github:Bliveren/dsh-doctor#) prevents a later push from changing what runs.

Restart the host, then ask the agent:

Run dsh_doctor and show me the report.

What it checks

CheckWhat it answers
runtime/nodeIs the running Node.js inside the supported range?
profile/existsDoes the launched profile directory exist?
profile/manifestDoes the manifest declare a readable dsh.profile.bundles list?
bundle/Per bundle: in-box or installed, patch file present, engines.dsh satisfied
profile/patchDoes cordis.patch.yml parse, and does it contain duplicate row ids?
profile/local-linksDo link: and file: dependencies still point at something?
profile/backupsLeftover .bak-* files and abandoned `
.broken-*` copies
profile/lockfileIs the profile's dependency set pinned?
home/exists, home/writableDoes the DSH home exist and accept writes?
home/diskFree space on the DSH home volume
home/credentialsIs .credentials.yaml present, and are its permissions restrictive?

In-box bundles (@deepseek-ai/dsh-base, @deepseek-ai/dsh-web-app, …) resolve from the dsh installation rather than the profile, so their absence from the profile's node_modules is not a problem. A bundle counts as in-box when the profile manifest does not list it under dependencies.

Parameters

  • profile — profile name to inspect. Defaults to the profile the host was launched with, detected from the launcher's profile-directory argument or DSH_PROFILE.

Example report

# DSH Doctor report

- generated: 2026-11-01T15:09:33.084Z
- platform: darwin arm64
- node: v24.21.0
- dsh home: `~/.dsh`
- profile: `desktop`
- summary: 13 pass, 1 warn, 0 fail, 0 skip

| Check | Status | Detail |
|---|---|---|
| runtime/node | PASS | v24.21.0 satisfies >=24.9. |
| profile/manifest | PASS | 3 bundle(s): @deepseek-ai/dsh-base, @deepseek-ai/dsh-web-app, @local/computer-use. |
| bundle/@local/computer-use | PASS | version 1.0.0, declares a patch layer. |
| profile/backups | WARN | 4 backup file(s) such as package.json.before-persona-fix-…; abandoned profile desktop.broken-20261031-102652 (last change 2026-10-31). |

What it does not do

  • It never reads credential contents. Only presence and permission bits are reported.
  • It never writes, repairs, or deletes anything. Fixes appear as hints, not actions.
  • A pass is not a guarantee of a working install. The checks cover layer composition and filesystem state; runtime behavior (provider reachability, sandbox availability, plugin internals) is outside this tool.

Development

pnpm install
pnpm test

The checks live in lib/checks.js as pure functions over paths and process facts, so new checks are testable without booting DSH. index.js only wires them into the tool registry.

Licensed MIT.