Community程式設計與開發github.com

GGGengXXX/make-dsh-better

在新機器上從版本固定的 manifest 重新安裝使用者的 DeepSeek Harness 外掛組,支援桌面感知 CLI、可選設定檔,以及版本固定的本機修補。

make-dsh-better 是什麼?

此技能旨在協助使用者將他們的 DeepSeek Harness (DSH) 外掛組完整移植到新機器上。它透過讀取版本固定的 `plugins.json` manifest 檔案,自動偵測正確的 DSH CLI(優先使用桌面應用程式捆綁的包裝器),並檢查 DSH 版本是否匹配,然後顯示安裝/更新/跳過計劃並要求確認。它也支援選用設定,例如設定 `dsh-browser-cdp` 的 Chrome 路徑與 `--headless` 參數,以及套用兩個版本固定的本機修補,以重現原始機器的按鍵行為。此技能特別適合 Cursor 或 Claude Code 等支援基於技能的 AI 代理工具的開發者,因為它能自動化外掛套件的重現過程,避免使用者手動記憶套件名稱與版本。整個流程是冪等的,不會複製秘密、API 金鑰或工作區檔案,確保安全。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GGGengXXX/make-dsh-better/tree/HEAD/skills/dsh-plugin-bootstrap

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

DSH 外掛啟動套件

在新機器上還原一組已知良好的 DeepSeek Harness (DSH) 外掛組。

真相來源是 plugins.json:每個外掛都鎖定到一個確切版本,並附有說明和可選的安裝後設定。指令碼會重現該設定,無需使用者記住套件名稱。

使用者情境

我現在在一台新機器上。我希望 DSH 安裝我另一台機器上使用的所有外掛,並保持相同的版本和相同的關鍵行為。

將此技能放到新機器上

正式公開副本位於:

https://github.com/GGGengXXX/make-dsh-better

在新機器上:

git clone https://github.com/GGGengXXX/make-dsh-better.git
mkdir -p ~/.agents/skills
cp -R make-dsh-better/skills/dsh-plugin-bootstrap ~/.agents/skills/

如果您已經複製了儲存庫,只需複製技能目錄即可。然後啟動一個新的 DSH 工作階段。DSH 會探索 ~/.agents/skills/<name>/SKILL.md 下的技能;該技能會顯示為 dsh-plugin-bootstrap。如果該技能已在該目錄中,請跳過複製步驟。

工作區副本是編輯的真相來源;修改後請重新複製。

此技能的作用

  1. 讀取 plugins.json(版本固定的外掛清單)。
  2. 偵測正確的 DSH CLI。desktop 設定檔由桌面應用程式保留,因此技能會優先使用應用程式捆綁的 CLI 包裝器,而非 PATH 上的通用 dsh。
  3. 檢查 DSH 版本是否與 manifest 相符,並在不相符時發出警告/封鎖。
  4. 顯示安裝/更新/跳過計劃,要求確認,然後使用 dsh plugin --profile <profile> add <name>@<version> 安裝每個外掛。
  5. 選擇性地將設定檔層級的 dsh-browser-cdp 設定(Chrome 路徑 + --headless)套用到 cordis.patch.yml。
  6. 驗證每個外掛是否同時為相依套件和已選取的 bundle。
  7. 選擇性地套用兩個版本固定的本機修補:

它不會複製秘密、API 金鑰、工作階段、工作區檔案或整個 ~/.dsh 目錄。

使用者叫用此技能時的工作流程

從技能目錄(包含此 SKILL.md 的目錄)開始工作。

1. 在修改任何東西之前先檢查

node scripts/install.mjs --profile desktop --dry-run

向使用者顯示計劃。如果計劃要安裝或更新任何內容,請先要求明確確認,然後再執行不含 --dry-run 的指令。

如果使用者目標不是桌面應用程式,請傳遞實際的設定檔(例如 --profile web 或 --profile tui)。對於非桌面的設定檔,PATH 上的一般 dsh 就足夠了;指令碼會處理這種情況。

2. 安裝

node scripts/install.mjs --profile desktop --yes

有用的旗標:

旗標意義
--dry-run列印計劃;不變更任何內容
--yes / -y非互動式確認
--json機器可讀的摘要輸出到 stdout(日誌輸出到 stderr)
--no-config不觸碰 cordis.patch.yml
--skip <pkg>跳過一個外掛(可重複使用)
--strict要求完全符合 DSH 版本
--allow-dsh-mismatch即使 major.minor 不同也繼續
--dsh-cli <path>明確指定 CLI 路徑
--manifest <path>使用另一個 manifest

該指令碼是冪等的:已安裝且版本鎖定並選為 bundle 的外掛將會被跳過。

3. 套用選擇性的本機修補

僅當使用者希望從原始機器獲得完全相同的關鍵行為時:

node scripts/apply-patches.mjs --profile desktop --dry-run
node scripts/apply-patches.mjs --profile desktop --yes

這會修改 node_modules/ 下已安裝的第三方檔案。除非給定了 --force,否則在版本不符時會拒絕執行,並保留 .bak-<timestamp> 副本。告訴使用者這是一個本機修補,未來的外掛更新可能會覆蓋它;更新後,請重新執行修補指令碼或在該外掛的設定中設定行為。

--only keyboard 和 --only markdown 限制修補範圍。

4. 重新啟動 / 重新整理

安裝外掛後,告訴使用者重新啟動 DeepSeek Harness(或在 Mac 上使用 Cmd+Shift+R 硬重新整理 Web UI)。客戶端 bundle 會根據每次頁面載入進行快取;一般的重新整理可能不夠。

5. 驗證

安裝程式會輸出一個驗證表格。如果某個外掛顯示 FAIL,請檢查:

  • 該設定檔的 package.json 中的相依套件和 dsh.profile.bundles;
  • 該套件的版本是否與正在執行的 DSH 版本相容;
  • 外掛管理員的日誌,位於 ~/.dsh/profiles/<profile>/.plugin-manager/logs/。

更新 manifest(在原始機器上進行)

當使用者在他們的主要機器上安裝/移除外掛時,請重新整理 manifest:

node scripts/capture.mjs --profile desktop --dry-run   # 預覽
node scripts/capture.mjs --profile desktop             # 寫入 plugins.json

這會讀取設定檔的已選取 bundle,記錄每個外掛的已安裝版本,並保留現有的 note 欄位。之後提交/推送技能目錄(或將其複製到新機器)。

桌面設定檔規則

通用 DSH CLI 會刻意拒絕 --profile desktop:

error: profile "desktop" is managed exclusively by the Electron application

請改用桌面應用程式的 CLI 包裝器:

/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh

install.mjs 在 macOS 上會自動找到它。在其他平台上,或如果應用程式在其他位置,請設定 DSH_CLI 或傳遞 --dsh-cli。

Manifest 格式

plugins.json:

{
  "schemaVersion": 1,
  "targetProfile": "desktop",
  "dshVersion": "0.2.1-rc.2",
  "plugins": [
    { "name": "@scope/plugin", "version": "1.2.3", "note": "它為什麼在這裡" }
  ],
  "config": {
    "dsh-browser-cdp": {
      "chromePath": "auto",
      "runtimeArgs": "--headless"
    }
  },
  "localPatches": [
    { "package": "dsh-keyboard-shortcut", "version": "0.2.0", "description": "..." }
  ]
}
  • dshVersion 是捕獲 manifest 時的版本。允許相同的 major.minor 並顯示警告;不同的 major.minor 需要 --allow-dsh-mismatch。
  • targetProfile 只是一個預設值;--profile 會覆蓋它。
  • config.dsh-browser-cdp.chromePath: "auto" 會讓安裝程式探測常見的 Chrome/Chromium/Edge/Brave 位置。如果探測失敗,請設定明確的路徑。
  • localPatches 是提供給人類的文件;安裝程式不會自動套用它。請明確執行 apply-patches.mjs。

包含的外掛組(捕獲於 2026-10-24)

外掛版本角色
@flyer103/dsh-side-chat0.6.0原生右側欄側邊對話
dsh-browser-cdp1.6.0透過 Chrome/CDP 的代理瀏覽器;無頭監控面板
dsh-keyboard-shortcut0.2.0Enter=換行,Cmd/Ctrl+Enter=傳送
dsh-markdown-bubble0.1.5使用者訊息的 Markdown 渲染氣泡
dsh-markdown-input0.2.0-alpha.20即時 Markdown 編輯器(alpha)
dsh-better-sidebar0.28.0檔案樹 + 可編輯的 CodeMirror + Git/任務/終端(重量級)

備註:

  • dsh-markdown-input 是 alpha 版本;如果它的編輯器接管行為異常,請在設定 → 外掛中將其停用。
  • dsh-better-sidebar 是重量級的,並包含自己的側邊對話;它可以與 @flyer103/dsh-side-chat 共存,但使用者會看到兩個側邊對話入口點。決定保留哪一個。
  • 內建的檔案和文件預覽是 DSH 本身的一部分;它們不在這個 manifest 中,無需安裝。

安全性

  • 第三方 DSH 外掛在處理程序內執行,並可使用使用者的權限執行。僅從使用者信任的 manifest 安裝。
  • 已鎖定確切版本。請勿無聲地將它們替換為 latest。
  • 本機修補會修改 node_modules;它們是選擇性的、版本固定的、有備份的,並且可逆(還原 .bak 檔案或重新安裝外掛)。
  • 請勿在「安裝外掛」的過程中複製 ~/.dsh/.credentials.yaml、工作階段日誌或工作區檔案。

疑難排解

症狀解決方法
profile "desktop" is managed exclusively…使用桌面應用程式 CLI 包裝器或 DSH_CLI;請參閱上方說明
Could not find a dsh CLI安裝 DSH Desktop,或傳遞 --dsh-cli /path/to/dsh
profile "desktop" is not initialized至少開啟一次 DSH Desktop,以便建立 ~/.dsh/profiles/desktop
ECONNRESET / fetch failed重試;安裝程式會自動重試一次;檢查網路/代理/註冊表
外掛已安裝但 UI 無變化重新啟動 DSH 或硬重新整理(Cmd+Shift+R);客戶端 bundle 會被快取
外掛已安裝但未啟用確認它已在 dsh.profile.bundles 中;外掛管理員的 add 通常會附加它
dsh-markdown-input 編輯器消失檢查設定 → 外掛;alpha 外掛;硬重新整理;檢查控制台是否有 slot/composer 錯誤
dsh-better-sidebar/側邊對話衝突兩者都可以啟動;選擇一個側邊對話入口或移除一個外掛
修補顯示 already-patched這是預期行為;該檔案已具有目標行為
修補顯示 skipped — version …Manifest/外掛版本已變更;在使用 --force 前先檢查新版本

檔案

檔案用途
SKILL.md此工作流程
plugins.json版本固定的外掛 manifest
scripts/install.mjs試執行/安裝/驗證
scripts/capture.mjs從執行中的設定檔重新整理 manifest
scripts/apply-patches.mjs選擇性的本機關鍵行為修補
patches/README.md修補的設計理由和手動備援方案

相關技能