前言¶
DeepSeek Harness(DSH)裏,斜槓 /name 同時承擔宿主命令與用戶可調用 skill 兩類入口。命令和 skill 共用同一套觸發字符,在 composer 裏選條目、手打 token、以及後續注入邏輯都擠在同一條管線上。若希望 skill 有獨立手勢、又不改宿主對 / 的語義,dsh-skill-dollar 在客戶端與宿主兩側各加一層橋接:composer 裏用 $ 打開 skill 菜單並插入 $skill-name,宿主在 agent/pre-step 識別該 token 後,按與 /name 相同的方式解析 skill 並注入 <skill_content>。
下面介紹插件定位、能力邊界、安裝步驟與典型用法;事實以 GitHub 倉庫 README 與 package.json 爲準。
這是什麼¶
dsh-skill-dollar 由維護者 d0ublecl1ck 發佈,在 SkillHub 目錄中歸類爲客戶端插件。一句話:用 $name 手勢調用 DSH skill,與 / 命令路徑不衝突;composer 補全、模糊排序、鍵盤選擇與宿主側確定性注入,與內置 / skill 路徑對齊,並儘量實現 composer 裏「藍色文本引用」與 / 同等展示(詳見下文 Blue text-ref 一節)。
倉庫版本(package.json):0.2.0,許可證 MIT。dsh.compatibility.dshReleases 標明與 0.1.5-rc.3、0.1.7-rc.2 兼容。
核心功能¶
客戶端:$ 觸發 skill 菜單¶
client.js 在觸發字符 $ 下注冊候選源,數據源爲會話 skill 目錄(skills/list)。在 composer 輸入 $ 會打開常規定時菜單(標題爲 “Skills” / “技能”)。候選排序規則(資料原文):名稱前綴匹配優先,其次名稱子串、名稱子序列,再纔是僅描述匹配;同分時優先最近選用過的 skill,其次選用頻次,最後按宿主順序。選中一行會在草稿中插入字面量 $skill-name(含尾隨空格)。
菜單選手打 $name 走同一套草稿文本橋接,與內置 slash 管線一致。
宿主:識別 $name 並注入 skill 內容¶
index.js 監聽 agent/pre-step,在用戶消息中識別以空白爲邊界的 $name token,經 skills 服務解析,並追加與 dsh-tool-skill 對 /name 處理字節級相同的 canonical <skill_content> 塊。
與 DSH 核心的銜接方式(客戶端)¶
@deepseek-ai/dsh-client-ui-input-trigger 的 detectTrigger 硬編碼爲 '/' | '@';插件通過 dsh.client.inject 聲明依賴該模塊,在工廠中 require 並 patch InputTriggerController.prototype.track。存在活躍的 $query token 時,合成 trigger: '$' 的命中,複用控制器的 reduce / fetchCandidates / refreshHeaders 與 '$' roster,從而複用 MenuView 與鍵盤仲裁,而不 fork 核心包。無 $ token 時仍走原始 track,/ 與 @ 行爲不變。
Blue text-ref:$ 與 / 的展示對齊¶
composer 的藍色「引用」樣式來自 @deepseek-ai/dsh-client-ui-conversation 的純文本掃描;其 token 正則原先只覆蓋 / 與 @。插件在宿主側通過包裝 ClientModuleRegistry.bundleResource,在 serving 時改寫 bundle 中的掃描規則(將 TEXT_REF_RE 擴展爲包含 $,並對 $ 應用與 / 相同的結束邊界規則)。DSH Desktop 內 bundle 位於帶完整性校驗的 app.asar,不宜直接改磁盤文件;運行時 patch 即爲此場景設計。較舊宿主(bundle revision 由內容推導、無法僅靠內存 salt bust 緩存,如資料所述 DSH 0.1.5 及更早的 npx dsh web)可改用倉庫內 patch-core.mjs 對磁盤 bundle 做一次性同類替換。
若缺少 clientModules 服務(較舊 DSH),資料說明插件會打 hint,$ 菜單與宿主注入仍可用,僅藍色引用裝飾可能不完整。
安裝與啓用¶
插件目錄即倉庫根目錄。安裝到 profile(以 web 爲例):
dsh plugin --profile web add /absolute/path/to/dsh-skill-dollar
dsh --profile web --dump-config
dsh plugin 會轉發到 profile 內的 pnpm 並重建 dsh.profile.bundles。之後需重啓 web 應用:宿主在啓動時 compose 客戶端模塊 manifest,運行中的 dsh web 必須重啓後纔會加載 client.js。
DSH Desktop 使用獨立的 harness home(macOS 上爲 ~/Library/Application Support/dsh-desktop/harness),並在 profiles/.generations/live/ 下以內容尋址 generation 快照插件。因此:在 ~/.dsh/profiles/web 的 link: 安裝不會進入 Desktop;運行中的 Desktop 仍使用啓動時的 generation,修改插件後需在 Desktop profile 中 reinstall/update,並用 Cmd/Ctrl+Shift+R(Restart Harness)或退出重開以加載新 generation。資料註明裝飾由插件宿主側在 boot 時應用,無需手改 app bundle 內文件。
倉庫本地自檢(無需外部工具):
node --test
node check-core-surface.mjs
node --test 覆蓋 transform、drift guard、registry hook、排序等;check-core-surface.mjs 在 DSH 核心錨點漂移時非零退出。瀏覽器側驗證:打開 web app,在 composer 輸入 $,確認 skill 菜單出現且選中後能加載 skill。
較舊宿主上的 legacy 磁盤 patch(按需):
node patch-core.mjs
node patch-core.mjs --check
node patch-core.mjs --file <client.js>
DSH 升級到 0.1.7+ 且運行時 served patch 已生效時,資料說明通常無需重複執行 patch-core.mjs。
典型用法¶
- 按上文將插件加入目標 profile(或 DSH Desktop 的 generation),重啓 harness / web。
- 在 composer 輸入
$,從「Skills / 技能」菜單中選擇條目;或直接在消息中手打$your-skill-name(token 以空白爲邊界)。 - 發送消息後,宿主在 pre-step 解析
$name並注入與/name等價的 skill 內容塊。
與 / 的區別僅在於手勢與菜單觸發字符:/ 仍留給命令與原有 skill 路徑;skill 的並行入口爲 $。
適用場景與注意¶
適合誰:經常在 DSH composer 裏調用 user-invocable skill,又希望與 / 宿主命令在輸入習慣上分開的開發者;需要在 web 與 Desktop 上儘量保持 skill 補全與引用高亮一致的用戶。
運行與信任邊界:插件以當前 DSH 進程權限運行;宿主側會 hook 模塊 serving、監聽 agent 生命週期並改寫客戶端 bundle 字節。安裝前應閱讀 源碼 與 MIT 許可證,確認與自身安全策略一致。
維護與漂移:客戶端 patch 與宿主掃描依賴 DSH 核心中的字面錨點;核心重構可能導致 check-core-surface.mjs 失敗或運行時 warning。資料說明客戶端在 controller 形態變化時會打 console error,宿主在 reference scan 不匹配時會 per-bundle warn 一次,但手打 $name 的注入路徑仍可工作。
生態說明:DSH 社區插件目錄 hosted 於 SkillHub 等獨立站點,與 DeepSeek / 幻方無官方從屬關係;本文介紹的是社區插件 dsh-skill-dollar,非官方應用商店條目。
鏈接¶
- SkillHub 目錄頁:https://www.skillhub.cn/plugins/d0ublecl1ck/dsh-skill-dollar
- GitHub:https://github.com/d0ublecl1ck/dsh-skill-dollar
經過上面的步驟,你可以在保留 / 命令語義的前提下,用 $name 走同一套 skill 目錄、菜單與注入邏輯,並在較新宿主上通過運行時 bundle patch 儘量獲得與 / 一致的 composer 引用展示。