DSH Plugins Marketplace

DSH Plugins

Plugins

/

Tools & Capabilities

/

dsh-startup-check

d

dsh-startup-check

Manifest valid

Pre-flight check for a DeepSeek Harness profile's plugin tree: static checks (syntax, package structure, patch references, config-tree assembly) plus optional real-boot smoke (isolated `dsh web` instance) and page-side smoke (headless Edge over CDP), with instance-shutdown confirmation and stray-instance audit. Provides the model-facing `plugin_check` tool and bundles the `plugin-fault-diagnosis` skill.

hasBundlePatch
@cningan/dsh-startup-check — catch a broken plugin before the restart

@cningan/dsh-startup-check

Catch a broken plugin before the restart.

One tool — plugin_check — for the moment between "I installed a plugin" and "the harness won't open".

CI npm provenance node platform license

简体中文 · English


The problem

Every DSH plugin install is a leap of faith:

install a plugin  →  restart  →  find out the hard way

When the leap fails you are left with a harness that will not open, no page to ask, and a plugin tree you have to bisect by hand. By then the agent that could have read the code is gone.

plugin_check moves that discovery in front of the restart: the model inspects the tree — and, if you want, boots a real isolated instance to prove it comes up — while it can still fix what it finds.

Without the check: install, restart, harness fails to open. With the check: static checks pass, an isolated instance boots, exits, and only then are you told it is safe to restart.

What a failure looks like

Broken syntax in one plugin, caught before any restart, with the file named:

// plugin_check { "target": "dsh-oauth" }
{
  "ok": false,
  "checks": [
    { "name": "语法检查", "ok": false,
      "detail": "dsh-oauth/lib/index.js: Unexpected token '}' (node --check exit 1)" },
    { "name": "package.json 结构", "ok": true, "detail": "1 个插件结构一致" },
    { "name": "配置树组装", "ok": true, "detail": "配置树组装成功 (162 行)" }
  ]
}

The model reads that, fixes the file, re-runs the check, and only then do you restart. When the verdict is a real failure, the bundled plugin-fault-diagnosis skill takes over: read the verdict → locate the file → classify the error → fix, disable, or roll back.

What it checks

#CheckCatches
1Syntaxa plugin lib/*.js that fails node --check (typos, TypeScript/JSX in a plain-JS plugin)
2Package structuremissing main target, dsh.client declared without an exports["./client"] entry, wrong name prefix
3Patch referencescordis.patch.yml pointing at a plugin directory that no longer exists
4Config-tree assemblydsh --profile <p> --dump-config failing — the loader cannot compose the tree at all
5Real-boot smoke live: truethe isolated instance never prints its dsh web: <url>
6Page-side smoke page: truethe page throws, logs errors, or renders nothing — client-side failures the host never sees
7Instance shutdown (with live)the isolated instance did not actually exit, verified against the process table
8Stray-instance audit sweep: trueleftover smoke instances, plus a report of live hosts — report only unless you ask

🛡️ Read-only by design

It never restarts or touches the harness you are using. Smoke instances run on --port 0 with --no-open and a hard timeout; cleanup kills only isolated smoke instances, by exact PID — a resident host is never killed.

Install

dsh plugin --profile web add @cningan/dsh-startup-check

Then restart the harness — installing a plugin changes dsh.profile.bundles, which is read at boot. That is the last leap of faith you take.

The npm package is published by GitHub Actions with a signed provenance attestation, so anyone who installs it can verify that this tarball was built from this repository at a particular commit, rather than uploaded by hand from someone's machine:

npm view @cningan/dsh-startup-check dist.attestations
plugin_check                          # static checks (fast)
plugin_check { live: true }           # + boot an isolated instance        (~12s)
plugin_check { page: true }           # + headless-browser page check      (~30–45s, implies live)
plugin_check { sweep: true }          # + audit live DSH processes         (~1–2s)
plugin_check { live: true, killStray: true }   # and clean up this run's leftovers

Reading the verdict

  • ok: true means the checks that ran passed. A static-only run says nothing about runtime behaviour; only live proves the tree boots.
  • "Not measured" is not "failed." No browser, unreadable process table — the affected check says why and is treated as untested (tested: false) instead of being blamed on your plugins.
  • Checks 1–3 walk ~/.dsh/profiles/web/plugins/**, the @cningan layout. Plugins installed from npm into the profile's node_modules are covered by checks 4–8 instead.
  • The profile is currently fixed to web; other profiles are open work.

Requirements

HarnessDeepSeek Harness with a web profile
OSWindows — the instance audit uses PowerShell/WMI, the page half drives Edge/Chrome over CDP
Node≥ 22 (the harness's own engine)
BrowserEdge or Chrome, only if you want the page-side check

Development

git clone https://github.com/cningan/dsh-startup-check.git
cd dsh-startup-check
npm test

npm test runs node --check over every lib/ file and then test/tool-body-selftest.mjs, which drives apply() and the tool's execute() in a fresh Node process against a stubbed context. That is the layer neither node --check nor a boot smoke can see: a running harness keeps serving the code it booted with, so a broken tool body stays green until the next restart.

Full specification, behavior contracts, object lifecycles and known limitations: SPEC.md. Contributions welcome — see CONTRIBUTING.md and CHANGELOG.md.

MIT © cningan · built for DeepSeek Harness

Comments

Loading…

From the same category

reactive-resume

DeepSeek Harness plugin for Reactive Resume: bridges your resumes and job applications into a Harness session over MCP.

Tools & CapabilitiesManifest valid

★ 41.7k

↓ 223/wk

MIT

Aug 24, 2026

dsh plugin --profile web add dsh-plugin-reactive-resume

by Tencent

Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.

Tools & CapabilitiesManifest valid

★ 8.4k

↓ 7.5k/wk

MIT

TypeScript

Oct 8, 2026

dsh plugin --profile terminal add @wxg-prc-cpg/browser-skill-dsh-plugin

by yjh051108

dsh-routing-suite — injector + router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).

Tools & CapabilitiesManifest valid

★ 7k

MIT

JavaScript

Sep 18, 2026

dsh plugin --profile web add @dsh-external/dsh-super-injector

by Q00

Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode,

Tools & CapabilitiesManifest valid

★ 6.2k

MIT

Python

Oct 7, 2026

Index only — not installable

by dsh-market

The plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场

Tools & CapabilitiesManifest valid

★ 5.8k

↓ 156.3k/wk

MIT

TypeScript

Oct 8, 2026

dsh plugin --profile web add dshmarket

by superdesigndev

OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn

Tools & CapabilitiesManifest valid

★ 4.8k

NOASSERTION

Python

Oct 8, 2026

dsh plugin --profile web add treg-dsh