dsh-task-complete-notifier:任務真正結束時,右下角彈一張能續指令的置頂卡片

前言

用 DSH 跑 agent 任務,一個任務跑幾分鐘到幾十分鐘是常事,尤其是多輪 goal loop。這段時間你多半切去幹別的了,任務什麼時候結束,要麼時不時切回窗口看一眼,要麼自己寫輪詢——前者費注意力,後者繞得遠。

dsh-task-complete-notifier 只解決這一件事:任務真正結束時,在屏幕右下角彈一張置頂卡片告訴你,卡片上還能直接敲下一條指令。DSH 的理念是「一切皆插件」,這類客戶端側的提醒需求正好適合做成插件。下面介紹它的功能、安裝和使用。

這是什麼

dsh-task-complete-notifier 是 Kreatur-ECHO 維護的 DeepSeek Harness 任務完成通知插件,當前版本 1.5.2,MIT 許可證。一句話概括:右下角置頂卡片顯示對話標題,可直接輸入下一條指令,可開關的「叮」聲提示,環境缺失自動降級。

實現上它是 host-half only 的插件,零運行時 npm 依賴,唯一的 peerDependency 是 @deepseek-ai/cordis ^4.0.1。它爲 DSH Desktop (Electron) 設計;在純 dsh web(瀏覽器)環境下沒有 Electron 可用,toast 會降級爲 host 日誌。

核心功能

只在任務真正結束時觸發一次

插件監聽 agent/status cordis 事件,在 running → idle 邊沿觸發。DSH 的 agent 狀態機裏,running 表示任務執行中——包括多輪 goal loop 的每一箇中間回合——idle 才表示整個任務結束。所以多輪任務的中間回合不觸發,被新消息打斷的任務也不觸發;子代理(subagents)同樣被跳過,只有主任務結束才通知。

觸發時它不立即彈窗,而是先等 3 秒,確認 agent 不會馬上回到 running,再打開置頂窗口。

置頂卡片

toast 是一個獨立的 Electron alwaysOnTop 置頂窗口,DSH 在後臺或被其他應用遮擋時仍然可見。卡片是不透明的深色樣式:#181818 背景、12px 圓角、#333333 邊框、帶投影,距右下角 30px,出現時有 0.3s 的 fadeInUp 動畫。

關閉有三種方式:點「稍後/Later」、點擊卡片外部、或等它自動關閉。

卡片內直接續指令

卡片底部有一個輸入框(v1.1),彈出時自動聚焦,可以直接輸入下一條指令,按 Enter(或點「發送」)後經 agent.followup() 投遞到對應會話的 agent;如果那個 agent 正忙,指令會排隊成爲它的下一回合。整個過程不需要把 DSH 切到前臺。

從 v1.2 起,卡片上還會顯示會話的任務標題(摺疊自 session/title 事件),你能看出是哪個任務剛完成、輸入的指令會發往哪個會話。

兩個細節:

1、一次只顯示一個 toast。新的完成事件排進隊列(最多 5 個,超出丟棄最舊),你提交或關閉當前卡片後才顯示下一個——正在輸入的指令不會被後彈的卡片覆蓋。

2、如果會話已經消失,提交指令時卡片會顯示內聯錯誤並保持打開,已輸入的內容不會丟。

聲音提示

卡片彈出時播放一個內置的合成「叮」聲(Web Audio)。右上角有 🔊/🔕 按鈕可以開關,選擇持久化在 localStorage(v1.4–v1.5)。

想用自己的音效,配置 soundFile 指定 mp3/wav/ogg/m4a 文件即可;soundVolume(0–1)控制音量。播放帶 0.1s 淡入,且提前 0.1s 開始,不會有延遲感。

安裝與啓用

先說運行要求:Node ≥ 20;DSH 需帶 agent loop,推薦 rc.6+ 以支持 agent.followup。

方式一,tarball 安裝(推薦)。先從 GitHub Releases 下載 dsh-task-complete-notifier-1.5.2.tgz,再用 DSH CLI 安裝:

dsh plugin --profile desktop add file:D:\Downloads\dsh-task-complete-notifier-1.5.2.tgz

然後重啓 DSH Desktop。

方式二,一鍵腳本。解壓 tarball 後,在解壓目錄執行:

powershell -ExecutionPolicy Bypass -File install.ps1

也可以直接指定 tarball 或其他 profile:

powershell -ExecutionPolicy Bypass -File install.ps1 -Profile web -Tarball D:\dsh-task-complete-notifier-1.5.2.tgz

方式三,手動安裝。把 tarball 解壓到任意位置(如 C:\Users\<you>\.dsh\plugins\dsh-task-complete-notifier),在 ~/.dsh/profiles/desktop/package.json 中添加 link 依賴及 bundles 條目:

{
  "dependencies": {
    "dsh-task-complete-notifier": "link:C:/Users/<you>/.dsh/plugins/dsh-task-complete-notifier"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-task-complete-notifier"
      ]
    }
  }
}

然後在 profile 目錄裏運行 pnpm install,重啓 DSH Desktop。

驗證:重啓後日志應出現下面這行,說明插件已掛載,括號裏是各環境能力的檢測結果:

[task-notifier] host half mounted (v9: env webServer=true agents=true electron=true port=61997)

跑完一個任務,右下角應彈出卡片。

一次典型使用

1、在 DSH Desktop 裏發起一個耗時任務,切去幹別的事;

2、任務結束時右下角彈出置頂卡片,播放「叮」聲,卡片上顯示該會話的任務標題;

3、在輸入框裏直接敲下一條指令,按 Enter,指令經 agent.followup() 投遞到那個會話;不想繼續就點「稍後」或等它自動關閉;

4、有多個任務先後完成時,toast 逐個出現,逐個處理即可。

配置與降級

插件的文本、settle delay、cooldown、auto-close、placeholder、labels 都可以通過 profile 裏 cordis.patch.yml 的插件掛載行配置;聲效相關的 soundFile、soundVolume 也在配置項之列。

它的所有依賴都是可選的,缺什麼就關掉對應功能,完成檢測本身始終工作:

  • webServer 缺失:跳過 /task-notifier/* 路由;
  • agents / agent.followup 缺失:隱藏輸入框,檢測仍工作;
  • Electron 缺失(純 dsh web):toast 降級爲 host 日誌;
  • session/title 缺失:僅隱藏標題行。

前面那行掛載日誌就是一次環境自檢,env webServer=true agents=true electron=true port=61997 即各項能力的檢測結果,裝完先看這一行。

適用場景與注意

適合用 DSH Desktop 跑長任務、同時要做別的事的人:任務結束不用盯着,卡片置頂不會被擋住,看完直接在卡片裏續指令。純瀏覽器環境(dsh web)沒有 Electron,toast 只能降級爲日誌,這個插件的目標環境是 DSH Desktop。

注意:插件以當前 dsh 進程權限運行,安裝前建議先讀一遍源碼、確認許可證(本項目爲 MIT)再裝。

小結

dsh-task-complete-notifier 把「任務什麼時候跑完」從一件要自己盯的事,變成一張主動彈出的置頂卡片,並且能在卡片裏直接續指令,環境缺什麼就降級什麼,不挑部署形態。

  • 社區目錄頁:https://www.skillhub.cn/plugins/Kreatur-ECHO/dsh-task-complete-notifier (獨立社區站點,與 DeepSeek / 幻方無官方從屬關係)
  • GitHub:https://github.com/Kreatur-ECHO/dsh-task-complete-notifier
羽毛球分组比赛记分
小程序二维码

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

小夜