DSH Feishu 插件:飛書機器人橋接 DeepSeek Harness

前言

在本地使用 DeepSeek Harness(DSH)運行智能體時,常見問題不只是“能不能執行”,還包括:從哪裏下發任務、誰能執行、執行中如何看進度、高風險操作如何審批、結果和文件如何回來。

yangzhaofeng496/dsh-feishu-plugin 是一個社區 DSH 插件,把 Feishu/Lark 機器人接到 DeepSeek Harness。用戶在飛書中發送文字任務後,插件會把任務交給指定的 dsh profile 執行,並把進度、審批請求和執行結果回覆到原會話。

定位

  • 插件名:yangzhaofeng496/dsh-feishu-plugin
  • 維護者:yangzhaofeng496
  • 許可證:MIT
  • 一句話定位:Feishu/Lark bot bridge for DeepSeek Harness with approvals, progress updates, context, and file transfer.

它面向需要把本地 DSH 任務接入飛書會話的開發者,而不是替代 DSH 本身。

核心能力

插件覆蓋從消息接收、用戶授權、執行反饋、權限審批到文件回傳的主要鏈路。

  1. 飛書接入
    通過飛書開放平臺長連接接收消息,無需公網回調地址。目前只支持文字消息。

  2. 用戶授權
    使用 open_id 白名單限制可執行任務的用戶。支持用戶在飛書內申請授權,由管理員審批、撤銷和查詢。動態授權會持久化保存,重啓後繼續生效。

  3. 執行反饋
    執行期間會定時更新同一條飛書消息,顯示運行時長和最新輸出。排隊、執行和結果消息中會顯示當前 Provider 與模型。過長回覆會自動拆分。

  4. 上下文管理
    按飛書會話和用戶隔離最近對話上下文,並持久化保存。後續任務可以基於此前上下文繼續處理。

  5. 權限審批
    插件可以處理 Harness 原生的一次性權限審批。任務發起者或管理員在飛書中批准或拒絕後,審批結果會回到執行流程。

  6. 文件傳輸
    支持授權用戶從飛書發送文件給 Harness,也支持 Harness 生成文件後自動回傳到原飛書會話。入站和回傳都受工作區邊界、文件大小和文件數量限制。

  7. 運行穩定性
    使用串行任務隊列,避免多個任務同時操作同一工作區。插件會記錄任務接收、開始、完成、失敗和隊列深度日誌,自動過濾重複消息,並在執行超時、輸出長度限制、插件停止等場景中保持可控。

安裝與啓用

安裝插件

先確認本機已有可用的 DSH 環境和飛書企業自建應用。然後執行官方安裝命令,把插件添加到 web profile:

dsh plugin --profile web add github:yangzhaofeng496/dsh-feishu-plugin#main

安裝完成後,主插件默認處於禁用狀態,且用戶白名單爲空。接下來需要保存飛書憑據、配置管理員和工作區,再手動啓用插件。

配置飛書應用

在飛書開放平臺創建企業自建應用,並完成機器人能力配置。關鍵點是使用長連接接收事件,而不是公網回調。

通常需要做以下事情:

  1. 添加“機器人”能力。
  2. 開通接收消息和發送消息所需的即時通訊權限。
  3. 在事件與回調配置中選擇長連接。
  4. 添加接收消息事件 im.message.receive_v1。
  5. 創建版本併發布應用,使機器人和權限配置生效。

具體權限名稱可能隨飛書開放平臺界面更新而變化。發佈前確認機器人能夠接收用戶消息,並能向原會話發送消息。

保存憑據

不要把 App Secret 寫入 Git 倉庫或 cordis.patch.yml。將它保存到 Harness 憑據文件:

FEISHU_APP_ID: cli_xxxxxxxxxxxxxxxx
FEISHU_APP_SECRET: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

保存後限制該文件只對當前用戶可讀:

chmod 600 ~/.dsh/.credentials.yaml

啓用插件

編輯 ~/.dsh/profiles/web/cordis.patch.yml,加入或覆蓋 feishu 配置:

- id: feishu
  disabled: false
  config:
    appIdEnv: FEISHU_APP_ID
    appSecretEnv: FEISHU_APP_SECRET
    adminOpenIds:
      - ou_admin_xxxxxxxxxxxxxxxxxxxxxxxxxx
    allowedOpenIds:
      - ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    authorizationFile: ~/.dsh/feishu-authorizations.json
    contextFile: ~/.dsh/feishu-contexts.json
    workspace: /absolute/path/to/your/workspace
    attachmentDirectory: .dsh-feishu/inbox
    maxInboundFileBytes: 31457280
    maxOutboundFileBytes: 31457280
    maxOutboundFiles: 5
    timeoutMs: 900000
    maxOutputChars: 50000

這裏有幾個字段需要特別注意:

  • adminOpenIds:可以審批和撤銷授權的管理員 open_id 列表。
  • allowedOpenIds:允許發佈任務的普通飛書用戶 open_id 列表。
  • authorizationFile:動態授權和待審批申請的持久化文件。
  • contextFile:對話上下文持久化文件。
  • workspace:執行任務時使用的工作目錄。

allowedOpenIds 默認爲空,因此沒有普通用戶能夠執行任務。adminOpenIds 中的管理員始終擁有執行權限。未授權用戶可以在飛書內發起授權申請,由管理員審批,無需重啓插件。

典型用法

啓動服務

完成配置後,啓動 DSH Web 服務:

dsh web --port 3081

啓動成功後,可以在飛書中直接向機器人發送文字任務,也可以發送 /help 查看簡要說明。

授權管理

未授權用戶可以發送:

申請授權

或:

/request

機器人會記錄申請,並回復申請人的 open_id。

管理員可以使用以下命令:

/requests
/approve ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/revoke ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/users

各命令作用如下:

  1. 申請授權、/request:創建或更新自己的授權申請。
  2. /requests:查看待審批申請。
  3. /approve <open_id>:批准用戶執行任務。
  4. /revoke <open_id>:撤銷普通用戶權限。
  5. /users:查看管理員和已授權用戶。

動態授權默認保存在 ~/.dsh/feishu-authorizations.json。該文件以 0600 權限創建,不應提交到 Git。配置文件中的管理員不能通過飛書命令撤銷,必須由本機管理員修改 adminOpenIds 並重啓服務。

上下文管理

插件會按飛書會話和用戶隔離上下文,並持久化最近對話內容。這樣“繼續剛纔的任務”“修改上一版”這類表達更容易被後續任務理解。

失敗或超時任務不會寫入上下文。

在飛書中可以使用以下命令管理上下文:

/new
/clear
/history
/context

說明:

  1. /new:新建會話並清除此前上下文。
  2. /clear:清除當前上下文。
  3. /history:查看最近上下文摘要。
  4. /context:查看上下文輪數和字符用量。

上下文默認保存在 ~/.dsh/feishu-contexts.json,以 0600 權限創建。該文件可能包含任務和回答中的敏感內容,請勿提交到 Git 或發送給他人。

一次性權限審批

當工具執行需要更高權限時,Harness 會發起一次性權限審批。插件會在飛書中給出審批編號,任務發起者或管理員可以批准或拒絕:

/allow a1b2c3d4
/deny a1b2c3d4

批准僅對該次工具調用有效,不會永久提升權限。其他普通用戶不能審批不屬於自己的任務。如果審批等待超時,插件會按拒絕處理,避免任務長期掛起。

文件收發

授權用戶可以直接向機器人發送文件、圖片、音頻或視頻。插件會把入站文件保存到工作區內的目錄:

<workspace>/.dsh-feishu/inbox/<message_id>/<safe_filename>

隨後插件創建任務,並把工作區相對路徑交給 Harness。

文件限制:

  1. 入站文件必須位於工作區內部。
  2. 超過 maxInboundFileBytes 或爲空的文件會被拒絕。
  3. 回傳文件只接受工作區內部路徑。
  4. 符號鏈接解析後如果越出工作區,會被拒絕。
  5. 默認單任務最多自動發送 5 個文件,每個文件不超過 30 MB。

用戶也可以手動要求機器人發送已有文件:

/send outputs/report.pdf

運行限制與日誌

插件在運行過程中會做幾類限制,避免飛書消息和執行環境失控。

  1. 串行任務隊列
    避免多個任務同時操作同一工作區。

  2. 重複消息過濾
    自動過濾重複消息,減少重複觸發。

  3. 執行超時
    單個任務超過 timeoutMs 後會被終止。

  4. 輸出長度限制
    捕獲輸出受 maxOutputChars 限制。

  5. 長消息拆分
    過長的飛書回覆會自動拆分。

  6. 停止時清理子進程
    插件停止時,會終止仍在運行的子進程。

運行日誌會顯示任務接收、開始、完成、失敗和隊列深度等信息。日誌不會輸出 App Secret,但可能包含用戶 open_id、飛書消息 ID 和任務執行錯誤。共享日誌前請先脫敏。

適用場景與注意

適合這些場景:

  1. 想在飛書中直接觸發本機 DSH 任務。
  2. 需要給飛書用戶做授權和審批。
  3. 需要在執行過程中看到進度和最新輸出。
  4. 需要保留跨任務上下文。
  5. 需要在飛書和 Harness 工作區之間來回傳文件。

使用前注意:

  1. 插件會在本機 dsh 進程環境中執行任務。安裝前應先檢查源碼和 MIT 許可證,並確認所配置的工作區、profile 和憑據權限。
  2. 不要把 FEISHU_APP_SECRET 寫入 Git 倉庫或 cordis.patch.yml。
  3. ~/.dsh/.credentials.yaml、~/.dsh/feishu-authorizations.json 和 ~/.dsh/feishu-contexts.json 都可能包含敏感信息,不要提交到 Git,也不要隨意發送給他人。
  4. 主插件默認禁用,且 allowedOpenIds 默認爲空。完成憑據、管理員和工作區配置後,再手動啓用。
  5. 目前只支持文字消息。
  6. DSH 社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。

鏈接

GitHub:

https://github.com/yangzhaofeng496/dsh-feishu-plugin

目錄頁:

https://www.skillhub.cn/plugins/yangzhaofeng496/dsh-feishu-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜