packages/dsh-skill-explorer
zhu1090093659/dsh-web技能中心:按来源分级浏览已加载的全部 skill,启用/禁用模型调用、创建新技能、删除进可恢复回收站。
DSH Web GUI 技能中枢:基于官方 ctx.skills 注册表浏览、搜索、启停、查看、诊断并新建本地技能,附技能市场:来源快照跟踪、一键全量更新。
中文版 | English
In-GUI skill hub for DeepSeek Harness — browse the full ctx.skills catalog, toggle skills, inspect bodies, fix discovery issues, install from the market, and scaffold new ones.
Host runs in the dsh process via official SDKs only; browser renders through official slots. No dsh source changes.
dsh plugin --profile web add dsh-skill-hub
# restart dsh web → Settings → 技能 → Market → scan → importRequires Node ^22.19 || >=24 + dsh web >=0.1.7-alpha.1 <0.3.
Two surfaces — the hub panel lives at Settings → 技能, and this plugin's own configuration card sits on the plugin's page in the Plugins manager (sidebar → 插件 → dsh-skill-hub). The card is registered by the plugin itself into the plugins.bundle.config slot — dsh has no auto-generated config page — and covers the master switch, announce-to-agent, dot colors, usage display and the stats window/interval.
Settings → 技能 — 3 tabs: Sources (skills, flat/grouped + project tree), Scenes (custom tag groups), Market (install + update).
ctx.skills registry: project / user / bundled + third-party providers. Search across name, description, displayName; filter by source and invocation (model / user); sort by name, added time, or usage. Same-name skills from different sources get a duplicate badge instead of silently hiding.~/.dsh/skills & ~/.agents/skills are writable; everything else is read-only.~/.dsh/dsh-skill-hub.json. Edit mode reveals delete/reorder without cluttering the read view.: in descriptions) get a one-click Fix button.~/.dsh/skills or ~/.agents/skills (SKILL.md template below).owner/repo sources. Any top-level directory containing SKILL.md scans as a root (no allowlist), and a SKILL.md at the repo root itself scans as a single skill named after the repo (minus repo tooling such as .github/). Async import with byte-level progress and cancel. Each source pins a version — click the ref badge to switch between releases, branches, or a custom ref.dsh-skill-manager browses, dsh-skill-importer / dsh-find-skill import. This plugin manages.
Capability · read-only browser · dsh-skill-hub Catalog · user roots, self-scanned · ctx.skills registry, all roots + third-party Toggle · ❌ · ✅ per-skill + per-group, never deletes Diagnostics · ❌ · ✅ reasons + one-click fix Market · ❌ · ✅ built-in + custom, version pins, update-all Source tracking · ❌ · ✅ check/sync/trash with restore Stats · ❌ · ✅ counts + last-used
Scaffold format (SKILL.md):
---
name: my-skill
description: One line when the agent should use this skill.
---
# my-skill
Body...GitHub repo ──scan/import──▶ ~/.dsh/skills
▲ │
└─check/sync/delete── ctx.skills ◀─ provider
│ snapshot/get
▼
/api/skill-hub/* ──▶ Panel (Settings → 技能)Host uses only ctx.skills.snapshot/get, ctx.webServer.register, ctx.systemPrompt.section. Routes sit behind dsh's own /api trust fence (loopback / the listener's bind address / --trusted-host), JSON.
Endpoint · Method · Purpose /api/skill-hub/catalog?cwd= · GET · skills + disabled + diagnostics + duplicates /api/skill-hub/skill?name=&cwd= · GET · skill body (works for disabled too) /api/skill-hub/skill/delete · POST · move to trash (snapshots source+scenes) /api/skill-hub/toggle · POST · {name, enabled} /api/skill-hub/toggle-batch · POST · {names, enabled} /api/skill-hub/create · POST · {name, description?, root?} /api/skill-hub/diagnostic/fix · POST · {path} auto-fix frontmatter /api/skill-hub/stats · GET · invocation counts /api/skill-hub/config · GET/POST · runtime config (null clears) /api/skill-hub/groups · GET · tags + collections + orders /api/skill-hub/tag etc. · POST · create/rename, delete, set members, reorder /api/skill-hub/market etc. · GET/POST · list/add/delete/pin sources; …/source/check + …/source/sync update them /api/skill-hub/market/source/versions?repo= · GET · releases + branches for the version picker /api/skill-hub/repo?repo= · GET · discover (any root) /api/skill-hub/repo/import · POST · async job {jobId, total, totalBytes} /api/skill-hub/repo/import/progress?jobId= · GET · poll job /api/skill-hub/repo/import/cancel · POST · cancel job /api/skill-hub/sources etc. · GET/POST · list/check/sync/delete/restore/clear trash /api/skill-hub/update · GET · plugin latest release unknown /api/skill-hub/* · GET/POST · 404 {error} naming the path — a typo must not read as an auth failure (the SPA fallback answers 401 for /api/* it does not own)
npm run typecheck # tsc --noEmit
npm test # 295 tests, 16 suites
npm run build # tsc + tsdown → lib/index.js + lib/client.jsDon't run twodsh webon the same$DSH_HOME+ cwd — no session-log lock (seq gapcorruption). Use separateDSH_HOME.
duplicate loader entry id: skill-hub — remove the duplicate install (keep one dsh plugin add method)./SKILL.md bundle and a .md file can coexist on disk, and the registry keeps only one of them)..disabled files on disk and prunes records whose file is gone (a record left behind by a hand-deleted directory used to be un-actionable: enable, create and delete all failed). Source groups with no visible member are no longer rendered..disabled file, or dropped so the name is free again./ menu — dsh internals changed; catalog still works.0.1.7-alpha.1 this plugin does not load at all (the settings API it targets does not exist there).Issues · Discussions · Showcase · Market PR · Discord
MIT — LICENSE.