dsh-nest:在 DSH 裏用「會話從屬」把子會話當 agent 問一句

前言

在 DeepSeek Harness(DSH)裏做多會話協作時,常見做法是複製歷史、新開分支,或在側邊欄裏手動切會話。子會話有自己的模型、工具和日誌,母會話只想「問它一句、拿回答」,往往要付出上下文搬運或樹結構改動的成本。

dsh-nest(倉庫 epsilonH-eps/dsh-nest)給 DSH 裝一個邏輯上的「巢」:在 設置 → 會話從屬 裏用下拉框安排誰歸誰管,母會話再通過工具 原地喚醒 子會話、投一句話、等它答完——不復制歷史,也不改 DSH 側邊欄裏的會話樹。下面介紹它是什麼、能做什麼、怎麼裝、怎麼用,以及使用時必須知道的邊界。

這是什麼

維護者 epsilonH-eps,社區目錄分類爲 工作流(SkillHub 目錄頁)。插件當前版本 0.3.0(見倉庫 package.json),許可證 MIT。

一句話定位:關係存在本機 $DSH_HOME/dsh-nest/relations.json,只決定「誰能訪問誰」;訪問時動的是目標會話自己的 id、header 和歷史,新的一輪寫進它的日誌。

核心功能

面板:設置 → 會話從屬

  1. 自動列出本機 所有 會話(標題、創建時間、是否開着),按關係排成樹,子會話縮進。
  2. 每行「上級」在 + 掛到… 下拉里 用標題選 母會話;標籤上的 × 去掉一條關係。
  3. 一個子會話可以同時掛在多個母會話下面,幾個母都能訪問它。
  4. 母會話行前 ▾/▸ 摺疊子會話;每行 👁 單獨隱藏/顯示;摺疊與隱藏記在瀏覽器 localStorage(鍵 dsh-nest:panel)。
  5. 頂部搜索按標題或 id 過濾;面板拒絕成環、自掛。

關係 不改 任何會話日誌/header,也 不改 DSH 側邊欄會話樹——只是邏輯從屬。

工具:把子會話當 agent 用

會話 A ─┐
        ├──問一句──▶  會話 B(原樣,原地繼續)
會話 C ─┘                 │
        ◀──── 它的回答 ────┘
  • 訪問的是 B 本身;B 看得出是誰在問:消息帶 agent-message 來源(form: relay,senderSessionId 爲發起方)。
  • B 沒開着就臨時 resume,答完 dispose;已開着則複用當前 agent。
  • 工具參數裏 省略 session 表示問「我的子會話」:面板裏掛給當前會話的那些;只有一個時直接問,多個時會列出來讓你點名。
工具 作用 主要參數
nest_list_sessions 列出會話,標出當前/子會話/開着/歸在誰下面/下級數量 query、limit
nest_ask_session 投一句話,等回答並帶回 message、session(可省略)、wait_seconds

返回 { sessionId, status, reply, waitedSeconds }:idle 答完;running 超時未等完(目標繼續跑);error 本輪失敗(原因在 reply)。

安裝與啓用

資料中的示例是在 Windows 上已寫好插件目錄並裝進 desktop profile;換 profile 時用符號鏈接並把 bundle 寫進 profile(不是 憑倉庫名拼接通用 dsh plugin add 命令):

New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.dsh\profiles\<profile>\node_modules\dsh-nest" -Target "D:\dsh-mod\dsh-nest"
# package.json: dependencies 加 "dsh-nest": "link:D:/dsh-mod/dsh-nest";dsh.profile.bundles 加 "dsh-nest"

宿主要求(package.json):dsh >=0.1.7-rc.1,Node >=22。

在 profile 的 cordis.patch.yml 裏掛上插件(id 爲 nest):

- id: nest
  name: dsh-nest
  config:
    enabled: true
    maxListed: 25
    titleScan: 60
    askTimeoutSeconds: 180
    panelTitleScan: 200

改這份 patch 會觸發宿主熱重載,不用重啓;改插件 lib/ 代碼需重啓。改 client.js 後需 刷新頁面。面板沒出現時見下文「面板不出現時的排查」。

配置字段 默認 含義
enabled true 關閉則不掛工具與面板接口
maxListed 25 列會話時最多給模型看幾條
titleScan 60 按標題搜時最多讀多少條標題
askTimeoutSeconds 180 默認等待秒數;wait_seconds 可單次覆蓋,上限 900
panelTitleScan 200 面板一次最多讀多少條會話標題

典型用法

  1. 打開 設置 → 會話從屬,在目標子會話的「+ 掛到…」裏選母會話(可多選)。
  2. 回到母會話,用自然語言或工具讓模型去問,例如:「問一下你的子會話,它那邊測試跑完沒有。」

關係表 v2 形態示例(parents 爲「子 → 一組上級」):

{
  "version": 2,
  "updatedAt": 1793180938448,
  "parents": {
    "3b14ac2d-...": ["session-f2c084b0-...", "c0f0eaf6-..."],
    "session-d2900ad9-...": ["social-8b23659d-..."]
  }
}

面板通過本機迴環 API 讀寫關係(節選):GET /api/dsh-nest/relations;POST 加邊、刪邊、整組替換或清空某子的上級。詳見倉庫 README。

適用場景與注意

適合:母會話編排多角色(測試、文檔、專項 agent),需要 短問短答 且保留各會話獨立日誌與工具鏈;需要 一子多母 共享同一個子會話。

務必知曉的邊界(插件以當前 DSH 進程權限運行,安裝前應自行查看源碼與 MIT 許可證):

  • 被訪問的會話會 真的跑一輪,消耗其 token、模型與工具,可能改文件。
  • 不能訪問自己,也不能訪問 DSH 血緣裏的 上級,避免死鎖。
  • 目標已在別的進程開着時可能 喚不醒;兩個母會話同時問同一子會話會 排隊。
  • 超時不掐斷 目標:返回 running 後它繼續跑;回答取「這一問之後最後一條帶文字的助手消息」。
  • 關係是邏輯的,不會在 UI 會話樹裏變成父子節點。

客戶端在 頁面加載時 註冊;裝完需刷新。若「設置 → 會話從屬」仍沒有,可請求:

http://127.0.0.1:65133/api/dsh-nest/client-status

present: false 時可試 ?reset=1 清識別緩存(README 說明:首次加載時若 package.json 尚無 dsh.client 聲明,宿主可能緩存「無客戶端」,導致工具在、面板永不出)。

結尾

dsh-nest 用本機關係表 + 兩個 nest 工具,把「誰管誰」和「問子會話一句」拆開:面板管從屬,母會話管 relay,子會話仍在原處續聊。DSH 生態是「一切皆插件」;SkillHub 目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜