DeepSeek Harness Hub
← 返回列表

ailoushu666/dsh-feishu-bridge

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

dsh-feishu-bridge 横幅

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/28 · 已提供中文文档

DeepSeek Harness 的飞书/Lark 机器人桥接——通过飞书远程控制 DSH 智能体。

综合分
29.3
GitHub 分
29.3
用户评分
★ Stars
2
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ailoushu666/dsh-feishu-bridge
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-tools@deepseek-ai/cordis@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-credentials@deepseek-ai/dsh-workspace
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-feishu-bridge 横幅

dsh-feishu-bridge

CI

把飞书机器人接入 DeepSeek Harness(DSH) 的桥接插件:Feishu / Lark ↔ DeepSeek Harness。

在飞书里跟机器人对话,消息会被转成 DSH Agent 的一次任务;Agent 的最终回答和执行过程提示(例如调用了哪些工具)都会回到飞书里显示 —— 可以直接从飞书控制 DSH Agent。

- 无需公网:WebSocket 长连接接收事件,本地即可运行
- 会话保留上下文:每个飞书聊天 / 话题对应独立的 DSH Session
- 执行过程可见:Agent 调用工具时,过程提示实时回传飞书
- 飞书命令控制:/reset、/workspace、/mode、/model、/effort、/stop 等

快速安装

从 GitHub 安装(推荐)
npx @deepseek-ai/dsh plugin --profile web add git+https://github.com/ailoushu666/dsh-feishu-bridge.git

或从本地目录安装(开发调试)
npx @deepseek-ai/dsh plugin --profile web add ""

完整配置步骤见快速开始(部署进 DSH);飞书后台配置见 docs/feishu-setup.md。

English: README.en.md

特性

- 使用飞书官方 @larksuiteoapi/node-sdk 的 WebSocket 长连接接收事件,无需公网 IP / 域名 / 内网穿透。
- 同一个飞书聊天(或话题)复用同一个 DSH Session,保留上下文;话题各自独立。
- 回复会关联到触发它的那条消息,话题里的回复留在原话题。
- 默认只接收单聊和群聊里 @机器人的消息。
- 执行过程可见:Agent 调用工具时出现 🔧 调用工具 ,工具之间的中间回复也会转发(💬),统一走节流队列发送、不会被飞书频控丢掉;最终回答单独回复到原消息。
- 收到消息先回“正在处理 / 排队中”的即时回执;单轮执行超过时限(turnTimeoutMs)自动停止并提示。
- DSH 自主轮次的结果会主动推回飞书:当 DSH 自己唤醒 Agent(目标轮询 / 定时任务 / 后台任务)产出结果时,飞书能收到,不再局限于“一条消息换一条回复”。
- 选项问答在飞书可交互:当 Agent 需要你确认/选择(ask_user_question)时,问题与选项会以 ❓ 列表发到飞书,你直接回复编号(如 1)、选项文字或自由文本即可命中选项,Agent 接着往下干;单选给了多个编号、编号越界等非法回复会被提示重答,不会污染 Agent。
- 内置一套飞书端控制命令:切项目目录、切工作模式、切模型与推理强度、停止任务、记录反馈、管理长任务目标、进入计划模式等。

支持的命令

在飞书里直接发(群聊里 @机器人,单聊直接发),大小写不敏感。

| 命令 | 参数 | 作用 | 是否打断当前对话 |
| --- | --- | --- | --- |
| /reset | — | 开启新对话(旧对话保留在 DSH 侧边栏)。别名:/new、/clear、重置、新会话、清空会话、重置会话 | 是 |
| /compact | — | 压缩上下文(把较早历史总结成摘要,降低 token 占用)。别名:/压缩、压缩上下文、压缩会话 | 否 |
| /workspace |  | 切换项目目录(目录不存在会提示,需先在本地创建) | 是 |
| /mode(= /permission) |  | 切换工作模式:只读 / 工作区写入 / 完整访问(即权限预设,含沙箱 + 审批策略) | 否(仅本会话生效) |
| /model |  | 切换模型(不支持的模型名会提示) | 否(下一轮生效) |
| /effort |  | 设置推理强度(只允许模型实际支持的档位) | 否(下一轮生效) |
| /stop | — | 立即停止当前正在运行的任务。别名:/cancel、/halt | — |
| /feedback |  | 记录对当前会话的反馈 | 否 |
| /goal | [目标\|clear\|edit \|pause\|resume] | 设置 / 查看 / 管理长任务目标 | 否 |
| /plan | [off\|描述] | 进入 / 退出计划模式(先规划再动手) | 否 |
| /export | — | 导出会话日志(网页端功能,飞书文字通道无法下发文件,会提示到网页端操作) | — |
| /session | [编号\|完整ID] | 不带参数列出未归档会话(含标题),带参数切换到指定会话 | 是(切换会话) |
| /help | — | 列出全部命令 | — |

不带参数时,/workspace、/mode、/model、/effort 会返回当前值或可选项;/mode 的短名 read / write / full 分别对应 read-only / workspace-write / danger-full-access,全名同样可用。

运行要求

- Node.js ^22.19.0 或 >= 24(与 Harness 一致)。
- 已能运行 DeepSeek Harness(dsh web)。
- 一个飞书企业自建应用,且已:启用机器人能力、使用长连接订阅 im.message.receive_v1、开通必要权限。
飞书后台的完整配置步骤见 docs/feishu-setup.md。

快速开始(部署进 DSH)

第 1 步:飞书后台准备

按 docs/feishu-setup.md 完成:创建自建应用 → 启用机器人能力 → 开通权限 → 配置长连接订阅 im.message.receive_v1 → 发布并安装应用。记下 App ID 和 App Secret。

第 2 步:安装插件到 DSH 的 web Profile

npx @deepseek-ai/dsh plugin --profile web add ""

安装后,插件会在 bundle 层创建一个默认禁用的 feishu-bridge 实例。

第 3 步:写入凭据与启用

App ID(非敏感)和 App Secret(敏感)分开存放:

1. 把 App Secret 写进 DSH 的凭据文件 ~/.dsh/.credentials.yaml(Windows:C:\Users\\.dsh\.credentials.yaml),键名与 appSecretEnv 一致(默认 FEISHU_APP_SECRET):

FEISHU_APP_SECRET:

2. 编辑 Profile 补丁 ~/.dsh/profiles/web/cordis.patch.yml(Windows:C:\Users\\.dsh\profiles\web\cordis.patch.yml),用同样的 id 覆盖为启用并填入 App ID:

- id: feishu-bridge
disabled: false
config:
appId: cli_xxxxxxxxxxxxxxxx        # App ID(非敏感)
appSecretEnv: FEISHU_APP_SECRET    # App Secret 的引用名,值在 ~/.dsh/.credentials.yaml
domain: feishu                     # 中国版 feishu;国际版 Lark 用 lark
requireMention: true               # 群聊需要 @机器人
dmMode: open                       # 单聊:open / allowlist / disabled

不要用 insert 再创建一个同名实例,否则会报 duplicate loader entry id: feishu-bridge。

第 4 步:启动

npx @deepseek-ai/dsh web

看到下面这行表示飞书长连接建立成功:

feishu-bridge: WebSocket connected

第 5 步:验证

- 单聊:给机器人发消息,机器人回复最终回答;继续发会保留上下文。
- 群聊:@机器人 你的问题。
- 发 /help 查看完整命令列表。

配置文件与凭据位置

| 内容 | 文件 |
| --- | --- |
| 启用实例 + 插件配置 | ~/.dsh/profiles/web/cordis.patch.yml(Windows:C:\Users\\.dsh\profiles\web\cordis.patch.yml) |
| App Secret(凭据) | ~/.dsh/.credentials.yaml(Windows:C:\Users\\.dsh\.credentials.yaml) |

配置项

| 配置项 | 必填 | 默认值 | 说明 |
| --- | --- | --- | --- |
| appId | 是 | 无 | 飞书应用 App ID(非敏感,直接写明文) |
| appSecretEnv | 是 | FEISHU_APP_SECRET | App Secret 的凭据引用名,真正的值在 ~/.dsh/.credentials.yaml |
| domain | 否 | feishu | feishu(中国版)/ lark(国际版) |
| requireMention | 否 | true | 群聊是否必须 @机器人 |
| dmMode | 否 | open | 单聊策略:open / allowlist / disabled |
| groupAllowlist | 否 | [] | 群 chat_id 白名单,空 = 不限制 |
| dmAllowlist | 否 | [] | dmMode: allowlist 时允许的用户 open_id |
| botOpenId | 否 | 无 | 机器人 open_id,用于精确判断“是否 @机器人”;不填则退化为“mentions 非空” |
| provider / model | 否 | Harness 默认 | 为飞书渠道单独指定模型 |
| reasoningEffort | 否 | 模型默认 | 为飞书渠道指定推理强度(如 off/high/max,取决于模型支持) |
| workspace | 否 | 第一个 Workspace | Agent 的工作目录 |
| agentPreset | 否 | 默认 Preset | Agent 使用的 Preset(决定工具/系统提示组合) |
| streamProgress | 否 | true | 是否把执行过程(工具调用)回传飞书 |
| maxProgressMessages | 否 | 0(不限制) | 单个 turn 内最多回传多少条过程消息(工具调用 + 中间回复合计);0 = 有多少转多少 |
| processingNotice | 否 | true | 收到普通消息时先回一句“正在处理 / 排队中”的即时回执 |
| turnTimeoutMs | 否 | 900000(15 分钟) | 单个 turn 最长执行时间(毫秒),超时自动取消本轮并提示 |
| resetCommand | 否 | /reset | 重置会话的指令 |
| compactCommand | 否 | /compact | 手动压缩上下文的指令 |
| requireAdminForGroupReset | 否 | true | 群聊重置是否要求群主/管理员(需 im:chat:readonly 权限;设为 false 则群成员也能重置) |
| errorMessage | 否 | 内置中文提示 | Agent 出错时返回给用户的统一提示(最长 500 字符) |

完整示例:

- id: feishu-bridge
disabled: false
config:
appId: cli_xxxxxxxxxxxxxxxx
appSecretEnv: FEISHU_APP_SECRET
domain: feishu
requireMention: true
dmMode: open
可选:
provider: deepseek-official
model: deepseek-v4-flash
reasoningEffort: high
workspace: C:\Project\my-repo
agentPreset: coding
streamProgress: true
maxProgressMessages: 10

飞书权限

默认配置(单聊 + 群聊 @机器人 + 回复)需要以下权限,详细步骤见 docs/feishu-setup.md:

| 权限标识 | 用途 | 是否必需 |
| --- | --- | --- |
| im:message.p2p_msg:readonly | 获取单聊消息 | 是 |
| im:message.group_at_msg:readonly | 获取群组中 @机器人的消息 | 是 |
| im:message:send_as_bot | 以应用身份发消息(回复) | 是 |
| im:chat:readonly | 读取群信息(判断群主/管理员) | 仅群聊 /reset 需管理员权限时 |

事件订阅:接收方式选长连接,订阅 im.message.receive_v1。

项目结构

dsh-feishu-bridge/
├── package.json          # 包元数据 + dsh.bundle 声明
├── cordis.patch.yml      # bundle patch:默认禁用的插件实例
├── lib/
│   ├── index.js          # 插件入口(name/inject/Config/apply + 命令分发)
│   ├── config.js         # 配置 Schema + 校验
│   ├── feishu.js         # 飞书长连接 + 发消息/回复
│   └── bridge.js         # 会话映射 + Agent 驱动 + 渠道状态 + 命令执行
├── docs/
│   ├── technical.md      # 技术文档
│   └── feishu-setup.md   # 飞书开发者后台配置指南
└── .env.example          # 说明凭据存放位置(实际部署无需 .env)

安全说明

- App Secret 只放在 DSH 的凭据文件 ~/.dsh/.credentials.yaml 里,插件不记录、不落盘到项目目录。
- 内部错误只回统一的 errorMessage,不把异常堆栈 / 敏感信息发给飞书用户。
- Session ID 用 SHA-256 摘要派生,不包含原始 chat_id / thread_id。
- 一个飞书应用不要同时跑多个长连接消费者(例如同时开着 DSH 桥和 OpenClaw 的飞书通道)——飞书平台会把事件随机分发给其中一个连接,导致消息被“抢走”、表现为时好时坏或完全没反应。

已知限制(MVP)

- 只处理文本消息;图片、富文本(post)、文件、卡片等未支持。
- 回答为一次性发送,非流式输出;执行过程回传“工具调用开始 + 中间回复”,不回传工具结果。
- 过程消息、中间回复、自主轮次结果、❓ 问题都发到群聊根消息——话题(thread)内的会话也不例外(飞书 API 限制,只有 reply 能留在话题内)。
- 没有持久化的 chatId → sessionId 映射:DSH 重启后,已有飞书聊天会重建新 Session(旧 Session 仍在磁盘,但不再被复用)。
- 模型 / 推理强度 / 项目目录的运行时切换是内存态,DSH 重启后回到配置默认。
- /export(导出 ZIP)是 DSH 网页端能力,飞书文字通道无法下发文件。
- 一个飞书应用只应跑一个长连接实例。

常见问题

| 现象 | 排查 |
| --- | --- |
| 启动时鉴权失败 | App ID / Secret 是否同属一个应用;FEISHU_APP_SECRET 是否写进了 ~/.dsh/.credentials.yaml |
| 显示已连接但收不到消息 | 应用是否发布并安装;机器人是否在群里;是否订阅 im.message.receive_v1;接收方式是否长连接;权限是否已通过审批;群聊是否 @机器人 |
| 能收到但不能回复 | 是否开通 im:message:send_as_bot;查看终端里的飞书 API 报错 |
| 长连接反复重连 | 检查能否访问飞书 HTTPS/WebSocket;是否同时跑了多个长连接消费者 |
| 改了配置不生效 | 停止并重启 Harness(实例在 Profile 启动时创建) |
| 群聊 /reset 提示“只有群主或群管理员” | 要么开通 im:chat:readonly 权限,要么配置 requireAdminForGroupReset: false |
| 连续对话偶发“没反应” | 多为 DeepSeek API 速率/并发限制(TPM/RPM);稍等重试,或用 /effort off 降低推理开销 |

卸载

npx @deepseek-ai/dsh plugin --profile web remove dsh-feishu-bridge

然后清掉 ~/.dsh/profiles/web/cordis.patch.yml 里残留的 feishu-bridge 配置。

文档

- 飞书开发者后台配置指南
- 技术文档

许可证
MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群