前言¶
在 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 和歷史,新的一輪寫進它的日誌。
核心功能¶
面板:設置 → 會話從屬¶
- 自動列出本機 所有 會話(標題、創建時間、是否開着),按關係排成樹,子會話縮進。
- 每行「上級」在
+ 掛到…下拉里 用標題選 母會話;標籤上的×去掉一條關係。 - 一個子會話可以同時掛在多個母會話下面,幾個母都能訪問它。
- 母會話行前
▾/▸摺疊子會話;每行 👁 單獨隱藏/顯示;摺疊與隱藏記在瀏覽器localStorage(鍵dsh-nest:panel)。 - 頂部搜索按標題或 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 |
面板一次最多讀多少條會話標題 |
典型用法¶
- 打開 設置 → 會話從屬,在目標子會話的「+ 掛到…」裏選母會話(可多選)。
- 回到母會話,用自然語言或工具讓模型去問,例如:「問一下你的子會話,它那邊測試跑完沒有。」
關係表 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