dsh-plugin-template:DeepSeek Harness 插件入門模板

前言

DSH 的理念是「一切皆插件」。對插件開發者來說,單寫一個 tool 或一個 hook 並不難,難的是把 Config、Tool、Events、Service、Hook 和 browser client half 放進同一個可安裝 bundle,並讓它能在 profile 里正確激活。

下面介紹 dsh-plugin-template。它不是某個具體業務插件,而是一個 starter template:用最小可讀的代碼展示 DeepSeek Harness 插件的常見形態,適合作爲本地開發模板,也適合用來閱讀 DSH 插件的結構邊界。

這是什麼

dsh-plugin-template 是一個面向 DSH 插件開發的入門模板,倉庫路徑爲 kun2-5code/dsh-plugin-template,包名爲 dsh-plugin-template,package.json 中版本爲 0.1.0,許可證爲 MIT。

它在一個 installable bundle 中演示了六類常見插件形態:

  • Config
  • Tool
  • Events
  • Service
  • Hook
  • Browser half(client)

它遵循 DSH 的 bundle distribution model:包內聲明 dsh.bundle 與 cordis.patch.yml,通過 dsh plugin add 作爲 config layer 激活。

package.json 中還聲明瞭瀏覽器端入口:

{
  "dsh": {
    "bundle": {
      "patch": "./cordis.patch.yml"
    },
    "client": {
      "platform": "web",
      "inject": [
        "slots"
      ]
    }
  }
}

這裏的 client.platform 爲 web,inject 包含 slots。也就是說,它同時覆蓋了 host 端插件邏輯和 browser 端 UI 註冊。

核心能力

Config

模板包含 Config interface 和 Schemastery schema。加載時應用 validation 和 defaults。

這類配置適合用來學習 DSH 插件如何把插件內部狀態接到 settings namespace,而不是自己維護一套獨立配置。

Tool

Tool 通過以下 API 註冊:

ctx.tools.register(defineTool(...))

模板中的 greet 工具具有 presentResult render intent。

Events

Events 使用 ctx.on / ctx.emit,並通過 declaration merging 提供 typed events。

適合用來觀察 DSH 插件事件如何在類型層面擴展,而不是依賴字符串事件名。

Service

Service 是一個 class-form plugin,可向其他插件提供服務。

service.ts 是可選示例,默認禁用。

Hook

Hook 提供 tools/pre-execute 權限門,可按配置拒絕工具調用。

hook.ts 也是可選示例,默認禁用。

Browser half

Browser half 會在 14 個 surfaces 註冊 browser UI。資料中列出的位置包括:

  • clickable config card
  • sidebar footer action
  • input dock
  • shell overlay
  • header utility
  • input tool-row buttons
  • /dsh-demo command row
  • General settings row
  • Plugins tab
  • settings header action
  • session header action
  • composer dock
  • per-message actions

其中 clickable config card 可寫入 greeting、maxRetries、verbose。在 stock harness 上,這張卡片會渲染 read-only 的 “not exposed” explainer,而不是直接消失。

這裏有一個邊界需要分清:只有 config card 的數據路徑受 harness allowlist 限制;其他十三個是 pure slot registrations,可以在任意 harness 上工作。

演示命令

模板還包含兩個演示斜槓命令:

  • /hello:replies world
  • /dsh-demo:custom row

這些命令用於驗證 host half 的命令註冊和 client 端 command row 的展示位置。

安裝與啓用

本地目錄安裝

先做本地安裝,適合確認模板能跑通:

dsh plugin --profile demo add /path/to/dsh-plugin-template

這裏的 /path/to/dsh-plugin-template 需要替換成你機器上的實際目錄。

安裝後可以先看 config layer:

dsh --profile demo --dump-config

正常應能看到 # == dsh-plugin-template 這一層。

然後啓動 DSH:

dsh --profile demo

注意:自定義命名的 profile,例如 demo,只包含 dsh-base,是 headless 的,沒有 GUI。若要查看 Web GUI 和 config card,需要使用 web profile。

GitHub 安裝

README 給出的 GitHub 安裝示例是:

dsh plugin --profile demo add github:you/dsh-plugin-template

這裏的 you 是佔位命令,fork 後應替換爲你自己的倉庫路徑。

GitHub 安裝會拉取源碼;pnpm 會執行 prepare,也就是用 tsdown 構建 lib/。

在 pnpm ≥10 時,首次 git-dependency prepare 可能被拒絕。需要把 pnpm 輸出的包名加入 profile 的 pnpm-workspace.yaml,然後重試:

allowBuilds:
  dsh-plugin-template: true

allowBuilds 會授權在安裝時執行該包代碼。只允許信任源碼,並優先固定 commit:

github:you/dsh-plugin-template#<sha>

本地開發 overlay

如果你在 deepseek-harness 源碼 checkout 內開發,可以直接加載模板源碼:

pnpm dsh web --patch /absolute/path/to/dsh-plugin-template/dev/cordis.yml

/absolute/path/to/dsh-plugin-template 需要替換爲本機絕對路徑。

--patch overlay 只加載插件的 host half。若要測試 browser-half config card,必須把插件安裝到 profile,並按 name: dsh-plugin-template 解析。

開發期間可以運行這些檢查:

pnpm install
pnpm typecheck
pnpm build
node test/smoke.mjs

如果這個模板位於 deepseek-harness checkout 內,pnpm install 可能被父 workspace 捕獲。此時應使用:

pnpm install --ignore-workspace

或者把模板單獨克隆出來再安裝。

適用場景與注意

適合用它做以下事情:

  • 學習 DSH 插件的 Config、Tool、Events、Service、Hook 結構。
  • 查看 browser client half 如何在多個 UI surfaces 註冊。
  • 理解 dsh.bundle、cordis.patch.yml 和 dsh plugin add 的 bundle 安裝關係。
  • 作爲自己的 DSH 插件 fork 起點。

使用前注意:

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • service.ts 與 hook.ts 是可選示例,默認禁用。
  • demo 這類自定義 profile 是 headless;要看 config card 和 Web GUI,需要 web profile。
  • allowBuilds 會授權安裝時執行包內代碼,只應加入信任源碼。
  • 不要把該倉庫或社區目錄理解爲 DeepSeek 官方應用商店;社區目錄是獨立站點,不應寫成與 DeepSeek 或幻方有官方從屬關係。

小結

dsh-plugin-template 的價值在於把 DSH 插件最常見的六類形態放進同一個可安裝 bundle,並明確區分 host half、browser half、config card、slot registration 和 bundle 激活邊界。它適合先讀懂結構,再改造成自己的插件。

  • GitHub:https://github.com/kun2-5code/dsh-plugin-template
  • 許可證:MIT

現有資料未給出已覈實的社區目錄頁 URL,因此本文不提供具體目錄鏈接。

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

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

小夜