前言¶
在 DeepSeek Harness(DSH)裏把 agent 接到微信,常見需求之一是「過一會兒再提醒一句」或「到點主動發一條消息」。DSH 自帶的 @deepseek-ai/dsh-tool-schedule 在社交模式裏往往用不了:bridge 會用 controlTool 前綴把這類工具擋在工具表外。bridge 自帶的「到點把結果發回微信」(adoptScheduledTurn)又只在 workMode === 'assistant' 時執行。陪聊、人格類會話多在社交模式,這兩條路都走不通。
社區插件 dsh-wechat-wake(維護者 epsilonH-eps,GitHub 倉庫 epsilonH-eps/dsh-wechat-wake,SkillHub 分類爲工作流)用不撞前綴的工具名 remind_* 繞開第一道限制,再用自有的 followup 與投遞鏈路,把「到點說話 → 落進當前微信聊天」跑通。授權仍按聊天在 WeChatAgent 裏勾選,不替代現有權限模型。
這是什麼¶
dsh-wechat-wake 給綁定微信的 agent 提供一組定時工具:到點由插件觸發喚醒,生成或直髮的內容通過本機微信 hook 進入當前會話對應的聊天。目標場景是微信裏的陪聊 / 人格會話(社交模式);助手模式應繼續用原生 schedule_create,插件在助手模式被調用時會提示改用 schedule_create,避免與 bridge 對非請求喚醒的校驗衝突。
插件以 MIT 許可發佈,當前 package 版本爲 0.1.0,要求 Node >= 18。它不讀聊天記錄、不上傳數據;待觸發列表只寫在 $DSH_HOME/wechat-wake.json。
爲什麼需要單獨一套 remind 工具¶
下面是對 README 裏對照表的簡要歸納,說明「現成能力卡在哪」以及本插件補什麼。
| 現成能力 | 限制 |
|---|---|
@deepseek-ai/dsh-tool-schedule |
社交模式下被 bridge 的 controlTool 前綴擋掉 |
bridge 的 adoptScheduledTurn |
僅在 workMode === 'assistant' 時執行 |
本插件註冊 remind_later、remind_list、remind_cancel,命名上不觸發上述前綴規則;到點後走 agent.followup()(wake 模式)或原樣發 note(text 模式),再經 POST http://127.0.0.1:30001/SendTextMsg 投遞。
核心功能¶
三個工具¶
| 工具 | 作用 |
|---|---|
remind_later(note, delay_seconds \| at, mode?) |
定一條一次性喚醒。默認 mode=wake 到點開一輪 agent;mode=text 原樣發 note、不經過模型 |
remind_list() |
查看本會話未觸發項及最近錯過項 |
remind_cancel(id) |
取消一條 |
到點流程(概要)¶
- 複查聊天是否仍在 WeChatAgent 白名單。
wake模式:agent.followup()叫醒會話,抓取本輪正文(去掉RESPOND:前綴)後發微信。- 若無正文、本輪報錯或超時 120 秒,退化爲發送
⏰ note,保證到點有反饋。 text模式:直接投遞 note。
狀態與邊界(摘自文檔):待觸發列表在 $DSH_HOME/wechat-wake.json,進程重啓後重新掛錶;關進程期間 10 分鐘內到點的可補發,更早的記爲 missed;每會話最多 12 條待觸發,單條最長 7 天;兩次發送至少間隔 1.5 秒;聊天移出白名單則記 skipped 不發。只能喚醒仍存活的會話,冷會話退化爲靜態文本。
安裝與啓用¶
通過 dsh profile 安裝¶
README 給出的命令如下(會讀取包內 dsh.bundle.patch):
dsh plugin --profile web add github:heyikai060215-jpg/dsh-wechat-wake
說明:已抓取資料中 package.json 的 repository.url 指向 heyikai060215-jpg/dsh-wechat-wake;SkillHub 條目爲 epsilonH-eps/dsh-wechat-wake。安裝以 README 原文命令爲準;若 fork 與目錄不一致,以你實際添加的 GitHub 源爲準。
手動安裝(與其它 dsh-mod 插件相同)¶
- 將倉庫放到例如
D:/dsh-mod/dsh-wechat-wake。 - 在
profiles/<profile>/package.json的dependencies增加"dsh-wechat-wake": "link:D:/dsh-mod/dsh-wechat-wake",在dsh.profile.bundles增加"dsh-wechat-wake"。 - 將
profiles/<profile>/node_modules/dsh-wechat-wake鏈到該目錄。 - 重啓 DSH,或改動 profile 的
package.json觸發熱加載。 - 在 WeChatAgent 爲目標聊天勾選三個
remind_*工具。
裝完自檢(只讀,不發消息)¶
node tools/selftest.mjs wechat:private:<聊天號>
也可直接傳入會話 id,由腳本反查聊天鍵:
node tools/selftest.mjs social-xxxxxxxx
通道齊全時會打印 reader / hook / chat / target / mode 並返回 0;缺項返回 1。示例輸出字段包括 reader、hook、chat、mode: "social"、target 等。
典型用法¶
授權(必做)¶
插件不自行判斷「哪個聊天能用」。在 WeChatAgent:
- 界面:聊天 → 設置此聊天 → 能力與權限,勾選
remind_later、remind_list、remind_cancel。 - 等價配置:
config/wechatagent.json→wechat.dshAccess.chats["<聊天鍵>"].tools。
社交模式聊天勾選即可;助手模式聊天不要勾選本插件工具。
對話側¶
用戶可在微信裏自然表達「幾分鐘後提醒我……」;agent 在已授權且工具可見時調用 remind_later。README 實測中模型曾選擇 mode: "text",約 3 分鐘後定時器觸發(誤差 0.5 秒內),投遞後微信回執 confirmed: true。mode: "wake" 走 followup + 抓 turn/end 正文,文檔建議首次使用 wake 任務時單獨試一次。
依賴的既有通道¶
插件不改微信本體、不改 WeChatAgent 源碼,依賴:
state/accounts/<賬號>/dsh-sessions.json的conversations(會話與聊天映射)。state/wechat-io-config.json的 reader 地址與令牌。state/hook/native-token.txt與本地 hook 的SendTextMsg。
與 dsh-tts-bridge-wechatagent-bridge 發語音條使用的是同一套 hook 路徑。
適用場景與注意¶
適合:已在 DSH + WeChatAgent 下跑微信私聊、社交模式、人格或陪聊類會話,需要會話內定時提醒或到點主動發言,且願意按聊天逐項授權工具。
不適合或需換方案:助手模式定時應使用原生 schedule_create;工作羣或高敏感聊天應先在無人打擾的私聊裏驗證。
運行與安全:插件在本機 DSH 進程權限下運行,會通過 hook 真實發送微信消息。安裝前應閱讀倉庫源碼與 MIT 許可證,自行評估微信風控、發錯人、發錯時間等風險。直髮 hook 繞過 WeChatAgent 發送隊列,失敗只記日誌不重試;微信升級導致 hook 偏移變化時發送可能失敗。
DeepSeek Harness 生態強調「一切皆插件」;SkillHub(插件目錄頁)爲社區獨立站點,與 DeepSeek / 幻方無官方從屬關係。
卸載¶
- 從
profiles/<profile>/package.json刪除dsh-wechat-wake依賴及 bundles 條目。 - 刪除
profiles/<profile>/node_modules/dsh-wechat-wake鏈接。 - 刪除倉庫目錄,並取消 WeChatAgent 中三個工具勾選。
- 可選:刪除
$DSH_HOME/wechat-wake.json。
dsh-wechat-wake 補的是社交模式下 schedule 與 bridge 定時投遞的缺口:三個 remind_* 工具、WeChatAgent 按聊天授權、到點 followup 或直髮並落進當前聊天。進一步瞭解可查看 SkillHub 目錄頁 與 GitHub 倉庫。