前言¶
DSH 裏的 Skill 來源很多:項目目錄、用戶目錄、Agent scope、遠程或內存 Provider。模型會自動挑選 Skill,用戶也可以直接用 /name 點名調用。這兩條路徑默認跟着 Skill 自身的聲明走,想單獨關掉某一條並不容易。dsh-skills-management 就是針對這個缺口做的插件:它把 Skill 目錄集中展示,對文件來源的 Skill 分別控制「模型調用」和「用戶手動調用」,並且在調用時讀取最新的源文件,不需要改 SKILL.md 或複製任何資源。
下面介紹這個插件的定位、安裝方式和典型用法。
這是什麼¶
dsh-skills-management 是一個 DSH Skill 目錄與調用策略插件,由 JayC-L 維護,分類屬於工作流。它不動 Skill 的定義文件,只維護一份調用策略,用來回答「哪些 Skill 可以被模型調用、哪些還能被用戶用 /name 調用」。
核心功能¶
1、雙通道開關。每個文件來源的 Skill 有兩個獨立開關:模型調用(modelInvocable)和用戶手動調用(userInvocable,即 /name)。四種組合對應四種狀態:
| Model | User manual | 狀態 | 行爲 |
|---|---|---|---|
| On | On | Available | 兩種調用都可用 |
| Off | On | User manual only | 模型不能調用,/name 仍可用 |
| On | Off | Model only | 模型可調用,用戶手動調用被禁用 |
| Off | Off | Disabled | 兩條通道都禁用 |
策略按 Skill 名稱全局生效,同名 Skill 一起管理。恢復原始調用默認值時會移除策略記錄,但默認值本身不一定兩條通道都開啓。
2、實時讀取源文件。目錄重新計算時刷新 frontmatter,每次 get() 都讀取當前正文,因此 Skill 正文更新後不需要重新切換策略。引用、腳本等資源仍留在源 Skill 目錄中,不被複制進策略數據;策略只保存調用狀態和文件位置元數據,不保存正文。
3、完整目錄與只讀邊界。內存、遠程、動態 Provider 的條目仍然可見,但標記爲 Read only;Host 會拒絕針對它們的策略修改。非文件 Provider 繼續提供自己的目錄與內容,插件不接管、不復制、不從 source 標籤推斷本地路徑。Bundled Provider 資產即使存在 SKILL.md 文件也是隻讀。
4、缺失條目清理。只有完整目錄或可驗證的文件證據確認原始定義已消失時,Skill 纔會被標記爲 missing。此時對應行會出現原生 Delete 按鈕,只刪除策略記錄,絕不刪除源文件或 Junction;如果原 Skill 恢復,請求返回 409 並保留策略。
5、單一全局視圖。目錄聚合 DSH Registry、文件系統和 Agent scope,沒有按會話的獨立策略控制。
安裝與啓用¶
在 DSH 插件管理器中添加該倉庫,或使用預構建的 Release 包:
https://github.com/JayC-L/dsh-skills-management/releases/latest/download/dsh-skills-management.tgz
在 DSH Desktop 上使用應用內置的插件管理器。安裝並激活後刷新頁面,在側邊欄打開 Skills Management。
插件對 DSH 版本有要求:>=0.2.1-rc.5 <0.3.0-0。項目在 DSH 0.2.2-rc.1、Cordis 4.1.0 和 Desktop Profile 下驗證過。
如需從源碼構建:
pnpm install
pnpm run check
pnpm test
pnpm pack
管理範圍¶
具備以下四條硬條件時,Skill 纔可被管理:
1、已在當前 DSH Registry 註冊。
2、來自項目、用戶或顯式配置的自定義文件目錄。
3、有可驗證的本地文件路徑。
4、frontmatter 合法,且聲明的名稱與 Skill 名稱一致。
普通目錄、扁平 Markdown 文件和 Junction 都支持。只在磁盤上發現但未註冊到 DSH 的文件,不算可管理的調用目標。
目錄與刷新¶
每一行展示 Skill 名稱與當前描述、Provider 名稱、來源形式(本地文件、Junction、源文件、過期路徑、僅註冊、bundled 資源、非文件或缺失)、當前調用狀態,以及兩個開關、Read only 標記或 Delete 按鈕。
管理目錄在以下時機重新請求:
- 頁面組件掛載;
- 開關或刪除操作成功;
- 點擊 Refresh。
refresh 會重新讀取策略、掃描顯式配置的 Skill 目錄,並聚合 Registry 與各 scope。可以按名稱或描述搜索,並組合調用狀態與來源過濾器;內置分組默認摺疊,搜索或篩選時自動展開。
策略文件¶
默認位置:
~/.dsh/skills-management/disabled.json
每條記錄只包含調用策略與文件位置元數據,字段如下:
| 字段 | 用途 |
|---|---|
modelInvocable |
生效的模型調用狀態 |
userInvocable |
生效的用戶手動調用狀態 |
originalInvocation |
捕獲的原始默認值,供正確恢復 |
display |
原始描述、Provider、來源與可選使用指引 |
liveFile |
文件來源策略標記,當前爲 true |
sourcePath |
當前源文件位置 |
sourceBase |
資源解析目錄 |
sourcePath 和 sourceBase 是 Host 內部字段,不通過管理列表 API 返回。寫入採用串行隊列、改動前嚴格重讀磁盤、同目錄臨時文件、fsync 和原子替換;策略文件損壞時可能臨時用最後一份有效的內存狀態做讀取,但所有寫入都會被拒絕,避免內存數據覆蓋壞文件。
安全邊界¶
- 低優先級的策略 Provider 只覆蓋文件來源 Skill 的調用標誌與實時文件定義;移除策略後自動恢復原始 Provider。
- 文件來源目錄讀取當前 frontmatter;調用讀取當前正文並校驗其聲明的 Skill 名稱。
- 文件缺失、身份衝突、重複候選和 I/O 錯誤不會被靜默替換爲其他內容。
- 管理端點只接受 loopback 請求,並校驗 Host、Origin、方法與變更頭。
- 插件不修改 Skill 源文件、不掃描無關應用目錄、不收集遙測、不發起外部網絡請求。
管理端點爲:
GET /api/dsh-skills-management/list
適用場景與注意¶
適合需要精細控制 Skill 調用範圍的 DSH 開發者:例如不希望模型自動觸發某個高風險 Skill,但仍保留 /name 手動入口;或者反過來只允許用戶點名調用。插件的分類是工作流,星標數爲 1,屬於早期項目,使用前建議閱讀 GitHub 源碼與 MIT 許可證,並確認當前 DSH 版本在兼容範圍內。
注意插件以當前 DSH 進程權限運行,會讀寫 ~/.dsh/skills-management/ 下的策略文件;它不會修改 Skill 源文件或 Git 工作區,但安裝前仍應自行檢查源碼與許可證。
小結¶
dsh-skills-management 的價值在於把「誰能調用某個 Skill」拆成模型與用戶兩條獨立開關,並在不改動源文件的前提下保持目錄與正文的最新狀態。目錄頁:https://www.skillhub.cn/plugins/JayC-L/dsh-skills-management ;倉庫:https://github.com/JayC-L/dsh-skills-management 。