dsh-capability-discovery
面向 DeepSeek Harness 的多源能力发现、排序与启发式风险检查工具。
dsh-capability-discovery 是负责安装和加载的 DSH Bundle,它向 Harness 注册用户实际调用的 capability-discovery Skill。该 Skill 从多个公开来源寻找 DSH Plugin、Agent Skill、MCP Server、Profile、Agent 等能力,统一去重和排序,然后对准备采用的仓库做基础风险检查。
> 独立社区项目,与 DeepSeek 无官方隶属或背书关系。
English · [架构](./docs/architecture.zh-CN.md) · [数据源](./docs/sources.zh-CN.md) · [发布指南](./docs/publishing.zh-CN.md) · [贡献指南](./CONTRIBUTING.zh-CN.md) · [安全策略](./SECURITY.zh-CN.md) · [变更记录](./CHANGELOG.zh-CN.md)
为什么做这个
DSH 生态的能力分散在 GitHub Topic、Awesome List 和社区 Registry 中。人可以一个个逛,但 Agent 更需要一条稳定链路:
用户需求
↓
多源发现
↓
Normalize
↓
Deduplicate
↓
Rerank
↓
Top Candidates
↓
Heuristic Risk Inspection
↓
用户决定是否采用/安装核心原则是:发现和安装分离。搜索结果只能作为候选,不能因为排第一就自动获得执行权限。
第一版数据源
- GitHub
dsh-pluginTopic kejixiaoliang/awesome-dsh-plugins的结构化插件数据Dominic789654/awesome-deepseek-harness的生态目录awesome-dsh-plugin.com的公开 Registry
某个数据源失效时不会让整次查询失败,返回结果里会保留 sourceErrors。
快速开始
需要 Node.js 20+。
git clone https://github.com/444136347/dsh-capability-discovery.git
cd dsh-capability-discovery
npm test
node cli/dsh-capability.mjs sources
node cli/dsh-capability.mjs search ppt slides --limit 5
node cli/dsh-capability.mjs search memory --type skill --json
node cli/dsh-capability.mjs inspect owner/repo在 DeepSeek Harness 中使用
先区分两个名称:
| 名称 | 作用 |
|---|---|
dsh-capability-discovery | 安装进 profile 的 DSH Bundle 包 |
capability-discovery | 在会话中调用的 Skill |
官方命令使用 dsh plugin 作为 profile 的外部包管理入口,因此安装 Bundle 也通过该子命令完成;这不表示最终能力是一个 Web UI 插件。相关机制可参考 DSH 官方的 Bundle 发布与安装教程与参考文档。
1. 安装 Bundle
安装 GitHub 已发布版本时,建议固定 tag 或 commit。当前公开版本为 v0.1.2:
npx -y @deepseek-ai/dsh plugin --profile web add \
'github:444136347/dsh-capability-discovery#v0.1.2'当前版本 DSH 会同时把包加入 dependencies,并自动维护 dsh.profile.bundles。启动前先验证最终组合配置:
npx -y @deepseek-ai/dsh --profile web --dump-config \
| grep -n -C 4 -E 'dsh-capability-discovery|capability-discovery'输出中应能看到 # == dsh-capability-discovery Bundle 层和 dsh-capability-discovery Loader 条目。
DSH 的 profile 相互独立:安装到 web 不会自动安装到 headless 或其他 profile。
2. 重启 DSH
如果 DSH 已经在运行,安装或升级 Bundle 后必须停止并重新启动同一个 profile:
npx -y @deepseek-ai/dsh web刷新浏览器或新建会话不会让正在运行的旧进程重新加载 Bundle。运行时 DSH 只监听 profile 级的 ${DSH_HOME:-$HOME/.dsh}/profiles/<profile>/cordis.patch.yml 和 home 级的 ${DSH_HOME:-$HOME/.dsh}/cordis.patch.yml 两个用户 patch;已安装包、dsh.profile.bundles 和 Bundle 自身 patch 的变化要到下次进程启动时才生效。
3. 调用 Skill
在新的 Web 会话输入框中键入 /cap,从 / Skill 菜单选择 capability-discovery;也可以直接发送:
/capability-discovery 帮我找适合制作 PPT 的 DSH 插件或 Skill,只推荐 3 个,不要安装/capability-discovery 是确定性调用:DSH 会先加载该 Skill 的完整指令,再处理后面的任务。也可以只用自然语言让模型自行选择 Skill,但显式 / 调用更适合安装后的首次验证。
默认回答使用紧凑 Markdown:先给结论,再用表格列出最多 3 个候选,最后显示来源覆盖和“未安装”状态。Skill 会把相关英文关键词合并为一次搜索;只有首次没有相关候选时才允许更换关键词重试一次。完整来源表、命令和诊断信息只在明确要求时展开,聊天中不会默认生成 HTML。
更多示例:
/capability-discovery 帮我找 MCP 管理相关能力,披露失败的数据源,不要安装
/capability-discovery 只搜索 Skill 类型的 Office 文件处理能力,比较前三名
/capability-discovery 检查 STARDUSTLC666/dsh-ppt 的风险,不要安装它不会新增独立插件页面、设置卡片或侧边栏入口,但会出现在 Web 输入框的 / Skill 菜单中。
4. 在 headless profile 中使用
headless 需要单独安装,然后可以直接在一次性任务中调用:
npx -y @deepseek-ai/dsh plugin --profile headless add \
'github:444136347/dsh-capability-discovery#v0.1.2'
npx -y @deepseek-ai/dsh --profile headless \
'/capability-discovery 帮我找适合制作 PPT 的 DSH 能力,不要安装'5. 找不到 Skill 时排查
1. 确认安装和启动使用的是同一个 profile,例如都为 web。 2. 运行上面的 --dump-config,确认 Bundle 层和 Loader 条目存在。 3. 停止旧 DSH 进程并重新启动;只刷新浏览器不够。 4. 新建会话,在输入框键入 /cap,确认菜单出现 capability-discovery。 5. 绕过 Skill 直接测试同一份 CLI:
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm exec dsh-capability search ppt --jsonCLI 能搜索但 / 菜单没有 Skill,通常是 profile、Bundle 加载或进程重启问题;CLI 本身也失败,则查看输出中的 sourceErrors 和网络代理诊断。
如果是历史遗留 profile,已经写入 dependency 但缺少 Bundle 条目,才需要执行修复命令:
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm exec dsh-capability setup --profile webCLI
搜索
dsh-capability search <关键词...> [--limit 10] [--type plugin|skill|mcp|profile|agent|orchestrator|ui|runtime|workflow] [--json]--type mcp 是严格的 MCP Server 筛选,只保留名称或描述明确声明为服务端的候选。MCP 管理面板、客户端、桥接器和其他集成仍按实际能力类型展示;宽泛搜索会通过 mcpRole 区分 server、client、manager、bridge 和 unknown。
排序主要考虑:
1. 当前任务的关键词相关性; 2. 是否被多个独立来源同时收录; 3. 最近维护时间; 4. GitHub Stars(只作为弱信号); 5. 是否进入人工整理的社区目录。
风险检查
dsh-capability inspect owner/repo [--json]第一版会检查这些启发式信号:
preinstall/install/postinstall/prepare等生命周期脚本;- subprocess / command execution;
- 环境变量、凭据相关访问;
- 网络访问;
- 文件系统修改;
- Skill/Agent 指令中的 prompt injection / 数据外传可疑表达;
- 依赖面。
这不是安全认证。 没发现已知模式,不代表仓库安全。它只能降低“完全不看就装”的风险。
设置 GITHUB_TOKEN 或 GH_TOKEN 后,GitHub API 会自动使用该 Token。它可以提高 API 限额,并检查 Token 有权访问的仓库;不要把 Token 写进命令参数或提交到仓库。
旧 Profile 修复
dsh-capability setup [--profile web] [--json]这个命令只用于修复“包已经安装,但旧 profile 的 dsh.profile.bundles 里缺少本 Bundle”的历史状态。当前 DSH 的 plugin 命令会自动维护该列表。修复命令不会安装依赖,也不会启动 DSH。
网络可靠性
- 网络异常以及 HTTP
429、502、503、504会自动重试 2 次,并采用递增等待时间。 - 服务端返回有效
Retry-After时,优先按该时间等待。 400、401、403、404等确定性错误不会重试,避免无意义等待。- 三个静态 Awesome List/Registry 来源使用 5 分钟临时磁盘缓存;GitHub 关键词搜索保持实时,不做缓存。
- 重试后仍失败的来源会写入
sourceErrors,其他成功来源仍然正常参与结果合并。
缓存默认写入操作系统临时目录。如需指定目录,可设置 CAPABILITY_DISCOVERY_CACHE_DIR。该变量特意不使用 DSH 保留的 DSH_* 前缀,因此能传递给 Skill 启动的 CLI 子进程。
如果 DSH 需要通过 HTTP 代理访问网络,请先确认 HTTP_PROXY/HTTPS_PROXY 是合法 URL。使用支持该能力的 Node.js 版本时,需要以 NODE_USE_ENV_PROXY=1 启动 DSH,Node.js 的 fetch 才会读取这些代理变量。日志和 Issue 中不要暴露代理账号或密码。
第一版边界
| 能力类型 | v0.1 |
|---|---|
| DSH Plugin | 支持 |
| Agent Skill | 支持 |
| MCP Server | 使用 --type mcp 按严格元数据证据分类 |
| Profile / Patch | 实验性分类 |
| Agent / Orchestrator / Runtime / UI | 实验性分类 |
暂时不做:托管后端、账户系统、商业市场、一键自动安装、自动付费、全量代码安全审计。
项目状态
当前公开版本为 v0.1.2。项目保持小而可审计的核心,不包含数据库、托管后端、账户系统、市场 UI 或自动安装流程。
开源与第三方关系
本项目是独立实现,不继承其他插件发现工具的代码。
项目包内不打包上述数据源的第三方仓库内容,而是在运行时读取公开元数据;静态目录可能按上面的规则保留 5 分钟临时缓存。第三方项目和数据仍遵循各自的许可证与使用条款。
开发
npm test
npm run check
npm pack --dry-run运行时代码不依赖第三方 npm 包,测试使用 Node 内置 test runner。
License
Apache License 2.0,见 [LICENSE](./LICENSE)。