前言¶
在 DeepSeek Harness(DSH)裏跑 Agent,一輪對話並不總是以 turn/end 正常收尾。進程崩潰、刷新頁面、斷線、任務報錯或輸出觸頂、以及中途按停止,都會把工作停在半路。宿主自帶的待辦面板能看任務,但不會自動幫你把「接着幹」這件事填進輸入框。下面介紹社區插件 dsh-session-continue(維護者 notpdpton,分類:客戶端):在輸入框上方顯示提示條與「繼續」按鈕,把中斷原因、輪次和未完成任務清單摺疊成可一鍵提交的狀態。
這是什麼¶
dsh-session-continue 是一個獨立的 DSH 插件:會話非正常結束時,在輸入框上方顯示提示條與「繼續」按鈕。單包自帶 Host 與瀏覽器半邊,無子包、無運行時依賴,也不依賴其他插件。
| 項 | 值 |
|---|---|
| npm 包名 | dsh-session-continue |
| 插件名(診斷用) | dsh-session-continue |
| 投影鍵 | sessionContinueInterruption |
| 版本 | 0.1.1 |
| 許可 | MIT |
目錄頁:https://www.skillhub.cn/plugins/notpdpton/dsh-session-continue
源碼:https://github.com/notpdpton/dsh-session-continue
解決什麼問題¶
Agent 一輪可能因以下情況未正常結束:
- 進程被殺或崩潰,日誌尾部缺少
turn/end; - 重啓、刷新、斷線導致正在跑的一輪被掐斷;
- 任務出錯、被阻止,或輸出撞到長度上限;
- 用戶按停止,但工作尚未完成。
插件把「這一輪如何結束」「停在哪一輪」「當時的任務清單」摺疊成少量狀態,在 conversation.input.dock 槽位(輸入框正上方,排在自帶待辦 dock 之上)顯示提示,並提供「繼續」:點擊後將接續指令填入輸入框並提交,便於模型從上次未完成處接着做。任務清單不在提示條裏重複展示(待辦面板在上方),而是隨「繼續」指令一併發給模型。
界面與行爲¶
收起時提示條一行:狀態點、標題「會話未正常結束」、一句話原因。展開「詳情」後增加中斷輪次、錯誤代碼、錯誤信息三行;展開區無分割線,在卡片表面向下延伸。右側三個按鈕:詳情 / 繼續 / 忽略。
- 僅在會話沒有正常結束且 agent 當前不在運行時出現;
- 「忽略」只對當前這一次中斷生效,下一次中斷會再次出現;
- 插件頁卡片標題爲「會話中斷繼續」,圖標爲藍底播放三角。
配置¶
總啓用/禁用由「插件」頁該卡片上的開關控制。詳情頁(plugins.bundle.config)只有兩個偏好開關,不重複總開關;側邊欄不會單獨增加「會話中斷繼續」導航項。
| 開關 | 默認 | 作用 |
|---|---|---|
| 恢復進度與任務清單 | 開 | 「繼續」時附帶未完成任務清單與中斷輪次 |
| 提示手動停止的會話 | 開 | 關閉後只提示非你主動結束的會話 |
安裝與宿主版本¶
從 npm 安裝¶
在 DSH「插件」頁選擇「添加插件」,填入包名 dsh-session-continue,裝好後在 bundle 列表確認已啓用。命令行等價寫法:
npm install dsh-session-continue
從 Git 倉庫安裝¶
在「插件」頁選擇安裝,填入倉庫地址(<主機>/<賬號>/dsh-session-continue)。資料未給出固定的 dsh plugin add 單行命令,以插件頁填寫的倉庫地址爲準。
宿主版本要求¶
package.json 中 engines.dsh 爲 ^0.2.1-rc.5。落在範圍外時宿主在導入插件代碼前會拒絕裝載。資料中的兼容表:
| 宿主 | 結果 |
|---|---|
0.2.1-rc.5 |
放行 |
0.2.2-alpha.2 / 0.2.2-alpha.3 / 0.2.2 |
放行 |
0.2.1-rc.4 及更早 |
拒絕 |
0.3.0 及更新 |
拒絕 |
範圍外使用需通過宿主版本豁免(compatibility.json / dsh plugin allow-version)顯式授予。
本地開發安裝¶
將源碼 link 進 profile,並把包名加入 bundle:
// <profile>/package.json
{
"dependencies": {
"dsh-session-continue": "link:<本倉庫的絕對路徑>"
},
"dsh": {
"profile": {
"bundles": [
"dsh-session-continue"
]
}
}
}
cordis.patch.yml 插入掛載行;瀏覽器半邊由 package.json 的 dsh.client 聲明發現。
典型用法¶
- 安裝並啓用插件,滿足宿主
^0.2.1-rc.5。 - 正常用 DSH 跑 Agent;若某輪未正常結束且當前沒有在跑,輸入框上方會出現提示條。
- 需要接續時點「繼續」,輸入框會收到附帶任務清單(若開關開啓)的接續指令並提交;若只是誤報或暫不需要,可點「忽略」。
- 若不想在「自己按停止」時也看到提示,在插件詳情頁關閉「提示手動停止的會話」。
診斷「某會話爲何顯示或不顯示繼續」時,可在插件倉庫 test/ 下用真實會話目錄(默認 $DSH_HOME/sessions,否則 ~/.dsh/sessions)運行只讀腳本,例如:
node explain-session.mjs <sessionDirOrId>
實現要點(選讀)¶
Host 在 ctx.sessionProjections 註冊投影 sessionContinueInterruption,從完整會話日誌摺疊出 wire 視圖推給客戶端;瀏覽器 client.js 從 wire 讀取 status、turn、reason、abortCause、errorCode、errorMessage、partialMessage、todos 等字段驅動提示條。主動停止與 Workspace 觸發的 agent.cancel({ kind: 'user' }) 在日誌上形態相同,插件藉助是否存在帶 interrupted: true 的 partialMessage 區分;無該消息時默認按中斷處理,避免漏掉崩潰後的提示。設計細節見倉庫 docs/design.md。
適用場景與注意¶
適合經常在 DSH 里長跑 Agent、又容易遇到刷新、崩潰或中途停止的開發者。插件在當前 DSH 進程權限下運行,安裝前建議閱讀源碼與 MIT 許可證。SkillHub 上的插件目錄是社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-session-continue 把「未正常結束的會話」變成輸入框上方可操作的繼續入口,減少在半截任務裏手動拼提示詞的成本。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。