dsh-cross-session:讓頂層 DSH 會話之間互發消息、文件與讀取記錄

前言

在 DSH 裏做長任務時,常見做法是開子 agent 並行幹活。子 agent 啓動便宜,但值得留意:它和你共享同一次 turn、同一份上下文窗口,也共享同樣的失敗模式。真正更穩的單位往往是另一個頂層會話——你在側邊欄能打開、能單獨指定模型和工具、有自己長時間運行歷史的那個會話。可問題是 agent 一直沒有辦法找到它。

下面介紹的 zhyunran/dsh-cross-session 就是解決這個問題的插件。它由 zhyunran 維護,給 agent 提供五個工具,讓它把同 profile 下的其他頂層會話當作 peer 來用:列出來、發消息、交文件、搜歷史、讀結論。它不是子 agent,也不是消息轉發腳本,而是一個以當前 DSH 進程權限運行的插件。

插件已在社區目錄 SkillHub 收錄,分類爲工作流,GitHub 顯示 1 stars,版本 0.1.2,許可證 MIT,要求 DSH 0.2.x。

這是一個什麼插件

一句話定位:讓一個 DSH 會話裏的 agent 直接和另一個頂層 DSH 會話通信——發消息、交文件、搜它的歷史、讀它自己的最終回答。

它解決的是「委託後無法驗收」的問題。讀對方自己的 transcript,而不是相信對方回過來一個信封。README 裏把它稱作 peer-session development。

維護者 zhyunran,倉庫 zhyunran/dsh-cross-session。DSH 的理念是「一切皆插件」,這個插件本身就是一個正常 DSH bundle,沒有構建步驟,運行時僅依賴宿主的 @deepseek-ai/dsh-tools。

核心功能:五個工具

五個工具都掛在 cross_session_* 下,分工明確。

  1. cross_session_list:列出其他會話,返回精確的 id / title / cwd / state。可以用名字解析「session B」「那幾個 C/D/E 會話」。
  2. cross_session_send:向一個或多個會話發送消息和真實文件附件。目標是被喚醒後按它自己的正常 turn 繼續工作。
  3. cross_session_read:讀 peer 的原始 transcript——用戶消息、助手回覆,可選工具調用與結果。冷啓動的會話也能讀。
  4. cross_session_search:在 peer 的整段對話裏做字面量搜索,所有詞項必須同時出現在一條消息裏。
  5. cross_session_wait:等到一個或多個 peer 完全空閒,然後從它的日誌裏取回它自己的最終助手消息。

後兩個工具是關鍵所在。驗收方式是讀對方自己的對話記錄,而不是信任它回傳的摘要。這就是「派發後祈禱」和真正的跨會話協作之間的差別。

安裝與啓用

前置條件:DSH 0.2.x(桌面版或 dsh web)。插件 0.1.2,要求 Node >= 22.19.0。

先看官方推薦的插件管理器方式,再給 CLI 方式。

方式一:DSH 插件管理器(推薦)

  1. 先拿到包:從 GitHub release 或倉庫 dist/ 下載 dsh-cross-session-0.1.2.tgz。
  2. 打開 DSH → Settings → Plugins,從本地 tarball 路徑、含 package.json 的本地目錄,或 GitHub URL 安裝。
  3. 重啓一次 DSH,宿主加載新 bundle。

方式二:CLI

# 本地 tarball(必須是絕對路徑,相對路徑會被安裝器拒絕)
dsh plugin --profile desktop add C:\path\to\dsh-cross-session-0.1.2.tgz

# 或 GitHub tarball(不要求本機裝 git)
dsh plugin --profile desktop add https://codeload.github.com/<owner>/dsh-cross-session/tar.gz/<40-char-commit>

# 如果發佈到 npm
dsh plugin --profile desktop add dsh-cross-session

裝完同樣重啓一次。插件通過自身的 cordis.patch.yml 註冊,不需要手動改 profile。注意這裏的參數是 --profile desktop add,不是憑插件名直接 dsh plugin add github:owner/repo。

驗證方式是直接問 agent:

List the other sessions in this DSH.

它應當調用 cross_session_list 並列出真實會話標題。如果工具缺失,說明 bundle 沒加載,去 Settings → Plugins 檢查後重啓一次。

典型用法

以下示例來自 README 的寫法,可以照着復現。

複用另一個會話的需求。用戶說「把打包任務做完,要求和 session B 一致」,agent 先搜再讀:

cross_session_search({ session: "ManageBac 打包要求", query: "版本號 changelog" })

拿到精確規則後自己完成,不用把整個上下文搬過去。

指揮一組會話。已知 C、D、E 各自做過這個工程的一部分,讓它們把各自的部分做完:

cross_session_send({ to: ["C", "D", "E"], message: "...", expect: "transcript" })

三個 peer 會話隨後開始各自工作。之後再驗收:

cross_session_wait({ sessions: ["C", "D", "E"] })

然後逐個 cross_session_read 它們的 transcript,覈對真實輸出。

向 peer 提問。想知道之前關於安裝器的決策:

cross_session_send({ to: "session-B", message: "What did we decide about the installer?", expect: "reply" })

peer 會用 cross_session_send 回過來,或者等 cross_session_wait 之後直接讀 transcript。

配置

默認開箱可用:同一個 profile 裏的任意頂層會話都可以訪問任意其他會話。DSH 是本地單用戶 harness,裝插件本身就是授權。要收緊策略,在自己的 profile 層覆蓋配置項:

# <DSH_HOME>/profiles/<profile>/cordis.patch.yml
- id: dsh-cross-session
  config:
    access: workspace          # all | workspace | allowlist
    allowlist: []              # ids, exact titles, or "cwd:<absolute path>"
    denylist: []               # never listed, read or written
    allowSend: true
    allowRead: true
    includeHeader: true
    messageSource: agent-message   # agent-message | user

幾個關鍵字段的含義:

字段 默認值 含義
access all all 同 profile 所有頂層會話;workspace 僅限相同 cwd;allowlist 僅限列表內。
allowlist [] 配合 access: allowlist,接受會話 id、精確標題或 cwd:<path>,* 匹配全部。
denylist [] 無論哪種 access 模式都禁止,詞彙同 allowlist。
allowSend / allowRead true 可分別關閉寫或讀。
includeHeader true 在消息前加發送者 id、說明這是 peer 消息、並指明回覆工具。
messageSource agent-message agent-message 如實標註 senderSessionId,peer 界面顯示爲收到任務消息;user 則看起來像人發的消息。

其他默認上限來自 README 的兩個表格:單個附件 25 MiB(maxFileBytes)、每條消息最多 8 個附件(maxFiles)、消息文本 100000 字符(maxMessageChars)、單次 read/wait 響應 60000 字符(maxTranscriptChars)、read/search 事件掃描上限 20000(maxEvents)、read 默認返回 20 條(defaultReadLimit)、search 默認返回 10 條命中(defaultSearchLimit)、默認等待預算 120 秒(defaultWaitSeconds)、硬上限 600 秒(maxWaitSeconds)。

一個安全相關的行爲值得記錄:配置寫壞時插件不會打開訪問。它會記錄錯誤並退回 deny-all,而不是阻止 DSH 啓動。

適用場景與注意

適合這樣的人:已經在 DSH 裏把長任務拆成多個頂層會話,分別配了模型和工具,希望 agent 能跨會話找需求、交文件、回收結果並自行覈對,而不是靠複製粘貼上下文。

幾點注意:

  1. 插件以當前 DSH 進程的權限運行,能讀能寫的就是宿主能讀能寫的範圍。安裝前應檢查源碼(lib/、cordis.patch.yml)與許可證(MIT)。
  2. 它只作用於同 profile 內的頂層會話,不替代子 agent;需要子 agent 的輕量並行時仍然用子 agent。
  3. 驗收依賴 transcript 讀取,若 peer 會話被清理或歷史超出上限(maxTranscriptChars / maxEvents),可能讀不到完整內容。
  4. 目錄站 SkillHub 是獨立站點,與 DeepSeek / 幻方無官方從屬關係,插件的星標、版本、配置項以倉庫 README 與 package.json 爲準。

結尾

這個插件的價值在於把「另一個頂層會話」變成了 agent 可以真實調用的對象:發消息、交真實文件、搜歷史、等空閒、讀它自己的最終回答。多個會話在同一個 profile 下並行時,它比子 agent 更重,但也更可覈對。倉庫與目錄頁如下。

  • 目錄頁:https://www.skillhub.cn/plugins/zhyunran/dsh-cross-session
  • GitHub:https://github.com/zhyunran/dsh-cross-session
羽毛球分组比赛记分
小程序二维码

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

小夜