dsh-session-mail:同一 DSH 宿主內跨會話代理通信

前言

在 DeepSeek Harness(DSH)裏開多個會話時,常見做法是人工複製粘貼上下文,或在會話外自己寫腳本調宿主 API。同一臺機器上若有兩個會話各自跑代理,它們默認互不可見:A 會話裏的模型無法直接讓 B 會話裏的模型繼續某段協作。

dsh-session-mail 把這件事收成插件提供的工具:一個會話中的代理可以向同一宿主上另一個會話的代理發消息,對方按約定回信。下面介紹它的定位、能力與安裝用法。

這是什麼

dsh-session-mail 由社區維護者 BJ1919810 發佈,在 SkillHub 目錄中歸類爲「工作流」。插件版本爲 0.1.0,許可證 MIT;package.json 中聲明與 DSH 0.2.0-rc.2 兼容。

一句話定位:Cross-session messaging for DeepSeek Harness —— 一個會話的 agent 向另一個會話的 agent 投遞消息。投遞是單向的;若要回復,收信方再次調用同一工具,並把 toSessionId 設爲來信 From 行裏的發送方 session id。

核心功能

發信工具 send_session_message

代理通過該工具向目標會話投遞文本。插件會在正文前加上固定格式的抬頭,並附帶郵件元數據行。

參數 類型 含義
toSessionId string 目標會話 id,格式爲 session-<32 位十六進制>。回信時使用 From 抬頭中的 id。
message string 要發送的正文;插件會自動 prepend From 抬頭。
urgent boolean 默認 false:排隊,等目標當前 turn 結束後再投遞。true:在當前 turn 的下一步邊界插入(steer)。

收信方看到的是普通 user 消息,形狀如下:

From <sender session id> :
<what the sender says>

第一行是發送方 session id,模型從工具說明中得知這是另一代理來信以及回信地址。每條消息在 From 之下還有 [mail m-xxxxxxxx …] 元數據行,用於 replyTo、thread、supersedes 等擴展參數(同 thread 未送達前重複發送會被 dedupe;supersedes 可撤回仍排隊中的舊信,已落地的無法改寫)。

只讀窺視 read_session_info

讀取其他會話信息,不會喚醒目標會話,也不會向目標投遞任何內容。

參數 類型 含義
sessionId string 目標會話 id。
what title | last_reply | last_present | status | all 要取的字段;默認 all(不含 status,因 status 需單獨指定)。
  • title:來自 session/projections 的會話標題。
  • last_reply:上一完整 turn 的最後一條 assistant 回覆。
  • last_present:該會話最後一次 present 工具調用聲明的交付物。
  • status:對端是否 busy、排隊情況、最近收/發郵件 id 等。

冷會話(代理未在跑)也可查:文檔說明 session/projections 與 session/page 在實測中均能返回標題與事件。

urgent:排隊與打斷

urgent 宿主模式 收件箱目標 大致落地時機
false(默認) queue next-turn 目標當前 turn 結束後,成爲下一 turn 的第一步
true steer next-step 目標當前 turn 的下一步邊界

README 中的選用原則:若本條消息會使對方已經收到的 earlier 指令失效(糾錯、撤回、結論變更),應設 urgent: true;普通回覆、澄清或不矛盾的新請求用默認排隊即可。Steer 不能搶佔已在執行的前臺 tool call,但後臺任務不阻塞 turn 內的 step 邊界。

開關與可觀測性

在 Settings → Plugins 中條目名爲 dsh-session-mail,可熱切換;關閉後工具從工具表卸載,已運行的 turn 繼續,但無法再發信。

程序側區分「插件投遞」與「人類輸入」:正文看 From session-… 前綴;事件日誌可讀 data.source.rpcId,插件投遞爲 dsh-session-mail:<uuid> 形式。落地證據是 user/message 且正文以 From session- 開頭,而非僅看發送方的 tool/call。

安裝與啓用

取得插件包源碼目錄後(例如從 GitHub 倉庫 或 SkillHub 目錄頁 指引獲取),在該目錄執行 README 給出的安裝命令:

node scripts/install.mjs --profile <DSH_HOME>/profiles/desktop

這一步會寫入 profile 依賴、把包加入 dsh.profile.bundles,並在 profile 的 node_modules 中建立鏈接。README 說明:新裝插件通常不需要重啓 DSH;profile 變化後宿主會重算配置樹,下一回合即可在工具表中看到 send_session_message。若修改的是已加載插件的源碼,則需要重啓才能重新 import 模塊。

運行環境:package.json 要求 Node ^22.19.0 || >=24.0.0(DSH 自帶運行時以 Node 24 爲常見情況)。

安裝後還應在 Settings → Plugins 中確認 dsh-session-mail 爲啓用狀態。

典型用法

1、確定目標 session id

README 明確:不要用 session/list 拉全量 projections(易撐爆上下文)。應查看會話目錄,例如 ~/.dsh/sessions/ 下對應 profile 的 session-<id>/session.v4.jsonl.zstd,按最近修改選取 id。

2、從會話 A 發信到會話 B

在 A 的代理 turn 中調用 send_session_message,例如:

  • toSessionId: session-<32 hex>(B 的 id)
  • message: 協作說明或任務描述
  • urgent: 是否需要打斷 B 當前 turn(默認 false)

3、在 B 中回信

B 的代理收到形如 From session-… : 的消息後,再次調用 send_session_message,toSessionId 填抬頭中的發送方 id,message 寫回復內容。可選 replyTo 引用 [mail m-…] 中的 id。

4、發信前瞭解對端狀態(可選)

調用 read_session_info(sessionId, "status") 查看 busy、queuedNextTurn / queuedNextStep 等,再決定 urgent 與措辭。

5、收信方尚未掛載工具時的回退

若消息已到但工具表還沒有 send_session_message,README 提供 CLI 回退:通過 dsh-api.mjs 調用 session/prompt,手動寫入完整 From <你的 session id> :\n<正文>,並自行 mint requestId。這與插件自動加抬頭的行爲不同,需嚴格遵循文檔中的 payload 示例。

適用場景與注意

適合誰: 在同一 DSH 宿主上並行多個會話、希望代理之間傳遞任務分工、審查意見或狀態同步,而不想每次由人工中轉的開發場景。

邊界(來自 README):

  • 目標會話必須與發送方在同一宿主;另一應用實例有獨立會話空間。
  • 同一時刻一個會話只跑一個 turn;默認排隊消息在 turn 結束後送達。
  • 插件依賴宿主掛載 web server(desktop / web profile)。

安全與權限: 插件以當前 DSH 進程權限運行,可代表代理向其他會話注入 user 消息並讀取會話投影。安裝前應閱讀 源碼與 LICENSE,確認行爲符合你的信任邊界。SkillHub 爲社區目錄站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,本插件是其中一條工作流擴展,而非內置能力。

結尾

dsh-session-mail 把「會話 A 的 agent 對會話 B 的 agent 說話」固定爲兩個工具:發信、只讀讀會話。配合 urgent、thread 與 supersedes,可以在不離開 DSH 的前提下做輕量跨會話協作。

  • 目錄頁:https://www.skillhub.cn/plugins/BJ1919810/dsh-session-mail
  • 源碼與完整說明:https://github.com/BJ1919810/dsh-session-mail
羽毛球分组比赛记分
小程序二维码

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

小夜