前言¶
DeepSeek Harness(dsh)的核心理念是「一切皆插件」:模型、工具、會話、沙箱、循環和界面都可以在配置層替換,不必改框架源碼。很多人已經在本機用 dsh web 跑智能體,真正卡手的往往是入口:人在手機上,任務卻還在終端裏;同事在飛書羣裏丟一張截圖或一段需求,還得複製回網頁。
如果按飛書開放平臺的常規做法自己接機器人,通常要建應用、勾事件訂閱、準備公網回調。社區裏已經有多款飛書/Lark 橋,dsh-lark-link 這條路線把掃碼建應用、卡片化切模式、出站發件箱和入站請求補發寫進了同一套插件。
本文按社區目錄詳情頁、GitHub 倉庫 README / package.json / CHANGELOG(當前 npm 版本 0.3.3)交叉覈對後整理:它是什麼、裝哪條命令、飛書裏怎麼用,以及默認 Full access 意味着什麼。
這是什麼¶
dsh-lark-link 是一款會話與消息類社區插件,GitHub 倉庫爲 amlyczz/dsh-lark-link,維護者 amlyczz(README 署名「小斯syzs」),許可證 MIT,主要語言 TypeScript。目錄頁收錄日期是 2026-08-06;倉庫創建於 2026-08-13,本文覈對當日 GitHub 顯示 17 星。npm 上的包名同樣是 dsh-lark-link,當前版本 0.3.3。
它解決的問題很具體:把已經在跑的 DSH 智能體接到飛書/Lark。私聊或羣裏發一條消息,對應的是一次完整的 Harness 回合(bash、文件、子代理、工作流等工具都在),而不是再包一層只能問答的聊天機器人。每個飛書會話對應獨立 Agent;橋會話本身是原生 DSH session,可以繼續在 Web GUI 裏看聊天、流式輸出和工具卡。
README 寫明:本項目爲社區插件,與 DeepSeek、飛書或 Lark 無隸屬關係。社區目錄 deepseek-harness-plugin.com 是獨立站點,不是 DeepSeek / 幻方的官方應用商店。
核心功能¶
掃碼建應用,不必手搓開放平臺¶
DSH 側執行 /lark setup 後,面板會顯示二維碼,用來創建飛書應用,並自動訂閱消息事件、羣聊全量和表情權限。README 把這條路徑概括爲約 30 秒上線,不要求自己配回調 URL,也不要求準備公網服務器。已經有現成應用時,也可以走 DSH_LARK_APP_ID / DSH_LARK_APP_SECRET 手動通道。
憑據寫入 DSH 的 credentials 服務,不進配置文件。/lark start、/lark stop、/lark restart、/lark status 負責橋接生命週期;/lark uninstall-clean 用來清除憑據和狀態目錄。
出站發件箱 + 入站補發¶
可靠性是這份插件寫得最細的部分,分兩條線:
- 出站 Outbox:持久 JSONL 發件箱,at-least-once、冪等鍵、分航道並行;失敗的信封會離隊,不堵住後續投遞。進程被殺或 dsh 重啓後自動續投。0.3.0 起,橋命令(
/status、/help、/mode等)的回覆也走 Outbox,不再裸發。 - 入站 WAL:用戶消息已經被 Agent 接受、但處理到一半時如果插件熱更或 dsh 重啓,重啓後會按預寫日誌重新觸發這條請求。
/status和 Web 面板會顯示待補發條數。CHANGELOG 寫明邊界:只記錄純文本請求;指令、圖片、文件不納入補發。默認最多重放 2 次、時間窗 30 分鐘,避免空轉。
連接層還有 probe 驅動的受控重連,以及 QuotaGovernor 配額熔斷。0.3.0 之後,配額窗口過期會自動解除熔斷並重連,不必再手工 /lark restart。環境裏的 HTTP 代理會被主動避開,避免飛書 SDK 走錯協議。
卡片化命令和多模式 Agent¶
飛書裏 /mode、/permission、/model 都是單選按鈕卡片,點一下即切換,模型按供應商分組。當前 README 列出的 shipped preset 是 standard / code / minimal / cordis,也可以用 GUI 裏自建的 preset;默認 agentPreset 爲 code(一次執行多步工具調用)。
權限分三檔:只讀、工作區寫、Full access,默認 Full access(permissionMode=danger-full-access),沙箱全訪問且審批爲 never。羣聊默認 groupPolicy=open,免 @ 即可觸發。
命令走三級分流:橋特有命令由橋處理;DSH 已註冊命令(如 /goal、/compact)原生執行;其餘 /xxx 和普通消息原樣注入 Agent,README 強調沒有攔截、沒有門禁。Skill 不需要 /skill:name 這類前綴,直接描述任務即可。
模型若調用 ask_user_question,會轉成飛書意圖確認卡片(選項按鈕、下拉多選、自定義輸入),答完後 Agent 繼續。收到消息會打隨機「已收到」表情,完成後打 DONE;表情集合按飛書實測有效值篩選,避免無效 emoji 返回 400。
媒體、會話和 Web GUI¶
入站:飛書圖片進入 attachment 存儲,交給視覺模型;文件做有界文本提取後寫入提示詞。出站:模型可通過 lark_send_local_file 回傳本地圖片或文件,帶工作區白名單、大小校驗,以及按飛書 file_type 規則的格式降級。
回覆若檢測爲 Markdown(標題、列表、代碼塊、表格等),會改成 CardKit 卡片發送;純文本仍走文本消息。流式輸出默認關閉,可用 /lark-config streaming.enabled=true 熱開 CardKit schema 2.0 流式卡片。
會話方面:/new 在當前工作區新起會話(不進 Agent);/workspace <路徑> 切換工作區,支持 ~ 展開;會話 id 在重啓後持久化。0.3.1 起,工作區 / 模型 / 模式覆蓋按會話鍵隔離,避免一個聊天裏的切換跟着重建 Agent 漏到別的會話。
橋 Agent 就是原生 DSH session,聊天、流式、工具卡和設置仍由 Web GUI 呈現;會話會歸入對應工作區,面板上能看到 Outbox 和補發計數。
/doctor 診斷包¶
飛書發送 /doctor,會收到一份 ZIP:當前會話完整 DSH session log、脫敏配置、ISSUE.md 模板。README 的定位是把這份包交給任意 AI 或發到維護者飛書羣,用來定位問題,而不是隻看一段報錯文本。
安裝與啓用¶
前置條件來自倉庫 README 和 package.json:
- Node.js ≥ 24(
engines.node寫的是>=24.0.0) - 已安裝 DeepSeek Harness,例如
npm i -g @deepseek-ai/dsh
社區目錄頁給出的安裝命令原文是:
dsh plugin add github:amlyczz/dsh-lark-link
目錄頁同時說明:如需可復現安裝,可固定 commit 哈希:
dsh plugin add github:amlyczz/dsh-lark-link#commit
把 commit 換成實際哈希即可。插件以官方 bundle 格式分發(package.json 的 dsh.bundle + cordis.patch.yml),安裝後併入當前 profile 的 dsh.profile.bundles 層。
倉庫 README 當前更推薦從 npm 裝預構建產物,並指定 web profile(讓飛書和 GUI 共用同一套配置):
dsh plugin --profile web add dsh-lark-link@latest --ignore-scripts
升級:
dsh plugin --profile web update dsh-lark-link --latest --ignore-scripts
--ignore-scripts 的原因寫在 README 裏:飛書 SDK 的傳遞依賴 protobufjs 帶一個可忽略的 postinstall,pnpm 11 的安全策略可能攔截並返回非零退出碼;跳過腳本後 protobufjs 仍可用。若本機 pnpm 已全局放行,可以不加。從 GitHub 源碼安裝需要 prepare 構建和 allowBuilds 許可;離線環境可以先 npm pack,再 dsh plugin --profile web add ./dsh-lark-link-<version>.tgz --ignore-scripts。
兩條安裝路徑指向同一倉庫。目錄頁命令以頁面原文爲準;日常使用時,README 的 npm + --profile web 寫法少一次源碼構建。安裝前應閱讀源碼和 MIT 許可證。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。
裝好後啓動 Web GUI:
dsh web
在 GUI 輸入框或終端執行:
/lark setup
/lark start
然後在飛書搜索剛創建的機器人,發一條任意消息。收到表情回執和完整回覆,即端到端連通。羣聊默認免 @。
典型用法¶
下面的命令和配置都來自倉庫 README,可以按原文復現。
1. 飛書側切模式、權限和模型¶
在與機器人的會話裏發送:
/mode
/permission
/model
會彈出單選卡片。/mode 在 standard、code、minimal、cordis 以及 GUI 自建 preset 之間切換;/permission 在只讀、工作區寫、Full access 之間切換;/model 按供應商列出可用模型。點選後即對當前會話生效。
2. 熱改配置¶
/lark-config groupPolicy=mention
/lark-config agentPreset=standard
/lark-config streaming.enabled=true
/lark-config 立即生效並持久化。常用鍵如下(默認值以 README 爲準):
| 配置鍵 | 默認 | 說明 |
|---|---|---|
groupPolicy |
open |
羣聊觸發:open / mention / keywords / reply |
groupKeywords |
["lark","小斯"] |
keywords 模式下的觸發詞 |
agentPreset |
code |
Agent preset,或 GUI 自建 id |
permissionMode |
danger-full-access |
只讀 / 工作區寫 / Full access |
streaming.enabled |
false |
CardKit 流式卡片 |
reactions.enabled |
true |
表情回執 |
allowlist |
[] |
open_id 白名單;空表示所有人可對話 |
denyList |
[] |
命令前綴拒絕兜底 |
workspaceRoot |
空 | 橋會話工作區根目錄;空則用 process.cwd() |
3. 會話、工作區和診斷¶
/new
/workspace ~/projects/demo
/status
/sessions
/help
/doctor
/stop
/new 新開會話;/workspace 切換工作區;/status 看連接、Outbox、補發和會話健康;/doctor 回傳 ZIP 診斷包;/stop 停當前任務。DSH 原生命令例如 /goal、/compact 會在飛書裏執行並把結果發回來。
適用場景與注意事項¶
比較適合這些情況:
- 本機已經在跑 DeepSeek Harness,希望用飛書私聊或羣聊當移動入口
- 需要卡片切模式 / 模型,而不是記一串斜槓命令
- 關心進程崩潰、插件熱更之後,文本消息和回覆能不能補回來
- 希望橋會話繼續出現在
dsh web的工作區裏,而不是另起一套聊天記錄
使用前要先看清權限邊界,下面幾條都來自目錄頁或倉庫文檔,不是額外發揮:
- 插件以當前 dsh 進程權限運行。 目錄頁寫明安裝時可能執行代碼。安裝前檢查 GitHub 源碼和 MIT 許可證;生產或可復現環境應固定 commit 哈希。
- 默認 Full access。
permissionMode默認danger-full-access,沙箱全訪問、審批 never。這等於飛書裏的一句話可以驅動本機 bash 和寫文件。共享機器人或接到羣裏之前,應先把權限降到只讀或工作區寫,並用allowlist限制 open_id。 - 羣聊默認免 @。
groupPolicy=open且allowlist爲空時,羣裏任何人說話都會進 Agent。更穩妥的是改成mention或keywords,並填白名單。 - 入站補發只覆蓋純文本。 圖片、文件、指令類消息不進 WAL;不要把「零丟失」理解成所有類型都保證重放。
- 運行時要求 Node.js ≥ 24。 版本不夠會裝不上或跑不起來。
- 這是社區插件。 與 DeepSeek、飛書、Lark 都沒有官方從屬關係;社區目錄也不是官方商店。倉庫 README 提供了維護者飛書羣,用來反饋問題,不是官方支持渠道。
架構上,橋是 Cordis 插件,分層爲 host → inbound → application → outbound → sessions。README 寫明倉庫帶 162 項單元和集成測試,CI 在 push/PR 上跑類型檢查、測試和構建。這些是倉庫自稱的測試規模,不代表你這臺機器上的迴歸結果。
小結¶
dsh-lark-link 把 DeepSeek Harness 接到飛書:掃碼建應用、卡片切模式、媒體進出,再用 Outbox 和入站 WAL 處理崩潰與重啓。它複用原生 DSH session 和 Web GUI,所以飛書側和網頁側看到的是同一套會話,而不是兩套機器人。
默認 Full access、羣聊免 @、白名單爲空,這三條要先改再接到真實羣。裝插件前讀源碼和許可證,需要可復現安裝時固定 commit。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-lark-link/
GitHub:https://github.com/amlyczz/dsh-lark-link
npm:https://www.npmjs.com/package/dsh-lark-link