dsh-skills-management:給 DSH Skill 加上模型與手動兩條調用開關

前言

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 。

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

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

小夜