v0.1.3
v0.1.3
本版本新增摄像头拍照功能,完善 OTA 连接和设备激活流程,并增强协议交互能力。
✨ 新增功能
摄像头拍照能力 (self.camera.take_photo MCP 工具)
- 完整的视觉交互链路:WebUI 调用摄像头采集 → JPEG 抓拍 → POST 到视觉端点 → 服务端返回分析结果
- 摄像头采集模块 (
src/features/camera/cameraCapture.ts)- 基于
getUserMedia实时采集视频流 - Canvas 2D 绘制和 JPEG 压缩抓拍
- 自动清理和资源释放
- 基于
- 摄像头管理状态切片 (
src/features/camera/cameraSlice.ts)- 摄像头启用/禁用状态
- 拍照进度和错误处理
- MCP 工具实现
- 解析服务端初始化时下发的
capabilities.vision.{url, token} - 工具签名:
self.camera.take_photo(question: str) → analysis_result - 抓拍后以
multipart/form-data格式发送:question + JPEG 图片 - 异步等待服务端视觉分析结果
- 解析服务端初始化时下发的
- 摄像头实时预览面板(设备 Tab)
- 实时视频预览
- 拍照按钮和状态提示
- 连接断开时自动释放摄像头
- 完整的单元测试覆盖
src/features/mcp/__tests__/tools.test.ts- 拍照工具测试src/ws/__tests__/wsManager.test.ts- 摄像头初始化和清理测试
OTA 连接完善
- 系统信息补齐 (
src/features/connection/systemInfo.ts)- OTA 请求头:
Activation-Version,User-Agent,Accept-Language - OTA 请求体:version、language、mac_address、uuid、chip_model_name、application、board
- 提供更完整的设备身份信息,便于服务端识别和配置下发
- OTA 请求头:
- 设备激活轮询流程 (
src/features/activation/activate.ts)- 自动检测激活消息中的
challenge字段 - 触发 POST
/activate轮询流程 - 按 HTTP 200(激活完成)或 202(继续轮询)响应码处理
- 激活完成后自动继续建立 WebSocket 连接
- 自动检测激活消息中的
abort 交互增强
buildAbort()现支持可选的reason参数- 支持传递
"wake_word_detected"等原因码,便于服务端记录中断原因
🧪 质量保证
- 所有新功能覆盖单元测试
- TypeScript 严格模式下
tsc -b编译通过 - 摄像头资源泄漏防护:WebSocket 断线时自动释放
📦 依赖
无新增依赖。
统计
- 3 个 commits
- 11 个文件修改/新增
- ~550+ 行代码变更
兼容性
- 需要支持
getUserMedia和 Canvas 2D 的浏览器 - 服务端需支持
capabilities.vision下发和/activate轮询端点