外观
Nexo IM — MVP 需求文档
范围:仅覆盖第一个 MVP(单聊跑通),远期愿景与后续分期不在本文档展开
1. 背景与目标
Nexo 是 lamolabs 团队自用(dogfooding)的 AI 原生工作 IM。远期愿景一句话:聊天中产生点子 → 唤起 AI 澄清成结构化需求 → 建临时群协作 → agent 服务实现 → 验收后自动解散群组,形成工作流闭环。
本 MVP 的唯一目标:把 IM 地基跑通——团队 5 人能用它完成日常单聊(收发消息、换人聊天)。一切 AI 能力从 MVP2 开始,不属于本期。
2. 用户与使用场景
- 用户:lamolabs 团队成员,共 5 人,预置账号,不开放注册
- 场景:工作日常沟通;PC 客户端(nexo-im-pc)常驻使用
- 服务端:nexo-im-api(Hono + PostgreSQL + WebSocket,工程骨架已就绪)
3. 功能需求
P0(缺一不可)
FR-1 账号与登录
- 预置 5 个团队账号(用户名 + 密码),登录成功后获得会话凭证
- 登录失败给出明确提示;不做开放注册、找回密码(密码由管理员重置)
- 同一账号仅支持单端在线,后登录踢前登录
FR-2 会话列表与换人聊天
- 展示团队成员列表,点击任一成员即可发起/进入单聊
- 已有会话按最近一条消息时间倒序排列
- 点击切换会话,聊天窗口正确切换上下文
FR-3 文本消息收发
- 会话内发送文本消息;对方在线时通过 WebSocket 实时收到
- 对方离线时消息落库,其重新上线后能完整拉到错过的消息
- 消息发送有成功/失败反馈,失败可重发
FR-4 历史消息
- 进入会话拉取最近一页消息,向上滚动分页加载更早消息
- 同一会话内消息顺序稳定(刷新、重连后顺序不变)
P1(重要,资源不足可顺延)
FR-5 未读数:会话列表展示各会话未读条数,进入会话后清零 FR-6 在线状态:成员列表/会话中显示对方在线、离线状态
4. 明确不做(Out of Scope)
- 群聊(后续与"临时群组"一并设计)
- 图片、文件、语音、视频消息
- 消息撤回、编辑、引用回复、表情回应、@提及
- 消息搜索
- 移动端、多端同步、离线推送
- 全部 AI 能力(需求澄清、建群、agent 实现等,自 MVP2 起分期引入)
- 端到端加密(团队内部自用,暂不需要)
5. 非功能需求
- 消息持久化于 PostgreSQL,服务重启不丢失已确认送达的消息
- 正常网络下消息端到端延迟 ≤ 1s
- 规模按 5 人设计,不设高并发指标;服务端单实例部署即可
- 客户端断线后自动重连,重连后自动补齐断线期间的消息
6. 验收标准(端到端场景)
- [ ] A 用预置账号登录成功;错误密码被明确拒绝
- [ ] A 在成员列表点击 B 发起会话,发送消息,B 端 1s 内实时收到
- [ ] B 回复后 A 实时收到,双方看到的消息顺序完全一致
- [ ] A 切到 C 聊天再切回 B,两个会话上下文互不串扰(换人聊天)
- [ ] B 离线期间 A 持续发消息,B 重新登录后完整收到
- [ ] 客户端刷新/重启后历史消息完整、顺序不变,向上翻页可加载更早消息
- [ ] 同账号第二处登录时,第一处被踢下线
- [ ] (P1)未读数正确累计与清零;(P1)在线状态正确变化
7. 约束与说明
- 本文档只定义"做什么";消息协议、表结构、seq 设计等属技术方案,另行评审
- 需求文档中"用户"一律指 lamolabs 团队 5 名成员
- MVP 验收人:团队全员试用一周,日常沟通可完全替代现用工具即视为达成目标