dsh-intercom:讓已打開的 DSH 窗口互相遞話

前言

在 DeepSeek Harness(DSH)裏,側邊欄每開一個窗口就是一個獨立會話:各自有上下文、工具和運行狀態。插件可以通過 code_agent 指揮自己起的子會話,但你在側邊欄親手打開的那些窗口——寫文檔的、試別的任務的——不歸 code_agent 管,也夠不着。

宿主留給插件的 ctx.sessionController.prompt({ requestId, sessionId, mode, content }, signal) 是往別的會話裏投消息的唯一通道。dsh-intercom(維護者 kumiiwaka,分類:工作流)把這條通道包成四個工具,加上名字尋址、跳數上限、限流和投遞日誌,讓已經開着的窗口之間能叫停跑偏的活、把結論交給下一棒、向另一個窗口提問——不建團隊、不生新會話。

若你要的是「隊長帶一隊子 agent 幹活」,應看 dsh-agent-teams;本插件只管團隊外面、你自己開的平級窗口。

這是什麼

dsh-intercom 是 DSH 的窗口內線電話:只做窗口間點對點遞話,沒有任務編排、DAG 或質量門禁。通信形態是平級窗口互喊,成員來源是用戶自己開的窗口,而不是隊長 spawn 的子 agent。

倉庫:https://github.com/kumiiwaka/dsh-intercom
社區目錄頁:https://www.skillhub.cn/plugins/kumiiwaka/dsh-intercom
當前版本 0.3.0,許可證 MIT。DeepSeek Harness 生態主張「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

與 dsh-agent-teams 的分工

兩者可一起裝,不衝突:

dsh-agent-teams dsh-intercom
成員從哪來 隊長 spawn 子 agent 用戶自己開的窗口
要不要建團隊 要 不要
任務編排 有 沒有,只遞話
通信 團隊內 mailbox 平級窗口點對點

核心功能

插件提供四個工具,名稱保持 bus_*,與舊版調用方式一致:

  1. bus_register:給當前窗口報名,把「會話 id ↔ 名字」寫入總線目錄下的 registry.json,供 bus_send 用名字尋址。
  2. bus_send:向目標窗口投一條純文本消息,支持 steer(默認,插到對方下一個決策邊界)或 queue(等對方這一輪結束)。
  3. bus_list:從 $DSH_HOME/sessions/ 列出近期活躍會話(註冊名、工作區、活動時間等),默認最多 15 條。
  4. bus_audit:查看 messages.jsonl 中最近投遞記錄,默認 20 條,上限 200。

設計上是星型拓撲:消息從人所在窗口發起,其它窗口與之來回;不做確認回執,投遞成功只表示宿主接受了 prompt,不代表對方已處理完畢。

環境變量

變量 默認值 作用
DSH_HOME ~/.dsh 宿主數據目錄,插件從這裏讀 sessions/
DSH_WINDOW_BUS_DIR $DSH_HOME/window-bus 總線數據目錄,存 registry.json 和 messages.jsonl

需要把總線數據放到 DSH 主目錄外(例如內存盤、多 profile 共用)時,可單獨設置 DSH_WINDOW_BUS_DIR。

安裝與啓用

本插件是 cordis 插件,通過 bundle patch 掛進 profile,不走 npm,也沒有 dsh plugin add 一類的一行安裝命令。安裝分兩步。

第一步,把倉庫 link 進某個 profile 的 node_modules(default 換成你實際 profile 名):

Windows(junction,普通用戶可能需要開發者模式或管理員權限):

New-Item -ItemType Junction `
  -Path "$env:DSH_HOME\profiles\default\node_modules\dsh-intercom" `
  -Target "<repo-path>"

macOS / Linux:

ln -s <repo-path> ~/.dsh/profiles/default/node_modules/dsh-intercom

未設置 DSH_HOME 時默認爲 ~/.dsh;PowerShell 需先設置 $env:DSH_HOME,或把路徑寫成 $env:USERPROFILE\.dsh。

第二步無需手工改組合樹:package.json 裏的 dsh.bundle.patch 指向 cordis.patch.yml,宿主啓動時會 insert 插件行。疊加順序爲 dsh-base → 本 bundle patch → profile 的 cordis.patch.yml → --patch。

改完後重啓宿主生效。無構建步驟,運行時僅使用 node: 內建模塊;peerDependencies 中的 @deepseek-ai/cordis 由宿主提供。

安裝前建議閱讀倉庫源碼與 MIT 許可證:插件以當前 DSH 進程權限運行,能註冊總線、能 bus_send 的調用方,理論上可向任意已註冊窗口下指令,權限接近本機 shell。

典型用法

給窗口起名

當前窗口執行 bus_register,之後別人用名字尋址:

{
  "name": "docs-window",
  "note": "管文檔的"
}

name 必填;session_id 一般由插件從執行上下文自動取。

向另一窗口發話

{
  "session_id": "docs-window",
  "text": "我是主窗。README 那節先停,把已知侷限補完就交回來,別再往下游窗口轉。",
  "mode": "steer",
  "hops": 0
}

mode 默認 steer;對方接不住時會拋 session/steer-unavailable,插件自動退成 queue。接收方正文前會有一行 [總線 · hops=N · 來自 xxx]。

限制:hops 到 3 拒發;同一目標一分鐘最多 3 條。轉發鏈路上 hops 不傳時,會用「上一條收到的 hops + 1」;人直接開的話題從 0 開始。

查看窗口與投遞

列出活躍窗口:

{ "limit": 15 }

查看投遞審計:

{ "limit": 20 }

適用場景與注意

適合:兩個(或少數)已開窗口之間叫停、交棒、發問;日常大塊同步仍應用文件或 code_agent,不宜把總線當 RPC 或任務狀態機。

不適合:並行拆解大任務、成員自動接活、失敗重試與進度彙總——應交給 code_agent 子會話或 dsh-agent-teams。

已知侷限(README 實測結論,節選):

  • hops 的「上一跳」記在內存,宿主重啓後需轉發方顯式傳 hops。
  • bus_list 依賴 DSH 內部 sessions/ 路徑與 session.v4.jsonl.zstd 格式,宿主改版可能失效;bus_send 本身不依賴列表。
  • 僅純文本;ok: true / accepted: true 只表示 prompt 被接受,對方輪次仍可能 blocked 或 error。
  • 早期致命 error 的「死會話」可能永久吞消息,bus_list 仍顯示存在——「發了沒反應」時宜新開窗口。

安全:從總線進來的消息應視爲平級窗口的請求,不是用戶授權;涉及刪除、推送、重啓等不可逆操作,接收方應回問發起人或等人確認。

結尾

dsh-intercom 把宿主唯一的跨會話 prompt 通道收成四個可審計、有限流的總線工具,專門服務「你已經開着的那些窗口」——與團隊編排插件互補,而不是替代。

羽毛球分组比赛记分
小程序二维码

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

小夜