dsh-doctor
asdf17128
Find what your DeepSeek Harness (dsh) patches silently broke — dead patches, config fields dropped by whole-config repla…
hskelp9527-pixel/dsh-skill-hub
Cross-agent skill hub for DeepSeek Harness (DSH) Web: scans every local coding agent's skills (Claude Code, Codex, OpenCode, Qwen, iFlow, Trae...), merges multi-agent duplicates into one card, filters by agent, loads into the global DSH library.
PROJECT TOPICS
PROJECT README
English | 简体中文
把 DeepSeek Harness(DSH)Web 设置里的「技能」页升级为跨 Agent 技能中枢:自动扫描本机所有编码 Agent 的技能目录,同名技能多端合并成一张卡片,按 Agent 筛选,一键加载进全局技能库。
dsh-skill-hub 是一个 DSH Web 本地插件(与 dsh-plugin-market 同一套插件体系)。它基于 dbskill、Kami 等多端技能生态的实际使用场景打磨:当同一个技能被 npx skills add 安装到 Claude Code、Codex、Qwen、iFlow、Trae 等多个 Agent 时,你需要的不是五遍重复列表,而是一处汇总、按端筛选、随手加载。
动态扫描(发现技能视图)
自动发现本机所有装了技能的 Agent 目录,扫到几个就有几个筛选分类,没装的不会出现:
| 来源 | 扫描目录 | 说明 |
|---|---|---|
| Claude Code | ~/.claude/skills |
~/.claude/skills-src 只是符号链接的源存储,不算已安装,不参与扫描 |
| Codex | ~/.codex/skills |
|
| OpenCode | ~/.config/opencode/skill、~/.config/opencode/agent、~/.opencode/skill、~/.local/share/opencode/skill |
多个历史位置归为同一 Agent |
| Qwen Code | ~/.qwen/skills |
|
| iFlow CLI | ~/.iflow/skills |
|
| Trae | ~/.trae/skills |
|
| Gemini CLI / Cursor / Windsurf / Goose | ~/.gemini/skills、~/.cursor/skills、~/.windsurf/skills、~/.goose/skills |
|
| 全局存储 | ~/.agents/skills |
npx skills add -g 的物理存储,不是 Agent:仅当技能未被任何真实 Agent 目录覆盖(按物理路径或技能名)时才显示,链接不被重复计数 |
顶部汇总:发现几个 Agent、几个技能、多少个跨端重复安装已合并、几个尚未加载。
跨端合并去重
name(缺失时用目录名)。同一个技能装在多个端 → 只显示一张卡片,卡片上带每个端的徽章,展开可看各端安装路径并单独链接。~/.claude/skills-src 直接不扫;~/.agents/skills 只兜底展示没有任何 Agent 覆盖的技能。加载提醒与一键加载
~/.dsh/skills/<name> 指向源目录,两边同一份文件,编辑即改源;删除只移除链接。name / description。/ 菜单使用,无需重启。全局技能库管理(沿用并增强原 dsh-skill-manager)
dbs + dbs-benchmark… 展开成一张分组卡片,支持「整组加载」)。实测(本机):5 个 Agent、242 个安装 → 合并为 123 张技能卡片,dbs 系列在 4 个端的重复全部合并;~/.agents 存储因全部被真实 Agent 覆盖而不再单独出现,skills-src 中未安装的技能不再上榜。
前置:已安装并初始化 DSH(npm i -g @deepseek-ai/dsh 后运行过 dsh web 或桌面端,$DSH_HOME 已生成)。
把本仓库放进 DSH 能找到的插件目录(示例放在工作区的 local-plugins/):
git clone https://github.com/hskelp9527-pixel/dsh-skill-hub.git
在 $DSH_HOME/profiles/node_modules/ 建立指向源码的 junction(Windows)或符号链接(macOS/Linux):
# Windows PowerShell
cmd /c mklink /J "$env:USERPROFILE\.dsh\profiles\node_modules\dsh-skill-hub" "<仓库路径>\dsh-skill-hub"
# macOS / Linux
ln -s "<仓库路径>/dsh-skill-hub" ~/.dsh/profiles/node_modules/dsh-skill-hub
编辑 $DSH_HOME/profiles/web/cordis.patch.yml,插入加载行(若装过旧版 @dsh-local/dsh-skill-manager,删除对应 insert 段,两个插件注册同一个「技能」页会冲突):
- insert:
- id: skill-hub
name: 'dsh-skill-hub'
重启 dsh web(或桌面端),设置 → 技能 → 「发现技能」。
卸载:删除 patch 行 + 删除 junction 即可;已加载到
~/.dsh/skills的技能不受影响,可在页面里逐个删除。
/ 即可调用已加载技能;后续维护在 全局技能库 视图完成。lib/index.js):无 UI 依赖的 SkillHubCore(扫描/合并/加载,全部方法可注入根目录,便于测试)+ TypertRemoteService 薄封装,通过 skillHub/* Remote 方法暴露给 Web。注意:Typert gateway 以方法源码里的纯标识符参数名作为 wire 字段并按位置传参,修改 Remote 方法签名必须同步客户端调用字段(冒烟测试 Phase 0 会拦截漂移)。lib/client.js):注册 settings.section(id skills)设置页,中英双语词典,深色浅色主题变量取自 DSW alias。~/.dsh/skills/.skill-manager.json 记录每个已加载技能的 {mode, sourceId, sourcePath, addedAt}(兼容旧 dsh-skill-manager 的记录)。git clone https://github.com/hskelp9527-pixel/dsh-skill-hub.git
cd dsh-skill-hub
# 宿主端冒烟测试:
# Phase 0 gateway 对齐:校验 Remote 方法签名与客户端调用字段一一对应
# Phase A 沙箱:伪造多 Agent 目录 → 发现/跨端合并/链接与复制加载/批量加载/重复拒绝/删除语义
# Phase B 真实本机:只读扫描,打印各 Agent 与合并统计
# Phase C 真实本机:加载一个真实技能为链接 → 校验 → 删除还原(不留痕迹)
node scripts/smoke-test.mjs # 加 --skip-real 只跑沙箱
# 客户端冒烟测试:模拟 __ModuleLoader__ 加载、ctx 装配、zh/en 词典键覆盖、SSR 渲染
node scripts/client-smoke-test.mjs
两个测试都不需要真实启动 DSH,也不污染真实技能库(Phase C 会还原)。
feat/xxx、fix/xxx)→ 改动 → 补/过测试(node scripts/smoke-test.mjs && node scripts/client-smoke-test.mjs)→ 提交。feat: / fix: / docs: / chore:)。AGENT_DEFINITIONS 加目录候选 + README 表格补一行 + 沙箱测试补断言。MIT © hskelp9527-pixel
npx skills add)——跨 Agent 技能安装的事实标准CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。