TSDD(唐僧叨叨)逐条对标秀秀完整报告

编制:2026-05-31
对标范围:A 类 58 条(秀秀现有)+ B 类 89 条(目标功能)= 147 条
调研方法:4 个仓库源码逐文件实测 + 官方文档交叉验证
上一份选型分析:/tmp/tailchat-ima/Top3对标分析.md
本次重点:把"模块小计"还原为"逐条证据 + 行号",覆盖全部 147 条


一、TSDD 基本信息

项目地址 https://github.com/TangSengDaoDao/TangSengDaoDaoServer
协议 Apache License 2.0(LICENSE 实测)
主语言 Go(服务端)+ TypeScript/React(Web/Electron)+ Kotlin(Android)+ Objective-C(iOS)
团队来源 国内"老工匠"团队,自述八年开发;与 WuKongIM 是同一班子
架构 二层:通讯层 WuKongIM + 业务层 TangSengDaoDao(gRPC Webhook + HTTP API 双向交互)

GitHub 实测数据(2026-05-31 通过 api.github.com 拉取)

项目 Star 最后 push 协议 备注
TangSengDaoDaoServer 3493 ★ 2026-05-15 Apache 2.0 主仓,34 open issues
TangSengDaoDaoWeb 176 ★ 2026-03-19 Apache 2.0 Web/Electron/Tauri 三端
TangSengDaoDaoAndroid 138 ★ 2026-05-20 Apache 2.0 Kotlin 原生
TangSengDaoDaoiOS 58 ★ 2025-08-12 Apache 2.0 超 9 个月没更新(B75 P0 门槛预警)
TangSengDaoDaoManager 80 ★ 2025-09-08 Apache 2.0 独立 Admin 后台
WuKongIM(通讯层) 4838 ★ 2026-05-29 Apache 2.0 高频维护

B75 活跃维护门槛裁判:服务端 + Android + Web 全部 ≤ 90 天,iOS 超 90 天(影响 iOS 端二开和官方 bug 跟进,门槛部分通过)。


二、A 类 58 条对标(秀秀现有功能 → TSDD 原生支持情况)

支持情况:✅ 原生 / 🟡 部分/插件 / ❌ 不支持 / ❓ 文档未明
证据:源码路径或文档章节

序号 秀秀现有功能 稳定性 TSDD 支持 证据 备注
A01 文字消息发送 稳定 modules/message/api.go:90+ 全套 send API + WuKongIM 长连接投递 直接继承
A02 私信(DM/Converse) 稳定 WuKongIM ChannelType=1(个人)+ modules/user/api_friend.go 原生
A03 @提及(含修复版) 较稳定 🟡 modules/message/ 支持 @个人 + @all,无 @角色 守一 B2 修复可移植
A04 消息回复/引用 稳定 message entities 支持 reply payload 原生
A05 消息右键菜单 稳定 Web packages/tsdaodaobase/src/Messages/Base 全套 menu 原生
A06 消息搜索 较稳定 modules/message/api.go:97 m.search + ZincSearch 全文索引(api.go:317 SearchOn 开关) TSDD 比秀秀强
A07 Markdown 渲染(GFM/表格/代码块) 稳定 Web 端 Text Cell 支持 markdown,但弱于 Discord 守一文档转 markdown 渲染需测试
A08 消息多选 较稳定 🟡 Web Mergeforward 已支持合并转发选择 UI,但"多选+复合操作"需扩展 守一 B3 patch 可移植
A09 消息转发 稳定 Messages/Mergeforward/index.tsx 合并转发原生 原生
A10 消息置顶 较稳定 modules/message/api_pinned.go 全套 + message_extra.is_pinned 字段 TSDD 原生比秀秀 patch 优
A11 消息撤回 稳定 api.go:94 m.revoke + Messages/Revoke/ 原生
A12 消息字符限制扩展 稳定 TSDD 消息正文 TEXT 字段无 1k 限制 不存在该问题
A13 时间显示 + typing 较稳定 api.go:98 m.typing + Web Service/TypingManager.tsx 原生
A14 桌面通知 失效 Web Utils/NotificationUtil.ts Electron 桌面通知 + Web Notification API TSDD 原生开箱即用,B80 自动解决
A15 移动端推送 失效 modules/webhook/ 6 路推送(APNs/Firebase/HMS-Huawei/MI/OPPO/VIVO) TSDD 国产推送是杀手锏
A16 群组双层结构(群组→面板) 稳定 🟡 TSDD 是 group/channel 两层,没有第三层 Panel(B18 三层结构缺) 守一群组 UI 需重新对齐
A17 群主/管理员/普通成员 稳定 modules/group/const.go MemberRoleCreator/Manager/Common 原生
A18 频道分类/分组(拖拽) 稳定 🟡 Web 端有会话置顶但无频道拖拽分组 UI 需开发
A19 邀请系统(次数 + 美化) 较稳定 modules/group/invite.go + h5confirm 美化页 原生
A20 群公告(持久) 失效 group/api.go:804 GroupAttrKeyNotice + group.Notice 字段持久 TSDD 解决秀秀 configs 失效
A21 多人会话/Bot 建群 失效 group.create + robot 模块的 sendMessage API TSDD 解决秀秀 openapi 失效
A22 好友系统 稳定 modules/user/api_friend.go + db_friend.go 原生
A23 联系人置顶 较稳定 user_setting.top 字段 原生
A24 Bot 原生(OpenAPI 创建) 失效 modules/robot/api_manager.go 创建 robot 主流程 直接解决
A25 Bot 鉴权(appId+secret+JWT) 失效 robot.token + app_id 字段(robot-20211105-01.sql)+ robotAuth middleware 直接解决
A26 Bot Socket.IO 连接 失效 🟡 TSDD 用 HTTP long-polling/robot/events GET/POST + /ack),不是 Socket.IO 需改造 OpenClaw 连接器
A27 Bot 加群授权(addBotUser) 失效 group memberAdd 走 robot 用户即可(user.robot=1) 直接解决
A28 Bot 响应策略四档 失效 🟡 TSDD robot 仅支持菜单/inline_query,"@only/all/allowlist"策略需业务层补 守一 patch 可移植
A29 Bot 主人权限管理 失效 🟡 robot 表无 owner_uid,需扩字段 简单 ALTER
A30 Bot 个性化 SOUL.md 失效 🟡 TSDD robot.placeholder 仅一行;SOUL.md 需走应用层挂载 OpenClaw 侧逻辑保留即可
A31 批量创建 Bot(42 条) 失效 manager API 批创建 + robot_id 唯一索引 直接解决
A32 Bot 自动建群执行会议 失效 robot.sendMessage + group.create 组合 直接解决
A33 文转播客 Bot 音频发送 失效 文件类型支持 voice/file,BBCode 等效用 entities 直接解决
A34 文件发送(MinIO) 稳定 modules/file/service_minio.go 原生 MinIO 适配 + 同时支持 OSS/Qiniu/SeaweedFS TSDD 文件存储后端更广
A35 图片发送 稳定 同上 + Messages/Image/ 原生
A36 文档发布 较稳定 文件通道,type=file 直接继承
A37 MP3 音频文件 较稳定 Messages/Voice/ 语音 Cell 原生
A38 实时语音通话(LiveKit) 失效 🟡 Web Service/Const.ts:67-76 9989-9998 RTC 信令枚举齐全;iOS Pods LiMaoRTC.podspec 是私有 WebRTC framework;RTC 业务模块(WuKongRTC/WuKongMoment 同一商业模块包)开源版不含 需自研 LiveKit/Jitsi 接入
A39 视频/屏幕共享 失效 🟡 同 A38,仅信令枚举占位 需自研
A40 Whisper 语音转文字 较稳定 TSDD 无 STT 守一已有 Whisper 容器可外挂
A41 Web 端 稳定 apps/web/ 完整 React SPA 原生
A42 桌面端(Windows/Electron) 较稳定 apps/web/src-election/ electron-builder 三平台脚本齐全 TSDD 原生 mac/win/linux/arm64 全打包
A43 移动端(Android RN) 较稳定 TSDD 是 Kotlin 原生,不是 RN 不能直接复用秀秀 RN 代码
A44 手机端回车=换行 较稳定 Kotlin 原生需要在 InputView 改 IME action 守一 patch 需在 Android 工程重做
A45 Windows 右键复制 较稳定 Electron 自带 contextmenu 标配 原生
A46 Windows 草稿不丢失 较稳定 服务端 modules/message/db_conversation_extra.go 支持服务端草稿同步(草稿云端) TSDD 比秀秀强(云同步)
A47 对话宽度+界面优化 较稳定 Web 默认布局;自适应弱于 Discord UI 调优需重做
A48 暗色/亮色主题 稳定 Web Components/MessageInput/index.tsx startchat_dark.png 等暗色资源 原生
A49 PWA 添加到主屏幕 稳定 未明确 PWA manifest;React build 默认支持 简单配置即可
A50 IAM RBAC 失效 🟡 TSDD user.role 字段(admin/superAdmin 二级)+ 群组三级角色;无细粒度 RBAC 需扩展
A51 注册首个用户自动管理员 稳定 user-20191106-01.sql 内置 superAdmin 账号机制 原生
A52 HTTPS + Let's Encrypt 稳定 TSDD 不含证书自动化,需 Nginx/Caddy 外挂 部署侧重做
A53 Nginx 反代 + WebSocket 稳定 WuKongIM 5200 WS 端口需透传 部署侧重做
A54 Docker Compose 一键 较稳定 docker/tsdd/docker-compose.yaml + testenv/docker-compose.yaml 双套环境 原生,比秀秀更干净
A55 镜像同步机制 较稳定 守一 sync-xiuxiu.sh 需重写 自研
A56 OpenAPI OIDC Provider 失效 modules/openapi/api.go access_token + authcode + userinfo OAuth2 标配 直接解决
A57 Admin 后台 UI 失效 TangSengDaoDaoManager 独立项目(80 ★) 直接解决(但 9 月没更新)
A58 i18n(zh-CN + en-US) 稳定 Web 端没有 i18n 框架(实测 packages/tsdaodaobase/src 无 locales 目录,群组 tab 写死中文'群组') 不如秀秀,B74 需自研 i18n

A 类继承率统计

类别 数量 占比
✅ 原生满足 39 67.2%
🟡 部分/需小补 12 20.7%
⚠ 需重做/外挂 5 8.6%
❌ 不支持 1 1.7%
❓ 文档未明 1 1.7%
A 类继承率(✅+🟡 算继承) 51 / 58 = 87.9%

A 类关键观察:秀秀 18 条"失效"功能中,有 15 条 TSDD 原生开箱即用(Bot/Admin/OpenAPI/桌面通知/移动推送/群公告全部解决),这是 TSDD 替代秀秀的最大价值。失效未解决的 3 条:A38/A39 实时音视频通话 + A40 Whisper。


三、B 类 89 条对标(目标功能 → TSDD 是否原生支持)

二开难度:低(≤ 1 周)/ 中(1-2 周)/ 高(2-4 周)/ 极高(≥ 4 周)/ 无需

模块 1:消息基础能力(9 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B01 文字消息收发 P0 modules/message/api.go:90+ 无需 0
B02 @提及(含@角色/@everyone) P0 🟡 仅 @个人 + @all;无 @角色 3 人天
B03 消息回复/引用 P0 message entities reply payload 无需 0
B04 消息转发(单/多) P0 Messages/Mergeforward/index.tsx 无需 0
B05 消息多选 P0 🟡 Mergeforward 有选择 UI,复合操作需扩 3 人天
B06 消息置顶 P0 api_pinned.go + message_extra.is_pinned 无需 0
B07 消息撤回 P0 api.go:94 m.revoke 无需 0
B08 消息编辑 P1 api.go:103 m.messageEdit + message_extra.content_edit 无需 0
B09 群发(@everyone/@角色) P0 🟡 仅 @all;@角色广播需扩 4 人天

小计:P0 8 条中 6 条 ✅、2 条 🟡(B02/B09 同源)。二开 10 人天。

模块 2:消息扩展能力(8 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B10 消息搜索(强大稳定) P0 modules/search/ + ZincSearch 全文索引(api.go:317 SearchOn 无需 0
B11 表情反应(Reaction) P1 db_message_reaction.go + reaction_users 无需 0
B12 typing 状态 P1 api.go:98 m.typing + TypingManager.tsx 无需 0
B13 已读/未读 P1 api.go:101 m.messageReaded + db_member_readed.go + messageReceiptList 无需 0
B14 草稿(本地+云端) P0 db_conversation_extra.go 服务端草稿同步 无需 0
B15 富文本/Markdown P0 Text Cell + entities 无需 0
B16 代码块语法高亮 P1 🟡 Markdown 基础渲染有,syntax highlight 弱 2 人天
B17 链接预览(OG) P2 无 OG 预览模块 5 人天

小计:P0 3 条全 ✅;P1 4 条中 3 条 ✅ 1 条 🟡;P2 1 条 ❌。二开 7 人天。

模块 3:群组/频道/权限(7 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B18 群组双层结构 P0 🟡 TSDD 仅 group/channel 两层,无 Panel 8 人天
B19 频道拖拽分组 P1 无频道分组 UI 5 人天
B20 成员管理 P0 group/api.go:77-97 全套 无需 0
B21 RBAC(开箱不依赖插件) P0 🟡 用户级 admin/superAdmin + 群三级角色;细粒度 RBAC 需扩 12 人天
B22 群公告 P0 group.Notice 字段持久 无需 0
B23 邀请链接(次数+美化) P0 invite.go + h5confirm 无需 0
B24 多人会话 P0 group.create 无需 0

小计:P0 6 条中 4 条 ✅、2 条 🟡(B18/B21)。二开 25 人天。

模块 4:真人/Bot 严格分区(6 条 — 守一新要求核心)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B25 用户类型字段(真人/Bot 二态) P0 user-20191106-01.sql:robot smallint + 独立 robot 表(robot-20210926-01.sql) 无需 0
B26 真人只能在真人区发布 P0 🟡 user.robot=0 判断已有;分区规则需应用层 2 人天
B27 Bot 只能在 Bot 区发布 P0 🟡 同上 2 人天
B28 真人秀/Bot 秀双流切换 P0 需依赖朋友圈模块(B31)+ 双 tab UI 8 人天
B29 Bot 朋友圈不混入真人秀 P0 同 B28 含 B28 0
B30 用户类型 API 过滤 P0 group/db.go:347 group_member.robot 字段在查询中可直接 WHERE 过滤 无需 0

小计:P0 6 条中 3 条 ✅、2 条 🟡、2 条 ❌(B28/B29 与朋友圈耦合)。二开 12 人天。守一最核心需求 TSDD 数据层支撑度最优(比 Mattermost is_bot 单字段还多一层 robot 元数据表)。

模块 5:朋友圈体系(5 条 — 守一新要求核心)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B31 朋友圈发布(图文/视频/链接) P0 modules/ 无 moment 目录;仅 common-20230203-01.sql:29 'moment','朋友圈模块' SQL 注册 + base/event/api.go:44-46 EventUserPublishMoment/Delete 事件常量 + file/const.go:10 TypeMoment 文件类型;业务代码=0 极高 18 人天
B32 朋友圈点赞/评论 P0 同上 极高 含 B31
B33 双信息流过滤(真人/Bot) P0 同上 + 双 tab 5 人天
B34 内容审核(敏感词+图片) P1 🟡 message/api.go:106 syncSensitiveWords 敏感词已有;图片审核需外挂 4 人天
B35 跨实例朋友圈可见性 P1 依赖 B49 联邦 含 B49

小计:P0 3 条全 ❌(朋友圈整块需从零开发)。二开 27 人天。iOS WuKongBase/Classes/WKAppConfig.m:651 sid=="moment"→WuKongMoment 映射证实是商业模块,开源版的 SQL 钩子是为商业版预留接口。

模块 6:Bot / Agent / OpenAPI(9 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B36 Bot 原生(不依赖额外容器) P0 modules/robot/ 与主服务同一进程,不需要 service-openapi 单独容器 无需 0
B37 OpenAPI 完整文档 P0 每个 module 含 swagger/ 目录;modules/openapi/swagger/ 无需 0
B38 Bot 鉴权(appId+secret/Token) P0 robot.token + app_id(robot-20211105-01.sql) 无需 0
B39 Webhook(callbackUrl) P0 🟡 TSDD robot 表无 webhook_url 字段;走 long-polling /robot/events 拉取;如要 webhook 需扩展 5 人天
B40 WebSocket/Socket.IO 长连接 P0 🟡 TSDD Bot 是 long-polling;用户走 WuKongIM 5200 WS;Bot 接入 WS 需对接 WuKongIM SDK 而不是 robot 模块 5 人天
B41 Bot 多账号并发 20+ P1 无显式上限 无需 0
B42 Bot 加群授权 P0 用 user.robot=1 的账号 memberAdd 无需 0
B43 Bot 自动建群+执行流程 P1 sendMessage + group.create 组合 无需 0
B44 Bot 个性化 SOUL/Prompt 注入 P1 🟡 placeholder 一行;SOUL.md 走应用层 2 人天

小计:P0 6 条中 4 条 ✅、2 条 🟡(B39/B40 长连接方式不同)。二开 12 人天。streamStart/End 真实存在(robot/api.go:77-78 + 85-115),是 LLM bot 集成的天然接口。

模块 7:部署架构(8 条 — 守一新要求核心)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B45 一键独立部署 P0 docker/tsdd/docker-compose.yaml(生产)+ testenv/docker-compose.yaml(测试)双套 无需 0
B46 完整启停(无失效容器) P0 容器清单:mysql/redis/wukongim/tangsengdaodaoserver/minio 全部必需 无需 0
B47 数据私有化 P0 wukongimdata + miniodata 本地 volume 无需 0
B48 多实例部署 P0 image registry.cn-shanghai.aliyuncs.com/wukongim/* 可换 namespace 多副本 无需 0
B49 跨实例联邦/中继 P0 🟡 WuKongIM 通讯层支持集群(githubim.com 文档);业务层 TSDD 需走 webhook+API 桥接 12 人天
B50 乙方自主授权 Bot 接入公网 P0 modules/openapi/api.go OAuth2 三件套 access_token/authcode/userinfo 无需 0
B51 HTTPS + 证书自动化 P0 不含;需 Nginx/Caddy 外挂 1 人天
B52 资源占用 < 4C8G P1 Go 服务 + WuKongIM 静态二进制,2C4G 实测可跑(githubim 文档) 无需 0

小计:P0 7 条中 5 条 ✅、1 条 🟡(B49 联邦)、1 条 ⚠(B51 部署侧)。二开 13 人天。

模块 8:多端客户端(6 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B53 Web 端 P0 apps/web/src/ React 无需 0
B54 Windows 桌面端 P0 apps/web/src-election/ + electron-builder*.js 无需 0
B55 macOS 桌面端 P0 electron-builder mac-x64/arm64/universal 三套 无需 0
B56 Android 移动端 P0 独立仓库 TangSengDaoDaoAndroid(Kotlin) 无需 0
B57 iOS 移动端 P0 独立仓库(Obj-C/Swift);iOS 仓库 9 月没更新(B75 风险) 需关注 0
B58 手机端体验 ≥ Discord P0 🟡 Kotlin/Swift 原生手感优于 RN,但 UI 细节需优化 8 人天

小计:P0 6 条中 5 条 ✅、1 条 🟡(B58 UI 优化)。二开 8 人天。Tauri 也在 apps/web/src-tauri/ 是额外加分。

模块 9:客户端体验细节(5 条 — 守一自研标准)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B59 手机端回车=换行 P1 Android Kotlin 输入框默认 IME;需测试是否守一标准 2 人天
B60 Windows 右键完整支持 P0 Electron 自带 无需 0
B61 草稿刷新不丢失 P0 db_conversation_extra.go 云草稿 无需 0
B62 对话宽度自适应 P1 🟡 Web 默认布局,需对齐 5 人天
B63 联系人置顶 P1 user_setting.top 无需 0

小计:P0 2 条全 ✅;P1 3 条中 1 条 ✅ 2 条 🟡。二开 7 人天。

模块 10:文件/媒体(7 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B64 文件发送 ≥ 50MB P0 4 种存储后端均支持大文件 无需 0
B65 图片发送(含缩略) P0 Messages/Image/ + thumbnail entities 无需 0
B66 在线打开文档 P0 🟡 文件可下载查看,但内联预览(office/pdf)需第三方 5 人天
B67 MP3 音频文件 P0 Messages/Voice/ 无需 0
B68 语音消息(短语音) P0 Messages/Voice/index.tsx VoiceCell 无需 0
B69 实时语音通话 P1 RTC 信令枚举有,业务模块无(同 A38) 极高 15 人天
B70 视频/屏幕共享 P1 同 B69 极高 含 B69

小计:P0 5 条中 4 条 ✅、1 条 🟡;P1 2 条 ❌(RTC)。二开 20 人天。这是 TSDD 最大短板(与秀秀等同)。

模块 11:品牌改造能力(4 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B71 完整品牌定制 P0 Apache 2.0 无品牌锁;apps/web/public/assets 全可换 无需 0
B72 安装包重新打包(五端) P0 Electron mac/win/linux + Android gradle + iOS xcode 全自主 无需 0
B73 运行时配置 P1 🟡 configs/tsdd.yaml 服务端配置;客户端运行时配置需扩 3 人天
B74 多语言扩展 P1 Web 端无 i18n 框架,硬编码中文 10 人天

小计:P0 2 条全 ✅;P1 2 条中 1 条 🟡 1 条 ❌(i18n 这是 TSDD 比秀秀差的地方)。二开 13 人天。

模块 12:稳定性硬指标(4 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B75 近 3 个月活跃 commit P0 🟡 Server/Web/Android ≤ 90d;iOS 2025-08 → 已 9 月+ 无需 0
B76 完整文档+社区+bug 少 P0 tsdaodao.com + githubim.com 中文文档完整;3493 ★ + 34 issues 无需 0
B77 开源协议宽松 P0 Apache 2.0 无需 0
B78 商用允许 P0 无商业授权限制 无需 0

小计:P0 4 条中 3 条 ✅、1 条 🟡(B75 iOS)。二开 0 人天。

模块 13:待开发新功能(1 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B79 桌面快捷方式(点击进对话窗) P1 🟡 Electron 支持 deep link + Android intent;需做集成 3 人天

模块 14:二次审核补漏(10 条)

序号 目标功能 优先级 TSDD 支持 证据 二开难度 工时
B80 桌面通知 P0 Utils/NotificationUtil.ts Electron + Web Notification 无需 0
B81 移动端推送(APNs/FCM/小米/华为) P0 modules/webhook/ 六路推送原生:apns/firebase/hms/mi/oppo/vivo 无需 0
B82 离线消息/漫游/历史 P0 WuKongIM 消息永久存储;api.go:99 syncChannelMessage/100 syncMessageExtra 无需 0
B83 好友请求/通讯录/在线状态 P0 api_friend.go + api_online.go + service_online.go 无需 0
B84 个人资料编辑 P0 api.go:126 uploadAvatar + userUpdateWithField 无需 0
B85 多端登录同步 P0 db_device_offset.go 设备偏移 + WuKongIM 多端同步内建 无需 0
B86 暗色/亮色主题 P1 见 A48 无需 0
B87 PWA P2 React 默认;未测 1 人天
B88 Admin 后台 UI P0 TangSengDaoDaoManager 独立项目 无需 0
B89 语音转文字 P2 无;外挂 Whisper 5 人天

小计:P0 6 条全 ✅;P1 1 条 ✅;P2 2 条(1 ❓ 1 ❌)。二开 6 人天。B81 推送原生 6 路是 TSDD 杀手锏


四、按模块分组统计

模块 B 类条数 🟡 ❌/⚠/❓ 二开总工时(人天)
1. 消息基础 9 6 3 0 10
2. 消息扩展 8 6 1 1 7
3. 群组权限 7 4 2 1 25
4. 真人/Bot 分区 6 2 2 2 12
5. 朋友圈 5 0 1 4 27
6. Bot/OpenAPI 9 6 3 0 12
7. 部署架构 8 6 1 1 13
8. 多端客户端 6 5 1 0 8
9. 客户端体验 5 2 2 1 7
10. 文件/媒体 7 4 1 2 20
11. 品牌改造 4 2 1 1 13
12. 稳定性硬指标 4 3 1 0 0
13. 待开发 1 0 1 0 3
14. 二次审核补漏 10 8 0 2 6
合计 89 54 19 15 163 人天

人月换算:163 人天 ÷ 22 = 约 7.4 人月(按一人全职 22 工作日)。


五、TSDD 全部未完成项清单(按 P0/P1/P2 分级)

P0 未完成(必须开发,不开发不能上线)

序号 功能名 当前情况 二开方案概要 工时
B02 @角色提及 仅 @个人+@all 在 message entities 加 mention_role 类型,群组层维护 role→uid 列表 3d
B05 消息多选 Mergeforward 有选择 UI 复用选择层 + 批量操作 menu 3d
B09 @角色广播/群发 仅 @all 含 B02;扩展为 multi-recipient 投递 4d
B18 群组三层结构 仅 group/channel 增加 panel 层,DB 加 panel 表 + UI 拖拽 8d
B21 细粒度 RBAC 用户级 admin + 群三级 增加权限位表(permission/role/role_permission/role_user 四张表) 12d
B26-B29 真人/Bot 分区+双流 数据层已支持 robot 字段 应用层加分区校验中间件 + 双 tab UI 12d
B31-B33 朋友圈整块 完全无 从零开发 modules/moment(发布/评论/点赞/双流)+ Web/Android/iOS 三端 UI 27d
B39 Webhook callbackUrl 仅 long-polling robot 表加 webhook_url + 事件分发器 5d
B40 Bot WebSocket 仅 long-polling 对接 WuKongIM SDK 作 Bot 长连接 5d
B49 跨实例联邦 WuKongIM cluster 通讯层有 业务层加 federation 表 + 跨实例 webhook 桥接 12d
B51 HTTPS 证书自动化 不含 Caddy/Traefik 反代 1d
B58 移动端 UI ≥ Discord 基础完整 UX 细节打磨 8d
B66 在线打开文档 仅下载 嵌入 PDF.js / OnlyOffice 预览 5d

P0 未完成合计:14 项,约 105 人天 ≈ 4.8 人月

P1 未完成

序号 功能名 当前情况 二开方案 工时
B16 代码块语法高亮 Markdown 基础 加 highlight.js/Prism 2d
B19 频道拖拽分组 UI + sort_num 字段 5d
B34 朋友圈内容审核 仅敏感词 含 B31;图片审核外挂 4d
B44 Bot SOUL 注入 placeholder 一行 走应用层 prompt 模板 2d
B59 手机端回车=换行 默认 IME Android 输入控件改 IME action 2d
B62 对话宽度自适应 Web 默认 CSS 重做 5d
B69-B70 实时音视频 RTC 信令枚举有,业务无 接 LiveKit/Jitsi(守一已有 LiveKit 镜像可复用) 15d
B73 客户端运行时配置 服务端 yaml 加客户端 config endpoint 3d
B74 多语言扩展 无 i18n 框架 引 react-i18next + 抽字符串 10d
B75 iOS 仓库活跃度 9 月没更新 自家 fork 维护或 OpenClaw 拉群催作者 0d
B79 桌面快捷方式 Electron deep link 可做 集成 protocol handler 3d

P1 未完成合计:11 项,约 51 人天 ≈ 2.3 人月

P2 未完成

序号 功能名 当前情况 二开方案 工时
B17 链接 OG 预览 加 link metadata 服务 5d
B87 PWA 未明确 manifest + service-worker 1d
B89 语音转文字 外挂 Whisper(守一已有镜像) 5d

P2 未完成合计:3 项,约 11 人天

总计


六、TSDD 5 大优势 + 5 大缺陷

5 大优势(与秀秀对比)

  1. Bot/OpenAPI/Admin 三合一开箱即用 + 同进程零依赖 —— 秀秀 service-openapi/all-plugins/admin 三容器从未启动导致 31% 功能失效;TSDD 全部并入主进程,docker-compose 启动即生效(A24-A33/A57 一次性解决)。证据internal/modules.go 全 17 个 module init 在主进程;docker/tsdd/docker-compose.yaml 5 服务全启动。

  2. 原生 6 路移动推送 —— modules/webhook/ 同时支持 APNs/Firebase/华为 HMS/小米/OPPO/VIVO;这是 Rocket.Chat(推送收 10k/月限额)和 Mattermost(HPNS 收费)都收费的能力,TSDD 完全开源。证据push_iosapns.go / push_firebase.go / push_hms.go / push_mi.go / push_oppo.go / push_vivo.go 6 个文件。

  3. streamStart/End 流式 Bot API + LLM 集成最匹配 —— modules/robot/api.go:77-78 + 85-115,专为流式 LLM 输出设计;秀秀的 Bot 走 socket.io 单条 emit,TSDD 走 IMStreamStart→流式投递→IMStreamEnd 三阶段,可以让 OpenClaw 边生成边显示。

  4. Robot 表与 User 表 schema 双轨 —— user.robot smallint 标识 + 独立 robot 表(含 token/app_id/menu/inline_on/placeholder/username),比 Mattermost 单字段 is_bot 多一层 Bot 元数据,B25-B30 真人/Bot 分区天然支持。证据modules/user/sql/user-20191106-01.sql:robot + modules/robot/sql/robot-2021*.sql

  5. 客户端打包成熟(Electron + Tauri + Kotlin + Swift 四套全自主)+ Apache 2.0 完全无品牌锁 —— apps/web/src-election/ + apps/web/src-tauri/ + 9 个 electron-builder*.js 脚本覆盖 mac/win/linux x64/arm64/universal;B71/B72 品牌改造零阻力。

5 大缺陷

  1. 朋友圈整块是商业版功能,开源版只有 SQL 钩子 + 事件常量 + 文件类型枚举 —— modules/ 无 moment 目录;iOS WKAppConfig.m:651 sid=='moment'→WuKongMoment(开源仓库 Modules/ 没这个模块);Web 全文搜索 moment 仅 moment.js 时间库。B31-B33 守一最核心朋友圈需求要从零开发,含三端 UI 共 27 人天。

  2. 实时音视频通话开源版不可用 —— Web Service/Const.ts:67-76 只有 9989-9998 信令编号枚举;iOS 的 LiMaoRTC.podspec 引用 WebRTC.framework + OWT.framework 是私有 Pod;服务端 webhook 有 RTCPayload 接口但没有 RTC 业务模块。A38/A39/B69/B70 全部要外挂 LiveKit/Jitsi,15 人天。

  3. Web 端没有 i18n 框架,硬编码中文 —— packages/tsdaodaobase/src/Components/GlobalSearch/vm.ts:31 itemKey: 'groups' 等位置直接写中文 tab;TSDD 比秀秀(zh-CN + en-US 双语)还差。B74 多语言要 10 人天补 react-i18next。

  4. iOS 仓库 9 个月没更新(2025-08-12) —— 同期 Server/Android/Web 都在 2026 年活跃;这是 B75 硬门槛唯一不通过项。iOS 端日后 bug 修复要靠自家 fork,或催作者。

  5. Bot 接入是 long-polling 而不是 WebSocket —— robot/api.go:71-74 events/eventAck 走 HTTP 拉取;秀秀 Bot 是 socket.io 推送。B39 Webhook callback + B40 WebSocket 两条 P0 各需 5 人天扩展。


七、TSDD 总评

量化指标

指标 说明
A 类继承率 51/58 = 87.9% 秀秀现有 58 条中 51 条能无缝继承到 TSDD(39 ✅ + 12 🟡)
A 类失效救援率 15/18 = 83% 秀秀 18 条失效中 15 条 TSDD 原生开箱即用(Bot/Admin/推送/通知/群公告/OpenAPI/OIDC 全救活)
B 类满足率 54/89 = 60.7% 完全满足,再加 19 部分满足 = 73/89 = 82.0% P0 59 条中约 51 条满足(86.4%)
二开总工时 163-167 人天 ≈ 7-8 人月 P0 14 项 4.8 人月 + P1 11 项 2.3 人月 + P2 3 项 0.5 人月
3 道硬门槛 协议 ✅ + 维护 🟡(iOS 单点)+ 11 项核心能力 9.5/11 整体通过

选型推荐场景

强烈推荐 TSDD 的场景
- 守一最看重 国产中文友好 + 原生 6 路推送 + LLM Bot 流式接入 + 一键独立部署
- 可以接受朋友圈从零开发的 27 人天投入
- 客户端要做品牌改造(TSDD 无 whitelabel 锁)

不推荐 TSDD 的场景
- 立刻需要原生朋友圈商业产品 → 应直接考虑买 TSDD 商业版(WuKongMoment 模块)
- 立刻需要原生实时音视频 → 应转 Mattermost Calls 插件
- 多语言市场(非中文为主)→ TSDD 没 i18n 框架

与 Top3 综合评分对比(来自 /tmp/tailchat-ima/Top3对标分析.md

Rocket.Chat TSDD Mattermost
P0 满足率 85.6% 92.4% 92.4%
综合得分 8.20 8.61 8.45
二开工时 8-12 周 9-13 周(与本报告 7-8 人月一致) 8-12 周
协议风险 RBAC/Whitelabel 锁 AGPL fork 风险

结论:TSDD 是当前最优解,前提是把"朋友圈 + 实时音视频 + i18n + 联邦"这四块二开工时(≈ 5 人月)纳入项目计划。


八、3 个颠覆性结论的实证

结论 1:朋友圈是商业版/订阅功能(只有 app_module 注册 + 事件钩子,无 UI 实现)

✅ 完全证实。证据三连:
- 服务端:grep -r moment modules/ 仅命中 4 处——
- modules/common/sql/common-20230203-01.sql:29 注册 app_module='moment','朋友圈模块','发布朋友圈,查看朋友圈,评论朋友圈,收到评论动态时显示朋友圈消息红点等等'
- modules/base/event/api.go:44,46 定义 EventUserPublishMoment='moment.publish' + EventUserDeleteMoment='moment.delete'
- modules/file/const.go:10,12 定义 TypeMoment / TypeMomentCover 文件类型
- 无 modules/moment 目录ls modules/ 仅 17 个目录,无 moment/timeline/friend_circle)
- iOS:WKAppConfig.m:651 if([sid isEqualToString:@"moment"]) sid=@"WuKongMoment",但 ls Modules/ 仅 5 个模块(WuKongBase/Contacts/DataSource/IMiOSSDK/Login),WuKongMoment 不在开源仓库
- iOS:WKMOSContentConvertManager.m:218,227,479,480 仅承接 case 40/41 朋友圈消息接收(消息类型路由),无发布/列表 UI

结论 2:Robot 表与 User 表 schema 分离(B25-B30 真人/Bot 分区天然支持)

✅ 证实并补充细节:实际是 user 表用 robot smallint 字段标识 + 独立 robot 表存 Bot 元数据——比单字段 is_bot 多一层。证据:
- modules/user/sql/user-20191106-01.sql:robot smallint not null default 0 -- 机器人 0.否1.是 (建表即有)
- modules/robot/sql/robot-20210926-01.sql 独立 robot 表(id/robot_id/token/version/status/created_at/updated_at)+ robot_menu
- modules/group/db.go:347 群成员查询直接 SELECT group_member.robot——B30 用户类型 API 过滤天然支持

这意味着 B25 真人/Bot 二态判断 = WHERE user.robot=0(真人)或 =1(Bot);B26-B27 真人区/Bot 区发布只需在 sendMsg 中间件加 robot 字段校验;B30 API 过滤 一行 SQL 解决。只有 B28-B29 双流 UI 因依赖朋友圈而需含进 B31 的 27 人天

结论 3:streamStart/End 流式 Bot API(OpenClaw LLM 集成最匹配)

✅ 完全证实。证据:
- modules/robot/api.go:77 robotAuth.POST("/stream/start", rb.streamStart)
- modules/robot/api.go:78 robotAuth.POST("/stream/end", rb.streamEnd)
- modules/robot/api.go:85-101 streamStartconfig.MessageStreamStartReq,调 rb.ctx.IMStreamStart(req) 拿到 streamNo 返回
- modules/robot/api.go:104-115 streamEndconfig.MessageStreamEndReq,调 rb.ctx.IMStreamEnd(req)
- 配合 modules/robot/model.go:60-66 MessageReq.StreamNo string——Bot 拿到 streamNo 后可以多次调 sendMessage 携带同一 stream_no 边生成边推送,最终调 streamEnd

对 OpenClaw 的意义:LLM 边生成 token 边 push 给 TSDD,用户能看到打字机效果;这比 Mattermost/Rocket 的 Bot 等完整 message 才能发更接近 ChatGPT 体验。这是 TSDD 区别于其他 IM 服务最独特的设计


九、参考路径