前言¶
在 DeepSeek Harness(DSH)裏跑 agent,常見情況是任務要跑很久,或者你暫時離開屏幕。界面裏的進度不會主動推到你手機上;自己寫 webhook 或第三方通知,又要單獨維護一套通道。下面介紹的 dsh-qq-mail-notify 是社區 Host 插件:監聽 DSH 會話事件,在 agent 這一輪真正停下後,用 SMTP 把本輪(或攢批後的多輪)摘要發到郵箱;默認面向 QQ 郵箱,也支持按發件地址推斷若干常見服務商。裝一次、每個會話可單獨選節奏,不必改 profile patch。
這是什麼¶
維護者 yashua233,倉庫 yashua233/dsh-qq-mail-notify,在 SkillHub 目錄分類爲聯網工具。插件版本 1.2.17(以 package.json 爲準),許可證 MIT,聲明兼容 DSH 0.2.1-rc.5。
一句話:工作結束(或失敗、或長任務進度節點)時,通過 SMTP 發郵件;正文從 Session 事件推導,不拼「打開會話」鏈接(README 說明 token 與端口隨進程變化,鏈接易失效)。
核心功能¶
何時發信¶
插件依據真實事件,不猜測 agent 狀態:
- 收到
agent/turn-stopping時,只把本輪記入當前批次並重掛定時器,不拖慢回合。 idleDelayMs默認爲0:這一輪一停就發;調大(例如600000)則停手滿 10 分鐘再合併發送,連續對話期間批次累積;另有maxBatchMs(默認 30 分鐘)、maxBatchTurns(默認 20 輪)上限,防止一直不發。- 發信前檢查:會話仍在、有用戶消息、單輪滿足
minTurnMs(默認 0)、不在quietHours(命中則順延到時段結束)。 - 子會話(subagent)默認跳過(
skipSubagents=true)。
郵件主題示例:[DSH] 工作結束 · deep · 5 輪 · 42 分 10 秒(攢批)或 [DSH] 工作結束 · deep(單輪)。
郵件內容¶
單輪時正文爲完整時間線:目錄、會話 id、輪次、開始與結束絕對時間、耗時、結束狀態、工具調用次數與分佈(最多 12 個)、最後工具與步驟、Token 用量、失敗時的分類與原始信息、請求原文(最多 800 字)與回覆摘要(由 previewChars 控制,默認整封 1200 字並按輪均分)。攢批時先彙總再逐輪展開;HTML 版結構相同並帶表格與狀態色塊。README 明確:郵件裏不帶跳轉鏈接,信息全在正文。
長任務進度通報¶
默認 progressEveryMs = 2400000(40 分鐘):單輪超過該時長先發一封進度郵件(主題形如 [DSH] 工作繼續 · deep · 已進行 40 分 20 秒),僅在 agent running 時計時;回合收尾後撤定時器,不與結束郵件衝突。設爲 0 可關閉。正式結束郵件仍會發送完整結論。
失敗通知¶
turn/end 的 reason.kind === 'error' 或 agent/error 視爲失敗;跳過靜默窗口和 minTurnMs,約 3 秒內發送,已攢批次併入同一封。主題點名原因,例如 [DSH] 工作失敗 · deep · 額度或餘額不足。用戶或父會話中斷(aborted)默認不發,需 notifyOnAbort=true。
每個對話單獨設置¶
新對話會彈卡片選擇:即時(默認)、攢批(停手 10 分鐘)、更安靜(停手 30 分鐘且每小時最多一封)、本對話不發。選擇寫入 $DSH_HOME/qq-mail-notify-sessions.json。也可通過工具讀寫當前對話:
qq_mail_notify action=session
qq_mail_notify action=session idleDelayMs=180000
qq_mail_notify action=session enabled=false
可選:審批郵件¶
approvalMailEnabled 默認 false;開啓後工具等待授權時可發郵件,回信「允許」/「拒絕」——須同時安裝 dsh-mail-command。
安裝與啓用¶
任選一種方式安裝,裝完重啓 DeepSeek Harness(關開即可;若裝了 dsh-restart-yashua 可用側欄重啓按鈕)。desktop 爲桌面端常見 profile 名,web 端用 ~/.dsh/profiles/ 下你自己的目錄名。
從 GitHub:
dsh plugin --profile desktop add github:<owner>/dsh-qq-mail-notify
本地目錄(開發或自改):
dsh plugin --profile desktop add link:/path/to/dsh-qq-mail-notify
從 npm(若已發佈):
dsh plugin --profile desktop add dsh-qq-mail-notify
依賴會出現在 ~/.dsh/profiles/<profile>/package.json 的 dependencies;卸載則刪除對應條目並重裝依賴。
首次進新對話可能彈卡片詢問通知方式;若不想被問,可預先在 $DSH_HOME/qq-mail-notify.json 寫好 user、authCode、to。
配置與典型用法¶
QQ 郵箱授權碼在網頁版「設置 → 賬戶 → POP3/IMAP/SMTP…」開啓 SMTP 後獲取,不是登錄密碼。QQ 發件地址且未改主機時默認 smtp.qq.com:465(隱式 TLS)。
在會話裏讓 agent 調用 qq_mail_notify 工具:
action=configure, user=123456@qq.com, authCode=<授權碼>, to=接收郵箱@qq.com
action=test
action=status
action=send
配置寫入 $DSH_HOME/qq-mail-notify.json,優先於 cordis.patch.yml 中的空值;patch 裏非空字段可壓過文件。也支持環境變量 DSH_QQ_MAIL_USER、DSH_QQ_MAIL_AUTH_CODE、DSH_QQ_MAIL_TO 等。優先級:會話覆蓋 > Config(patch)> json 文件 > 環境變量 > 默認。
常用字段(節選,完整表見 README):
| 字段 | 默認 | 說明 |
|---|---|---|
idleDelayMs |
0 |
停手後延遲發信;0 爲即時 |
progressEveryMs |
2400000 |
長任務進度間隔;0 關閉 |
enabled |
true |
總開關 |
quietHours |
空 | 免打擾,如 23:30-07:30 |
界面路徑:設置 → 郵件通知,與 action=configure 寫同一文件,保存後即時生效。另有同源 API:GET /dsh-qq-mail-notify/status、POST /dsh-qq-mail-notify/config、POST /dsh-qq-mail-notify/test。
本地自檢(不聯網、不需真實授權碼):
node scripts/selfcheck.mjs
適用場景與注意¶
適合:長時間 agent 任務、需要離開屏幕但仍要知道「這一輪是否結束、失敗原因、工具與 Token 概況」的 DSH 用戶;已用 QQ 郵箱或 README 列出的可推斷域名時配置成本最低。
注意:
- 插件在當前 DSH 進程權限下運行,SMTP 憑據落在
$DSH_HOME;安裝前請自行查看源碼與 MIT 許可證,確認可接受憑據存儲方式。 - 社區目錄 SkillHub 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬;DSH 生態是「一切皆插件」,本文僅介紹該插件能力,不代官方背書。
- 發信失敗只記
[qq-mail]日誌並重試一次,不會破壞回合;排障可用scripts/probe-smtp.mjs探測 QQ SMTP 握手(不認證、不發信)。
結尾¶
dsh-qq-mail-notify 把「工作真正結束」和「失敗、長任務進度」綁到郵箱通道上,摘要來自會話事件,默認即時發送、可按對話攢批或免打擾。需要雙向回信或審批時,可搭配 dsh-mail-command。
- 目錄頁:https://www.skillhub.cn/plugins/yashua233/dsh-qq-mail-notify
- GitHub:https://github.com/yashua233/dsh-qq-mail-notify