前言¶
DSH 的理念是「一切皆插件」,社區插件目錄也因此保留了大量針對具體通道和具體場景的小插件。dsh-channel-memory 就是其中之一:它由 Yuncan050115 維護,分類爲「記憶」,解決的問題很具體——用 wxbridge 這類手機通道時,每從微信發一句話,橋就可能新起一條 DSH 會話,全部落在默認工作區裏,桌面側欄被「手機會話」淹沒,也沒法歸檔回看;同時換一條會話(或橋重啓)之後,之前交代過的身份資料、口徑、偏好都要重新說一遍。這個插件把手機發起的會話歸到一個獨立工作區,並提供一份跨會話共享的可檢索長期記憶。
它是什麼¶
一句話定位:DSH 插件,爲微信通道會話提供專屬工作區,並在所有會話之間共享一份長期記憶。核心是 5 個工具和零運行時依賴——只用 Node 內置模塊加上宿主自帶的 @deepseek-ai/dsh-tools,兼容 DSH 0.2.1-rc.5 / cordis 4.0.5。當前包版本爲 0.1.3,許可證 MIT,engines 要求 Node >=22。
安裝前有兩點需要知道:npm 上的 dsh-channel-memory 目前只有 0.0.0-stage 佔位版(latest 指向它),真實版本要等 staging approve 完成;另外插件會以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。社區目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係。
核心功能¶
下面介紹的功能分別對應一個工程判斷,README 裏都寫明瞭原因。
1、專屬工作區。默認路徑是 ~/.dsh/channel-workspace(可配)。插件先調用宿主的 workspaceRegistry.resolveByPath() 查詢,缺失才 create(),不直接覆蓋已有目錄。
2、歸屬判定不自己猜。不同宿主版本暴露會話 cwd 的方式不一樣,猜錯就會靜默跳過。插件改用宿主自己的不變量:Workspace.attachSession() 會校驗會話 header 的 cwd 是否等於工作區路徑,不等就拋。因此「掛載成功」本身就是權威的歸屬證據,普通桌面會話會在 catch 裏被安靜跳過,插件不強行繞過校驗。
3、共享記憶。存儲在 ~/.dsh/channel-memory/memory.json,寫入用原子 rename + sha256 校驗和;校驗和不符(文件被截斷或外部改壞)時退回空庫,而不是拿髒數據當記憶。
4、自動流水。監聽 session/event 的 turn/end,只給已確認歸屬的通道會話記一條,用於回溯「手機側這段時間聊過什麼」。
5、提示詞注入。通過 systemPrompt.section({ name, order, text }) 注入,text 傳函數(宿主按 typeof section.text === 'function' ? section.text(context) 求值),寫入記憶後下一輪組裝自動生效,不需要手動 refresh,且只追加、不替換人格。
模型工具¶
插件註冊 5 個工具,均在記憶與工作區信息範圍內:
| 工具 | 用途 |
|---|---|
memory_write |
記一條跨會話共享記憶,參數含 kind / tags / pinned |
memory_search |
子串檢索正文、標籤或類別 |
memory_list |
列出最近 20 條,帶 id 便於刪除 |
memory_forget |
按 id 刪除 |
channel_workspace_info |
返回工作區路徑、id、已歸屬會話數、記憶與流水條數 |
pinned: true 的記憶常駐提示詞索引,其餘按 indexLimit(默認 12)取最近若干條。
安裝與啓用¶
官方給出的安裝方式是在 DSH 的應用 profile 目錄裏執行(Windows 桌面形態是 %USERPROFILE%\.dsh\profiles\desktop)。注意不要直接 pnpm add dsh-channel-memory。
cd %USERPROFILE%\.dsh\profiles\desktop
pnpm add github:Yuncan050115/dsh-channel-memory
或從本地目錄安裝:
pnpm add file:C:\path\to\dsh-channel-memory
然後把 bundle 名加進同目錄 package.json 的 dsh.profile.bundles(插件管理器會自動做這一步,手工加也可以):
"dsh": { "profile": { "bundles": [ ..., "dsh-channel-memory" ] } }
重啓 DSH 生效。不想重啓可以先用 DSH 自帶運行時做一次幹跑,--dump-config 只組合配置、不啓動 GUI。<APP> 是 DSH 安裝目錄,Windows 桌面形態默認爲 C:\Program Files\DeepSeek Harness 或 D:\DeepSeek Harness:
set ELECTRON_RUN_AS_NODE=1
set DSH_HOME=%USERPROFILE%\.dsh
"<APP>\DeepSeek Harness.exe" --expose-internals ^
"<APP>\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh\lib\bin.js" ^
--profile desktop --dump-config
輸出裏應能看到 # == dsh-channel-memory 這一層;若出現 skipped bundles 或 did not activate,說明 bundle 沒掛上。
配置¶
cordis.patch.yml 裏 channel-memory 行的 config 全部可選,默認值以註釋形式給出:
- insert:
- id: channel-memory
name: 'dsh-channel-memory'
config:
workspacePath: 'C:/Users/you/.dsh/channel-workspace'
workspaceTitle: '手機通道'
dataDir: 'C:/Users/you/.dsh/channel-memory'
injectIndex: true
indexLimit: 12
autoDigest: true
要讓微信發起的會話真的落進這個工作區,還需要橋側的會話 cwd 指向通道工作區。wxbridge 支持在 ~/.dsh/wxbridge/config.json 裏配 cwd(宿主半 pick('cwd') → keeper → 橋的 --cwd),例如:
{ "cwd": "C:/Users/wujid/.dsh/channel-workspace" }
配完重啓橋即可。不配也不會出錯,插件只是沒有會話可歸屬,記憶與工具照常工作。
驗證¶
插件自帶契約測試 test/contract_test.mjs。與常見做法不同的是,它用宿主自己的 defineTool 跑測試而不是 stub,因此 value-schema DSL 違規會當場拋;夾具強制宿主不變量(cwd 不符則 attachSession 拋),「外來會話被拒絕掛載」是被真實驗證的。在插件目錄裏運行(<APP> 同上,Windows 桌面形態必須用 DSH 自帶的 Electron 跑,因爲宿主模塊在 app.asar 裏):
set ELECTRON_RUN_AS_NODE=1
"<APP>\DeepSeek Harness.exe" --expose-internals test\contract_test.mjs
實測輸出爲:
tools registered: 5
prompt sections : channel-memory:index@3200(text=function)
attached (channel session): ["sess-abc"]
after foreign session : ["sess-abc"] (must not contain sess-elsewhere)
index reflects post-apply write: true
RESULT: PASS
測試會把 DSH_HOME 指到臨時目錄,不會碰真實的 ~/.dsh。可選的環境變量覆蓋爲 DSH_TOOLS_ENTRY 和 DSH_PLUGIN_ENTRY。權限面見 PERMISSIONS.md。
適用場景與注意¶
適合用微信通道(wxbridge 或同類橋)長時間與 DSH 交互、希望手機側會話有獨立歸檔位置、又不想讓跨會話記憶丟失的開發者。它的價值在於把「會話歸屬」和「記憶複用」這兩件事固化下來,而不需要自己在宿主裏拼裝。
需要注意幾點。插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證(MIT)再啓用;npm 上同名包當前只是佔位版,安裝請走 git 或本地目錄方式;只配插件不配橋的 cwd 時,記憶與工具照常工作,但不會有會話被歸入通道工作區。
小結¶
dsh-channel-memory 是一個目的明確的插件:用宿主自己的掛載校驗判定會話歸屬,把手機通道會話收進一個可配的工作區,同時用原子寫入和 sha256 校驗維護一份跨會話共享記憶,再通過 5 個工具和提示詞注入讓記憶真正被複用。如果你要用 wxbridge 這類通道,它是解決「會話散落 + 記憶不通」的一個現成選項。
- 目錄頁:https://www.skillhub.cn/plugins/Yuncan050115/dsh-channel-memory
- GitHub:https://github.com/Yuncan050115/dsh-channel-memory