zhaorui-wu/dsh-skill-cockpit ↗★ 0

dsh-skill-cockpit

Skill cockpit for DSH: one page in the app-level nav (official sidebar.panellist seat, order 5) that lists every skill this machine actually exposes (all six skill-root kinds, not just ~/.dsh/skills), explains why a skill is invisible (dropped:* / missing root / disabled), and toggles a single skill by renaming its entry file only (SKILL.md → SKILL.md.disabled); project-level skill roots stay read-only. 技能中心:导航栏加一页,列出本机实际暴露的全部技能,说明某技能为何不可见,并可通过只改入口文件名单独启停;项目级技能根只读。 适合需要统一管理、排查和快速启闭DSH本地技能的开发者。

パッケージ
dsh-skill-cockpit
互換性
未検証
バージョン
0.2.3
ライセンス
MIT
最終更新
2026/10/14

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

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhaorui-wu/dsh-skill-cockpit

ドキュメント

README 全文を読む ↗

dsh-skill-cockpit

Status: early / work in progress. This repository is being published ahead of its first release to reserve the name. The plugin already works end-to-end on the author's machine (4/4 self-test suites · 124 assertions) but the public docs, screenshots, and packaging are still being finished. Expect the surface below to change.

A skill cockpit for DSH (DeepSeek Harness): one page in the app-level navigation that shows every skill the machine actually exposes, says why a skill is missing, and lets you toggle a single skill without editing anything but its entry-file name.

中文说明

What it does

  • One page in the application-level nav. It takes the official sidebar.panellist seat with order: 5 — between the shipped Plugins row (0) and the shipped Schedule row (10) — plus the whole page in the layout's main keyed slot. Both seats are registered through the framework's slots service, the same extension point the shipped pages use.
  • All six skill-root kinds, not just one. DSH resolves skills from project-dsh, project-agents, custom, user-dsh, user-agents, and bundled. Scanning only ~/.dsh/skills under-reports what a session can actually see.
  • It answers "why is this skill not there?" A malformed frontmatter block makes the runtime drop a skill silently. The cockpit reports the concrete reason (dropped:no-frontmatter, dropped:unclosed, dropped:bad-yaml, dropped:missing-fields, dropped:bad-name), plus a missing root, a shadowed entry, or an explicit error — instead of showing nothing.
  • Toggling = renaming the entry file only. Enable/disable flips SKILL.md ⇄ SKILL.md.disabled. There is no sidecar state file, so there is exactly one source of truth: the filename. Project-level skill roots are always read-only.
  • No @deepseek-ai/dsh* peer dependency at all. The host half declares inject = [] and the client half declares only slots, so the plugin is not subject to DSH's compatibility-exemption gate and does not touch the credentials surface.

Install (from source, for now)

Not on npm yet. Until the first release, clone this repository and mount the working tree into a profile with a local link:

git clone https://github.com/zhaorui-wu/dsh-skill-cockpit.git
// ~/.dsh/profiles/
/package.json
{
  "dependencies": { "dsh-skill-cockpit": "link:/path/to/dsh-skill-cockpit" },
  "dsh": { "profile": { "bundles": ["…", "dsh-skill-cockpit"] } }
}

Then restart DSH. The entry appears in the left navigation as Skills.

Development

node test/run-all.mjs      # 4 suites: data layer · toggle loop · host routes · client

Pure ESM JavaScript, no build step — lib/*.js runs as-is.

Layout

PathWhat
lib/index.jshost half: local HTTP routes (/__dsh-skill-panel/*)
lib/client.jsclient half: the whole UI (classic script, React.createElement)
lib/roots.js · lib/scan.js · lib/frontmatter.jssix-root enumeration, scan, YAML frontmatter
lib/toggle.jsthe only writer: 8 guards, entry-file rename only
lib/undeclared.js"referenced but not installed" index
test/self-tests (no framework)

License

MIT