dsh-im-union 0.0.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.en.md +17 -3
  3. package/README.md +17 -3
  4. package/THIRD_PARTY_NOTICES.md +18 -8
  5. package/client.js +1439 -331
  6. package/dsh.plugin.json +7 -7
  7. package/lib/admin/api.d.ts +19 -1
  8. package/lib/admin/api.js +63 -14
  9. package/lib/channels/dingtalk-notify.d.ts +118 -0
  10. package/lib/channels/dingtalk-notify.js +389 -0
  11. package/lib/channels/dingtalk.d.ts +186 -0
  12. package/lib/channels/dingtalk.js +1017 -0
  13. package/lib/channels/discord.d.ts +45 -3
  14. package/lib/channels/discord.js +119 -28
  15. package/lib/channels/email.d.ts +195 -0
  16. package/lib/channels/email.js +811 -0
  17. package/lib/channels/feishu.d.ts +160 -8
  18. package/lib/channels/feishu.js +478 -20
  19. package/lib/channels/imessage.d.ts +158 -0
  20. package/lib/channels/imessage.js +547 -0
  21. package/lib/channels/matrix-e2ee.d.ts +107 -0
  22. package/lib/channels/matrix-e2ee.js +338 -0
  23. package/lib/channels/matrix.d.ts +301 -0
  24. package/lib/channels/matrix.js +1015 -0
  25. package/lib/channels/meta.d.ts +5 -0
  26. package/lib/channels/meta.js +90 -1
  27. package/lib/channels/qq-notify.d.ts +133 -0
  28. package/lib/channels/qq-notify.js +326 -0
  29. package/lib/channels/qq.d.ts +214 -0
  30. package/lib/channels/qq.js +706 -0
  31. package/lib/channels/registry.js +10 -0
  32. package/lib/channels/slack.d.ts +232 -0
  33. package/lib/channels/slack.js +896 -0
  34. package/lib/channels/telegram.d.ts +23 -1
  35. package/lib/channels/telegram.js +78 -16
  36. package/lib/channels/types.d.ts +6 -0
  37. package/lib/channels/wecom-app.d.ts +138 -0
  38. package/lib/channels/wecom-app.js +600 -0
  39. package/lib/channels/wecom.d.ts +11 -3
  40. package/lib/channels/wecom.js +2 -1
  41. package/lib/channels/whatsapp.d.ts +198 -0
  42. package/lib/channels/whatsapp.js +471 -0
  43. package/lib/client.js +1439 -331
  44. package/lib/engine/account-manager.d.ts +25 -4
  45. package/lib/engine/account-manager.js +125 -9
  46. package/lib/engine/commands.d.ts +17 -0
  47. package/lib/engine/commands.js +78 -0
  48. package/lib/engine/connector.d.ts +232 -0
  49. package/lib/engine/connector.js +767 -0
  50. package/lib/engine/delivery-log.d.ts +62 -0
  51. package/lib/engine/delivery-log.js +166 -0
  52. package/lib/engine/files.d.ts +42 -0
  53. package/lib/engine/files.js +50 -0
  54. package/lib/engine/fragments.d.ts +55 -0
  55. package/lib/engine/fragments.js +89 -0
  56. package/lib/engine/gateway.d.ts +65 -12
  57. package/lib/engine/gateway.js +467 -15
  58. package/lib/engine/proactive.d.ts +146 -0
  59. package/lib/engine/proactive.js +335 -0
  60. package/lib/engine/quote.d.ts +51 -0
  61. package/lib/engine/quote.js +82 -0
  62. package/lib/engine/voice.d.ts +162 -0
  63. package/lib/engine/voice.js +553 -0
  64. package/lib/engine/zip.d.ts +14 -0
  65. package/lib/engine/zip.js +131 -0
  66. package/lib/host-compat/deliverables-compat.d.ts +49 -0
  67. package/lib/host-compat/deliverables-compat.js +96 -0
  68. package/lib/host-compat/services.d.ts +2 -0
  69. package/lib/host-compat/services.js +24 -7
  70. package/lib/host-compat/session-api.d.ts +14 -0
  71. package/lib/host-compat/session-api.js +130 -2
  72. package/lib/host-compat/session-source.d.ts +9 -0
  73. package/lib/host-compat/session-source.js +45 -0
  74. package/lib/host-compat/uploads-compat.d.ts +44 -0
  75. package/lib/host-compat/uploads-compat.js +66 -0
  76. package/lib/index.d.ts +10 -1
  77. package/lib/index.js +230 -8
  78. package/locale/en.json +1 -1
  79. package/locale/zh.json +1 -1
  80. package/package.json +16 -10
  81. package/src/admin/api.ts +79 -13
  82. package/src/channels/dingtalk-notify.ts +457 -0
  83. package/src/channels/dingtalk.ts +1126 -0
  84. package/src/channels/discord.ts +156 -39
  85. package/src/channels/email.ts +926 -0
  86. package/src/channels/feishu.ts +557 -26
  87. package/src/channels/imessage.ts +646 -0
  88. package/src/channels/matrix-e2ee.ts +368 -0
  89. package/src/channels/matrix.ts +1184 -0
  90. package/src/channels/meta.ts +95 -1
  91. package/src/channels/qq-notify.ts +429 -0
  92. package/src/channels/qq.ts +853 -0
  93. package/src/channels/registry.ts +10 -0
  94. package/src/channels/slack.ts +1024 -0
  95. package/src/channels/telegram.ts +93 -18
  96. package/src/channels/types.ts +6 -0
  97. package/src/channels/wecom-app.ts +665 -0
  98. package/src/channels/wecom.ts +13 -4
  99. package/src/channels/whatsapp.ts +598 -0
  100. package/src/engine/account-manager.ts +136 -10
  101. package/src/engine/commands.ts +83 -0
  102. package/src/engine/connector.ts +901 -0
  103. package/src/engine/delivery-log.ts +201 -0
  104. package/src/engine/files.ts +74 -0
  105. package/src/engine/fragments.ts +113 -0
  106. package/src/engine/gateway.ts +473 -15
  107. package/src/engine/proactive.ts +457 -0
  108. package/src/engine/quote.ts +84 -0
  109. package/src/engine/voice.ts +673 -0
  110. package/src/engine/zip.ts +154 -0
  111. package/src/host-compat/deliverables-compat.ts +141 -0
  112. package/src/host-compat/services.ts +24 -6
  113. package/src/host-compat/session-api.ts +145 -3
  114. package/src/host-compat/session-source.ts +47 -0
  115. package/src/host-compat/uploads-compat.ts +126 -0
  116. package/src/index.ts +227 -9
package/CHANGELOG.md CHANGED
@@ -2,6 +2,78 @@
2
2
 
3
3
  本项目版本号遵循语义化版本;发布面与宿主兼容矩阵见 `scripts/hosts.mjs`(README 管理块同源)。
4
4
 
5
+ ## 0.3.1(中文环境语言修复 + 投稿审查修复)
6
+
7
+ ### Added
8
+
9
+ - `@whiskeysockets/baileys` 声明为 `optionalDependencies`(^6.7.24,随包分发;离线被跳过时渠道启动明确报错不崩溃),修复 awesome 投稿审查指出的「WhatsApp 依赖不随包」问题
10
+ - README 双语新增「安装前提」小节:baileys 随包机制、飞书语音档需系统 ffmpeg(二进制不随包)、iMessage 仅 macOS
11
+
12
+ ### Fixed
13
+
14
+ - 声明面陈旧枚举串同步:`package.json` description、`dsh.plugin.json` 双语 description、`scripts/gen-locales.mjs`(及 9 语 locale 产物)中「0.2.1-alpha.3」统一改「0.2.1-rc.2」,与 hosts.mjs 12 tag 枚举对齐(管理块本就同源,此次清的是手写残留)
15
+ - 中文环境面板锁英文:宿主初始 HTML 是 `<html lang="en">`,i18n 启动后才改写为真实语言(真机实测 zh-CN);client 在 factory 顶层冻结语言判定,装载早于宿主 i18n → 中文环境锁死英文面。改为**取词时懒解析** `<html lang>`(`currentLang()`),未知/缺空前缀保守归 zh,其余语言缺键逐条回落 zh 词典;宿主词典层保留逐键优先(`hostDictionary`),语言判定不再走它
16
+
17
+ ## 0.3.0(私聊准入 + 会话偏好 + 连接保稳)
18
+
19
+ 针对真机反馈三连修:发消息无反应(白名单静默拒)、无预设/模型入口(创建参数丢失)、编辑触发替换凭据(全量重建)。
20
+
21
+ ### Added
22
+
23
+ - 私聊准入两档(对齐 IM助理):`approved`=仅白名单(缺省,D6 默认拒绝不变)/`all`=所有私聊;账号行显示「私聊全开」标签,编辑弹窗可切
24
+ - 拒绝可见化:私聊被拒回一次带对方 userId 的未授权提示(每用户 10 分钟冷却,防回复风暴);群聊仅在显式 @ 且开关关闭时提示一次,未 @ 保持静默
25
+ - 账号级会话偏好:工作区 cwd / Agent 预设 / 模型(provider+model)/ 推理等级,仅在该账号新建会话时应用;存储于 accounts.json(`session` 对象),设置页弹窗编辑(选项来自新 `/session-catalog` 目录:现有会话 cwd 去重 + sessionController.modelCatalog + agentPresets.list)
26
+ - createSession 主路径换 `sessionController.create`(锚点 dsh-repo packages/api/session-controller:SessionCreateRequest 收 `sessionId/cwd/agentPreset`,sessionIdHint 幂等采纳;老线回退 agents.create meta 路径);模型偏好 create 后 `selectModel` 落位,失败只降级不阻断建会话
27
+ - `/session-catalog` 只读目录接口(回包零凭据)
28
+
29
+ ### Fixed
30
+
31
+ - 「发消息无反应」根因:扫码绑定后无任何代码把用户加入白名单(网关注释声称「渠道层自动入表」但渠道层未实现)→ 全部私聊被静默丢弃;现由拒绝提示 + 准入两档双路解决
32
+ - 编辑保存触发「替换凭据」体感:upsert 原来无条件 teardown+重连;现在仅渠道/config 变化或提供新 secret 值才重建,别名/白名单/准入/偏好编辑原位生效(`updatePolicy` 下发,不再重挂 onMessage——顺带修掉 setAllowlist 重复注册监听导致的消息双投)
33
+
34
+ ## 0.2.0(设置面板重设计)
35
+
36
+ 对齐 dsh-im(DSH-IM)渠道卡视觉与 dsh-im-connect(IM助理)账号手风琴两个参照系的净室重写。
37
+
38
+ ### Added
39
+
40
+ - 面板 v2 骨架:头部(品牌 + 副标语 + GitHub/刷新)→ 统计条(渠道/账号/在线)→ 折叠「运行时诊断」(代际/后端/凭据/上传/产物/Connector + 渠道实现度清单)→ 渠道手风琴卡
41
+ - 渠道卡:品牌色块 logo(15 渠道净室简化 glyph,非官方素材)+ 「仅通知 / 仅 macOS / 规划中」标签 + 账号数 + 添加账号;未实现渠道垫底灰显
42
+ - 账号行:别名 + 内部键 + 状态徽章(已连接/未连接/已暂停)+ 凭据缺失提示(缺哪些键)+ 检查连接 / 编辑 / 暂停恢复 / 两步删除;白名单编辑收进折叠节,纯通知渠道自动隐藏
43
+ - 添加/编辑统一弹窗:微信为扫码流(先建档 skipConnect 再取码,confirmed 后别名/配置保留);其余渠道按 meta.fields 出双列表单,secret 用 password 框(留空=保持)、helpUrl 外链、必填星标
44
+ - 账号编辑:/accounts 回显明文 config(按 meta plain 字段白名单过滤,secret 永不回显,D4 同源)供编辑预填
45
+ - UI 语言按宿主 `<html lang>` 选取内置词典(9 语,缺键逐条回落 zh)
46
+
47
+ ### Fixed
48
+
49
+ - client 把 plain 字段也塞进 secrets 提交,而 upsert 只入库 secret 字段——email 的 address/imapHost/smtpHost 等必填明文、飞书语音档位等全部被静默丢弃;现按字段类型归位(plain → record.config,secret → secrets)
50
+
51
+ ### Changed
52
+
53
+ - 样式从内联 style 改为单 `<style data-plugin>` 注入;颜色全部走 `var(--dsw-alias-*, fallback)` 消费链(本地 `--diu-*` 别名),暗/浅色零分支,窄容器容器查询降列
54
+ - /state 渠道清单增发 hostRequirement(设置页打「仅 macOS」标签)
55
+
56
+ ## 0.1.0(首个功能版,dist-tag=latest)
57
+
58
+ M1–M3 代码侧全量:12 渠道适配器(11 平台)+ 跨版本窄腰 + 会话引擎 + 管理面。
59
+
60
+ ### Added
61
+
62
+ - 渠道(P0):微信 iLink(官方 ClawBot 协议 + 扫码绑定 UI)、飞书(WS 长连 + 流式卡片/逐步消息双档 + 语音档可选)、Telegram(长轮询 + 编辑流式)、Discord(Gateway v10 + 表格转竖排)、企微智能机器人(长连 + 思考中/工具进度原生显示)
63
+ - 渠道(P1):钉钉 stream + AI Card;QQ 官方 API v2(被动窗口);Slack Socket Mode 零 SDK + thread 模型
64
+ - 渠道(P2):WhatsApp(Baileys,QR 配对 + auth 目录持久化);Matrix(CS API,E2EE 两档诚实档位);iMessage(仅 macOS,非 darwin 硬拒载);企微自建应用(回调验签 + 加解密,webhook 白名单路由)
65
+ - 能力:命令面板 24 命令(含 /fork /rename /delivery /export /speak /mute /goal);审批与交互提问 IM 闭环(waterfall 返回即接管,fail-closed D5);图片/文件输入(宿主元数据判视觉 E4);产物文件回传;投递日志与断线补发(≤3 次,uncertain 绝不重发 D7);超时迟到结果收割;主动投递目标库 + 双向同步;碎片续写(.. / !!);引用上下文增强;会话标题渠道徽章
66
+ - AI Office Connector:查实宿主无公开 connector 协议面 → 离线 Job 队列诚实档(https 强制/租约/审批/并发上限)
67
+
68
+ ### Fixed
69
+
70
+ - Cordis ctx 代理未 inject 属性访问即抛(可选链拦不住)→ 窄腰全 try/catch 守卫
71
+ - 静音判定吞掉 /mute 自身导致的永久静默死锁;/model 与投递链 selections 键不一致导致的视觉判定永命中 unknown
72
+
73
+ ### Changed
74
+
75
+ - publishConfig.tag:next → latest;THIRD_PARTY_NOTICES 运行时依赖清单与实现对齐(纠未采纳的 SDK 列表)
76
+
5
77
  ## 0.0.1(首发占位,tag=next)
6
78
 
7
79
  预发布占位版本,非推荐安装线;语义为「协议层与跨版本骨架完成、真机验收进行中」。
package/README.en.md CHANGED
@@ -3,19 +3,33 @@
3
3
  A union IM bridge for DeepSeek Harness — a clean-room reimplementation merging the capability sets of xmanrui/dsh-im and MichengAI/dsh-im-connect, with no source copied from either.
4
4
 
5
5
  <!-- host-compat:begin — generated by scripts/sync-hosts.mjs from scripts/hosts.mjs; DO NOT EDIT -->
6
- - **Supported DSH hosts:** `0.1.2-rc.1` `0.1.5-rc.1` `0.1.5-rc.2` `0.1.5-rc.3` `0.1.7-rc.1` `0.1.7-rc.2` `0.2.0-rc.1` `0.2.0-rc.2` `0.2.1-alpha.2` `0.2.1-alpha.3` `0.2.1-rc.1` (11 rc/alpha releases across lines 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1)
6
+ - **Supported DSH hosts:** `0.1.2-rc.1` `0.1.5-rc.1` `0.1.5-rc.2` `0.1.5-rc.3` `0.1.7-rc.1` `0.1.7-rc.2` `0.2.0-rc.1` `0.2.0-rc.2` `0.2.1-alpha.2` `0.2.1-alpha.3` `0.2.1-rc.1` `0.2.1-rc.2` (12 rc/alpha releases across lines 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1)
7
7
  <!-- host-compat:end -->
8
8
 
9
9
  ## Status
10
10
 
11
- Under development (M0 cross-version skeleton). See `tasks.md` for phasing.
11
+ **0.3.1**: all 15 channel adapters (12 platforms including email; WeCom/DingTalk/QQ each contribute two: bot + self-built app or notify tier), the cross-version narrow waist, session engine, approval/question IM loop and multi-account management are delivered (658 unit tests; host-farm smoke green on 0.1.2 / 0.1.5 / 0.1.7 / 0.2.1 lines; 0.2.1-rc.2 verified by a real desktop-profile install with double read-back, its dedicated farm cell still pending). Outstanding real-device acceptance items are registered in CHANGELOG.
12
12
 
13
- ## Install (npm package available after M1)
13
+ Highlights:
14
+
15
+ - **Channels**: WeChat (official iLink QR bind), Feishu/Lark (long-connection, streaming cards, optional voice tier requiring system ffmpeg), Telegram, Discord, WeCom intelligent bot, DingTalk (stream + AI Card, plus a custom-robot notify tier), QQ official bot (plus notify tier), Slack (Socket Mode, zero SDK), WhatsApp (Baileys QR pairing; the dependency ships as an optionalDependency), Matrix, iMessage (macOS only), WeCom self-built app (signed callback webhook), Email (IMAP/SMTP thread routing), and more; unconfigured channels load nothing (lazy imports).
16
+ - **In-chat loop**: 24 commands (`/help /status /new /stop /steer /model(s) /reasoning /preset(s) /session(s) /workspace(s) /fork /rename /queue /mute /unbind /goal /delivery /export /speak /menu`); tool approvals and agent questions answered in the originating chat (deny-by-default, 5-minute expiry, initiator only).
17
+ - **Cross-version**: settings surface auto-adapts gen1/gen2/gen3; capability probing only, never version branches.
18
+
19
+ ## Install
14
20
 
15
21
  ```sh
16
22
  dsh plugin --profile web add dsh-im-union@latest --registry=https://registry.npmjs.org/
17
23
  ```
18
24
 
25
+ Then add accounts in the "IM union bridge" panel: most channels use credential binding (secrets are one-way into the vault and never echoed back); WeChat/WhatsApp use QR pairing; the WeCom self-built app channel requires pointing your callback URL (`/api/dsh-im-union/wecom-app/callback`) in its console. See `SECURITY.md` for the non-negotiable privacy red lines and `THIRD_PARTY_NOTICES.md` for the clean-room provenance.
26
+
27
+ **Install prerequisites**:
28
+
29
+ - The WhatsApp channel's `@whiskeysockets/baileys` is declared in `optionalDependencies` and installs with the package; if skipped while offline, the channel fails fast with a clear "not installed" message instead of crashing.
30
+ - The Feishu voice tier requires system `ffmpeg` on PATH (the transcoding binary is not shipped; it is only invoked when the voice tier is enabled).
31
+ - The iMessage channel is macOS only.
32
+
19
33
  ## Development
20
34
 
21
35
  ```sh
package/README.md CHANGED
@@ -3,19 +3,33 @@
3
3
  DeepSeek Harness 的 IM 联合桥——净室重写,能力合集来自社区两仓(xmanrui/dsh-im 与 MichengAI/dsh-im-connect),不复制其源码。
4
4
 
5
5
  <!-- host-compat:begin — generated by scripts/sync-hosts.mjs from scripts/hosts.mjs; DO NOT EDIT -->
6
- - **支持的 DSH 宿主:** `0.1.2-rc.1` `0.1.5-rc.1` `0.1.5-rc.2` `0.1.5-rc.3` `0.1.7-rc.1` `0.1.7-rc.2` `0.2.0-rc.1` `0.2.0-rc.2` `0.2.1-alpha.2` `0.2.1-alpha.3` `0.2.1-rc.1`(覆盖 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1 共 11 个 rc/alpha)
6
+ - **支持的 DSH 宿主:** `0.1.2-rc.1` `0.1.5-rc.1` `0.1.5-rc.2` `0.1.5-rc.3` `0.1.7-rc.1` `0.1.7-rc.2` `0.2.0-rc.1` `0.2.0-rc.2` `0.2.1-alpha.2` `0.2.1-alpha.3` `0.2.1-rc.1` `0.2.1-rc.2`(覆盖 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1 共 12 个 rc/alpha)
7
7
  <!-- host-compat:end -->
8
8
 
9
9
  ## 状态
10
10
 
11
- 开发中(M0 跨版本骨架)。能力分期见根目录 `tasks.md`。
11
+ **0.3.1**:15 个渠道适配器(覆盖 12 个平台,含邮件;企微/钉钉/QQ 各含机器人与自建应用或推送两档)、跨版本窄腰、会话引擎、审批/提问 IM 闭环、多账号管理面均已交付(单测 658 项;宿主农场 0.1.2/0.1.5/0.1.7/0.2.1 四线冒烟全绿;0.2.1-rc.2 已按桌面 profile 装机双回读实证,农场专属格待补)。真机验收项逐项登记在 CHANGELOG;能力分期见开发仓计划台账。
12
12
 
13
- ## 安装(M1 后提供 npm 包)
13
+ 能力总览:
14
+
15
+ - **渠道**:微信(官方 iLink 扫码)、飞书(长连/流式卡片/语音档可选,语音需系统 ffmpeg)、Telegram、Discord、企微智能机器人(长连)、钉钉(stream+AI Card,另有自定义机器人推送档)、QQ 官方机器人(另有推送档)、Slack(Socket Mode)、WhatsApp(Baileys 扫码,依赖随包 optionalDependencies 分发)、Matrix、iMessage(仅 macOS)、企微自建应用(回调)、邮件(IMAP/SMTP 线程路由)等;未配置渠道零依赖零加载(懒 import)。
16
+ - **IM 内闭环**:24 命令面板(/help /status /new /stop /steer /model(s) /reasoning /preset(s) /session(s) /workspace(s) /fork /rename /queue /mute /unbind /goal /delivery /export /speak /menu);工具审批与交互提问原聊天回答(默认拒绝、5 分钟超时、发起者限定)。
17
+ - **跨版本**:设置面 gen1/gen2/gen3 三态自适配;能力探测优先,禁版本号分支。
18
+
19
+ ## 安装
14
20
 
15
21
  ```sh
16
22
  dsh plugin --profile web add dsh-im-union@latest --registry=https://registry.npmjs.org/
17
23
  ```
18
24
 
25
+ 装好后在宿主侧栏/设置页的「IM 联合桥」面板添加账号:大部分渠道走凭据绑定(Bot Token/App 凭据,secret 字段只单向入库不回显);微信/WhatsApp 走扫码绑定;企微自建应用需将本插件管理面回调 URL(`/api/dsh-im-union/wecom-app/callback`)配入后台接收服务器。隐私与凭据红线见 `SECURITY.md`;第三方依赖声明见 `THIRD_PARTY_NOTICES.md`(净室重实现,不复制任何上游源码)。
26
+
27
+ **安装前提**:
28
+
29
+ - WhatsApp 渠道的 `@whiskeysockets/baileys` 已声明为 `optionalDependencies`,随包自动安装;若安装时离线被跳过,渠道启动时会明确报「未安装」并拒绝,不崩溃。
30
+ - 飞书语音档需要系统 `ffmpeg` 在 PATH 中(转码二进制不随包分发,仅启用语音档时才会调用)。
31
+ - iMessage 渠道仅 macOS 可用。
32
+
19
33
  ## 开发
20
34
 
21
35
  ```sh
@@ -16,12 +16,22 @@ dependencies only.
16
16
 
17
17
  ## Runtime npm dependencies (consumed as-is, licenses per their packages)
18
18
 
19
- - @larksuiteoapi/node-sdk (MIT) — Feishu/Lark bot long-connection SDK
20
- - dingtalk-stream (MIT) — DingTalk Stream mode SDK
21
- - @wecom/aibot-node-sdk — WeCom intelligent-bot WebSocket SDK
22
- - @tencent-connect/qqbot-connector — QQ bot QR pairing helper (declared
23
- UNLICENSED upstream; used as an external dependency only, never vendored)
24
- - qrcode (MIT) — QR rendering for scan-to-bind flows
19
+ - @larksuiteoapi/node-sdk (MIT) — Feishu/Lark bot long-connection SDK (its WS
20
+ handshake/signature surface is a private protocol, so the official SDK is used
21
+ instead of a clean-room reimplementation; lazily imported)
22
+ - @whiskeysockets/baileys (MPL-2.0) — WhatsApp Web multi-device protocol library
23
+ (lazily imported; only the WhatsApp channel touches it)
24
+ - qrcode (MIT) — QR PNG data-URL rendering for the WeChat iLink / WhatsApp
25
+ scan-to-bind flows (lazily imported)
25
26
 
26
- P1/P2 additions will be listed here as they land (Baileys, @matrix-org/olm,
27
- imapflow/nodemailer, sharp — none are dependencies at M0).
27
+ Everything else (Telegram, Discord, Slack, QQ, DingTalk, WeCom bot long-connection,
28
+ WeCom self-built app callback crypto, WeChat iLink transport, Matrix CS API) is
29
+ implemented directly against public protocol documents with ZERO runtime
30
+ dependencies (Node >= 22 global fetch/WebSocket + node:crypto/node:zlib only).
31
+ Earlier drafts of this file listed dingtalk-stream, @wecom/aibot-node-sdk and
32
+ @tencent-connect/qqbot-connector; those SDKs were never adopted — the respective
33
+ channels are zero-dependency clean-room implementations (corrected at 0.1.0).
34
+
35
+ Optional external tools: ffmpeg (system binary, spawned only when the Feishu
36
+ voice tier is explicitly enabled; never bundled, never assumed present — the
37
+ feature degrades honestly when missing).