前言¶
DeepSeek Harness(DSH)將每個對話複用到一個 plumb serve 連接上。DSH 的 MCP 客戶端不發送身份:沒有按對話的會話 ID,也沒有按調用的 _meta。Plumb 的隔離層(代理工作區分片、讀取跟蹤、郵件尋址)依賴於聲明的身份,因此未識別的對話可以強制鎖定彼此的工作區。通常的緩解措施是在 ~/.dsh/AGENTS.md 中添加指令,但這僅適用於主對話。DSH 子代理在進程內運行,擁有獨立的系統提示詞且沒有父上下文,因此在結構上是匿名的。
dsh-plumb-identity 插件通過爲每個 DSH 對話、工作區和子代理提供穩定的 plumb 會話身份來解決這個問題。它在傳輸層強制執行此身份,而不是依賴指令。
安裝與啓用¶
此插件依賴運行中的 plumb 守護進程(plumb serve 可作爲名爲 plumb 的 MCP 服務器訪問)。
推薦方式:配置文件包安裝¶
插件默認安裝即包含 dsh.bundle 補丁,會自動掛載並應用默認配置。需在 web 和 headless 兩個 profile 下安裝:
dsh plugin --profile web add dsh-plumb-identity
dsh plugin --profile headless add dsh-plumb-identity
安裝後需重啓 dsh 進程,因爲運行中的進程不會重新讀取補丁層。
替代方式:手動補丁¶
若未安裝 bundle,需手動向 ~/.dsh/cordis.patch.yml 追加補丁行:
- insert:
- id: dsh-plumb-identity
name: dsh-plumb-identity
config:
serverName: plumb
開發調試¶
若指向本地 checkout,需先移除或禁用 bundle 掛載,避免重複 loader entry id:
- insert:
- id: dsh-plumb-identity
name: 'file:///absolute/path/to/dsh-plumb-identity/dsh-plumb-identity.mjs'
config: { serverName: plumb, logEvents: true }
核心功能¶
- 穩定的會話身份:爲每個 DSH 對話、工作區和子代理提供穩定的 plumb 會話 ID。
- 傳輸層強制執行:在 MCP 傳輸層強制執行身份,而非依賴指令。
- 主動聲明:主動發送
session_start請求,並在tools/call中添加_meta標記。 - 失敗開放:SDK 缺失或聲明被拒時,保持失敗開放,不會中斷工具調用。
- 配置靈活:支持通過配置項調整行爲,或使用 bundle 一鍵安裝。
配置項¶
所有配置均爲可選。插件默認使用 plumb 作爲 MCP 服務器名稱。
| 字段 | 默認值 | 說明 |
|---|---|---|
serverName |
plumb |
需要保護的 MCP 服務器名稱(工具調用需匹配 mcp__<serverName>__*) |
idPrefix |
dsh |
生成的 ID 的第一段 |
purpose |
dsh |
對話的 session_start purpose 標籤 |
subagentPurpose |
dsh-subagent |
當會話頭部顯示 parentSession/delegationDepth 時的 purpose 標籤 |
detail |
brief |
主動 session_start 的數據包大小 |
excludeEnv |
["PAUTA_RUN_ID"] |
當任一環境變量被設置時,完全排除該環境 |
connectMarker |
plumb |
匹配 stdio 命令以識別 plumb 連接的子串 |
logEvents |
false |
是否在每次調用時輸出 stamp/capture 的調試行 |
sdkPath |
DSH profile tree | MCP SDK 的絕對路徑(client/index.js),用於非標準安裝 |
注意事項¶
- 依賴版本:需要 DSH 0.1.1-rc.2+ 和 plumb 0.17.x。
- 安裝衝突:安裝 bundle 和手動
insert會產生衝突(重複 loader entry id)。若需切換方式,需先移除另一方式添加的條目。 - 環境排除:將
excludeEnv設置爲['PAUTA_RUN_ID']時會完全排除該環境。被排除的環境不會掛載任何插件,其 plumb 調用將沒有任何身份,可能導致工作區 pin 衝突。