feverZHONG/dsh-liya-skills:把工作區 skills/ 接進 DSH 技能系統,並提供設置頁技能管理

前言

在 DSH 裏用 skill 工具做技能管理時,一個常見情況是:技能不寫在 .dsh/skills,而是放在工作區自己的 skills/ 目錄裏,按技能名分子目錄,每個子目錄一份 SKILL.md。這套目錄結構很自然,但 DSH 自帶的 skill-filesystem 只認項目根 .dsh/skills、.agents/skills 和用戶級 ~/.dsh/skills、~/.agents/skills 這幾個位置,工作區自己的 skills/ 不在其中。結果是:技能文件寫了不少,卻既不進每輪的技能目錄,模型也調不到,只能手工複製到受支持的目錄裏。

下面介紹 feverzhong/dsh-liya-skills。這是 feverZHONG(莉婭)維護的客戶端插件,v0.2.0,適配 DSH 0.2.1-rc.2(桌面版),零第三方依賴。它的作用是註冊自己的 SkillProvider,直接掃描 skillsRoot,把工作區 skills/ 裏的技能接進 DSH 原生 skill 系統:skill 工具能加載、每輪技能目錄裏能看見、用 /技能名 能直接點名。第二個能力是 v0.2.0 新增的設置頁技能管理:從指定 GitHub 用戶的公開倉庫同步技能到本地,先生成「適配稿」、人工確認後才落盤,不做盲覆蓋。

它解決什麼

插件沒有修改 DSH 自帶配置,而是註冊一個 SkillProvider,掃描配置中指定的技能根目錄,結果直接接到 DSH 的 skill 服務上。因此,工作區 skills/ 裏多放的技能不再被目錄機制忽略。

技能可見性策略

插件把技能分成兩類,靠 curated.json 裏的點名控制 modelInvocable:

  • 在 curated.json 裏 modelVisible 點名的技能:modelInvocable 爲 true,進入每輪技能目錄,模型可以主動 skill 調用;
  • 其餘技能:modelInvocable 爲 false,不進目錄、不佔上下文,但用戶打 /技能名 仍會注入正文。

這樣模型目錄裏只保留精選技能,其餘技能留作手動調用,避免技能數量膨脹後把所有正文都塞進上下文。curated.json 保存即生效:文件監視 → skills 服務緩存失效 → 下一輪目錄重發,不用重啓 DSH。

安裝與啓用

分兩步:先把插件裝進 profile,再在 profile 補丁里指定技能庫位置。官方給出兩條安裝路徑,一是裝插件目錄,二是裝發佈包 tgz:

# 1. 裝進 profile(pnpm 活鏈接 + 自動追加到 dsh.profile.bundles)
#    也可以在 DSH 設置頁 / plugin_manager 裏 install_bundle,target 填插件目錄絕對路徑
dsh plugin --profile <profile> add "<插件目錄絕對路徑>"

# 或者用發佈包(tgz 與倉庫 Releases/構建產物同內容;本機在 dist/ 裏)
dsh plugin --profile <profile> add "<目錄>/dsh-liya-skills-0.2.0.tgz"

然後編輯 $DSH_HOME/profiles/<profile>/cordis.patch.yml,指定 skillsRoot。因爲插件被 node_modules 符號鏈接引入時 import.meta.url 是鏈接路徑,默認相對路徑會算到 profile 目錄裏,所以這裏要顯式給絕對路徑:

- id: skill-liya-skills
  name: 'dsh-liya-skills'
  config:
    skillsRoot: '<工作區絕對路徑>/skills'

skillsRoot 之外的可配項還有 customSkillDirs、providerName、rank,都有默認值,具體見 index.js 的 apply。注意:改插件源碼要重啓 DSH 才生效——宿主熱重載 profile 補丁的 config,但不熱重載插件模塊。

如果沒有 shell,可以用 file:// 直掛:

- insert:
    - id: skill-liya-skills
      name: 'file:///<插件目錄絕對路徑>/index.js'
      config:
        skillsRoot: '<工作區絕對路徑>/skills'

同一個插件只能掛一次:bundle 已裝上就不要再留這條 insert,否則 provider 重名報錯。

設置頁技能管理(v0.2.0 新增)

DSH「設置 → 莉婭技能」(settings.section,client 半)用來從指定 GitHub 用戶的公開倉庫同步技能到本地 skills/。項目裏的鐵律是絕不盲覆蓋:先出適配稿,人工確認後才落盤。頁面上分三步。

第一步,填 GitHub 用戶(默認 feverZHONG),掃描公開倉:列出該用戶所有公開倉庫,挑出帶 SKILL.md 的,按 frontmatter 的 name 對回本地同名技能,給出狀態:已是最新 / 可更新 / 僅遠端有。

第二步,生成適配稿:遠端文件落到 skills/.incoming/<倉庫名>/,同時產出 _adapt-report.json。自動改寫的內容(會記進報告)包括:python3→python、/opt/data/bin|scripts→工作區 bin|scripts、CRLF→LF、frontmatter 折行說明壓成單行。以下內容只報告不改,待人工確認:舊 Hermes 環境殘留、POSIX 絕對路徑/命令、舊工具名(credman/apiproxy/settingsScope)、本機絕對路徑、缺 tier。

第三步,看報告 → 應用。應用前 host 會把本地技能整目錄備份到 skills/.backup/<技能>-<時間戳>/,然後把適配稿拷進 skills/<技能>/,並寫 _upstream.json,記錄倉庫、commit、應用時間、自動改寫條數、待確認條數、備份路徑。沒有「應用適配稿」這一步之前,本地技能不會被改動;頁面上也沒有一鍵盲覆蓋入口。

此外,數據通道走 gh CLI(gh api):作者本機直連 HTTPS 被網絡擋住(curl/node/PowerShell 都連不上),只有 gh 能通,因此要求 gh 已登錄。只處理公開倉庫——private !== false 或 visibility !== 'public' 一律拒絕,掃描階段過濾,生成階段還會再校驗一次。

右側詳情欄是 markdown 預覽,由自寫零依賴渲染器 client/src/md.js 實現(標題/段落/列表/表格/代碼塊/行內代碼/粗斜體/鏈接/引用,容忍半截代碼塊),右上角「預覽 ● / 原文」可切回 SKILL.md 源文本。

驗證方式

裝完可以按下面的順序驗證。

1、下一輪對話裏,<available_skills> 目錄出現 curated.json 裏點名的技能。
2、skill 工具加載其中一個,返回正文,resourceBase 指向 <skillsRoot>/<技能名>,references/、scripts/ 按這個基準去讀。
3、對非精選技能調 skill 工具,報 not available for model invocation;用戶打 /技能名 仍能注入正文。
4、plugin_manager list_plugins 裏 include:skill-liya-skills 應爲 fiberPhase: active。

使用上的幾條限制

工程上有幾個明確的邊界,動手前值得先知道。

技能正文永遠現讀,插件只緩存「有哪些技能」,緩存帶 3 秒節流,所以改 SKILL.md 正文立刻生效。frontmatter 用極簡解析,只取頂層 name / description,不引 yaml 依賴,縮進的嵌套塊和折行續行會被忽略,因此 name / description 必須寫成單行。技能目錄只認一層:<skillsRoot>/<名字>/SKILL.md 或 <skillsRoot>/<名字>.md,更深的嵌套不掃描。插件崩潰只讓這一條 entry 失效,不會帶走整個 host,但 inject 裏只能寫確定存在的服務(本插件只依賴 skills)。

改 client 源碼(client/src/*)後要用 node client/build.mjs 重新生成 client.js,再重啓 DSH;host 改 index.js / host/* 同樣要重啓。

適用場景與注意

適合的場景:工作區已經按 skills/<名字>/SKILL.md 組織技能庫,希望這些技能直接進 DSH 技能系統而不是手工搬目錄;同時想把某個 GitHub 用戶的公開技能庫定期同步到本地、且要求每次變更可見可回退。

需要注意的:插件以當前 DSH 進程的權限運行,設置頁會訪問本地 skills/ 目錄,並調用開發者本機的 gh CLI。安裝前應檢查插件源碼與許可證。倉庫代碼爲 MIT(LICENSE),文檔爲 CC BY 4.0(LICENSE-DOCS)。插件目錄在 SkillHub 的條目分類是客戶端,社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-liya-skills 的價值在於兩件事:把工作區自己的 skills/ 接進原生 skill 系統,並用「精選進模型目錄、其餘手動點名」的策略控制上下文佔用;設置頁則把外部公開技能庫的同步流程拆成掃描、適配稿、確認應用三步,保留備份和追蹤文件。倉庫:https://github.com/feverZHONG/dsh-liya-skills ,目錄頁:https://www.skillhub.cn/plugins/feverZHONG/dsh-liya-skills 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜