概览
Socket Session
┌──────────────────────────────────┐ │
│Register│ │ │
│────────┘ │ │
┌─────────────────────────│ 1.inner root │◄────│
│ └──────────────────────────────────┘ │
│ │ │
│ │ │
▼ ▼ │
┌──────────────────────────────────┐ ┌──────────────┐───────────────────┐ │
│Auth│ │ │Activate&Bind │ │ │
│────┘ │ └──────────────┘ │ │
│ 1.OTA(v1,v2) │◄─────│ 1.OTA(v1,v2) │◄────│
│ 2.Nostr │ │ 2.Nostr │ │
└──────────────────────────────────┘ └──────────────────────────────────┘ │
│ │ │
│ └────────────────────────────┐ │
│ (Bearer Token) │ (JWT) │
▼ ▼ │
┌───────────────────┐──────────────┐ ╔══════════════════════════════════╗ │
│Protocol Translator│ │ ║Restful │ ║ │
└───────────────────┘ │ ║────────┘ ║────┘
│ 1.XiaoZhi │ ║ ║
└──────────────────────────────────┘ ╚══════════════════════════════════╝
│
│
▼
┌────────────┐─────────────────────┐
│Input Filter│ │
└────────────┘ │
│ 1.Recorder │
│ 2.McpRouter │───────────────────────────────────────────┐
└──────────────────────────────────┘ │
│ │
│ Frame │ Frame
▼ ▼
┌───────────────────────────────────────────────────┐ ┌──────────────────────────────────┐
│ Session │ │ │ Mcp Session │ │
│─────────┘ │ │─────────────┘ │
│ ▲ │ │ │ │
│ │ │ Pipeline Event │ │ │
│ │ Round Event │ │ │ ┌───────────────────────────┐ │
│ │ ▼ │ │ │Mcp Registry│ │ │
│ ┌───────────────────────┐──────────────────┐ │ │ │────────────┘ │ │
│ │ Round(shadow/running) │ │ │ ┬──────►│ 1.Device Mcp Client │ │
│ └───────────────────────┘ │ │ │ │ │ 2.External Mcp Client │ │
│ │ ▲ │ │ │ │ │ │ │ │
│ │ │ │ Pipeline │ │ │ │ │ │ │
│ │ │ Tap Event │ Event │ │ │ │ │ │ │
│ │ │ (broadcast)▼ │ │ │ │ │ │ │
│ │ ┌──────────┐───────────┐ │ │ │ │ │ │ │
│ │ │ Pipeline │ │ │ │ │ │ └───────────────────────────┘ │
│ │ └──────────┘ │ │ │ │ └──────────────────────────────────┘
│ │ │ 1. VAD │ │ │ │ │
│ │ │ 2. ASR │ │ │ │ │
│ │ │ 3. Turn │ │ │ │ │
│ │ │ 4. Ling(LLM) ◄─────────────────┘ │
│ │ │ 5. TTS │ │ │ │
│ │ └──────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ │ Pipeline │ │ │
│ │ │ Event │ │ │
│ │ ▼ │ │ │
│ └──────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Pipeline │ │
│ │ Event │ │
│ ▼ │ │
└───────────────────────────────────────────────────┘ │
│ │
│ FrameResult │
│ │
▼ │
┌─────────────┐────────────────────┐ │
│Output Filter│ │ FrameResult │
└─────────────┘ │◄───────────────────────────┘
│ 1.Recorder │
└──────────────────────────────────┘
│
│
▼
┌───────────────────┐──────────────┐
│Protocol Translator│ │
└───────────────────┘ │
│ 1.XiaoZhi │
└──────────────────────────────────┘
│
│
▼
Restful
┌────┐──────────────────────────┐
│Docs│ │
└────┘ │
│ 1.Scalar │
│ │
│ └───────────────────────────────┘
│ Request
│
▼
┌──────────────────────────────────────────────────┐ ┌────┐──────────────────────────┐
│Layer│ │ │Task│ │
│─────┘ │ └────┘ │
│ │ │ 1.Security cleanup loop │
│ ┌────────┐─────────────────────┐ │ │ │
│ │CORS │ │ │ │ │
│ └────────┘ │ │ └───────────────────────────────┘
│ │ │ │
│ └──────────────────────────────┘ │
│ │ │
│ │ │
│ ▼ │
│ ┌────────┐─────────────────────┐ │
│ │Tracing │ │ │
│ └────────┘ │ │
│ │ │ │
│ └──────────────────────────────┘ │
│ │ │
│ │ │
│ ▼ │
│ ┌───────────┐──────────────────┐ │
│ │Body Limit │ │ │
│ └───────────┘ │ │
│ │ │ │
│ └──────────────────────────────┘ │
│ │ │
│ │ │
│ ▼ │
│ ┌────────┐─────────────────────┐ │
│ │Timeout │ │ │
│ └────────┘ │ │
│ │ │ │
│ └──────────────────────────────┘ │
│ │ │
│ │ │
│ ▼ │
│ ┌────────┐─────────────────────┐ │
│ │Security│ │ │
│ └────────┘ │ │
│ │ 1.Access log │ │
│ │ 2.Rate Limit │ │
│ │ 3.Auth │ │
│ └──────────────────────────────┘ │
│ │
│ │
│ │
└──────────────────────────────────────────────────┘
│
│ Response
│
▼
IOT
┌─────────────────┐─────────────┐ ┌───────────────┐───────────────┐
│ Input Controller│ │ │ Reporter │ │
└─────────────────┘ │ └───────────────┘ │
│ │ │ │
│ ┌──────────────────────┐ │ │ │
│ │Device Signal Input│ │ │ │ │
│ │───────────────────┘ │ │ │ │
│─►│ │ 1.Device Signal │ │ │ │
│ │ │ 2.Intent(JSON) │ │ └───────────────────────────────┘
│ │ │ │ │ │ ▲
│ │ │ │ │ │ Query │ Query Response
│ │ └──────────────────────┘ │ ▼ │
│ │ │ │ ┌───────────────┐───────────────┐
│ │ ▼ │ │ State Manager │ │
│ │ ┌─────────────┐────────┐ │ └───────────────┘ │
│ │ │Input Limiter│ │ │ │ 1. Render State │
│ │ └─────────────┘ │ │ │ 2. Demand State │
│ │ │ │ │◄───│ │
│ │ │ │ │ │ │
│ │ └──────────────────────┘ │ │ │
│ │ │ └───────────────────────────────┘
│ └───────────────────────────────┘ │ ▲ │
│ ▲ │ │ Signal │ │ │
│ │ │ │ │ │ │
│ │ │ ▼ ▼ │ │
│ │ │ ┌───────────────┐──────┐ │ │
│ │ │ Intent │Intent Resolver│ │ │ │
│ │ └────────────► └───────────────┘ │ │ │
│ └─────────────────│ │ │ │
│ Ack │ │ │ │
│ └──────────────────────┘ │ │
│ │ │ │
│ │ Intent │ │
│ │ │ │
│ ┌─────────────────────────│──────────────────│───│──┐
│ │ Loop Logic│ │ │ │ │
│ │───────────┘ │ │ │ │
│ │ ▼ │ │ │
│ │ ┌───────────┐───────────────┐ │ │ │
│ │ │ Intent Bus│ │ │ │ │
│ │ └───────────┘ │ │ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ └───────────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ │ Intent │ │ │
│ │ │ │ │ │
│ │ ▼ │ │ │
│ │ ┌──────┐──────────────────────────┐ │ │ │
│ │ │ Logic│ │ │ │ │
│ │ └──────┘ │◄───┘ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────┤ │
│ │ │ ┌──┘ │
│ │ ▼ ▼ │
│ │ ┌─────────────┐────┐ ┌──────────┐────────┐ │
│ │ │ Configurator│ │ │ Render │ │ │
│ │ └─────────────┘ │ └──────────┘ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ └──────────────────┘ └───────────────────┘ │
│ │ │
│ └───────────────────────────────────────────────────┘
│ │
│ │
│ │ Signal(Config,Render)
│ │
│ ▼
│ ┌───────┐───────────────────────────────────────────┐
│ │ Board │ │
│ └───────┘ │
│ │ │
│ │ ┌──────────────┐────────────────────┐ │
│ │ │ Configuration│ │ │
│ │ └──────────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ └───────────────────────────────────┘ │
│ │ │ │
│ │ │ │
│ │ ▼ │
│ │ ┌───────────────────────────────────┐ │
│ │ │ Device│ │ │
└───────────────────│ │───────┘ │ │
│ │ │ │
│ │ │ │
│ └───────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────┘
状态
列说明:
| 列 | 说明 | 可选值 |
| 优先级 | 优先级等级 | 🔴 P0 / 🟠 P1 / 🟡 P2 / 🔵 P3 |
| 状态 | 功能完成度 | ✅ 已完成 / ⚠️ 有缺陷(stub/不完整)/ ❌ 未实现 |
| 测试 | 是否存在自动化测试 | ✅ 有 / ❌ 无 / — 不适用 |
| 项目 | 功能名称 | — |
| 描述 | 简要说明 | — |
| 链接 | 文件路径或 Issue 链接 | (待填) |
优先级说明:
| 等级 | 语义 | 示例 |
| 🔴 P0 | 基础架构 / 影响运行的严重 bug | 核心链路缺口、认证与安全、竞态缺陷 |
| 🟠 P1 | 必要功能 | 产品核心能力、正式发布前必须补齐的功能 |
| 🟡 P2 | 增强功能 | 完善性提升、管理界面、可选协议支持 |
| 🔵 P3 | 可选优化 | 体验打磨、低功耗调优等不阻塞功能的事宜 |
优先级由人工评估;代理仅记录,分辨不清时必须询问人类,禁止自行推断。
Register
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ❌ | ❌ | 内置 root | 仅 migration 创建,无运行时注册端点 | |
Auth
OTA 认证
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | OTA v1 | 基础设备认证,返回 ws_url+token(已激活返回真实 JWT,未激活为空) | |
| 🟠 P1 | ❌ | ❌ | 固件分发 | OTA 返回 version: "0.0.1" + url: null,无实际固件下载链接 | |
| 🟡 P2 | ❌ | ❌ | MQTT 支持 | OTA 返回 mqtt: null,MQTT 协议未实现 | |
| 🟠 P1 | ❌ | ❌ | OTA v2 | 完整认证 + 设备信息上报 + 固件分发(当前返回静态数据) | |
Nostr 认证
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ❌ | ❌ | NIP-98 认证 | 未实现 | |
WS 认证
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | Bearer Token 验证 | Authorization header + query param fallback,JWT 解码验证 | |
Token 生命周期
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ❌ | ❌ | Refresh 吊销 | refresh token 无吊销机制,logout 仅客户端丢弃 | |
| 🟠 P1 | ❌ | ❌ | Token 日志 | access/refresh token 以明文写进 tracing span 字段 | |
Activate&Bind
OTA 激活
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | OTA v1 | 激活码验证 + 设备信息持久化 | |
| 🟠 P1 | ❌ | ❌ | OTA v2 | 完整激活流程(含挑战码验证),未实现 | |
Nostr 绑定
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ❌ | ❌ | 绑定/角色注册 | 未实现 | |
Protocol Translator
XiaoZhi
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ❌ | 输入帧解析 | hello/listen/abort/mcp/voice 完整解析 | |
| 🔴 P0 | ✅ | ❌ | 输出帧序列化 | STT/LLM/TTS/Audio/Error 完整序列化 | |
| 🟠 P1 | ❌ | ❌ | 缺失消息类型 | system/alert/wake_word 未实现 | |
Recorder (输入)
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ✅ | ✅ | 输入落库 | 帧数据持久化到数据库 | |
McpRouter
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | MCP 帧路由 | 拦截 Frame::Mcp → McpSession | |
Session
Listener
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | VAD (Silero) | Earshot 实现,帧级语音检测 | |
| 🔴 P0 | ✅ | ✅ | ASR (sherpa-onnx) | XAsr 模型,16kHz mono | |
| 🔴 P0 | ✅ | ✅ | Voice Break 检测 | 静音超时触发 TurnComplete | |
| 🟠 P1 | ✅ | ✅ | Continued Conversation | auto/realtime 模式,TTS 后自动进入语音监听 | |
| 🟡 P2 | ❌ | ❌ | 语义 VAD / 分层轮次 | 仅 Layer1 Silero,缺标点/语义层 | |
| 🟠 P1 | ❌ | ❌ | 声纹识别 | 与 ASR 并行识别说话人并注入 LLM;需注册/管理流程 + 声纹向量 + 上下文注入 | |
| 🟠 P1 | ❌ | ❌ | 动态 VAD 参数 | 静音阈值/门限目前固定,需按对话状态运行时调整 | |
| 🟠 P1 | ❌ | ❌ | ASR Settle + Reopen | VAD 静音后立即 ASR 可能丢尾部音素;无 reopen 机制 | |
| 🟠 P1 | ❌ | ❌ | 多 ASR Provider | 只有一套 sherpa-onnx 实现,无模型切换与回退 | |
| 🟡 P2 | ❌ | ❌ | 填充词/犹豫检测 | ASR 输出 uh/um/呃/嗯 + 短音频(<3 s)不触发 LLM | |
| 🟡 P2 | ❌ | ❌ | 环境监听模式 | 非唤醒词触发的被动监听 + 主动响应,需隐私架构(不存原始音频) | |
| 🟡 P2 | ❌ | ❌ | ASR 输入约束 | 仅 16 kHz 单声道;Asr 无 Sync,不能跨线程共享 | |
| 🔵 P3 | ❌ | ❌ | Speaker Diarization | 多人场景说话人分离 | |
| 🔵 P3 | ❌ | ❌ | AEC 服务端降噪 | 当前仅客户端 AEC,服务端无回声消除 | |
Round
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | Shadow / Running 双轮 | 预创建 shadow round 降低切换延迟 | |
| 🟠 P1 | ✅ | ✅ | Barge-in + lockout | 可配置 lockout 窗口 (默认 250ms) | |
| 🟠 P1 | ✅ | ✅ | Epoch 消息过滤 | 过时轮次消息丢弃,保留 TTS 状态通知 | |
| 🔴 P0 | ✅ | — | stop_round 竞态 | 已修复,5s 超时兜底 | |
| 🟠 P1 | ✅ | ✅ | AudioPacer | 按 output_frame_duration 限速音频输出 | |
| 🟠 P1 | ❌ | ❌ | Opus-to-PCM 预缓冲 | 下行无预缓冲,网络抖动直接表现为播放卡顿 | |
LingCore
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | Qwen3 LLM (candle) | 流式生成,线程安全已修复 | |
| 🟠 P1 | ✅ | ✅ | Splitter (sentencex) | 中文/英文分句,700ms 超时兜底 | |
| 🟠 P1 | ✅ | ✅ | ToolCall 循环 | LLM → MCP tool → 结果回注 → LLM 再生成 | |
| 🟠 P1 | ✅ | ✅ | History 管理 | 上下文截断 (max_prompt_len) 及持久化 | |
| 🟡 P2 | ⚠️ | ❌ | 情绪识别 | 始终返回 "happy",无真实分析 | |
| 🟡 P2 | ❌ | ❌ | 个性化记忆 | 长期偏好/用户画像存储未实现 | |
| 🟠 P1 | ❌ | ❌ | RAG 知识库 | MCP 可接入,但无内置向量检索 | |
| 🟠 P1 | ❌ | ❌ | Intent 识别 | 无独立 intent 层,意图全靠 LLM 单次生成 | |
| 🟠 P1 | ❌ | ❌ | LLM 历史阻塞 | 会话历史 DB 落盘阻塞整条生成线程 | |
| 🟡 P2 | ❌ | ❌ | Agent 任务编排 | LLM + MCP 工具链自主执行多步任务 | |
| 🔵 P3 | ❌ | ❌ | describe O(n) | 每次实时构建全量消息历史 | |
| 🔵 P3 | ❌ | ❌ | 引导式推理对话 | 教育 AI 引导模式,需 prompt 工程 + 对话状态 | |
TTS
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | MatchaTTS + Opus | sherpa-onnx 引擎,Opus 编码输出 | |
| 🟠 P1 | ✅ | ✅ | 两阶段流式 | token 级首包快速发出 + 句子级稳态 | |
| 🟡 P2 | ✅ | ❌ | TTFA/RTF 埋点 | 首包延迟/实时率性能监控 | |
| 🔵 P3 | ✅ | ❌ | Fade-out | 尾部淡出消除 click | |
| 🟠 P1 | ❌ | ❌ | Piper/Kokoro 引擎 | 可替换或补充 MatchaTTS;Piper 适合边缘,Kokoro 质量/体积比更好 | |
| 🟠 P1 | ❌ | ❌ | 多语言 TTS | 当前仅单语言;ESP32 端 ASR 已支持 25+ 语言 | |
| 🟠 P1 | ❌ | ❌ | 多 TTS Provider | 只有一套实现,无引擎切换与回退 | |
| 🟠 P1 | ❌ | ❌ | Quick Reply | LLM 推理期间先播"我在"/"来了",降低感知延迟 | |
| 🟠 P1 | ❌ | ❌ | 动态音色切换 | 基于声纹识别自动切换 TTS 音色 | |
| 🟠 P1 | ❌ | ❌ | 尾部 Hold Buffer | ~240 ms 帧缓存,避免末音节被切(fade-out 已实现) | |
| 🟡 P2 | ❌ | ❌ | 句间静音优化 | 固定静音 → 按标点调整(逗号 0.3 s / 句号 0.6 s) | |
| 🟡 P2 | ❌ | ❌ | 对话韵律 | 呼吸/犹豫/笑声等韵律,让语音更像真人 | |
| 🟡 P2 | ❌ | ❌ | 情绪自适应语调 | 检测情感标签并调整语气 | |
| 🔵 P3 | ❌ | ❌ | 声音克隆 | MatchaTTS 支持 reference audio,缺配置接口 | |
| 🔵 P3 | ❌ | ❌ | TTS 克隆开销 | Arc<str> 与 String 之间的克隆风暴 | |
| 🔵 P3 | ❌ | ❌ | 音频标准化集成 | adaptive_normalize() 已实现,未接入 TTS 输出 | |
McpSession
McpRegistry
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | 工具注册/聚合 | 多 client 工具合并,按名路由调用 | |
Device Mcp Client
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | rmcp 传输层 | 设备 MCP 协议桥接,完整握手 | |
External Mcp Client
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ✅ | ✅ | HTTP 远程 MCP | 连接外部 MCP 服务器,工具列表缓存 | |
MCP 认证
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | /mcp 端点认证 | Bearer JWT 认证 + rmcp 默认 Host 校验 | |
工具生态
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ❌ | ❌ | 家居集成 | Home Assistant 等智能家居场景,经 MCP 接入 | |
| 🟠 P1 | ❌ | ❌ | 设备间通话 | 设备像电话一样互呼,需 MQTT gateway + 通讯录管理 | |
| 🟠 P1 | ❌ | ❌ | 音乐播放 | 行业标配;需 LRC 歌词同步 | |
| 🟠 P1 | ❌ | ❌ | Timer/提醒/闹钟 | 当前无任何定时/提醒机制 | |
| 🟡 P2 | ❌ | ❌ | 插件系统 | 无插件架构,扩展需改核心代码 | |
| 🟡 P2 | ❌ | ❌ | MCP Market | 第三方工具市场聚合 + 一键导入 + 热加载 | |
| 🟡 P2 | ❌ | ❌ | MCP 调试控制台 | 每 Agent 独立端点,实时调用测试 + per-agent 过滤 | |
| 🟡 P2 | ❌ | ❌ | MCP 工具聚合 | 预置工具库(钉钉/QQ/系统监控/WebPilot/计算) | |
| 🟡 P2 | ❌ | ❌ | MQTT 网关 | MQTT+UDP → WS 桥接:分布式部署 + 负载均衡 + HMAC | |
| 🟡 P2 | ❌ | ❌ | 配置向导 + 全链路测试 | 首次运行向导 + 每组件延迟测试 + 可视化 | |
Output Filter
Recorder (输出)
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟡 P2 | ✅ | ✅ | 输出落库 | 帧/轮次数据持久化到数据库 | |
| 🟠 P1 | ❌ | ❌ | Recorder 上限 | Vec<RecordEntry> 无大小限制,高并发下内存无界增长 | |
Restful
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | POST /api/auth/login | 账号密码认证,返回 access/refresh token | |
| 🔴 P0 | ✅ | ✅ | POST /api/auth/access_token | refresh token 换新 | |
| 🟠 P1 | ✅ | ✅ | POST /api/auth/reset_password | JWT 鉴权,旧密码验证 | |
| 🟠 P1 | ✅ | ✅ | GET /api/auth/user | 返回当前用户信息 | |
| 🟡 P2 | ✅ | ❌ | GET /api/stats/summary | 概览统计(设备/会话/消息数/延迟均值) | |
| 🟡 P2 | ✅ | ❌ | GET /api/stats/trends | 趋势数据(设备/会话/消息日趋势) | |
| 🟡 P2 | ✅ | ❌ | GET /api/stats/latency | 延迟百分位数据(P50/P90/P99 等) | |
| 🔴 P0 | ✅ | ✅ | Rate Limiting | GitHub 风格资源桶:auth/ota per-IP 固定窗口(20/15min、30/min)+ core per-user(1000/h)+ X-RateLimit-* 响应头 + per-account 登录失败锁(5 次/15 分钟) | |
| 🔴 P0 | ✅ | ✅ | GET /api/security/rate_limit | 认证内省端点,返回 auth/ota/core 配额与实时用量,本身不消耗配额 | |
| 🟡 P2 | ❌ | ❌ | Invite Code 系统 | 注册邀请码生成/验证未实现 | |
| 🟠 P1 | ✅ | ❌ | 设备管理 CRUD | 列表/激活(按码/按ID)/禁用/启用/删除端点已实现(缺详情) | |
| 🔵 P3 | ❌ | ❌ | Session 导出/删除 | Session 仅可查看,不可导出或删除 | |
后台管理
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ❌ | Dashboard 页面 | 6 个 StatCard、TrendsChart、LatencyChart、RecentSessionsTable、LatencyTable | |
| 🟠 P1 | ✅ | ✅ | 会话列表/详情 | 搜索/日期过滤/分页/SessionDetail 组件 | |
| 🟠 P1 | ✅ | ✅ | 安全事件监控 | 限流/登录成败事件落库 + 管理页查询(类型/IP 过滤 + 分页)+ 30 天自动清理 | |
| 🟡 P2 | ❌ | ❌ | User CRUD 管理 UI | 用户列表/创建/删除/角色管理未实现 | |
| 🟡 P2 | ❌ | ❌ | RBAC 管理 | Token 用量/对话时长/设备活跃度/权限角色未实现 | |
| 🟡 P2 | ❌ | ❌ | MCP 仪表盘 | 多端点管理/工具同步/访问控制/日志未实现 | |
| 🟡 P2 | ❌ | ❌ | 系统监控 | 服务器健康/连接数/资源使用/错误率未实现 | |
Flutter App
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ❌ | ❌ | 共享客户端协议 | device 身份接入(与 IoT 同构),WS 语音 + 遥测 + MCP 工具面 | 规格 |
| 🟡 P2 | ❌ | ❌ | USB 外设遥测 | Android 先行(OTG/USB-Host),iOS 仅语音 + 屏 | |
| 🟡 P2 | ❌ | ❌ | CI/CD | iOS/Android 构建/签名/发布流水线未实现 | |
| 🟠 P1 | ❌ | ❌ | Flutter WS/认证集成 | 脚手架已存在,WS 连接与认证未接入 | |
IoT
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🔴 P0 | ✅ | ✅ | apps/iot 骨架 | core/chip/bsp/app 四层;esp32c6 no_std(riscv32imac,无需 espup/ESP-IDF) | |
| 🔴 P0 | ⚠️ | ✅ | core 外设/能力模块 | 板能力 trait(HasLight/HasInput)组合有测;base(network/config/HTTP/OTA)待 P1 | |
| 🔴 P0 | ✅ | ✅ | LED 应用 | WS2812 RGB 灯(GPIO8)+ RMT 驱动;声明式渲染 + 呼吸动画 | |
| 🔴 P0 | ✅ | ✅ | 按钮应用 | BootButton(GPIO9)消抖 → Intent → 意图总线 → 状态分发 → 渲染 diff | |
| 🔴 P0 | ✅ | — | 构建/烧录任务 | moon check/test/build/flash,产物 .elf/.bin;espflash 入 devShell | |
| 🔴 P0 | ✅ | — | CI 集成 | moon ci 编译固件并上传 artifact | |
| 🔴 P0 | ⚠️ | — | CD release | iot release workflow(tag vanling-iot@x.y.z)发版;端到端未实测 | |
| 🟠 P1 | ❌ | ❌ | 设备端配置 | softAP 配网页 + 外设能力启停 + 配置持久化 | |
| 🟠 P1 | ❌ | ❌ | 开放输入(Other Input)+ Ack | JSON/Server 指令入意图总线 + 命令 Ack(见 IOT 图) | |
| 🟠 P1 | ❌ | ❌ | 遥测上传方向①落盘 | HTTP 短事务 + device_key,落 server 仓库 | |
| 🟠 P1 | ❌ | ❌ | 屏幕显示 | 分页渲染外设(home/config/ota 本地页;chat 语音驱动) | 规格 |
| 🟠 P1 | ❌ | ❌ | server 能力协商 | hello 能力集 → 动态管线组装 + 热重载 | |
| 🟠 P1 | ❌ | ❌ | 遥测会话读取方向② | MCP home_state + device MCP 实时直查 | |
| 🟠 P1 | ❌ | ❌ | 状态查询(Reporter) | Query/Response 只读 State Manager 快照(见 IOT 图) | |
| 🟠 P1 | ❌ | ❌ | server 认证收紧 | WS 仅收 device JWT,遥测归属设备维度 | |
| 🟠 P1 | ❌ | ❌ | server IoT API | 遥测接入 + 设备管理 | |
| 🟠 P1 | ⚠️ | ✅ | 业务组合模型 | bin 板清单 move 注入能力;产品档 = feature 别名;判据见 features.md | |
| 🟠 P1 | ❌ | ❌ | 多芯片移植底座 | 家族分仓 iot-chip-<f>/iot-bsp-<f> + main cfg 家族入口 + toolchain/CI matrix | |
| 🟡 P2 | ❌ | ❌ | ESP32-S3(实战派)板支持 | xtensa-esp32s3 目标 + 实战派 szpi-bsp + moon 双板任务 + display-HasLight | |
| 🟠 P1 | ❌ | ❌ | 首个非 esp 家族迁移 | -stm32 变体:app 家族别名 + 入口块 + thumbv7em + 固件作用域 | |
| 🟠 P1 | ❌ | ❌ | 语音助手外设 | Opus 编解码 + WS 语音客户端 + 唤醒词 | |
| 🔴 P0 | ✅ | ✅ | 无硬件回归冒烟 | 宿主 std harness(意图→状态→渲染行为断言)+ esp-emu C6 硅层 boot smoke,CI 必经 | 仿真与冒烟 |
| 🟠 P1 | ❌ | ❌ | 真机验证/回归 | espflash 烧录 + 实机 smoke test(boot log/LED/按键) | |
| 🟠 P1 | ❌ | — | 固件 Web 安装器 | docs/static/flasher/ 静态单页(GitHub Pages):上传 bin → 前端自解析(magic/ChipID/flash 参数/CRC/SHA256)→ esptool-js WebSerial 直刷 merged.bin 至 0x0;真机芯片比对防错刷;Chrome/Edge 限定,附 GUI/esptool 兜底 | |
| 🟡 P2 | ❌ | ❌ | OTA 固件升级 | 版本检查/下载校验/双分区回滚 | |
| 🟡 P2 | ❌ | ❌ | MQTT 扩展遥测 | rumqttd broker + QoS/LWT 在线状态 + 传输协商(优先 MQTT 回退 HTTP) | |
| 🟡 P2 | ❌ | ❌ | 断线重连/缓冲 | 补传与消息缓冲 | |
| 🔵 P3 | ❌ | ❌ | SNTP 时间同步 | 数据时间戳可信 | |
| 🔵 P3 | ❌ | ❌ | 低功耗/深度睡眠 | 长待机功耗优化,模型选型收敛后推进 | |
| 🔵 P3 | ❌ | ❌ | 看门狗/复位策略 | 任务看门狗 + panic 复位恢复策略 | |
基础设施
| 优先级 | 状态 | 测试 | 项目 | 描述 | 链接 |
| 🟠 P1 | ✅ | ✅ | email UNIQUE 约束 | user.email 迁移已加 UNIQUE 约束(nullable,适配已有空邮箱记录) | |
| 🔴 P0 | ✅ | ✅ | 优雅关闭顺序 | Server CancellationToken 统一驱动 axum/WS/Matrix 按序优雅退出 | |
| 🔴 P0 | ✅ | — | Runtime 竞态 | build() 同步执行,set() happens-before 任何 worker 线程,无竞态 | |
| 🟠 P1 | ✅ | ✅ | 时间戳自动填充 | Config 实体补齐 before_save,create/update 时间戳自动填充 | |
| 🟠 P1 | ❌ | ❌ | 外键约束 | 缺 round.session_id、round_data.round_id、frame.round_id 的 FK | |
| 🟠 P1 | ⚠️ | ❌ | MCP 锁顺序 | 原 mcp_host.rs 已不存在;现组件无跨实例锁,重新引入多端聚合前需复查 | |
| 🔵 P3 | ❌ | ❌ | MCP 错误处理 | 错误映射与重试不完善 | |