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 功能設計與實現