dsh-continue-button:會話中斷後一鍵「繼續」

前言

在 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,在聊天記錄裏表現爲上下文行,而不是用戶手動輸入的一句話。

雙端分工

  1. lib/client.js(瀏覽器)
    不重畫 React 輸入框,只改主按鈕的 d / aria-label / title / disabled / svg 尺寸;改前備份 React 原值,條件不滿足時原樣恢復。點擊在 capture 階段攔截,避免空內容被 React 當提交處理。

  2. 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:<這個目錄的絕對路徑>

典型用法

  1. 在 profile 中按上文命令安裝插件並重啓桌面端。
  2. 打開一條會話,讓任務在中斷類結束狀態下停住,且 Composer 輸入框保持爲空。
  3. 確認主按鈕爲 ▶「繼續任務」且可點擊,點一次即可續跑。
  4. 若在輸入框輸入任意內容,主按鈕應恢復爲 ↑ 發送;清空後再次按上表規則顯示。

倉庫內測試可運行:

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
羽毛球分组比赛记分
小程序二维码

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

小夜