Skip to content

v0.1.3

Choose a tag to compare

@nancheung nancheung released this 31 May 08:40

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
    • 提供更完整的设备身份信息,便于服务端识别和配置下发
  • 设备激活轮询流程 (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 轮询端点