dsh-skills-marketplace
DeepSeek Harness (DSH) 技能市场管理器 — 把任意「Codex/Claude 技能仓库」整理成插件维度的、DSH 原生的技能市场。
给定一个技能仓库(Git 地址 + 分支 + 稀疏路径),本工具通过 git sparse-checkout 拉取插件与技能,把每个技能摊平到 ~/.dsh/skills/<skill-name>/SKILL.md,并以插件维度展示整个目录(而非 DSH 默认的扁平技能列表)。
同一份 SKILL.md 是各生态之间的通用标准——一套技能库,可被 DSH、Codex、Claude 三端同时复用。
安装
作为 DSH 插件安装(推荐)
前置要求:已安装 DSH、Node.js 22+、pnpm 10+,并具备修改 DSH profile 的权限。
直接从 GitHub 安装:
dsh plugin --profile <profile> add github:cxdyun/dsh-skills-marketplace
从 npm 安装
发布包安装不需要 GitHub 构建许可,推荐用于日常使用:
dsh plugin --profile <profile> add dsh-skills-marketplace
dsh plugin 会在对应 profile 目录中调用 pnpm;等价的底层命令是:
cd "$DSH_HOME/profiles/<profile>"
pnpm add dsh-skills-marketplace
不要在项目源码目录中执行上面的 pnpm add,否则只会把它作为普通项目依赖安装,不会加入 DSH profile 的 bundle 列表。
也可以固定到某个 commit,避免远端后续变更:
dsh plugin --profile <profile> add github:cxdyun/dsh-skills-marketplace#<commit-sha>
安装后启动对应 profile:
dsh --profile <profile>
再打开 设置 → SKILL插件市场。
git clone https://github.com/cxdyun/dsh-skills-marketplace.git
cd dsh-skills-marketplace
pnpm install
pnpm run check
如果使用源码构建方式,按照 DSH 安装其他 Cordis 插件的方式,将本项目加入 DSH profile 并启用。重启 DSH 后,打开:
设置 → SKILL插件市场
能看到 SKILL插件市场 设置项,即表示插件加载成功。添加技能来源并安装插件后,技能会写入 ~/.dsh/skills/,随后可被 DSH 智能体使用。
DSH profile 的目录和启用方式由 DSH 宿主决定,本项目不覆盖宿主的插件安装配置;请沿用宿主安装其他 Cordis 插件的流程。
仅验证 CLI
如果暂时不安装 DSH,可直接验证核心流程:
git clone https://github.com/cxdyun/dsh-skills-marketplace.git
cd dsh-skills-marketplace
pnpm install
node cli.mjs --help
node cli.mjs add "https://github.com/you/your-skills-repo.git" --ref main --path plugins
node cli.mjs catalog
CLI 不需要 DSH;它会把测试安装结果写入 ~/.dsh/skills/。
为什么需要
DSH 的 @deepseek-ai/dsh-skill-filesystem 原生扫描以下技能根,并读取 <name>/SKILL.md 的 front-matter:
| rank | 作用域 scope | 路径 path |
|---|---|---|
| 100 | 项目 project | <project>/.dsh/skills |
| 200 | 项目 project | <project>/.agents/skills |
| 400 | 用户 user | ~/.dsh/skills ← 本管理器的安装目标 install target |
| 500 | 用户 user | ~/.agents/skills(与 Codex/Claude 共用 shared) |
因此 SKILL.md 本身就是共同标准。DSH 不解析 Codex/Claude 的包装层(marketplace.json / plugin.json / agents/openai.yaml / MCP 清单)。本管理器负责补齐这一层:
- 拉取 / Fetching ——
git sparse-checkout,只取所需稀疏路径。 - 清单解析 / Catalog resolution —— A) 显式
dsh.market.json;或 B) 约定式扫plugins/*/skills/*/SKILL.md(零改造即可适配现有 Codex/Claude 仓库)。 - 扁平落盘 / Flattening —— 每个技能摊平到
~/.dsh/skills/<skill-name>/(一层深;剥离 Codex 专属agents/openai.yaml)。 - 插件维度管理 / Plugin-dimension management —— 本地 manifest(
plugin ↔ skills ↔ source ↔ commit)驱动插件优先的 GUI。
特性
- 仓库 → 技能 / Repository → skills —— 把任意 Git 技能仓库作为 来源 source 添加(
url + ref + sparsePath)。 - 插件维度 / Plugin dimension —— 技能按插件分组展示,而非扁平列表。
- 逐技能开关 / Per-skill toggle —— 单独启用/停用技能,安装进
~/.dsh/skills。 - 安全卸载与清理 / Safe uninstall & prune —— 只删除本管理器安装过的技能(经「墓碑 tombstone」集合记录);绝不触碰你自建的技能。
- 增量更新 / Refresh —— 增量拉取 + 孤立清理。
- 双前端 / Dual front-ends —— 自包含 HTML GUI,以及无依赖的 CLI(核心逻辑纯 Node,不依赖 DSH 即可验证整条链路)。
- 同源校验 / Same-origin enforced —— 所有变更类端点强制 same-origin。
如何与 DSH 集成
构建产物是一个 DSH(cordis)插件,分 host 与 client 两半区:
- Host 半区 / Host side(
lib/index.js)- 声明
inject = ['settings', 'webServer']; - 注册
skillMarket设置命名空间(installRoot、autoInstall),使其持久化到 DSH 设置页; - 挂载
/skills-marketplace/*HTTP 路由供 GUI 与 CLI 使用。
- 声明
- Client 半区 / Client side(
lib/client.js)- 在 DSH 设置页注册名为 「SKILL插件市场 / SKILL Plugin Marketplace」 的
settings.section(SkillMarketSection); - 提供插件列表、插件详情与逐技能开关。
- 在 DSH 设置页注册名为 「SKILL插件市场 / SKILL Plugin Marketplace」 的
安装后 / After install:技能被摊平写入 ~/.dsh/skills/,内置 dsh-skill-filesystem 会自动监听该目录——无需重载或额外加载配置,技能立即可被 DSH 智能体使用。
以 DSH 插件方式安装本包时,请与安装任意 cordis 插件的方式一致(放入 DSH profile 后启用),然后在 设置 → SKILL插件市场 / Settings → SKILL Plugin Marketplace 打开。加载第三方 cordis 插件的具体启用流程由 DSH 宿主提供,本包不重复定义。
下面的 CLI 让你不依赖 DSH 也能先验证整条链路。
构建
pnpm install
pnpm run check # 类型检查 + 构建(产出 lib/)
pnpm run build 运行 node build.mjs,用 esbuild 产出:
lib/index.js—— host(cordis)bundle;lib/client.js—— 浏览器 client(单文件__ModuleLoader__手握手协议);lib/{manifest,remote,sync,http,routes}.js—— CLI 与测试复用的纯 ESM 核心;.d.ts类型声明(viatsc)。
CLI 用法(先验证核心链路)
# 添加来源(仓库 + 分支 + 稀疏路径)
node cli.mjs add "https://github.com/you/your-skills-repo.git" --ref main --path plugins
node cli.mjs list # 列出已添加来源
node cli.mjs install my-plugin # 安装插件(默认第一个来源)
node cli.mjs view # 插件维度查看(默认第一个来源)
node cli.mjs uninstall my-plugin # 卸载,只删受管技能
node cli.mjs refresh my-source # 增量更新 + 孤儿清理
node cli.mjs prune # 清理墓碑
可用命令:add, list, catalog, install, install-all, uninstall, refresh, prune, view。
HTTP API(供 GUI 使用)
| Method 方法 | Path 路径 | 说明 |
|---|---|---|
| GET | /skills-marketplace/sources |
来源列表 list sources |
| POST | /skills-marketplace/sources |
添加 add {url, ref?, sparsePath?} |
| DELETE | /skills-marketplace/sources/:id |
移除来源(保留已装技能)remove a source |
| GET | /skills-marketplace/catalog?source=<id> |
远端插件/技能目录(插件优先)remote catalog |
| GET | /skills-marketplace/installed?source=<id> |
已安装视图 installed view |
| POST | /skills-marketplace/install |
安装 install {sourceId, pluginId, skills?} |
| POST | /skills-marketplace/uninstall |
卸载 uninstall {sourceId, pluginId} |
| POST | /skills-marketplace/skill-toggle |
技能开关 {sourceId, pluginId, skill, on} |
| POST | /skills-marketplace/refresh/<sourceId> |
增量更新 incremental update |
所有非 GET 端点强制同源校验(已验证跨域返回 403)。
GUI
打开 client/market.html(或在 DSH 设置 → SKILL插件市场 中使用):
- 我的市场 / My markets —— 来源卡片(显示
ref/sparse),带「添加插件市场」表单(来源 / 分支 / 稀疏路径)。 - 插件目录 / Plugin catalog —— 插件优先的网格,每个插件徽标显示其技能数。
- 插件详情 / Plugin details —— 逐技能开关:开 = 安装进
~/.dsh/skills,关 = 从 manifest 剔除并卸载。
安全设计
- 安全卸载 / Safe uninstall —— 只删除 manifest 登记的受管技能;清理只作用于「墓碑」集合(曾安装、现已失效)。绝不触碰你自建的技能。
- 跨域拒绝 / Cross-origin denied —— 变更类端点强制 same-origin。
- Codex 专属文件剥离 / Codex-only files stripped ——
agents/openai.yaml从不落盘(DSH 不读,且会污染一层结构)。 - MCP 依赖提示 / MCP caveat —— 依赖外部 MCP 的技能在 DSH 侧只有
SKILL.md指令文本(DSH 不拉起agents/openai.yamlMCP 服务);此类技能会在 UI 中标出。
路线图
- P0(已完成) —— 来源管理 + sparse 拉取 + 扁平落盘 + manifest + GUI,默认走 B 约定式发现。
- P1 —— 增量更新(commit diff);在来源仓库中固化
dsh.market.json(显式 A 清单);接入 DSH 设置页原生 client。 - P2 —— 独立 skill provider 隔离(自定义 rank);把技能编译为 npm 接入
awesome-dsh-plugin生态。
No comments yet. Be the first to write one.