前言¶
在 DeepSeek Harness(DSH)裏跑長任務時,會話可能因爲 aborted、error、interrupted 等原因停在中途。此時輸入框仍是空的,主按鈕卻仍是「發送」或處於不可用狀態,想接着跑往往要多點幾步或自己組織續跑話術。桌面內置 UI 裏已有 composer 續跑邏輯;社區維護者 yy1588133 把同類能力抽成獨立客戶端插件,裝到 profile 裏即可在 Web 會話界面複用同一套判斷與文案。
下面介紹插件定位、按鈕行爲、安裝方式,以及客戶端與宿主各負責什麼。
這是什麼¶
dsh-continue-button 是 DSH 的客戶端插件:當上一輪在可續跑狀態下結束且輸入框爲空時,Composer 主按鈕顯示爲「繼續任務」(▶),點一下由宿主向會話投遞 continue 消息並續跑;輸入框裏只要有文字,主按鈕始終是「發送」,不受上一輪結束方式影響。
維護者:yy1588133。分類:客戶端。實現上對照 dsh-tauri/deepseek-harness-desktop 裏 packages/builtin-plugin-ui/src/client/register/composer-resume.ts 的判斷規則、圖標與文案,README 寫明未自行發揮。許可證:MIT(見倉庫 README)。
核心功能¶
主按鈕與輸入框的組合規則¶
插件按「輸入框是否爲空(靠佔位符判斷)」和「上一輪 / 當前運行狀態」決定主按鈕樣式與是否可點:
| 輸入框 | 上一輪怎麼結束的 | 主按鈕 |
|---|---|---|
| 空 | aborted / error / interrupted |
▶「繼續任務」,可點,點一下接着跑 |
| 空 | completed / blocked / max-tokens |
↑ 發送(灰的,正常情況) |
| 空 | 正在跑 | ■ 停止 |
| 有內容 | 隨便 | ↑ 發送 |
「有內容就顯示發送」不是單獨特判:空輸入框纔有佔位符,用戶一開始打字佔位符消失,圖標自然換回發送。
續跑時宿主投遞的內容¶
續接時發送的 followup 與原版一致,例如:
Continue the interrupted task from where it stopped. Do not repeat work that is already complete.
消息 source.kind 爲 continue,在聊天記錄裏表現爲上下文行,而不是用戶手動輸入的一句話。
雙端分工¶
-
lib/client.js(瀏覽器)
不重畫 React 輸入框,只改主按鈕的d/aria-label/title/disabled/ svg 尺寸;改前備份 React 原值,條件不滿足時原樣恢復。點擊在 capture 階段攔截,避免空內容被 React 當提交處理。 -
lib/index.js(宿主)
瀏覽器無法直接向會話 Inbox 寫消息,由宿主提供 API(掛在 Connection 的/api鑑權後):
-GET /api/continue-button/state?sessionId=…— 當前會話是否可繼續
-POST /api/continue-button/resume— 執行續跑(followup continue 消息)
安裝與啓用¶
從 GitHub 安裝,無需發佈到 npm。將 <你的 profile> 換成實際 profile 名:
dsh plugin --profile <你的 profile> add yy1588133/dsh-continue-button
也可寫完整地址:
dsh plugin --profile <你的 profile> add github:yy1588133/dsh-continue-button
裝完後重啓 DSH 桌面端。插件行會自動進入 dsh.profile.bundles,不必手工改 bundle 配置。
更新(同版本重複 add 會報 already-installed,可先刪再裝):
dsh plugin --profile <你的 profile> remove dsh-continue-button
dsh plugin --profile <你的 profile> add yy1588133/dsh-continue-button
包爲純 JavaScript,無構建步驟;README 說明 pnpm 10.26 起默認阻止 git 依賴執行 prepare 腳本,此類純 JS 包裝完即可運行。
環境要求(package.json):engines.dsh 爲 >=0.2.1-rc.1。
本地改源碼並希望立刻生效時,可用 file: 指向目錄絕對路徑:
dsh plugin --profile <你的 profile> add file:<這個目錄的絕對路徑>
典型用法¶
- 在 profile 中按上文命令安裝插件並重啓桌面端。
- 打開一條會話,讓任務在中斷類結束狀態下停住,且 Composer 輸入框保持爲空。
- 確認主按鈕爲 ▶「繼續任務」且可點擊,點一次即可續跑。
- 若在輸入框輸入任意內容,主按鈕應恢復爲 ↑ 發送;清空後再次按上表規則顯示。
倉庫內測試可運行:
node --test
README 說明宿主側 13 條、客戶端 11 條用例,覆蓋多種 turn 結束類型、運行中、HTTP 錯誤碼及英文界面等。
適用場景與注意¶
適合:經常在 DSH 桌面/Web 會話裏跑 agent,希望在中斷後少操作、直接續跑,且希望行爲與官方 desktop 內置 composer-resume 一致的用戶。
注意:
- 插件在 當前 DSH 進程權限 下運行;安裝前建議閱讀 GitHub 倉庫 源碼與 MIT 許可證。
- 社區目錄 skillhub.cn 插件頁 與 GitHub 爲獨立生態入口,與 DeepSeek / 幻方無官方從屬關係;以倉庫 README 與
package.json爲準。
結尾¶
dsh-continue-button 把「中斷後可繼續、有字則發送」的 Composer 行爲做成可安裝的客戶端插件,宿主 API 負責鑑權與投遞 continue 消息,瀏覽器腳本只改按鈕與攔截點擊。需要安裝命令與行爲表時,可直接查倉庫 README。
- 目錄頁:https://www.skillhub.cn/plugins/yy1588133/dsh-continue-button
- GitHub:https://github.com/yy1588133/dsh-continue-button