前言¶
用 DSH 做開發時經常遇到這種情況:會話 A 剛把一個問題分析透,會話 B 接手相關工作,需要 A 的完整上下文。沒有專門工具時,路徑是導出會話日誌、把文件挪過去、解壓,再手工讀 zstd 壓縮的 JSONL——文件在會話之間“搬運”一遍,成本不低。
dsh-session-link 把這件事壓縮成一次複製、一次粘貼:會話頭部一鍵複製當前會話的 @session-<uuid> 引用,粘到另一個會話發送後,模型調用 session_read 工具,把那條會話的對話內容以 user: / assistant: 文本的形式讀回來。下面介紹它的功能、安裝和用法。
這是什麼¶
dsh-session-link 是 DeepSeek Harness(DSH)的插件,由 jinhuang712 維護,採用 MIT 許可證。DSH 的理念是“一切皆插件”,這個插件針對的是會話之間的上下文共享:它不改模型的記憶機制,而是讓任意一個本地會話可以被另一個會話以引用方式讀取。
安裝後它提供三樣東西:會話頭部的複製按鈕、輸入框裏的 @ 會話提及來源、以及 session_read 工具。另外附帶一個同名 companion skill,教模型何時以及如何讀取引用。
核心功能¶
複製當前會話引用¶
會話頭部新增按鈕「🔗 複製 Session ID」,點擊即把當前會話的 @session-<uuid> 引用放入剪貼板。這是純剪貼板操作,沒有 host 往返,按鈕點擊後會翻轉爲「✓ 已複製」。
@ 提及按標題列會話¶
在輸入框輸入 @,會話來源分組按標題列出所有本地會話,可按標題或 id 搜索。選中一項即在輸入框插入引用 chip,不需要切換會話。
引用渲染爲 chip¶
@session-… 引用在已發送氣泡中以藍底白字渲染。重繪的作用域做了精確限定,不會影響其他類型的 @ 提及。因爲引用是結構化 chip 而不是一串需要解釋的文本,對方拿到後模型就知道該怎麼處理。
session_read 工具¶
模型側的工具,可解析三種引用形式:
@session-<uuid>:精確匹配,推薦使用,複製按鈕產出的就是這個格式;dsh-session:URI:鏈接載荷的 URI 形式;@title:按標題精確匹配;未命中或有歧義時返回候選列表和 id,需要按 id 重試。
返回字段爲 { sessionId, title, cwd, logPath, seqRange, transcript, truncated }。工具是隻讀的、live-first:讀取反映運行中會話的當前狀態,沙箱會話同樣支持。
投影行爲可通過參數控制:
maxChars:投影的字符預算,默認 64000;truncate:"tail"(默認)保留最近的對話行,"head"保留最早的;raw:調試用,返回原始 JSONL 的前 200000 字符。
隨附 companion skill¶
安裝時通過 dsh.skills 聲明註冊同名 skill,內容是給模型看的使用說明,讓它知道遇到引用時該調用什麼工具、傳什麼參數。
安裝與啓用¶
固定版本安裝,構建產物已提交,無需本地構建,也不涉及註冊表:
dsh plugin --profile web add "github:jinhuang712/dsh-session-link#v0.1.0"
# 重啓 dsh web 並刷新頁面
如果想跟蹤未發佈的提交,可以固定到 main 分支:
dsh plugin --profile web add "github:jinhuang712/dsh-session-link#main"
也可以從本地檢出以 link 方式安裝:
git clone https://github.com/jinhuang712/dsh-session-link.git
dsh plugin --profile web add "link:$PWD/dsh-session-link"
如果你的 dsh profile 目錄本身是一個 pnpm workspace,pnpm 會要求先傳 -w 才能操作 workspace 根目錄,把它透傳給命令即可:dsh plugin --profile web add -w …。
安裝並重啓後,頭部按鈕、@ 菜單分組和 session_read 工具在所有會話中永久可用。
典型用法¶
把會話 A 的上下文交給會話 B,完整流程是:
1、打開會話 A,點擊頭部「🔗 複製 Session ID」;
2、切到會話 B,把引用粘進輸入框(顯示爲 chip)後發送;
3、模型調用工具讀取引用:
session_read({ "link": "@session-7fc2d98e-…" })
返回結果包含會話的 title、cwd 和 user: / assistant: 形式的對話文本。
如果只是想引用某個會話而不切換過去,在輸入框輸入 @,在 session 分組裏按標題找到目標會話插入即可。
注意 @title 形式是精確標題匹配,未命中或有歧義時工具會返回候選和 id,按 id 重試即可。
邊界與注意事項¶
幾條實測出來的邊界,用之前需要知道:
- 中文標題不會渲染爲 chip:隨附的
@提及正則缺少/u標誌,@分析…這類引用不會被重繪。因此複製格式始終是 id 而不是標題,就是爲了繞開這個問題。 @title解析依賴 host 的sessionQuery標題快照:該能力不可用時,工具會明確說明並指向 id 形式。- 讀取是隻讀且 live-first:
sessionQuery.readSession反映運行中會話的當前狀態;磁盤日誌路徑僅作爲參考信息(logPath)返回,插件絕不寫入。
另外,插件以當前 dsh 進程的權限運行,安裝任何第三方插件前都建議先閱讀其源碼和許可證。這個插件是 MIT 許可,倉庫公開,裝前檢查一遍成本不高。
需要卸載時:從 web profile 的 cordis.patch.yml 中移除 dsh-session-link 的 insert 行;再從 dsh.profile.bundles 中移除該依賴並運行 pnpm remove。
小結¶
dsh-session-link 解決的問題很具體:會話之間的上下文傳遞,不需要導出、搬運、解壓、手工讀日誌這一套流程,一次複製加一次粘貼就完成。引用是結構化的 chip,讀取是隻讀投影,行爲邊界都有明確說明。
插件收錄在社區目錄(獨立站點,與 DeepSeek / 幻方無官方從屬關係):https://www.skillhub.cn/plugins/jinhuang712/dsh-session-link ,源碼倉庫:https://github.com/jinhuang712/dsh-session-link 。