VibeEverything update log
Firmware + Mac App version update history
v1.6.2 2026-04-13
- Fix black screen for online flashing of web pages + IMU enabled=0: v1.6.1 The firmware bin published to the website is the publishing machine
M5Unified The library was compiled when it was downgraded to 0.1.17. The LCD panel init and BMI270 IMU drivers for StickS3 (board=26) are incomplete. After the user refreshes the web page, the screen does not light up and the IMU initialization fails. For this time M5Unified 0.2.13 Recompile and publish to solve the problem. The firmware source code itself has not changed, and devices flashed locally by v1.6.1 Arduino IDE are not affected.
- deploy.sh preflight guardrail: Automatically before deployment
arduino-cli lib list check M5Unified>=0.2.13 / M5GFX>=0.2.19, if it fails to meet the standard, it will directly exit 1, completely prevent incorrect bin uploads; and add sanity check with app bin size < 920KB as the second line of defense (bad bin ~910KB, good bin ~927KB)
- deploy.sh other reinforcements:automatic
cd to the script directory (calling from any directory is OK); list the mtime + size of each bin before uploading to assist manual confirmation; automatically clean up the leftovers on the server merged.bin
- Web page flash tool rollback:from
tasmota-esp-web-tools@11.2.0 Return to original version esp-web-tools@10, remove the "Erase/Install" selection box of the fork version.
v1.6.1 2026-04-12
- USB plug-in error screen repair:
isCharging() When the battery is full/trickle/the USB cable is out of power, it will return false and cause SCREEN_OFF to be entered by mistake. Use instead M5.Power.getVBUSVoltage() > 4000mV As a power supply judgment, add usbPowered Global + 2s independent polling;onDisconnect / POWER_IDLE / POWER_DIM / POWER_SCREEN_OFF All four breath screen branches are cut to usbPowered
- IMU pick-up does not wake up the screen repair:
checkPickup() never adjusted M5.Imu.update(),and M5.update() The IMU is not refreshed, resulting in getImuData() Always return cache ax=ay=az=0, mag/delta is always 0. Just add one line and it will be fixed. The actual machine has verified that if mag≈1.0 is left alone, pick up delta and jump to 0.27+ to trigger the screen call correctly.
- Mac App goes into deep sleep after exiting / A key cannot wake up repair:
- deep sleep:
onDisconnect hour sleepTimeout Instantaneous switching from 1h to 5min, stale idleMs Immediately exceed threshold and trigger deep sleep. repair:onDisconnect reset lastActivityTime、DEEP_SLEEP_TIMEOUT_DISC 5→15min、POWER_SCREEN_OFF Down usbPowered Never sleep deeply
- A key to wake up:
wakeMask Original misuse GPIO_NUM_0, StickS3 actual BtnA=GPIO11、BtnB=GPIO12. fixed to BTN_A_PIN | BTN_B_PIN + rtc_gpio_pullup_en
- Rest screen guard reconstruction:from
loop The outer layer "one size fits all" sinks to each handler short press branch (wasClicked only in wakeFromScreenOffMs==0 to take effect), long press (wasHold / btnBHeld) can penetrate into PTT / HotDog; IMU wakes up the screen but does not reset wakeFromScreenOffMs, pick it up and operate it immediately
- Web page flashing changed to segmented burning: From a single file
merged.bin Change to 4 sections and burn them separately 0x0 / 0x8000 / 0xe000 / 0x10000, consistent with the Arduino IDE burning method byte level (Note: This change in v1.6.1 failed to take effect due to the compilation library version issue. Only v1.6.2 can truly solve the problem of web page flashing.)
- StickS3 fallback board: Force the StickS3 fallback path, disable non-existent speaker paths, and eliminate false alarms
v1.6.0 2026-04-12
- Unified key semantics (F10): A key = positive confirmation (Normal Enter / Approval Allow), B key = negative cancellation (Normal ESC / Approval Deny), long press = voice input;
wasClicked() substitute wasSingleClicked() Eliminate the 250ms double-click judgment delay, and short-press it will take effect the moment it is released.
- Remove double tap gesture: Double-click Deny/ESC on the A key to cancel, and it will be provided uniformly by short-pressing the B key; in the approval mode, long press A to enter PTT normally, long press B to enter HotDog, and automatically return to the approval interface after the end.
- Approval response 400ms cool down:
sendPermissionResponse The cooldown window is only started when BLE is successfully delivered, during which the key events are discarded to prevent double-click residue; it is retained when BLE is interrupted momentarily. hasPendingPermission Let the user try again
- Loop Cooldown changed to gate style: Only key distribution is skipped during the cooling period, and periodic tasks such as display refresh/power status/IMU/voice timing run as usual.
- Breath screen key swallowing guard: When the screen is completely turned off (POWER_SCREEN_OFF), pressing the A/B key only wakes up the screen and does not trigger business logic to avoid blind pressing and misoperation when the approval interface is hung; POWER_DIM maintains the original behavior
- ASR empty result diversion log:
DoubaoASRClient New asrStartedAt / wsReadyMs / isEmpty / totalMs / text Dual-channel logs, the next "empty result" can be directly split according to the triplet "bean bag returns empty vs Mac is swallowed in the first few frames"
- Button A empty result alignment:
processButtonAAudio Empty result branch markCompleted → markFailed("ASR returns empty result"), consistent with Button B semantics, historical records can be directly played back WAV qualitative
- KeyboardSimulator diagnostic observation period:
typeText() Add three points of structured log (tid through + pasteboard.changeCount + flagsState + Front-end App + Input method ID + FNV-1a hash (does not remember plain text), Feature-gated CGEventFlagsChanged([]) Clear modifier residue (off by default) - Provide an evidence baseline for subsequent positioning of the side effects of "ghost paste + Chinese garbled characters"
- Approval UI badge:
1x/2x → A/B, aligned with the new key semantics
v1.5.4 2026-04-11
- Audio capture optimization: Pre-buffer rounding up (480→512ms), Clipping statistics, IMU dual threshold hysteresis (0.3g/0.15g)
- IMU automatic wakeup repair: The IMU always polls when disconnected, and the screen can be turned on correctly when the device is picked up.
- BLE recording stability:silenceTimeout 0.5→1.5s to prevent ADPCM decoder status misalignment; force finalize recording when disconnected
- PTT Stop command: Added CMD_BTN_A_PTT_STOP, recording will be completed within 150ms after letting go (replacing the 1.5s timeout wait)
- RMS Silent Gate Control: Pure noise audio below 3000 RMS skips ASR and eliminates short press illusion recognition
- Minimum duration check: <0.5s audio is discarded directly, short press will not produce empty results or "device disconnected" false alarms
- Button B floating window repair: BLE cross-characteristic out-of-order delivery leads to 0x12 accidentally killing Button B stream
- Device recording UI fix: 15 seconds safety timeout added to isRecording guard, long recordings no longer disappear
- WAV file saving: All BLE recordings are saved in WAV, one-to-one correspondence with historical records
- Low battery protection: Delay deep sleep during recording; reset activity timer after PTT release
- JSON parsing reinforcement:extractJsonField supports escape characters to prevent truncation when the approval content contains code paths.
- Hook script fix: vibepanel-hook.py old name VibePanel → VibeEverything
v1.5.3 2026-04-10
- ASR context enhancement: Delete Chinese hard coding and enable automatic recognition of Chinese and English mixes
- conversation context: ASR automatically carries the last 5 recognition histories to improve the accuracy of continuous conversations.
- Automatic extraction of hot words: Automatically extract high-frequency words from historical records + 40 built-in programming terms + user-defined hot words
- BLE race fix:seq fallback detection replaces seq==0, compatible firmware starting sequence number is non-zero; stuck timeout 2s→1s
- Buddy LLM Compatible: MiniMax M2.7 plain text fallback + think label stripping
- Buddy floating window optimization: Keep the window floating during the LLM call and display the brain flash animation
- notification icon: Use the HotDog Buddy dog head icon in the notification bar
- History enhancement: Added delete button, copy containing user input and LLM reply
- Fixed retry button error showing "Speech recognition failed"
v1.5.2 2026-04-10
- Added unified management of version numbers (VERSION file + bump-version.sh one-click synchronization)
- Fix SenseVoice development path pointing to old repository
- Fix Hook debug log path pointing to the old warehouse
- Merged and updated Release Guide documentation
v1.5.1 2026-04-09
- Mutually exclusive recording: shortcut keys and device A/B keys are shielded in both directions
- Historical record source filtering and cleaning
- Buddy LLM failed retry button
- Button B function design and implementation