把 DeepSeek Harness 的编码智能搬进飞书
原生思考过程 · 审批卡片 · 实时 goal/todo 卡片 · 子代理 fan-out · 双语 slash 面板——不需要公网回调地址。
English · 快速开始 · 能力 · 二次开发 · FAQ
--- ## 🤔 这是什么? `dsh-lark-bridge` 是一个 **飞书/Lark 即时通讯机器人通道**,让 DeepSeek Harness 的编码代理直接在聊天里工作。每条会话(私聊 / 群聊)驱动一个独立的 dsh agent,桌面版能看到的过程,聊天里全部可见: - 🧠 **思考过程实时可见** —— 用飞书原生的「思考中」消息渲染 reasoning,工具调用带图标、结果以代码块展示,不再黑盒 - ✅ **审批卡片** —— 需要确认的操作变成可点击卡片(允许一次 / 拒绝),决策人与结果回写留痕 - 🎯 **实时 goal/todo 卡片** —— 长任务在聊天里实时更新而不是静默消失;重启后 goal 自动续跑 - 🔌 **WebSocket 长连接** —— 不需要公网回调地址,不需要反向代理 - 🔄 **双端同步** — bot 设置与插件清单在 `web` profile 与 Desktop 2.0.0 桌面端之间保持一致(`/bot sync-plugins`) 本质是「嫁接」:飞书只是载体,真正干活的还是 DeepSeek Harness 本体。 ## 🚀 60 秒上手 **准备**:Node 18+、[pnpm](https://pnpm.io/installation)(推荐,见下方说明)、一个 DeepSeek API Key、手机上有飞书。 ```sh # 1. 把插件装进 dsh profile 并启动(pnpm —— 并行安装,实测约 20 秒) pnpm dlx @deepseek-ai/dsh plugin --profile web add @moyu-good/dsh-lark-bridge \ && pnpm dlx @deepseek-ai/dsh web # 2. 控制台打印二维码 → 用飞书扫码 # (自动创建应用+事件订阅,凭据持久化) # 3. 打开 dsh 控制台 → Settings → Models → 填入 DeepSeek API Key # 4. 私聊机器人,或群里 @ 它。完成。 ``` > [!NOTE] > **首次 `plugin add` 会失败一次**,报 > `ERR_PNPM_IGNORED_BUILDS ... protobufjs`——pnpm 11 默认拦截 `protobufjs` > (飞书 SDK 的依赖)的 postinstall,而该脚本只是无害提示。打开 > `<你的home>/.dsh/profiles/web/pnpm-workspace.yaml`,把占位行改成 > `protobufjs: true`,再重跑同一条命令即可。每个 profile 仅需一次。 > [!WARNING] > **运行上游 dsh CLI 请用 pnpm,不要裸用 npx/npm。** 同机实测:`pnpm dlx` > 安装 dsh 依赖树(197 个包、约 250 MB)**约 20 秒**(含下载);而 > `npx`/`npm install` 即使缓存全热也要 **约 25 分钟**(npm 串行 reify), > 且 ≤4GB 内存机器的 npm 进程会在安装中途 > "JavaScript heap out of memory" 崩溃。必须用 npm 时,请先设 > `NODE_OPTIONS=--max-old-space-size=2048`。 > > **不要**执行 `npm i -g dsh-lark-bridge`——npm 上这个名字属于另一个无关项目。 > 本插件已发布为 **`@moyu-good/dsh-lark-bridge`**(GitHub 源也能装,但 git > 源插件会让 pnpm 拦下它的 `prepare` 脚本,需要手动在 profile 的 > `pnpm-workspace.yaml` 的 `allowBuilds` 里放行——registry 包零构建无此坑)。 日常运维:重新运行 `pnpm dlx @deepseek-ai/dsh web`(后续运行命中 pnpm store,速度很快),或用 systemd/supervisor 托管。 包已提交编译产物(`lib/` 进仓库),**安装即用无需构建**。 ## 📦 换机迁移 桥自带迁移路径——旧机上: ```text /bot export include-secrets --to-feishu # 直传应用自己的飞书云空间 /bot export include-secrets # 或本地文件,凭证掩码 ``` 飞书路线零拷贝:文件落在应用自己的云空间(仅本应用可见),新机直接 `/bot import --from-feishu` 拉取。本地文件路线则把打印出的文件(sync 目录, 如 `~/.dsh/dsh-lark-bridge/migrate.json`)拷到新机同路径,按 Quick Start 装 好插件后: ```text /bot import # 预览:将写入的设置 + 装包计划 + 提醒 /bot import apply # 执行(云端槽位加 --from-feishu) ``` 带得走的:共享设置与各 profile 插件清单(经上游 CLI 重装,跨平台直接可用)。 永不带走的:peer 心跳、control token、`node_modules`、会话历史——会话在 `~/.dsh`(上游管理),整目录拷贝即可带走。 **设备生命周期**:每台机器首启生成稳定 `deviceId`(`/bot devices` 查看台账: 本机、心跳在线端、云端活跃端、迁移档案)。旧机不用手动停——`/bot retire` 即退位(后续消息只回一行提示、不再驱动 agent;该标记是本机私有状态,永不 同步),`/bot activate` 重新启用——云端通道可用时同时认领活跃槽位,其它 设备在下一条消息自动退避。每台在线机器每分钟向云端台账续写心跳;活跃者 掉线超时后,deviceId 最小的新鲜设备在下一条消息自动当选接管。 `/bot name <可读名>` 给设备起台账显示名。 ## ✨ 能力 亮点——别的桥没有的: | | | |---|---| | 🧠 **原生飞书 CoT** | reasoning 渲染为平台原生「思考中」消息;旧客户端退化为打字机卡片 | | 📋 **审批卡片+决策人留痕** | 点击即决策,谁批的写得清清楚楚 | | 🎯 **goal/todo 实时卡+自动续跑** | 阶段变化实时进聊天;`autoResumeGoals` 重启后自动恢复 | | 🔍 **会话历史检索** | `/sessions <关键词>` 对本聊天历史全文搜索 | | 🌐 **双语斜杠面板** | 国际版 Lark 英文、国内版飞书中文,自动切换 |outbound.allowedFileDirs。URL 和原始 buffer 始终可用。
application:app_slash_command 权限并发布应用版本。
autoResumeGoals);权限与模式选择随会话状态保留。