pandarayc/dsh-skill-tier ↗★ 0

@pandarayc/dsh-skill-tier

Progressive disclosure for DSH skill collections: one generated index skill stays in the catalog, every member stays user-invocable but leaves the model catalog. Zero dependencies. 适合技能过多、需要精简模型目录但保留调用能力的用户。

패키지
@pandarayc/dsh-skill-tier
호환성
미검증
버전
0.1.0
라이선스
MIT
최근 업데이트
2026. 9. 27.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:pandarayc/dsh-skill-tier

已装包:用 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,不向上查找。要在子目录也生效,把文件放在你实际打开的那个目录。