用 dsh-lark-link 把 DeepSeek Harness 接到飞书

前言

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 用来清除凭据和状态目录。

出站发件箱 + 入站补发

可靠性是这份插件写得最细的部分,分两条线:

  1. 出站 Outbox:持久 JSONL 发件箱,at-least-once、幂等键、分航道并行;失败的信封会离队,不堵住后续投递。进程被杀或 dsh 重启后自动续投。0.3.0 起,桥命令(/status/help/mode 等)的回复也走 Outbox,不再裸发。
  2. 入站 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;默认 agentPresetcode(一次执行多步工具调用)。

权限分三档:只读、工作区写、Full access,默认 Full accesspermissionMode=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 ≥ 24engines.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.jsondsh.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 的工作区里,而不是另起一套聊天记录

使用前要先看清权限边界,下面几条都来自目录页或仓库文档,不是额外发挥:

  1. 插件以当前 dsh 进程权限运行。 目录页写明安装时可能执行代码。安装前检查 GitHub 源码和 MIT 许可证;生产或可复现环境应固定 commit 哈希。
  2. 默认 Full access。 permissionMode 默认 danger-full-access,沙箱全访问、审批 never。这等于飞书里的一句话可以驱动本机 bash 和写文件。共享机器人或接到群里之前,应先把权限降到只读或工作区写,并用 allowlist 限制 open_id。
  3. 群聊默认免 @。 groupPolicy=openallowlist 为空时,群里任何人说话都会进 Agent。更稳妥的是改成 mentionkeywords,并填白名单。
  4. 入站补发只覆盖纯文本。 图片、文件、指令类消息不进 WAL;不要把「零丢失」理解成所有类型都保证重放。
  5. 运行时要求 Node.js ≥ 24。 版本不够会装不上或跑不起来。
  6. 这是社区插件。 与 DeepSeek、飞书、Lark 都没有官方从属关系;社区目录也不是官方商店。仓库 README 提供了维护者飞书群,用来反馈问题,不是官方支持渠道。

架构上,桥是 Cordis 插件,分层为 hostinboundapplicationoutboundsessions。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

羽毛球分组比赛记分
小程序二维码

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

小夜