VibeEverything 更新日志
固件 + Mac App 版本更新记录
v1.6.2 2026-04-13
- 修复网页在线刷机黑屏 + IMU enabled=0:v1.6.1 发布到网站的固件 bin 是发布机
M5Unified 库被降级到 0.1.17 时编出来的,对 StickS3(board=26)的 LCD panel init 和 BMI270 IMU 驱动不完整,用户网页刷完后屏幕不亮、IMU 初始化失败。本次用 M5Unified 0.2.13 重新编译发布,解决该问题。固件源码本身未变,v1.6.1 Arduino IDE 本地刷出来的设备不受影响
- deploy.sh 预检护栏:部署前自动
arduino-cli lib list 校验 M5Unified>=0.2.13 / M5GFX>=0.2.19,不达标直接 exit 1,彻底阻止错误 bin 上传;并增加 app bin size < 920KB 的 sanity check 作为第二道防线(坏 bin ~910KB、好 bin ~927KB)
- deploy.sh 其他加固:自动
cd 到脚本目录(从任意目录调用都 OK);上传前列出每个 bin 的 mtime + size 辅助人工确认;自动清理服务端遗留的 merged.bin
- 网页刷写工具回滚:从
tasmota-esp-web-tools@11.2.0 回到原版 esp-web-tools@10,去掉 fork 版本多弹的"擦除 / 安装"选择框
v1.6.1 2026-04-12
- USB 插电误息屏修复:
isCharging() 在电池满/涓流/USB 线无电时会返 false 导致误进 SCREEN_OFF。改用 M5.Power.getVBUSVoltage() > 4000mV 作为供电判断,新增 usbPowered 全局 + 2s 独立轮询;onDisconnect / POWER_IDLE / POWER_DIM / POWER_SCREEN_OFF 四个息屏分支全部切到 usbPowered
- IMU 拿起不唤屏修复:
checkPickup() 从未调 M5.Imu.update(),而 M5.update() 不刷新 IMU,导致 getImuData() 永远返回缓存 ax=ay=az=0,mag/delta 恒为 0。补一行即修复,实机验证静置 mag≈1.0、拿起 delta 跳到 0.27+ 正确触发唤屏
- Mac App 退出后深睡 / A 键无法唤醒修复:
- 深睡:
onDisconnect 时 sleepTimeout 从 1h 瞬切到 5min,stale idleMs 立即超阈触发深睡。修复:onDisconnect 重置 lastActivityTime、DEEP_SLEEP_TIMEOUT_DISC 5→15min、POWER_SCREEN_OFF 下 usbPowered 永不深睡
- A 键唤醒:
wakeMask 原错用 GPIO_NUM_0,StickS3 实际 BtnA=GPIO11、BtnB=GPIO12。修复为 BTN_A_PIN | BTN_B_PIN + rtc_gpio_pullup_en
- 息屏守卫重构:从
loop 外层"一刀切"下沉到各 handler 短按分支(wasClicked 仅在 wakeFromScreenOffMs==0 时生效),长按(wasHold / btnBHeld)可穿透进 PTT / HotDog;IMU 唤屏不置 wakeFromScreenOffMs,拿起即可立即操作
- 网页刷机改分段烧录:从单文件
merged.bin 改为 4 段分别烧到 0x0 / 0x8000 / 0xe000 / 0x10000,与 Arduino IDE 烧法字节级一致(注:v1.6.1 该改动因编译库版本问题未能生效,v1.6.2 才真正解决网页刷机问题)
- StickS3 fallback board:强制走 StickS3 fallback 路径,禁用不存在的扬声器路径,消除误警
v1.6.0 2026-04-12
- 按键语义统一(F10):A 键 = 正向确认(Normal 回车 / 审批 Allow),B 键 = 负向取消(Normal ESC / 审批 Deny),长按 = 语音输入;
wasClicked() 替代 wasSingleClicked() 消除 250ms 双击判定延迟,短按在释放瞬间即生效
- 删除双击手势:A 键双击 Deny / ESC 取消,改由 B 键短按统一提供;审批模式下长按 A 正常进入 PTT、长按 B 进入 HotDog,结束后自动回审批界面
- 审批响应 400ms 冷却:
sendPermissionResponse 仅在 BLE 送达成功时启动 cooldown 窗口,期间丢弃按键事件防连按残留;BLE 瞬断时保留 hasPendingPermission 让用户重试
- Loop Cooldown 改 gate 式:冷却期内只跳过按键分发,显示刷新 / 电源状态 / IMU / 语音定时等周期性任务照常运行
- 息屏吞键守卫:屏幕完全关闭(POWER_SCREEN_OFF)时按 A/B 键只唤屏、不触发业务逻辑,避免审批界面挂起时盲按误操作;POWER_DIM 保持原行为
- ASR 空结果分流日志:
DoubaoASRClient 新增 asrStartedAt / wsReadyMs / isEmpty / totalMs / text 双路日志,下次"空结果"可直接按三元组分流"豆包返空 vs Mac 前几帧被吞"
- Button A 空结果对齐:
processButtonAAudio 空结果分支 markCompleted → markFailed("ASR 返空结果"),与 Button B 语义一致,历史记录可直接回放 WAV 定性
- KeyboardSimulator 诊断观察期:
typeText() 加三点结构化日志(tid 贯穿 + pasteboard.changeCount + flagsState + 前台 App + 输入法 ID + FNV-1a hash 不记明文),Feature-gated CGEventFlagsChanged([]) 清 modifier 残留(默认关)——为后续定位"幽灵粘贴 + 中文乱码"副作用提供证据基线
- 审批 UI 角标:
1x/2x → A/B,与新按键语义对齐
v1.5.4 2026-04-11
- 音频采集优化:Pre-buffer 向上取整(480→512ms)、Clipping 统计、IMU 双阈值迟滞(0.3g/0.15g)
- IMU 自动唤醒修复:断连状态下 IMU 始终轮询,拿起设备可正确亮屏
- BLE 录音稳定性:silenceTimeout 0.5→1.5s 防止 ADPCM 解码器状态错位;断连时强制 finalize 录音
- PTT Stop 命令:新增 CMD_BTN_A_PTT_STOP,松手后 150ms 内完成录音(取代 1.5s 超时等待)
- RMS 静音门控:低于 3000 RMS 的纯噪声音频跳过 ASR,消除短按幻觉识别
- 最短时长检查:<0.5s 音频直接丢弃,短按不产生空结果或"设备断连"误报
- Button B 悬浮窗修复:BLE 跨 characteristic 无序投递导致 0x12 误杀 Button B 流
- 设备录音 UI 修复:15 秒安全超时增加 isRecording 守卫,长录音不再消失
- WAV 文件保存:所有 BLE 录音保存 WAV,与历史记录一一对应
- 低电量保护:录音中延迟深度睡眠;PTT 释放后重置活动计时器
- JSON 解析加固:extractJsonField 支持转义字符,防审批内容含代码路径时截断
- Hook 脚本修正:vibepanel-hook.py 旧名称 VibePanel → VibeEverything
v1.5.3 2026-04-10
- ASR 上下文增强:删除中文硬编码,启用中英文混搭自动识别
- 对话上下文:ASR 自动携带最近 5 条识别历史,提升连续对话准确率
- 热词自动提炼:从历史记录自动提取高频词 + 40 内置编程术语 + 用户自定义热词
- BLE 竞态修复:seq 回退检测替代 seq==0,兼容固件起始序号非零;stuck 超时 2s→1s
- Buddy LLM 兼容:MiniMax M2.7 纯文本 fallback + think 标签剥离
- Buddy 浮窗优化:LLM 调用期间保持浮窗,显示脑子闪光动画
- 通知图标:通知栏使用 HotDog Buddy 狗头图标
- 历史记录增强:新增删除按钮、复制包含用户输入和 LLM 回复
- 修复重试按钮错误显示"语音识别失败"
v1.5.2 2026-04-10
- 新增版本号统一管理(VERSION 文件 + bump-version.sh 一键同步)
- 修复 SenseVoice 开发路径指向旧仓库
- 修复 Hook 调试日志路径指向旧仓库
- 合并更新 Release Guide 文档
v1.5.1 2026-04-09
- 录音互斥:快捷键与设备 A/B 键双向屏蔽
- 历史记录来源过滤清理
- Buddy LLM 失败重试按钮
- Button B 功能设计与实现