前言¶
用 DSH 做智能體會話時,常見需求是:不在電腦前也能往某個會話裏丟一句話、看助手回覆。飛書私聊是順手渠道,但若每條消息都經模型中轉,既燒 token,也不一定真能喚醒目標會話。DeepSeek Harness(DSH)支持以插件擴展宿主與客戶端;社區目錄裏維護者 jieye666 提供的 dsh-phone-link(客戶端類插件)做的是另一類事——在桌面 GUI 右側欄「手機」tab 上點按鈕接通後,入站走輪詢與 HTTP,出站走會話事件鏡像,不經過模型決策鏈路。
下面介紹它解決什麼問題、怎麼裝、面板上怎麼用,以及配置與限制。
這是什麼¶
dsh-phone-link 把飛書私聊接到指定的 DSH 會話:右側欄「手機」tab 一個按鈕直連,不看模型臉色。
- 倉庫:github.com/jieye666/dsh-phone-link
- 目錄頁:skillhub.cn/plugins/jieye666/dsh-phone-link
- 當前 package 版本:0.4.1(MIT,Node >= 20)
- 分類:客戶端(向
@deepseek-ai/dsh-client-ui-sidebar-right等注入「手機」側欄)
宿主半邊負責輪詢、/plugins/phone-link/* 路由與消息注入;瀏覽器半邊註冊側欄 tab,可見時約 2 秒輪詢狀態,後臺約 15 秒。傳輸層依賴本機 ~/.dsh/bin/lark-inbox.py(按 --chat-id 記賬),配置寫在 ~/.dsh/phone-link/config.json。
核心功能¶
入站:手機消息進會話¶
輪詢子進程拉取飛書消息後,插件會:
- 用
ctx.agents.get(id)取活着的 agent;沒有則ctx.agents.resume({ resumeSessionId })復活。 - 再
agent.followup(createUserMessage(...))投進收件箱(README 寫明不用agent.inject,因其只排隊不喚醒)。 - 最後
ctx.sessions.flush(...)確認寫入。
注入內容帶 📱 前綴,便於在 GUI 裏區分來源。文本 / 富文本(post) / 圖片 / 文件會處理;表情、卡片、系統消息不注入。
同 chat 的游標在 0.4.0 起按聊天拆開:~/.dsh/phone-link/cursor/<chatId>.json,避免多綁定互相覆蓋導致丟消息。投遞前有 delivered.json、內存 inflight 等去重;失敗不記賬,下次可補投。
出站:助手回覆鏡像回飛書¶
訂閱 ctx.on('session/event', …):assistant/message 累積文本,turn/end 時整輪經 lark-inbox.py send --chat-id … --text 推到綁定聊天。只取 type === 'text' 塊,跳過 reasoning / tool;超長按段落切成 ≤3500 字符分條。dsh-ui 表格在正文留「(表格見下圖)」後另發 PNG(table-png.py)。config.json 裏 mirrorReplies: false 可關閉鏡像;mirrorScheduled 默認 false,避免定時任務輪次重複推送。
客戶端:右側欄「手機」tab¶
面板提供:
- 「接通手機 / 斷開手機」
- 「把飛書私聊綁定到這個會話」/「重設綁定」
- 發探針、立即拉一次
- 收發時間、輪詢間隔、綁定列表、最近注入摘要
- 飛書內可用命令提示:
/status/use/ping/help(本地處理,不進會話、不燒 token)
按鈕側直接 fetch('/plugins/phone-link/...');寫操作路由過瀏覽器柵欄(ctx.connection.requestRejection),本機 GUI 以外 POST 會 403。只讀 GET /plugins/phone-link/status 無柵欄,供探活腳本使用。
安裝與啓用¶
資料中的安裝方式爲本地 file: 路徑(示例爲 Windows 路徑,Linux 用戶需換成自己機器上的源碼目錄):
dsh plugin --profile desktop add file:C:/Users/LENOVO/.dsh/src/dsh-phone-link
修改源碼後需先卸再裝(pnpm 會把 file: 依賴拷進 node_modules,不會隨源碼自動更新):
dsh plugin --profile desktop remove dsh-phone-link
dsh plugin --profile desktop add file:C:/Users/LENOVO/.dsh/src/dsh-phone-link
裝完必須重啓 DSH(宿主註冊路由 + 瀏覽器重拉 client bundle)。
插件以當前 DSH 進程權限運行;安裝前請自行查看倉庫源碼與 MIT 許可證,確認 lark-inbox.py 與飛書憑據佈局符合你的環境。
典型用法¶
面板上接通¶
- 打開目標 DSH 會話。
- 右側欄切到「手機」tab。
- 點「接通手機」,必要時「把飛書私聊綁定到這個會話」。
- 可用「發探針到手機」驗證鏈路;手機上新消息默認最多等
pollSeconds(默認 5 秒)輪詢進會話。
手工只看狀態(curl)¶
寫路由需過柵欄,curl 會 403;唯一適合 curl 的是狀態:
curl -s http://127.0.0.1:<GUI端口>/plugins/phone-link/status
改綁定可改 ~/.dsh/phone-link/config.json 後在面板點「斷開 → 接通」,或直接用面板按鈕。
飛書內命令(不進模型)¶
在飛書私聊裏發送,例如:
/status:連接狀態、投遞目標、最近收發時間/use <會話 id 前 8 位以上>:切換投遞目標/ping、/help
可調配置(節選)¶
~/.dsh/phone-link/config.json 示例結構(README):
{
"enabled": true,
"pollMinutes": 20,
"bindings": [{ "id": "...", "chatId": "...", "chatName": "...", "sessionId": "..." }]
}
常用鍵:pollSeconds(默認 5)、pollMinutes(輪詢進程壽命,默認 20)、mirrorReplies(默認 true)、mirrorScheduled(默認 false)、defaultChat(面板綁定默認飛書 chat)。改 pollSeconds 後點「斷開→接通」即可,無需重啓 DSH。
適用場景與注意¶
適合誰:已在 DSH Desktop 使用固定會話、並用飛書私聊做移動端觸點的開發者;希望入站喚醒真實 agent、出站自動回手機,且接受 REST 輪詢而非秒級推送。
務必注意:
- 輪詢默認 5 秒,不是實時 WebSocket;將來 README 提到可走
lark-cli event consume,當前未用。 - 同一 chat 不要同時掛手工
lark-inbox.py wait,會搶游標。 - 出站已鏡像時,不要再用
lark-cli/lark-inbox.py send手工回話,會重複。 - 舊版依賴的
ctx.get('sessionController')在當前 Host 不存在,0.3.x 入站不通的問題與此有關;請使用 0.4.x 線(README 描述 0.4.0 起模塊拆分與游標修復)。 - 社區目錄(SkillHub)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標與收錄情況以目錄頁爲準。
自檢(來自 README):
cd ~/.dsh/src/dsh-phone-link && node --test
python ~/.dsh/bin/phone-link-selftest.py
python ~/.dsh/bin/phone-link-selftest.py --live
結尾¶
dsh-phone-link 的價值可以概括爲:指定會話 ↔ 飛書私聊 的雙向橋,側欄一鍵接通,入站用 agent followup 喚醒會話,出站按輪次鏡像回覆,並針對飛書富文本做了表格 PNG 與文本降級。需要細節、Issue 或 PR 請走 GitHub;在目錄中查找同名插件請用 SkillHub 插件頁。