前言¶
在 DSH Web 裏寫好消息後,如果希望「到點再發」而不是立刻佔用模型上下文,常見做法是記鬧鐘、切回瀏覽器手動回車,或在外部腳本里調 API。這些做法要麼依賴瀏覽器一直開着,要麼和你在聊天框裏起草的正文脫節。@zlqd123/dsh-timed-send 是社區維護的工作流類插件:在輸入框上方增加「定時發送」,選定時間後只登記待發任務,到點由 Host 進程按與用戶回車相同的路徑真正發出;任務落盤,關瀏覽器或重啓 DSH 後仍可補發到期項。下文按安裝、界面行爲、會話綁定規則與 DeepSeek 峯谷選時說明用法與限制。
這是什麼¶
維護者 zlqd123,包名 @zlqd123/dsh-timed-send,當前資料中版本 0.5.1,許可證 MIT。插件分 Host 半件(存儲、定時引擎、HTTP 路由、真實發送)與瀏覽器半件(按鈕、時間面板、待發列表),面向 DSH Web profile(dsh 引擎要求 >=0.2.0 <0.3.0,Node >=22)。
一句話定位:給 Web 聊天輸入區加定時發送——點確認時不立刻發送,到點由 Host 調用與會話控制器相同的 prompt 路徑投遞;支持在同一對話內排隊多條,也支持在新會話界面爲每條任務各建獨立會話。
核心功能¶
界面與交互¶
「⏱ 定時發送」按鈕在輸入框卡片上方、框外、右對齊,正對原生髮送按鈕上側;角標顯示待發數量。點開面板只選時間(正文仍在下方原始輸入框裏編輯,面板內無正文預覽框)。默認時刻爲「當前時間 + 2 分鐘」,並向上取整到整分,保證實際間隔不短於 2 分鐘。
同一行下方是本會話半寬、右對齊的待發列表:每條氣泡前有時間徽章(峯值橙 / 谷時綠),氣泡內爲正文,可操作「編輯 / 立即發送 / 取消」;失敗項顯示錯誤原因,並提供「編輯 / 重試 / 取消」。面板爲不透明實色底,不會透出下方對話正文。輸入框爲空時確認按鈕禁用。
點確認後的順序:讀取輸入框當前文本 → 按所在位置綁定目標會話 → 寫入定時任務 → 清空輸入框草稿(避免誤發第二遍)。
會話綁定:對話內 vs 新會話界面¶
默認在已有對話內發送:在哪個對話裏點定時發送,任務就綁到當前對話,不新建、不跳轉。只有不在「正常對話」語境下時(例如首屏空態)才走預創建邏輯。
創建新會話界面(首屏空態,或當前會話是定時發送自動創建且仍被 Host 標記爲相應狀態):每條定時任務各建一個獨立新會話並跳轉過去。判斷依據是 Host 側的 autoCreated 與會話 blank 狀態,而非單純 sessionId 有無。
預創建空會話後,插件會發一條極短佔位消息並馬上取消,使會話脫離 blank,避免 DSH「新會話」按鈕複用第一個 blank: true 的空殼。歷史裏可能留下 (定時發送佔位) 消息;若需要乾淨歷史,應在已有對話內排定時任務而不走預創建。
同一對話可排多條任務,按時間先後依次發出。任務綁定的是會話,到點以新的 user 消息追加進該會話。
Host 側持久化與投遞¶
定時器運行在 Host 進程,任務寫入:
~/.dsh/data/scheduled-send/tasks.json
瀏覽器關閉不影響執行;DSH 重啓後會補發停機期間已到期的任務。投遞失敗標記爲 failed 並保留錯誤文本,不自動重試;需在面板上手動「重試」。單次投遞超時 120 秒;引擎定時器最長睡 60 秒後醒來重算,便於糾正系統時鐘或休眠喚醒。已結束任務保留 7 天;active 任務一直保留直至完成或取消。
Host 提供 POST /dsh-timed-send/api,動作包括 health、create、list、cancel、reschedule、sendNow、retry;僅接受本機同源 POST(拒絕跨站與 Origin 不一致等)。瀏覽器端日誌與報錯前綴爲 [scheduled-send]。
DeepSeek 峯谷時段與「最近的谷時」¶
時間框上方有「最近的谷時」一鍵按鈕:
- 當前已在谷時 → 設爲當前時間 + 2 分鐘(整分向上取整,與默認一致)。
- 當前在高峯 → 設爲本段高峯結束時刻(最近谷時段起點,如 12:00 或 18:00)。
時間框下方兩行實時提示:當前時段狀態與倒計時,以及所選發送時刻落在高峯還是谷時。口徑來自 DeepSeek 官方定價頁:北京時間工作日 09:00–12:00、14:00–18:00 爲高峯,其餘與週末全天爲空閒(資料中表述爲谷時、5 折)。插件內置 2026 年法定節假日與調休上班日(來源爲國辦通知鏈接,README 中已列具體日期);2027 年安排未公佈時按普通星期判定,面板說明中註明覆蓋年份。
若面板打開超過 2 分鐘導致默認時刻已過,點確認會自動順延到新的 +2 分鐘並提示「已順延,請再確認一次」;手動改過的時間若已過期則直接報錯,不會自動改。
編輯與限制¶
點待發條目的「編輯」會打開定時面板,正文回到原始輸入框、時間預填原設定;面板按鈕變爲「保存」,可只改時間、只改正文或兩者都改。點「保存」後按新時間執行;「放棄」清空輸入框並退出編輯。
已知限制(來自 README):
- 僅支持純文本;附件、圖片不參與定時;輸入框中的
/xxx按普通文本發出,不會當斜槓命令執行。 - 登記內容以點確認(或保存)那一刻輸入框文本爲準。
- 到點時若會話被刪除或歸檔,投遞失敗並在列表顯示原因。
- 待發列表約每 30 秒輪詢,倒計時不做秒級刷新。
安裝與啓用¶
npm 發佈後可用:
dsh plugin --profile web add @zlqd123/dsh-timed-send
從本地源碼目錄安裝:
cd <插件所在目錄>
dsh plugin --profile web add ./dsh-timed-send
改完依賴或 bundle 後需重啓 dsh web,瀏覽器 Ctrl+Shift+R 硬刷新。
若僅需快速停用 Host 條目,可在 ~/.dsh/profiles/web/cordis.patch.yml 末尾追加:
- id: scheduled-send
disabled: true
保存後重啓 dsh web。徹底移除需從 package.json 的 dsh.profile.bundles 與 dependencies 中刪掉該包並清理 node_modules 鏈接。可選刪除 ~/.dsh/data/scheduled-send 以丟棄全部定時任務;壞 JSON 會被插件改名爲 tasks.json.broken-<時間戳> 後從空表繼續。
插件以當前 dsh 進程權限運行,安裝前建議自行查看 GitHub 倉庫 源碼與 MIT 許可證。
典型用法¶
- 在目標對話裏寫好輸入框正文,點「⏱ 定時發送」,調整時間(或點「最近的谷時」),確認。消息不會立刻發出,待發列表出現一條記錄。
- 需要多個獨立會話各自定時:先進入「新會話」界面(或空態),每條任務各排一次,每條會建會話並跳轉(接受佔位消息代價,或改在已有對話內排多條)。
- 到點前可「編輯」改時間或正文,「立即發送」提前投遞,「取消」丟棄任務;失敗項查看原因後「重試」。
維護者在倉庫中提供純邏輯單測:
node --test test/engine.test.mjs
資料記載爲 22 個用例,覆蓋存儲、定時引擎、請求守衛、谷時段與節假日等。
適用場景與注意¶
適合:希望在 DSH Web 內起草長 prompt、在谷時或固定時刻自動發出、同一對話排隊多條 follow-up、不依賴瀏覽器常開完成定時投遞的場景。
不適合或需注意:依賴斜槓命令、附件、圖片的定時發送;要求預創建會話歷史完全無佔位消息時,應優先在已有對話內排程。
DeepSeek Harness 生態是「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
@zlqd123/dsh-timed-send 把「選好時刻、到點真發」收進 DSH Web 輸入區:任務在 Host 落盤,默認綁當前對話,新會話界面可一條一會話,並內置 DeepSeek 峯谷與 2026 年節假日調休的一鍵選時。進一步瞭解可查閱目錄頁與源碼倉庫:
- 目錄:https://www.skillhub.cn/plugins/zlqd123/dsh-timed-send
- GitHub:https://github.com/zlqd123/dsh-timed-send