Saltar al contenido principal
S

dsh-chat

sidleo/dsh-chat

DSH 聊天机器人管理入口:渠道注册表、共享内核与设置页入口(飞书/微信等渠道各自独立成插件)

Instalar

dsh plugin --profile web add github:sidleo/dsh-chat

README

dsh-chat

把聊天软件接入 DeepSeek Harness 的插件工作区。一切皆插件dsh-chat 只做管理入口与共享内核, 每种聊天软件是独立的渠道插件,新增聊天软件只需新增一个包。

packages/dsh-chat            Hub:设置页入口「Chat机器人」+ 渠道注册表 + 共享内核     → @sidleo3/dsh-chat
packages/dsh-chat-feishu     飞书渠道(凭据/长连接/私聊群聊/任务过程展示)          → @sidleo3/dsh-chat-feishu
packages/dsh-chat-weixin     微信渠道(iLink 扫码登录/长轮询/私聊)               → @sidleo3/dsh-chat-weixin
packages/dsh-chat-fixture    契约验证用假渠道(不发布)

npm 上必须带作用域:裸名 dsh-chat 属于另一个项目baixianger/dsh-chat), 不是本仓库。所以三个包都发布在 @sidleo3 作用域下。

新渠道作者请直接读 CONTRACT.md——那是唯一需要的文档。

当前进度

P0–P7 全部完成(骨架与契约 → 共享内核 → 飞书渠道 → 微信渠道 → 命令与访问策略 → 富媒体与主动投递 → 平台化 → 机器人自助接入)。飞书支持两条接入路: 扫码新建(扫一下自动创建应用并接入,扫码的人就是属主)与手动接入已有机器人(填 App ID + App Secret)。

进度、已知坑与排查手册以 AGENTS.md唯一来源(含阶段表与逐条排查条目), 这里不再复制一份——之前这里复制的那张表就是先烂掉的。

开发

npm run build     # 构建全部包的 host + client 两半
npm test          # 契约与引擎单元测试
npm run check     # build + test + 打包自检(含"渠道包不得 import hub"检查)
npm run rehearsal # 离线端到端演练:真实 hub + 真实飞书卡片 + 脚本化假 DSH(不联网、不用凭据)

改了 host/卡片逻辑、准备重启 DSH 之前,先跑一次 npm run rehearsal:它把主要用户路径 (渠道依赖自检 → 一问一答 → 命令 → 控制面板与卡片 → 访问策略确认 → 上下文增强 → 图片回退 → 延迟交付 → 诊断 → 真实飞书桥的"更新排在应答之后"与确认回路 → 引用回复 → /retitle) 在几秒内走一遍(12 条),并逐条打印 ✅/❌。 它不替代真机——Lark 长连接、真实平台回调只能真机验。

构建产物 lib/index.js(host,ESM)与 lib/client.js(client,DSH 模块加载器包装)随包提交, 因此安装方不需要构建。

安装

# 从 npm 装(推荐)
dsh plugin --profile web add @sidleo3/dsh-chat
dsh plugin --profile web add @sidleo3/dsh-chat-feishu
dsh plugin --profile web add @sidleo3/dsh-chat-weixin

# 或从仓库装(link 到本地目录;目录名不变,包名变了)
dsh plugin --profile web add link:/绝对路径/packages/dsh-chat
dsh plugin --profile web add link:/绝对路径/packages/dsh-chat-feishu
dsh plugin --profile web add link:/绝对路径/packages/dsh-chat-weixin

从旧版(裸名 dsh-chat / dsh-chat-feishu / dsh-chat-weixin)升级:包名变了, 要先移除旧的三个再装新的,否则同一台机器人会被挂两次(表现为双份回复): dsh plugin --profile web remove dsh-chat dsh-chat-feishu dsh-chat-weixin

安装后需重启 DSH Host(host 半边),并刷新浏览器页面(client 半边)。

⚠️ @xmanrui/dsh-im 与本插件会绑定同一批机器人凭据并各自消费消息,不能同时启用: 启用 dsh-chat 前请先 dsh plugin --profile web remove @xmanrui/dsh-imnpm run check 可用 DSH_CHAT_PROFILE_MANIFEST=<profile 的 package.json> 检查这一点。

已知踩坑

  • 不能与 @xmanrui/dsh-im 同时启用:两者会绑定同一批凭据、各自消费消息, 表现为双份回复或消息被随机分流。切换时先从 profile 移除上游插件。
  • ownerOpenIds 可能是 ['*']:上游在绑定时没有记录单一属主时写通配。 按精确匹配做门禁会把该机器人的所有消息静默丢掉("发了没反应")。 渠道实现必须同时看 ownerOpenIdsaccessPolicymode: 'open' 表示放行)。
  • 静默丢弃必须留日志:门禁挡下的消息如果不打日志,线上几乎无法定位。
  • 飞书事件的 open_id 是应用维度的:同一个用户在不同飞书应用里 id 不同, 属主/白名单要按"该应用的 id"存,不能跨应用复用。
  • 飞书 SDK 的 receive events or callbacks through persistent connection…每次 start() 都无条件打印的提示,不是错误;ws client ready 才代表握手成功。

数据位置

数据位置
每机器人共享设置(工作区/模型/预设/上下文增强/访问策略)~/.dsh/integrations/dsh-chat/bots.json
飞书机器人、凭据引用、会话状态~/.dsh/integrations/dsh-feishu/(沿用旧目录,零重绑)
微信账号、token 引用、会话状态~/.dsh/integrations/dsh-weixin/(同上)
凭据本体~/.dsh/.credentials.yaml(经 DSH 凭据服务读写)

Plugins relacionados