前言¶
在 DSH 裏跑長任務時,經常會遇到一種尷尬:上下文已經塞滿,代碼也改完了,模型說「接下來的東西不適合在這個對話裏繼續,我們新開一個對話吧」——然後它其實開不了。DSH 0.2.1 裏模型給出的典型回答是「新對話我開不了,那是界面操作」。左側欄的「新對話」按鈕確實存在,但那條通路(sessionController.commands.create + commands.prompt)沒有暴露成工具,模型只能先停下來等你手動點。
dsh-new-session 就是補這個缺口的插件:它把建會話、投遞交接消息、附帶上一段對話的只讀引用、自動切到新會話這一整套動作,做成一個模型可以直接調用的 new_conversation 工具。維護者是 CassiaTw1g,分類是工作流。
下面按「這是什麼 → 裝什麼 → 怎麼用 → 有什麼要注意的」來講。
這是什麼¶
一句話定位:一個 DSH 插件,讓模型在當前工作區裏真正創建一個新會話,並立刻開始幹活,同時把界面切過去。
它做的事情拆成四步,對應工具裏的四個能力:
| 能力 | 說明 |
|---|---|
| 建會話 | 建在調用方當前所屬的工作區(workspaceRegistry)裏,側邊欄直接出現,不是孤兒會話 |
| 投交接 | 交接內容作爲新會話的首條用戶消息投進去,新會話立刻跑自己的第一輪,調用方不等它結束 |
| 帶引用 | reference_current: true(默認)會在首條消息裏附一段本對話的只讀快照引用;不給它引用時,prompt 必須自包含 |
| 切視圖 | 結果落地後調 uiWorkspace.openSession(sessionId),主視圖跳到新對話 |
另外它會把 title 通過 session/title 的 user 來源釘住,這樣自動標題(fallback / LLM)不會再覆蓋你指定的標題。工具行渲染成一張「新開對話」卡片,顯示標題、工作區、session id 和打開按鈕;失敗時卡片上直接寫原因。
倉庫地址:https://github.com/CassiaTw1g/dsh-new-session,目錄頁:https://www.skillhub.cn/plugins/CassiaTw1g/dsh-new-session。許可證 MIT,engines.node >= 22。
工具參數¶
new_conversation 的參數就五個,全部來自 README:
prompt:必填,交接內容title:新會話標題workspace:工作區;寫錯會報錯並列出可選工作區reference_current:是否附帶上一段對話的只讀引用,默認trueswitch:是否自動切視圖,默認開
其中 switch / reference_current 可以覆蓋全局配置裏的同名默認值。
和已有插件的差別¶
README 裏列了兩個社區相近的插件,都是作者查過 npm / GitHub 的:
@ryuu-64/dsh-session-tools:提供session_create/session_send/list_sessions/session_wait,功能很全,但 peer 依賴釘在0.2.0-rc.2,而且建會話是「出一張卡片,手動點開」。dsh-session-messaging:會話之間互發消息,沒有建會話。
dsh-new-session 的差異點是三點:自動切換(作者稱之爲 codex 的手感)、內置跨對話引用、宿主半邊零 @deepseek-ai/* import,所以不挑宿主小版本,裝進任意 0.2.x profile 都不會因爲 peer 解析失敗而掛。
安裝¶
README 給了三種方式,按省事程度排。
方式 0,npm / 插件市場:
dsh plugin --profile desktop add dsh-new-session
或者在 DSH 的「插件 → 發現」裏搜 new session。README 在這裏有一句注:索引上架後纔可見;同時它自己也提到「npm 還沒發佈、或想跟主幹」的情況,這時走下面的方式。桌面版要先完全退出,dsh plugin 才能拿到 profile 鎖。
方式 A,倉庫裏的安裝腳本,README 標爲推薦,桌面版運行中也能裝:
node tools/install-profile.mjs # 默認 desktop profile
node tools/install-profile.mjs --profile headless # 其它 profile
node tools/install-profile.mjs --dry-run # 只看會做什麼
node tools/install-profile.mjs --profile desktop --rollback # 撤銷
腳本做的是文件級安裝:複製包、改 package.json 的 dependencies 和 dsh.profile.bundles,每次都留一份 package.json.bak-newsession-<時間戳> 備份。
方式 B,dsh plugin 指向本地路徑:
dsh plugin --profile desktop add file:D:/DSH/插件/dsh-new-session
裝完之後的收尾動作,README 寫得很具體,這兩步都在做同一件事:讓兩邊各自重新加載。
- 宿主半邊:桌面版通過 profile 熱重載掛上新工具,README 的實測記錄是秒級生效;沒生效就完全退出 DSH 再打開。
- 瀏覽器半邊:刷新一次頁面,因爲
dsh.client的模塊圖是在頁面加載時組裝的。
配置¶
全部配置都在 cordis.patch.yml 裏,只有幾行:
- insert:
- id: new-session
name: dsh-new-session
config:
autoSwitch: true # 結果落地後自動切到新對話
referenceCurrent: true # 自動附加上一段對話的只讀引用
switchDelayMs: 900 # 切換前的停頓(毫秒)
# toolName: new_conversation
也就是說,不寫任何配置直接裝,默認行爲就是「自動切 + 帶上一段對話的只讀引用 + 切之前停 900 毫秒」。
用法¶
裝好之後不需要記參數,直接跟模型說人話就行。README 給的示例:
新開一個對話,把 X 剩下的事繼續做完。
模型會調 new_conversation,然後寫一段自包含的交接,內容至少包含目標、已完成、下一步、約束、路徑這幾項。新會話建起來立刻開工,界面切過去;舊會話保持原樣,隨時可以切回來。
想把交接做得穩一點,可以明確要求交接段落自包含,或者明確說不要帶引用。調用方和接收方都不依賴彼此記得上一句說了什麼,這是這套設計的核心。
適用場景與注意¶
適合這些人:在 DSH 裏跑多步任務、上下文容易被撐爆、希望用對話分段而不是在同一個會話裏無限追加的人;以及自己寫插件、需要一個「會話生命週期」工具來做參數參考的人。插件的目錄結構(lib/index.js 宿主半邊、lib/client.js 瀏覽器半邊、cordis.patch.yml、安裝腳本、兩個方向的單測)本身可以當作一個雙半邊插件的樣板。
有幾個邊界需要在裝之前知道,都來自 README 的「已知邊界」一節:
- 只建會話,不建工作區。
workspace填錯會報錯,並列出可選的工作區。 - 瀏覽器半邊只有 Web / 桌面版有意義。headless profile 沒有
sessionController,這時工具會給出可讀報錯而不是靜默失敗。 - 跨對話引用依賴宿主裝了
@deepseek-ai/dsh-session-reference(dsh-web-app默認帶);沒有這個服務時會自動降級爲純文本交接。 - 自動切換不會搶視圖:卡片只出現在發起調用的那段對話裏,而且只跳一次;3 分鐘以外的歷史卡片不會觸發跳轉。
另外提醒一句安裝前的通用動作:插件是以當前 DSH 進程的權限運行的,能讀到這個進程能讀到的文件、能執行它能執行的命令。裝之前把源碼和許可證過一遍,這是任何第三方插件都適用的前提,對這個插件也不例外。倉庫許可證是 MIT,作者目前沒有發佈正式 npm 包,走 npm 方式前可以先確認一下是否已經上架。
小結¶
dsh-new-session 解決的問題非常窄:模型需要一個能真正開會話、並且自動切過去的能力,而不是一份「建議你新開對話」的說明。它沒有試圖去替代現有的會話管理插件,只是在它們之外補上了「建會話 + 自動切」這個動作。如果你正好被卡在「上下文該切但切不了」這一步,可以試一下。