DeepSeek Harness Hub
← 返回列表

amlyczz/dsh-lark-link

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

🪶 dsh-lark-link

暂不能直接安装(需源码编译或环境不满足):engines.node 要求 >=24.0.0,不满足 Node 22.19.0。 · 最近上游提交 2026/9/18 · 已提供中文文档

为 DeepSeek Harness 打造的高可靠飞书/Lark 桥接——扫码一键认证、多模式智能体、基于卡片的命令、零丢失发件箱、媒体收发、会话日志诊断、可复用的 DSH Web GUI

综合分
49.9
GitHub 分
49.9
用户评分
★ Stars
39
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add amlyczz/dsh-lark-link
engines.node 要求 >=24.0.0,不满足 Node 22.19.0,改用 GitHub 源安装
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-lark-link @ 0.5.3
Node 引擎要求 >=24.0.0 · 基线 Node 22.19 不满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

engines.node 要求 >=24.0.0,不满足 Node 22.19.0

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 11:38:16

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-commands@deepseek-ai/dsh-credentials@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

🪶 dsh-lark-link

DeepSeek Harness × 飞书/Lark 双向桥接 — 把你的 DSH 智能体装进飞书,扫码 30 秒上线,随时随地对话

中文

DeepSeek Harness × 飞书/Lark 双向桥接插件 —— 把你的 DSH 智能体装进飞书:扫码 30 秒上线、消息零丢失、卡片化交互、每飞书会话独立 Agent。手机上随时给 Agent 派任务、看结果、切模型切模式——不用守着终端。

🌟 为什么选 dsh-lark-link

- 零门槛:扫码即建飞书应用,不用手搓开放平台、不用配回调、不用公网服务器
- 零丢失:出站 Outbox + 入站 WAL 双持久化,进程崩溃 / 插件热更 / dsh 重启,消息和回答都补得回来
- 零学习成本:所有切换类命令都是单选卡片,点一下即生效;DSH 原生命令(/goal /compact …)直接用
- 真 Agent:不是聊天机器人——bash/文件/子代理/工作流全套工具,飞书里跑完整 Harness

✨ 特性

| 能力 | 说明 |
| ---- | ---- |
| 🎯 一键认证 | /lark setup 扫码创建飞书应用(自动订阅消息事件 + 群聊全量 + 表情权限),30 秒上线,无需手搓开放平台;也支持 DSH_LARK_APP_ID/SECRET 手动通道 |
| 🧠 多模式 Agent | 标准 / PTC / 极简 / Cordis preset + 你在 GUI 自建的 preset,飞书发 /mode 出单选卡片即切(默认 PTC:一次执行多步工具调用,更快更省) |
| 🎛 权限分级 | 只读 / 工作区写 / Full access 三种权限,/permission 卡片即切;默认 Full access 全放行 |
| 🎨 卡片化命令 | /mode /permission /model 全部是单选按钮卡片——点一下即切换,不用记命令拼写;模型选择按供应商分组展示 |
| 💬 意图确认转发 | 模型提问(ask_user_question)→ 飞书意图确认卡片(选项按钮 + 下拉多选 + 自定义输入),答完模型继续,飞书里完成完整交互闭环 |
| 😊 表情回执 | 收到消息随机表情"已收到";回复完成 / 命令完成打 DONE ✅(只使用飞书实测有效 emoji) |
| 💪 出站零丢失 | 持久 Outbox(JSONL + at-least-once + 幂等键 + 分航道并行 + 失败离队不阻塞 + 周期清理),kill 重启自动续投;桥命令回复同样走 Outbox |
| 🆕 入站请求补发 | Agent 处理到一半插件/dsh 崩溃/重启,重启后自动重新触发这条用户消息(不再静默丢请求)——Inbound WAL 持久化 + 启动对账 + 次数上限/时间窗防空转;/status 显示待补发条数 |
| 🛡 连接自愈 | probe 驱动受控重连 + QuotaGovernor 配额熔断(窗口过期自动解除、自动重连)+ 断连补偿;环境代理自动规避 |
| 🔀 命令三级分流 | 桥特有命令桥处理;DSH 注册命令原生执行;/goal、未知 /xxx、普通消息原样注入 Agent(无拦截无门禁);skill 无前缀——直接描述任务,模型自动加载 |
| 📎 入站多媒体 | 飞书图片 → 视觉模型看图(attachment 存储);文件 → 有界文本提取进提示词 |
| 📤 出站多媒体 | 模型经 lark_send_local_file 主动回传本地图片/文件(工作区白名单 + 大小校验 + 格式自动降级) |
| 🩺 一键诊断 | /doctor → ZIP 诊断包(含当前会话完整 DSH session log + 脱敏配置 + ISSUE.md),发回飞书,贴给 AI 即可定位 |
| ✍️ Markdown 渲染 | 回复自动检测 markdown → CardKit 卡片渲染(标题/列表/代码块/表格),纯文本走文本消息 |
| 🌊 可选流式输出 | /lark-config streaming.enabled=true 热开 CardKit schema 2.0 流式卡片,逐字打印(默认关,省流量) |
| 🆕 长任务目标驱动 | /goal  直接在飞书启动自主长任务闭环;支持 /goal pause(暂停)、/goal resume(继续)、/goal clear(清除);纯文本自然对话交互,告别冗余看板干扰 |
| 🆕 会话管理与恢复 | /new 在当前工作区新起会话;/resume 极简卡片恢复历史会话(点选/序号/id 前缀,自动提取会话真实标题,彻底解决跨重启 live session 冲突);/workspace  切换工作区;按会话完全独立持久化工作区/模型/模式 |
| 🖥 复用 DSH Web GUI | 桥 Agent = 原生 DSH session,聊天/流式/工具卡/设置全由 GUI 呈现;会话自动归入对应工作区(不再“未分组”);Web 面板实时显示 Outbox/补发计数 |
| 👥 访问控制 | allowlist 限定可对话的 open_id 白名单;groupPolicy 群聊触发策略(open / mention / keywords / reply);denyList 命令前缀拒绝兜底 |
| 🔓 默认 Full access | 沙箱全访问 + 审批 never,零打扰 |

🚀 快速开始

前置:Node.js ≥ 24,已安装 DeepSeek Harness(npm i -g @deepseek-ai/dsh)。

安装(官方 dsh plugin 机制,无侵入)——包以官方 bundle 格式分发(package.json 的 dsh.bundle + cordis.patch.yml),安装后自动并入 profile 的 dsh.profile.bundles 层:

1. 安装插件(npm 官方包,装预构建产物,无需构建许可):
dsh plugin --profile web add dsh-lark-link@latest --ignore-scripts

升级:
dsh plugin --profile web update dsh-lark-link --latest --ignore-scripts
#
或本地 tarball(先在源码目录 npm pack 生成,离线/内网友好):
dsh plugin --profile web add ./dsh-lark-link-.tgz --ignore-scripts
#
或 GitHub 源码(需 prepare 构建 + allowBuilds 许可):
dsh plugin --profile web add github:amlyczz/dsh-lark-link

--ignore-scripts:飞书 SDK 的传递依赖 protobufjs 带一个可忽略的 postinstall,pnpm 11 安全策略会拦截并返回非零退出码;加此参数跳过(protobufjs 不执行 postinstall 完全可用)。若你的 pnpm 已全局放行,可不加。

--profile web:指定安装到哪个 profile(web / tui / headless)。dsh plugin 是 pnpm 的转发命令,用法为 dsh plugin --profile  。想让飞书和 GUI 共用 web profile 就保持 web。

每次发布后:更新到最新版

不要依赖 @latest:它读的是镜像返回的 dist-tags.latest 标签——npmmirror 等镜像的标签缓存可能没刷新(版本元数据已同步、tag 还指着旧版),pnpm 看到「已装版本 == tag」就报 Already up to date,哪怕新版早就发布了。tag 是镜像说了算,版本号是你说了算。

1. 绕过标签,直接看官方源的真实版本列表:
npm view dsh-lark-link versions --registry https://registry.npmjs.org

2. 显式版本号安装(最可靠,不依赖镜像标签):
dsh plugin --profile web add dsh-lark-link@ --ignore-scripts

3. 或强制官方源再走 @latest:
dsh plugin --profile web add dsh-lark-link@latest --ignore-scripts --registry https://registry.npmjs.org

再遇 Already up to date 但怀疑有新版:先 dsh plugin --profile web outdated 看它认为的版本——outdated 都显示旧版,基本就是镜像标签没刷新,用上面的显式版本号绕开。装完重启 dsh web 生效。

2. 启动 DSH Web GUI
dsh web

3. 在 GUI 的输入框(或终端 CLI)执行:
/lark setup       # 扫码创建飞书应用(30 秒,面板显示二维码)
/lark start       # 启动桥接

然后飞书搜索你的机器人,发任意消息——收到表情回执 + 完整回复即端到端连通。群聊免 @,直接说话即可。

⌨️ 命令

DSH 侧(GUI 或终端)

/lark setup            扫码一键建应用(或 DSH_LARK_APP_ID/SECRET 手动通道)
/lark start|stop|restart|status   桥接生命周期与全链路健康
/lark uninstall-clean  清除凭据与状态目录

飞书侧(卡片化单选,无需记忆拼写)

| 类别 | 命令 | 行为 |
| ---- | ---- | ---- |
| 选择类 | /mode /permission /model | 单选按钮卡片,点选即切换(动态感知自建 preset 与提供商) |
| 目标类 | /goal [目标\|pause\|resume\|clear] | 启动长任务自主执行 / 暂停 / 恢复 / 清除当前目标 |
| 状态类 | /status /sessions /help | 全链路健康(含 Outbox/补发计数)/ 会话列表 / 帮助卡片 |
| 会话类 | /new /resume [序号\|id] /stop /workspace  | 新会话 / 极简恢复历史会话 / 停当前任务 / 切工作区 |
| 诊断 | /doctor | ZIP 诊断包(session log + 配置 + ISSUE.md) |
| 热改 | /lark-config key=value | 热改配置(如 groupPolicy=open、agentPreset=standard、streaming.enabled=true) |
| DSH 命令 | /compact 等 | 原生执行,结果回飞书 |
| 多媒体 | 发图片/文件 | 图片→视觉模型;文件→文本提取 |
| 意图确认 | 模型提问 | 自动转飞书意图确认卡片,选项或输入作答 |

命令无拦截、无门禁:一切 / 消息要么桥处理,要么原样交 DSH——绝不静默丢弃。skill 无前缀,直接说任务即可。

⚙️ 常用配置(/lark-config 热改,立即生效并持久化)

| 配置键 | 默认 | 说明 |
| ------ | ---- | ---- |
| groupPolicy | open | 群聊触发策略:open(免 @ 全触发)/ mention / keywords / reply |
| groupKeywords | ["lark","bot"] | keywords 模式下的触发词 |
| agentPreset | ptc | Agent preset(shipped:standard/ptc/minimal/cordis,或 GUI 自建 id;历史别名 code 会自动映射为 ptc) |
| permissionMode | danger-full-access | 权限:read-only / workspace-write / danger-full-access |
| streaming.enabled | false | CardKit 流式卡片(开=逐字打印) |
| reactions.enabled | true | 表情回执 |
| allowlist | [] | open_id 白名单,空 = 所有人可对话 |
| denyList | [] | 命令前缀拒绝兜底 |
| workspaceRoot |  | 桥会话工作区根目录(空 = process.cwd()) |
| attachments.retentionHours | 168 | 入站图片/文件的保留时长(小时,默认 7 天;0 = 永久保留)。默认存系统临时目录,到期自动清扫 |
| attachments.dir |  | 入站媒体根目录覆盖(空 = 系统 tmpdir;重启生效) |

凭据(appId/appSecret)存放在 DSH credentials 服务,不进配置文件;/lark setup 扫码自动写入。

🩺 遇到问题?

1. 飞书发 /doctor,得到 ZIP 诊断包(完整 session log + 脱敏配置 + ISSUE.md 模板)
2. 把诊断包贴给任意 AI(或在 GitHub Issue 中发出来),即可快速定位
3. /status 可随时看连接 / Outbox / 补发 / 会话全链路健康

🛠 开发者

npm run dev:link   # 链接本地 DSH checkout(类型检查/测试需要)
npm run check      # tsc --noEmit
npm test           # 264 项单元 + 集成测试
npm run build      # tsdown → dist/(宿主 ESM + client bundle)
npm pack           # 产出可分发 tarball

架构:桥 = Cordis 插件(dsh.bundle 格式),分层清晰:

host(SDK 适配/认证)→ inbound(传输/群触发/断连补偿/Inbound WAL)→ application(命令路由/消息编排/诊断)→ outbound(Outbox/事件转发/卡片)→ sessions(每会话 Agent 管理)。

CI(GitHub Actions):push/PR 自动跑类型检查 + 264 项测试 + 构建;发布 npm 走 tag release 的 Publish workflow。

📄 许可

MIT — 自由使用、修改、分发。

本项目为社区插件,与 DeepSeek、飞书或 Lark 无隶属关系。

English

DeepSeek Harness × 飞书/Lark 桥 — 把你的 DSH agent 放进飞书。扫码 30 秒上线,随时随地聊天。

🌟 为什么选择 dsh-lark-link

- 零配置摩擦:扫码创建应用——无需折腾开放平台,无需回调 URL,无需公网服务器
- 零消息丢失:持久化 Outbox(出站)+ Inbound WAL——崩溃、热重载、dsh 重启均可恢复
- 零学习曲线:每个开关都是单选卡片;原生 DSH 命令(/goal /compact …)直接可用
- 真正的 agent:完整工具链(bash / 文件 / 子 agent / 工作流)由飞书驱动

✨ 功能

| 能力 | 说明 |
| ---- | ---- |
| 🎯 一键认证 | /lark setup 扫码创建飞书应用(自动订阅消息事件 + 群聊全部 + 表情回执)。30 秒上手;也支持手动 DSH_LARK_APP_ID/SECRET 渠道 |
| 🧠 多模式 Agent | 标准 / 代码 / 极简 / Cordis 预设 + 你的自定义 GUI 预设;/mode 显示单选卡片——点击即可切换(默认代码:一次性多步工具调用) |
| 🎛 权限层级 | 只读 / 工作区写入 / 完全访问;/permission 卡片即时切换(默认完全访问) |
| 🎨 卡片式命令 | /mode /permission /model 均为单选按钮卡片——点击即可,无需输入;模型按提供商分组 |
| 💬 意图确认 | 模型提问(ask_user_question)以飞书意图确认卡片形式呈现(选项按钮 + 多选下拉框 + 自定义文本);回答后 agent 继续执行 |
| 😊 表情回执 | 收到消息时随机添加“收到”表情;完成时添加 DONE ✅(仅使用飞书验证过的表情) |
| 💪 出站零丢失 | 持久化 Outbox(JSONL + 至少一次 + 幂等 + 按通道并行 + 失败隔离 + 定期清理),在 kill/重启后恢复;bridge 命令回复也走 Outbox |
| 🆕 入站请求重放 | 如果 agent 在回合中途死亡 / 插件重载 / dsh 重启,被中断的用户消息会在启动时自动重新触发(不再静默丢弃请求)——持久化 Inbound WAL + 启动对账 + 尝试/时间上限;/status 显示待重放数量 |
| 🛡 自愈连接 | 探测驱动的受控重连 + QuotaGovernor 熔断器(配额窗口结束后自动解除阻塞并重连)+ 遗漏消息补偿;自动规避代理环境变量 |
| 🔀 三层命令路由 | Bridge 命令 → bridge;DSH 命令 → 原生;/goal、未知 /xxx、纯文本 → 原样注入(无门控)。技能无需前缀——直接描述任务即可 |
| 📎 入站媒体 | 飞书图片 → 视觉模型(附件支持);文件 → 有界文本提取 |
| 📤 出站媒体 | 模型通过 lark_send_local_file 发送本地文件/图片(工作区白名单 + 大小/格式检查) |
| 🩺 一键诊断 | /doctor → ZIP 包(完整 DSH 会话日志 + 脱敏配置 + ISSUE.md)返回聊天 |
| ✍️ Markdown 渲染 | 回复自动渲染为 CardKit 卡片(标题/列表/代码/表格);纯文本保持纯文本 |
| 🌊 可选流式输出 | /lark-config streaming.enabled=true 热启用 CardKit schema 2.0 流式卡片(默认关闭,节省流量) |
| 🆕 目标驱动长任务 | /goal  直接从飞书启动自主长时任务循环;/goal pause / resume / clear 通过简洁自然的对话管理执行 |
| 🆕 会话管理 | /new 打开新会话;/resume 干净恢复历史会话(按钮/索引/id 前缀,解析真实标题,修复跨重启会话冲突);/workspace  切换;按会话隔离配置 |
| 🖥 复用 DSH Web GUI | 桥接 agent 是原生 DSH 会话;对话会自动归组到其工作区下;Web 面板显示实时的 Outbox/重放计数器 |
| 👥 访问控制 | allowlist 将入站限制为特定的 open_id;groupPolicy(open / mention / keywords / reply);denyList 命令前缀拒绝 |
| 🔓 默认完全访问 | 沙箱完全访问 + 从不询问审批 |

🚀 快速开始

前置条件:Node.js ≥ 24 且已安装 DeepSeek Harness(npm i -g @deepseek-ai/dsh)。

dsh plugin --profile web add dsh-lark-link@latest --ignore-scripts
dsh web
/lark setup          # 扫描二维码(30 秒)
/lark start

打开飞书,找到你的机器人,发送任意内容——表情回执 + 完整回复 = 端到端打通。群聊无需 @ 提及。

安装方式变体:本地 tarball(npm pack,然后 dsh plugin --profile web add ./dsh-lark-link-.tgz --ignore-scripts)或 GitHub 源码(github:amlyczz/dsh-lark-link,需要构建审批)。使用 dsh plugin --profile web update dsh-lark-link --latest --ignore-scripts 升级。

每次发布后更新

不要依赖 @latest:它解析的是镜像的 dist-tags.latest 标签——npmmirror 风格的镜像可能提供过期的标签(版本元数据已同步,但标签仍指向较旧的发布版本),因此即使存在更新版本,pnpm 也会显示 Already up to date。标签是镜像说的;版本号是你说的。

1. 查看真实版本列表,绕过标签:
npm view dsh-lark-link versions --registry https://registry.npmjs.org

2. 按显式版本安装(最可靠):
dsh plugin --profile web add dsh-lark-link@ --ignore-scripts

3. 或者用 @latest 强制使用官方 registry:
dsh plugin --profile web add dsh-lark-link@latest --ignore-scripts --registry https://registry.npmjs.org

怀疑 Already up to date?先运行 dsh plugin --profile web outdated——如果它也显示旧版本,说明镜像标签已过期;请使用显式版本。安装后重启 dsh web。

⌨️ 命令(飞书侧)

- 选择器(单选卡片):/mode /permission /model
- 目标:/goal [objective|pause|resume|clear](自主任务 / 暂停 / 恢复 / 清除)
- 状态:/status /sessions /help
- 会话:/new /resume [index|id] /stop /workspace
- 诊断:/doctor(包含会话日志的 ZIP)
- 热重载:/lark-config key=value
- DSH 命令原生运行:/compact …
- 媒体:向机器人发送图片/文件
- 意图确认会自动以卡片形式送达

⚙️ 配置(/lark-config,热重载并持久化)

| 键 | 默认值 | 含义 |
| --- | --- | --- |
| groupPolicy | open | 群触发方式:open / mention / keywords / reply |
| agentPreset | ptc | agent 预设(standard/ptc/minimal/cordis 或自定义;旧别名 code 映射到 ptc) |
| permissionMode | danger-full-access | read-only / workspace-write / danger-full-access |
| streaming.enabled | false | CardKit 流式卡片 |
| reactions.enabled | true | reaction 回执 |
| allowlist | [] | open_id 允许列表(空 = 所有人) |
| denyList | [] | 命令前缀拒绝列表 |
| workspaceRoot |  | 桥接会话的工作区根目录 |
| attachments.retentionHours | 168 | 入站图片/文件的保留时长(小时)(默认 7 天;0 = 永久保留)。存储在操作系统临时目录下,并按时间清理 |
| attachments.dir |  | 入站媒体根目录覆盖(空 = 操作系统临时目录;重新加载后生效) |

凭据(appId/appSecret)存放在 DSH 凭据服务中,绝不存放在配置文件中。

🩺 故障排查

在飞书中发送 /doctor —— 你会收到一个 ZIP,其中包含完整会话日志、脱敏后的配置以及 ISSUE.md 模板。把它交给任意 AI(或提交 GitHub Issue)。/status 显示实时连接 / Outbox / 重放健康状况。

🛠 开发

npm run dev:link && npm run check && npm test && npm run build

264 个单元 + 集成测试。GitHub Actions CI 在每次 push/PR 时运行类型检查 + 测试 + 构建;npm 发布由带 release 标签的 Publish 工作流负责。

架构(Cordis 插件,dsh.bundle 格式):
host(SDK 适配器/认证)→ inbound(传输/群组策略/补偿/Inbound WAL)→ application(命令路由/编排/诊断)→ outbound(Outbox/事件转发/卡片)→ sessions(按聊天管理 agent)。

📄 许可证

MIT —— 可自由使用、修改和分发。

这是一个社区插件,与 DeepSeek、飞书或 Lark 无关联。

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

同作者(amlyczz)的其他插件

💬 加入 DPharness 群聊

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

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