DSH 采用「一切皆插件」的架构,插件化是扩展其能力边界的主要方式。在实际部署中,让智能体与特定平台进行交互是一个常见需求。dsh-feishu 是一个为 DeepSeek Harness (DSH) 设计的飞书(Lark)长连接通道插件,它将 DSH 智能体桥接为飞书机器人,允许用户通过聊天界面派发任务、接收结果以及进行权限审批。
由 0x0101010 维护,该插件的核心优势在于零 npm 依赖,直接基于 Node.js >= 22 的原生 WebSocket 实现,并手写了 protobuf 帧编解码器,与飞书官方 SDK 兼容。
核心功能¶
- WebSocket 长连接:使用飞书官方的 WebSocket 回调接口 (
callback/ws/endpoint),无需公网 IP、端口转发或自建回调服务器。 - 会话隔离:每个聊天窗口对应一个独立的智能体上下文。空闲会话会在默认 30 分钟后自动回收。
- 交互式审批卡片:DSH 的审批请求会渲染为飞书卡片按钮(允许/拒绝),点击或回复
y/n即可操作,卡片会原地更新。 - 中途转向:任务运行期间发送的普通消息会被注入到当前回合的下一步边界,无需打断任务;使用
/stop进行硬中断。 - 命令桥接:飞书中的所有 DSH 内置命令(如
/permission,/plan,/compact等)均可直接使用。 - 可靠传输:内置自动重连(断开后 5 秒重试)、心跳保活、事件 ACK(防止重发)以及基于序列号的断线去重。
安装与启用¶
安装命令如下:
npx @deepseek-ai/dsh plugin --profile feishu add /path/to/dsh-feishu
插件会将配置写入 DSH 的配置文件中,但凭证不会存储在配置文件里,必须通过环境变量提供。
在对应 profile 的 .env 文件(或全局 ~/.dsh/.env)中配置以下内容:
FEISHU_APP_ID=cli_xxxxxxxx
FEISHU_APP_SECRET=xxxxxxxx
# 可选:指定智能体的工作目录
DSH_FEISHU_CWD=/your/workspace
验证配置并启动:
npx @deepseek-ai/dsh --profile feishu --dump-config # 验证配置是否正确
npx @deepseek-ai/dsh --profile feishu # 启动
典型用法¶
基础操作命令¶
在飞书聊天中,可以使用以下原生命令进行管理:
/new:销毁当前会话,清空上下文,创建一个新的智能体。/mode:列出所有智能体预设(minimal/standard/code/cordis),并显示当前选中项。/mode <preset>:切换当前会话的智能体预设(仅对空白会话立即生效,有历史记录的会话需配合/new使用)。/status:查看当前模型、模式、会话状态、空闲回收倒计时等。/stop:硬中断正在运行的回合,取消未完成的任务并清空输入队列。/help:显示内置帮助文本。
权限与计划¶
权限预设通过 /permission 切换:
* read-only:文件只读,无需审批。
* workspace-write:工作区可写,越界操作需审批(默认)。
* danger-full-access:完全访问,无需审批。
使用 /plan 可以开启计划模式:智能体先制定计划,执行前等待审批。
普通消息交互¶
- 任务运行中:此时发送普通消息不会打断任务,消息会被注入到当前回合的下一步,系统会回复
📌确认收到。 - 任务空闲时:发送的消息会像普通对话一样开始新的一轮。
配置与安全¶
在 cordis.patch.yml 中可以调整以下配置项:
| 配置项 | 默认值 | 说明 |
|---|---|---|
appId |
必填 | 飞书 App ID |
appSecret |
必填 | 飞书 App Secret |
cwd |
process.cwd() |
智能体工作目录 |
allowUsers |
[] |
开放用户 ID 白名单,为空则无限制 |
allowChats |
[] |
开放群聊 ID 白名单,为空则无限制 |
sessionTimeoutMs |
1800000 | 会话空闲回收时间(毫秒) |
defaultMode |
standard |
默认智能体模式 |
安全注意事项:
当 allowUsers 或 allowChats 为空时,任何能与机器人对话的人都可以驱动你的智能体(即在本地执行任务)。在生产环境中部署前,务必配置好白名单。凭证仅通过环境变量读取,不会写入配置文件。
生态与维护¶
该插件遵循 MIT 许可证。DSH 生态强调插件化与社区贡献,插件目录与 DeepSeek 或幻方官方无直接从属关系。