前言¶
DSH 已經會把技能文件納入會話:項目技能在 <projectRoot>/.dsh/skills 與 <projectRoot>/.agents/skills,全局技能在 ~/.dsh/skills 與 ~/.agents/skills。但這個發現過程對用戶不可見,也沒有界面可以增刪改,想改一個技能就得自己翻目錄、開編輯器。下面介紹的這個插件補上這一層:在右側欄常駐一個面板,把四級發現結果分層列出來,並支持瀏覽、編輯、刪除、篩選、跨層複製與更新。
這是什麼¶
mt3166/dsh-project-skills-mng 是 MT3166 維護的 DSH 客戶端插件,名字裏的 mng 是 management。它不是「提供技能」的插件,而是管理技能的插件:面板讀寫的是 DSH 已經發現的同一批技能文件,不會另造一份註冊表。
版本 0.1.0,private: true(未發佈到 npm),許可證 MIT © 2026 MT3166。目錄頁歸類爲「客戶端」插件,顯示 0 星(截至 2026-11-07,見目錄頁)。它註冊的是右欄 tab 與 guide 卡片,面板樣式走 DSH 瀏覽器側已有的主題與 React。
包名、倉庫名、右欄 tab id、Host API 路由(/dsh-project-skills-mng/api)和 CSS 作用域統一用 dsh-project-skills-mng 前綴。
核心功能¶
- 按 DSH 自己的四級發現順序分組列出當前會話生效的技能:項目
.dsh/skills(100)→ 項目.agents/skills(200)→ 全局~/.dsh/skills(400)→ 全局~/.agents/skills(500),數字越小越優先。每個分組顯示路徑、條目數、缺失/只讀狀態與優先級數字,可單獨摺疊。 - 每行顯示模型可調用(M)/ 用戶可調用(U)標記、鏈接安裝標記(
~/.dsh/skills指向~/.agents/skills的鏡像會合併成一行),以及同名的被覆蓋條目。被覆蓋的條目照樣可以打開、編輯、刪除,操作落在它自己所在的根上,不碰勝出的同名技能。 - 支持新建、編輯、刪除
SKILL.md,切換兩個調用開關,校驗 frontmatter,且 frontmatter 之外的正文原樣保留。 - 篩選:名稱/描述關鍵字、四個層級、「只看 M 關閉」「只看 U 關閉」「只看被覆蓋」「只看鏈接安裝」,條件可疊加;篩選變化時不會對看不見的行執行操作。篩選 chip 默認摺疊在「篩選」按鈕後面。
- 來源:讀
~/.agents/.skill-lock.json(npx skills的清單),每行顯示來源倉庫(如obra/superpowers)或「本地」,詳情裏給出倉庫、倉庫內路徑、安裝時間與短哈希,可按來源篩選。 - 檢查更新 / 更新:對比上游 git tree sha(或內容哈希),有更新的行帶小圓點,可單條或批量更新。更新走整包替換,舊版本留在
.dsh-bak-<時間戳>-<名字>,默認保留兩份;本地改過就報LOCAL_CHANGES,要覆蓋得顯式「強制更新」。 - 批量管理:工具欄「選擇」進入多選模式,可批量刪除、批量切換調用開關、跨層移動或複製(整包複製,
scripts/等支撐文件跟着走,.git與node_modules不帶),結果逐條列出成功與失敗原因(如SOURCE_REMOVE_FAILED)。 - 同時註冊一個
skills_manage工具,讓模型複用同一套讀寫邏輯。
清單裏記錄過、磁盤上已經不在的技能單獨歸爲「僅在清單中」分組,可一鍵重新安裝(只寫 ~/.agents/skills,與 npx skills 行爲一致,不補建 ~/.dsh/skills 的鏡像鏈接)。
安裝與啓用¶
官方 README 給出的步驟是先取源碼,再以 bundle 包形式安裝:
git clone git@github.com:MT3166/dsh-project-skills-mng.git
plugin_manager action=install_bundle target=<本倉庫絕對路徑>
新裝的 bundle 由 HMR 直接生效;若是替換已安裝的舊版本,需要重啓 DSH 纔會加載新的 JS。
完成上面兩步後:
- 打開右側欄(
Ctrl+Shift+E一類的開關),點「+」或 guide 頁卡片「項目技能」; - 四個層級分組按優先級排列,點分組頭摺疊,點任意一行進入詳情;
- 詳情裏可直接編輯正文與 frontmatter,保存後列表自動刷新;
- 工具欄可以刷新、新建技能(名稱 + 描述生成 frontmatter 模板,再手動補正文);
- 工具欄「檢查更新」查詢上游(GitHub API,5 分鐘緩存),有更新的行帶小圓點,多選模式裏也能「更新選中」。
插件由 cordis.patch.yml 把 dsh-project-skills-mng 這一行插入 profile,客戶端需要注入 @deepseek-ai/dsh-client-locale、@deepseek-ai/dsh-client-ui-slots 與 @deepseek-ai/dsh-client-ui-sidebar-right 三個包,這些在 package.json 的 dsh 字段裏已經聲明,安裝 bundle 時一併處理。
典型用法¶
一個常見的操作鏈路是:先在右欄定位某個技能,確認它屬於哪一層、優先級數字是多少、是否被同名技能覆蓋;再進詳情改 SKILL.md 正文或 frontmatter。保存後面板自動刷新,DSH 側技能內容也會更新——插件只讀寫技能文件本身,不重建註冊表,DSH 的 @deepseek-ai/dsh-skill-filesystem 已經在監聽這些目錄。
如果要在項目裏引入新的技能,用工具欄「新建」填名稱和描述,生成 frontmatter 模板後補正文即可;想放到全局層,用多選模式下的跨層複製,整包帶走 scripts/ 等支撐文件。
批量操作的部分失敗是可定位的:結果條給出「成功 N · 失敗 M」,失敗項可展開看錯誤碼,例如目標層已有同名技能、移動時刪源失敗。
適用場景與注意¶
適合已經在用 DSH 的團隊或個人:技能數量多了之後,靠手工翻 ~/.agents/skills 已經不好維護;這個面板把發現順序、覆蓋關係、來源倉庫和上游更新狀態集中到一個入口。
幾點需要注意:
- 插件以當前 DSH 進程的權限運行,寫入前有技能名白名單(
^[a-z0-9]+(?:-[a-z0-9]+)*$)與 realpath 校驗,寫操作只允許落在四個技能根目錄內;刪除會二次確認,刪除範圍只到解析後的SKILL.md所在技能目錄。 - 安裝前先讀源碼與許可證。源碼在 GitHub 上公開,許可證爲 MIT;本項目是社區維護的插件,不發佈到 npm,需要自行 clone 後以 bundle 安裝。
- 更新只作用於清單裏登記的上游技能,下載與解包有大小上限(下載 64 MiB、普通技能 32 MiB、根級技能 128 MiB),解包時校驗
..與 realpath,替換前比對本地快照,失敗會回滾並把舊目錄改名備份。 - 如果你不使用
~/.agents/.skill-lock.json清單,則「來源」與「檢查更新」這兩塊沒有數據可展示。
小結¶
這個插件的價值在於把原先不可見的技能發現過程變成可操作的界面:四層分組看清「哪個技能生效、贏了誰」,篩選與批量操作減少逐條手工接線的成本,來源與更新讓上游託管技能也能納入常規維護。倉庫地址:https://github.com/MT3166/dsh-project-skills-mng,目錄頁:https://www.skillhub.cn/plugins/MT3166/dsh-project-skills-mng。