dsh-wechat-wake:微信社交模式下的定時喚醒

前言

在 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) 取消一條

到點流程(概要)

  1. 複查聊天是否仍在 WeChatAgent 白名單。
  2. wake 模式:agent.followup() 叫醒會話,抓取本輪正文(去掉 RESPOND: 前綴)後發微信。
  3. 若無正文、本輪報錯或超時 120 秒,退化爲發送 ⏰ note,保證到點有反饋。
  4. 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 插件相同)

  1. 將倉庫放到例如 D:/dsh-mod/dsh-wechat-wake。
  2. 在 profiles/<profile>/package.json 的 dependencies 增加 "dsh-wechat-wake": "link:D:/dsh-mod/dsh-wechat-wake",在 dsh.profile.bundles 增加 "dsh-wechat-wake"。
  3. 將 profiles/<profile>/node_modules/dsh-wechat-wake 鏈到該目錄。
  4. 重啓 DSH,或改動 profile 的 package.json 觸發熱加載。
  5. 在 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 源碼,依賴:

  1. state/accounts/<賬號>/dsh-sessions.json 的 conversations(會話與聊天映射)。
  2. state/wechat-io-config.json 的 reader 地址與令牌。
  3. 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 / 幻方無官方從屬關係。

卸載

  1. 從 profiles/<profile>/package.json 刪除 dsh-wechat-wake 依賴及 bundles 條目。
  2. 刪除 profiles/<profile>/node_modules/dsh-wechat-wake 鏈接。
  3. 刪除倉庫目錄,並取消 WeChatAgent 中三個工具勾選。
  4. 可選:刪除 $DSH_HOME/wechat-wake.json。

dsh-wechat-wake 補的是社交模式下 schedule 與 bridge 定時投遞的缺口:三個 remind_* 工具、WeChatAgent 按聊天授權、到點 followup 或直髮並落進當前聊天。進一步瞭解可查看 SkillHub 目錄頁 與 GitHub 倉庫。

羽毛球分组比赛记分
小程序二维码

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

小夜