前言¶
在本地使用 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 本身。
核心能力¶
插件覆盖从消息接收、用户授权、执行反馈、权限审批到文件回传的主要链路。
-
飞书接入
通过飞书开放平台长连接接收消息,无需公网回调地址。目前只支持文字消息。 -
用户授权
使用open_id白名单限制可执行任务的用户。支持用户在飞书内申请授权,由管理员审批、撤销和查询。动态授权会持久化保存,重启后继续生效。 -
执行反馈
执行期间会定时更新同一条飞书消息,显示运行时长和最新输出。排队、执行和结果消息中会显示当前 Provider 与模型。过长回复会自动拆分。 -
上下文管理
按飞书会话和用户隔离最近对话上下文,并持久化保存。后续任务可以基于此前上下文继续处理。 -
权限审批
插件可以处理 Harness 原生的一次性权限审批。任务发起者或管理员在飞书中批准或拒绝后,审批结果会回到执行流程。 -
文件传输
支持授权用户从飞书发送文件给 Harness,也支持 Harness 生成文件后自动回传到原飞书会话。入站和回传都受工作区边界、文件大小和文件数量限制。 -
运行稳定性
使用串行任务队列,避免多个任务同时操作同一工作区。插件会记录任务接收、开始、完成、失败和队列深度日志,自动过滤重复消息,并在执行超时、输出长度限制、插件停止等场景中保持可控。
安装与启用¶
安装插件¶
先确认本机已有可用的 DSH 环境和飞书企业自建应用。然后执行官方安装命令,把插件添加到 web profile:
dsh plugin --profile web add github:yangzhaofeng496/dsh-feishu-plugin#main
安装完成后,主插件默认处于禁用状态,且用户白名单为空。接下来需要保存飞书凭据、配置管理员和工作区,再手动启用插件。
配置飞书应用¶
在飞书开放平台创建企业自建应用,并完成机器人能力配置。关键点是使用长连接接收事件,而不是公网回调。
通常需要做以下事情:
- 添加“机器人”能力。
- 开通接收消息和发送消息所需的即时通讯权限。
- 在事件与回调配置中选择长连接。
- 添加接收消息事件
im.message.receive_v1。 - 创建版本并发布应用,使机器人和权限配置生效。
具体权限名称可能随飞书开放平台界面更新而变化。发布前确认机器人能够接收用户消息,并能向原会话发送消息。
保存凭据¶
不要把 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
各命令作用如下:
申请授权、/request:创建或更新自己的授权申请。/requests:查看待审批申请。/approve <open_id>:批准用户执行任务。/revoke <open_id>:撤销普通用户权限。/users:查看管理员和已授权用户。
动态授权默认保存在 ~/.dsh/feishu-authorizations.json。该文件以 0600 权限创建,不应提交到 Git。配置文件中的管理员不能通过飞书命令撤销,必须由本机管理员修改 adminOpenIds 并重启服务。
上下文管理¶
插件会按飞书会话和用户隔离上下文,并持久化最近对话内容。这样“继续刚才的任务”“修改上一版”这类表达更容易被后续任务理解。
失败或超时任务不会写入上下文。
在飞书中可以使用以下命令管理上下文:
/new
/clear
/history
/context
说明:
/new:新建会话并清除此前上下文。/clear:清除当前上下文。/history:查看最近上下文摘要。/context:查看上下文轮数和字符用量。
上下文默认保存在 ~/.dsh/feishu-contexts.json,以 0600 权限创建。该文件可能包含任务和回答中的敏感内容,请勿提交到 Git 或发送给他人。
一次性权限审批¶
当工具执行需要更高权限时,Harness 会发起一次性权限审批。插件会在飞书中给出审批编号,任务发起者或管理员可以批准或拒绝:
/allow a1b2c3d4
/deny a1b2c3d4
批准仅对该次工具调用有效,不会永久提升权限。其他普通用户不能审批不属于自己的任务。如果审批等待超时,插件会按拒绝处理,避免任务长期挂起。
文件收发¶
授权用户可以直接向机器人发送文件、图片、音频或视频。插件会把入站文件保存到工作区内的目录:
<workspace>/.dsh-feishu/inbox/<message_id>/<safe_filename>
随后插件创建任务,并把工作区相对路径交给 Harness。
文件限制:
- 入站文件必须位于工作区内部。
- 超过
maxInboundFileBytes或为空的文件会被拒绝。 - 回传文件只接受工作区内部路径。
- 符号链接解析后如果越出工作区,会被拒绝。
- 默认单任务最多自动发送 5 个文件,每个文件不超过 30 MB。
用户也可以手动要求机器人发送已有文件:
/send outputs/report.pdf
运行限制与日志¶
插件在运行过程中会做几类限制,避免飞书消息和执行环境失控。
-
串行任务队列
避免多个任务同时操作同一工作区。 -
重复消息过滤
自动过滤重复消息,减少重复触发。 -
执行超时
单个任务超过timeoutMs后会被终止。 -
输出长度限制
捕获输出受maxOutputChars限制。 -
长消息拆分
过长的飞书回复会自动拆分。 -
停止时清理子进程
插件停止时,会终止仍在运行的子进程。
运行日志会显示任务接收、开始、完成、失败和队列深度等信息。日志不会输出 App Secret,但可能包含用户 open_id、飞书消息 ID 和任务执行错误。共享日志前请先脱敏。
适用场景与注意¶
适合这些场景:
- 想在飞书中直接触发本机 DSH 任务。
- 需要给飞书用户做授权和审批。
- 需要在执行过程中看到进度和最新输出。
- 需要保留跨任务上下文。
- 需要在飞书和 Harness 工作区之间来回传文件。
使用前注意:
- 插件会在本机
dsh进程环境中执行任务。安装前应先检查源码和 MIT 许可证,并确认所配置的工作区、profile 和凭据权限。 - 不要把
FEISHU_APP_SECRET写入 Git 仓库或cordis.patch.yml。 ~/.dsh/.credentials.yaml、~/.dsh/feishu-authorizations.json和~/.dsh/feishu-contexts.json都可能包含敏感信息,不要提交到 Git,也不要随意发送给他人。- 主插件默认禁用,且
allowedOpenIds默认为空。完成凭据、管理员和工作区配置后,再手动启用。 - 目前只支持文字消息。
- DSH 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。
链接¶
GitHub:
https://github.com/yangzhaofeng496/dsh-feishu-plugin
目录页:
https://www.skillhub.cn/plugins/yangzhaofeng496/dsh-feishu-plugin