dsh-skill-cockpit
Skill cockpit page in the DSH app-level nav (sidebar.panellist seat): lists every skill this machine actually exposes across all six skill-root kinds, explains why a skill is invisible (dropped reason, missing root, or disabled), and toggles one skill by renaming only its entry file (SKILL.md and SK
Install
dsh plugin --profile web add dsh-skill-cockpit
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-skill-cockpit
v1.6.0 · 已发布到 npm |npm test19/19 套件全绿 |npm run verify:install13/13(pack → 空目录安装 → 用装机副本启动 → /ping 读回 1.6.0)| MIT
发布状态:v1.6.0已发布 npm、已打 git tag、已建 GitHub Release。1.6.0 包含 D/E 段界面增强(密度、吸顶、按根分组、正文搜索、键盘行操作、复制动作、路径搜索)与后备库reserveListPathOf修复。改动见CHANGELOG.md顶部。
诚实边界。 它不是沙箱:只管理 DSH 自己暴露的技能根,只写~/.dsh/skills与~/.agents/skills;管不了别的进程、手工改动,也管不了绕过 DSH 的调用。CLI / doctor /verify:install在本机 Windows 有自动化实测。宿主已于 2026-11-04 重启,/ping返回 1.6.0。2026-11-03 在 1.5.6 页面实测:76/76 技能、体检 76 条无问题;本轮点过列表 / 分组 / 预设 / 用量 / 回收站 / 后备库 / 偏好 / 体检,并用临时坏技能验了一键修(补 name、补短描述、留.bak,验完已把临时技能移走);「备份全部」在磁盘上生成 76 个技能 / 2242 个文件 / 79,703,006 字节。未逐按钮全量点完,其余未单独实测的按钮仍按「未验证」看待、以其单测/接口证据为准。CI 已在 ubuntu / macOS / windows × Node 20/22/24 上跑全量套件与verify:install。
DSH(DeepSeek Harness)技能面板:在左上应用级导航排加一个「技能」入口,
点开是主区一整页,列出本机全部技能、按技能开关,并接「未安装技能索引」做第二跳。
- 挂载点 = 官方
slots扩展点的两个座位(不再走第三方dsh-better-sidebar):
1. sidebar.panellist(root 作用域的 list,即左上应用级导航排)→ 图标行,order: 5;
2. main(root 作用域的 keyed)→ 主区整页,key 与行 id 同名(skill-panel)。
- 顺序严格夹在「插件」(order 0) 与「自动化任务」(order 10) 之间 —— 外壳按
order升序排(sort((a,b)=>a.order-b.order)),5 落在唯一的空档里,与加载先后无关。 - 因此本包**不声明任何
@deepseek-ai/dsh*peer** ⇒ 不受 DSH 兼容性豁免闸门影响(见工作区AGENTS.md§四 铁律 1/3) - 纯 ESM JavaScript,无构建链:
lib/*.js直接可跑,自测用node即可复跑
自查:dsh-skill-cockpit-doctor
npx dsh-skill-cockpit-doctor # 面板没出现?查:状态目录 / 技能根 / 装配 / 译文 npx dsh-skill-cockpit-doctor --json # 给机器读 npx dsh-skill-cockpit-doctor --home <dir> --fix # 路径全重定向到临时 home;只补能安全补的 npx dsh-skill-cockpit-doctor --dry-run # 只说 --fix 会做什么,不落盘 npx dsh-skill-cockpit-doctor --report out.json # 同一份 JSON 写到文件(只读,不改状态)
退出码:0 就绪 · 1 有要修的 · 2 环境问题。
平台矩阵(谁验过、谁没验):[docs/platforms.md](docs/platforms.md)。
交付前自检(哪条打了勾、证据是什么、哪条还没做):[docs/self-check.md](docs/self-check.md)。
出问题了(检查项对照表 + 三个常见现象):[docs/troubleshooting.md](docs/troubleshooting.md)。
哪些 backlog 已实现、哪些是真缺(逐条给证据):[docs/status-ledger.md](docs/status-ledger.md)。
诚实边界(先看这段,再看下面)
- 只在 Windows 桌面版 DSH 真机验证过。 本文所有结论都来自 Windows 11 上的真实 DSH 桌面安装。macOS / Linux 的语法检查、全量套件与
verify:install已在 CI 里跑过;也没有人在那些平台跑过真实 DSH 会话。 - 全量自测在 CI 里覆盖 ubuntu + macOS + windows。 CI 通过只是自动化证据,不等于那些平台上的真实 DSH 会话已验证。
- 翻译用的是免费公开接口(优先 MyMemory,失败退 Google)。它们会限流、会不打招呼地改;一次批量翻译可能少于请求条数。除这两家之外不发任何数据,而且只在你按下「翻译」时才发。
- 你让它改,它才改技能文件。 一键修会重写你点的那份技能的 frontmatter(必先写
.bak-<时间戳>备份),且不编内容:只补 entry 名、用该技能自己的正文补缺失/过短的描述、给会破坏 YAML 的冒号加引号。修不了时会明确说原因,不再静默。 - 它不是沙箱。 它读 DSH 自己解析的六个技能根(
project-dsh/project-agents/custom/user-dsh/user-agents/bundled),只写~/.dsh/skills与~/.agents/skills;别的 harness 目录一概不碰。 - 调用次数只是下界。 数字来自解析会话日志里的
tool-call(name: "skill");更早的日志形状或从别的入口调用的技能会读成 0。
安装
三步,每步都有可对照的输出。
① 装包
npm i dsh-skill-cockpit # 或 pnpm add / yarn add
期望:node_modules/dsh-skill-cockpit/package.json 里的 version 与你装的版本一致。
② 挂进 profile(这步归 DSH,插件不替你改配置)
在 ~/.dsh/profiles/<你的 profile>/package.json 的 dependencies 里加 "dsh-skill-cockpit": "^1.5.0"(或你装的版本),
或在 cordis.patch.yml 用 insert: 挂一行。本机开发可直接写 "dsh-skill-cockpit": "link:D:/插件/dsh-skill-panel"。
期望:node -e "console.log(require('./package.json').dependencies)" 的输出里能看到这一条。
③ 重启 DSH,然后自查
npx dsh-skill-cockpit-doctor
期望:最后一行是「一切就绪」,左侧导航「插件」与「自动化任务」之间出现「技能」。
没出现就看 --json 里第一个不是 ok 的项:装配那项回第 ② 步;状态目录 / 技能根那项跑 --fix。
同时给 dsh 一个工具:skill_panel(20 个动作,覆盖面板全部能力)——
基础 11 个:list / read / create / update / delete / toggle / repair / backup / trash_list / trash_restore / trash_purge;
二期 9 个:后备库 vault_list / vault_put / vault_install、DSH 预设 preset_list / preset_mount / preset_unmount、批量四态 mode_set、usage、checkup。
以后「把某技能停掉」「新建一个技能」「这套技能全关掉」「最近谁在被调用」这类话,模型直接调工具改磁盘,不必点面板;破坏性动作必须显式 confirm: true。
它解决什么
~/.dsh/skills 只是六类技能根中的一类。只扫它 → 面板少报技能(本机实测 31 vs 会话可见 39)。
更要紧的是:frontmatter 写坏 = 运行期静默丢弃(dsh-skill-filesystem 解析失败即 continue),
用户看到的是"这个技能不存在",而不是"这个技能写坏了"。
本面板:
能力 · 说明
六类根全枚举 · project-dsh(100) / project-agents(200) / custom(300) / user-dsh(400) / user-agents(500) / bundled(600),各带 source + rank
坏 frontmatter 显式报错 · dropped:no-frontmatter / dropped:unclosed / dropped:bad-yaml / dropped:missing-fields / dropped:bad-name,每条带原因;"丢了"就显示"丢了"
根不存在也算一种状态 · 显示"不存在(正常)";bundled 未挂载时显示 $DSH_BUNDLED_SKILL_DIR 未设置,而不是假装有
每技能开关 · 唯一写盘动作 = 改入口文件名:SKILL.md ↔ SKILL.md.disabled(扁平型 x.md ↔ x.md.disabled)
会话作用域 · 面板顶部显示"当前会话 cwd / 项目根";项目级根只读(写工作区 = 绕过"工作区=权限域"边界)
第二跳 · 命中「未安装技能索引」时给信息卡 + 复制按钮,不下载、不安装
和同类比(2026-10-08 源码级实查)
生态里做技能面板的不止一家。我们不求「功能最多」,只把三条讲清楚——都是可验证的机制差异,不是形容词:
维度 · 本插件 · cheshireez/dsh-skill-hub · re-ITRT/dsh-skill-mcp-panel · VDERR/dsh-echocat-skill-panel
挂载面 · 左上导航「技能」整页(sidebar.panellist order 5) · 设置页「技能中枢」 · 侧栏「技能与 MCP」双 tab · 横栏 + 左栏 + 中栏报告
启停机制 · 改入口文件名 SKILL.md ↔ .disabled(唯一写盘动作) · 改名 + sidecar 对账 · 不碰文件:写 overlay JSON + overlay provider · 把技能目录移出监视目录
卸载本插件后 · 状态保持(文件名就是状态) · 保持禁用(启动时对账) · 全部失效(状态在插件自己的 storage) · 保持禁用
给模型的接口 · 有:skill_panel 20 个动作(模型可直接改,不必点面板) · 未见模型工具 · 未见模型工具 · 未见模型工具
依赖与体积 · 零依赖 / 零 peer,无构建链 · TS 构建 · 无构建链 · 无构建链
技能根覆盖 · 六类根全扫,并解释「某技能为何不可见」;项目级只读 · 诊断 + 一键修复(这条它比我们多走一步) · — · —
口径:同类三列来自 2026-10-08 对各自仓库源码的实查;同类插件迭代快,以它们自己的仓库为准。
我们不主张「独占导航席位」——@linxin666/dsh-client-ui-skill-explorer也挂sidebar.panellist(2026-10-20 实查更正)。
开 = 自动加载
干什么:每轮对话开始前(agent/pre-step),拿你这句话去和各技能的 description 做词面匹配;
命中的技能把正文直接放进本轮上下文(系统提醒)——模型不用先想起「去读一下技能」,你也不用写规则。
总开关 + 三档(工具栏右侧;只有「已开」时三档才有意义):
档 · 相关分阈值 · 描述至少命中几个词 · 单技能正文上限
严格 · ≥ 4.0 · 2 · 4 KB
标准(默认) · ≥ 2.5 · 1 · 8 KB
宽松 · ≥ 1.5 · 1 · 16 KB
三档共同上限:单轮最多 3 个技能、总预算 24 KB
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::40,最后更新 2026-11-04