@pandarayc/dsh-skill-tier
对DSH技能集进行渐进式目录索引与收纳 适合技能过多、需要精简模型目录但保留调用能力的用户。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:pandarayc/dsh-skill-tier说明文档
阅读完整 README ↗已装包:用 examples 的配置覆盖已装那一行
dsh --profile headless --patch examples/lark.yml "只回复 OK"
配置
- insert:
- id: skill-tier
name: '@pandarayc/dsh-skill-tier' # 未装包时换成 /path/to/dsh-skill-tier/lib/index.js
config:
revalidateMs: 0 # 可选,见下
providerName: skill-tier # 可选,同层唯一。见「一个 profile 只挂一行」
groups:
- name: lark # 索引 skill 名,必须 kebab-case
title: 飞书/Lark 全能力入口 # 索引正文的标题
description: "…进 catalog 的那句话,说明什么时候该加载它…"
dir: "~/.dsh/lark-skills" # 成员目录(**不必**是 DSH 扫描根)
members: "lark-*" # glob,见下
detailHint: "lark-cli skills read " # 可选:正文里教模型怎么取全文
rules: # 可选:追加到正文的规则
- "任何飞书操作前先读 lark-shared"
rank: 350 # 可选,越小越优先(默认 350)。见「优先级」
source: custom # 可选,默认 custom
| 字段 | 必填 | 说明 |
|---|---|---|
providerName | 注册进 DSH 的 provider 名,默认 skill-tier。同一层内必须唯一,否则注册抛错(见下) | |
groups[].name | ✅ | 索引 skill 的名字;同时是目录名之外的唯一标识,必须 kebab-case |
groups[].dir | ✅ | 成员所在目录;支持 ~。不要同时把它设成 DSH 扫描根,否则 dsh-skill-filesystem 也会发现成员,成本就回来了 |
groups[].description | ✅ | 进 catalog 的一句话。超过 500 字符会被 DSH 截断,插件会在配置阶段 warn |
groups[].title | 索引正文标题,默认取 name | |
groups[].members | 默认 *。支持 *、前缀 foo-*、精确名,逗号分隔,! 前缀排除(如 lark-*,!lark-mindnotes) | |
groups[].detailHint | 正文里"怎么取成员全文"的提示。默认给一个读文件路径的写法 | |
groups[].rules | 正文末尾的规则列表,默认两条(一次只读 1–2 个、正文是权威) | |
revalidateMs | 默认 0 = 每次 list() 都按内容哈希校验一遍。见下 |
成员文件格式与 dsh-skill-filesystem 一致://SKILL.md,或平铺的 /.md。
一个 profile 只挂一行
多个技能集合写在同一个 config.groups 下,不要用两个 entry id 挂两遍本插件:
### 两层配置
配置有两个来源,**工作区层在同一名字上覆盖 entry 层**:
| 层 | 位置 | 作用范围 | 典型用途 |
|---|---|---|---|
| **entry 层** | profile 的 `cordis.patch.yml` 里 `skill-tier` 那行的 `config.groups` | 该 profile 的所有会话 | 全局都想带的集合 |
| **工作区层** | `/.dsh/skill-tier.json` | **只对在这个目录开的会话** | 「只有我打开飞书工作目录时才带飞书索引」 |
工作区层的文件形状和 entry 层一样:
```json
{
"groups": [
{
"name": "lark",
"title": "飞书/Lark 全能力入口",
"description": "飞书/Lark 全能力入口(28 个子技能)…",
"dir": "~/.dsh/lark-skills",
"members": "lark-*",
"detailHint": "lark-cli skills read "
}
]
}
也可以覆盖 revalidateMs。
这就是「装一次、按工作区生效」:
~/code/my-project/ 没有 .dsh/skill-tier.json → 0 开销
~/work/feishu/ .dsh/skill-tier.json 声明 lark → 只多一条索引(+78 ~ +121)
工作区层刻意不缓存:list() 每个会话只调一两次,重读一个小 JSON 的成本可以忽略,而缓存会带来「改了配置不生效」的坑 —— 正是本插件在成员扫描上极力避免的那类问题。
只认
/.dsh/skill-tier.json,不向上查找。要在子目录也生效,把文件放在你实际打开的那个目录。