Keep slow WebRTC consumers from blocking the shared H264 source by dropping buffered frames until the next keyframe. Restore the WebRTC NACK and RTCP report interceptors while retaining a safe RTP MTU, and enable linker --as-needed for libkvm to remove unused OpenCV dependencies.
Route Direct and WebRTC consumers through one H264 capture source to avoid duplicate VENC reads. Overlap WebRTC capture with ordered RTP/SRTP writes and packetize each access unit once for all WebRTC clients.
Add libopencv_video.so.409 into dl_lib.
- Add decode-driven flow control and bounded GOP-aware queues to prevent stale H.264 frames from accumulating in TCP and WebSocket buffers.
- Isolate slow clients with dedicated writer goroutines, write deadlines, and safer connection lifecycle handling.
- Move the Direct H.264 socket into the worker, simplify the low-latency decode path, and improve reconnect behavior.
Use client snapshots for stream fanout, reduce frame queue latency, expose backend ICE server configuration to the WebRTC client, and clean up disconnected WebRTC clients more aggressively.
commit 3dea4b1cfcb866d50c9c093b797c0f4f48fec23f
Author: wenjie <meetwenjie@gmail.com>
Date: Fri Apr 10 17:11:07 2026 +0800
fix(picoclaw): clean temp media and surface MCP screenshots in chat
- remove shared load_image staging and pass source paths through directly
- delete /tmp/picoclaw_media when a gateway session closes
- push MCP screenshot observations to downstream websocket clients
- hide null tool feedback messages and auto-scroll when screenshots load
commit f58ffe1e27f83f64e2b0e8c2f8dcac46af715ace
Author: wenjie <meetwenjie@gmail.com>
Date: Fri Apr 10 15:55:59 2026 +0800
Harden PicoClaw local API auth and session locking
Split PicoClaw routes by caller trust level and require the internal loopback token for local-only endpoints. Update the NanoKVM bridge script to send the internal token for loopback requests. Relax session lock acquisition for screenshot and action calls so the active session can perform local operations without permanently taking over the lock, and stop forcing the runtime dm_scope default.
commit 462a0670bbc5138c893fbd1155e72465b82c2065
Author: wenjie <meetwenjie@gmail.com>
Date: Fri Apr 10 13:52:39 2026 +0800
fix(picoclaw): improve KVM reliability and sidebar behavior
- follow HTTPS loopback redirects in the NanoKVM bridge script
- enable MJPEG frame caching only during active PicoClaw gateway sessions
- restore legacy screen zoom behavior across MJPEG and H264 renderers
- keep the PicoClaw sidebar available on mobile without splitter layout conflicts
- hide empty "null"/"undefined" chat messages and keep MJPEG failures on a black screen
commit bfda85c6368825c7ddf47d347ba5ec2588135885
Author: wenjie <meetwenjie@gmail.com>
Date: Fri Apr 10 11:37:15 2026 +0800
fix(picoclaw): verify runtime downloads and remove unused config API
- verify the downloaded runtime archive against the published SHA-512 checksum
- remove the unused /api/picoclaw/config endpoints and related frontend state
- rename runtime_control.go to runtime_constants.go for clearer intent
commit 10b34aaea59e10d70c3cdecb01915444561ceaf7
Author: wenjie <meetwenjie@gmail.com>
Date: Thu Apr 9 16:32:30 2026 +0800
fix: stabilize picoclaw runtime defaults and secure local MCP access
- persist required NanoKVM startup defaults before launching picoclaw and after saving model config
- force-enable the pico channel when loading config so runtime status can recover to ready
- derive the local MCP URL from the configured HTTP port and keep loopback-only HTTP access behind an internal token
- move loopback HTTP redirect logic into middleware to simplify main server startup
- improve runtime/sidebar state handling and add the load-image endpoint for active picoclaw sessions
commit d20540195bf45ea290f727b473ee8cd2a1bbb68d
Author: wenjie <meetwenjie@gmail.com>
Date: Fri Mar 27 17:55:29 2026 +0800
feat(picoclaw): add picoclaw integration
- H.264 WebRTC: Refactored to significantly reduce video latency
- H.264 Direct: Optimized data transmission; data parsing now continues correctly even when the tab is in the background
- MJPEG: Refactored to ensure the correct data length is sent
Bug Fixes
- Fixed an issue where certain keyboard modifier keys were not recognized
- Fixed vertical mouse cursor drift when the page is zoomed in or out
Optimizations
- Optimized HID write logic and updated the HID reset mechanism
- Added support for deleting images
- Added a Swap Memory option to the Tailscale page
- Added a confirmation dialog when uninstalling Tailscale to prevent accidental removal
- Improved the logic for updating the web page title
- Improved the UI for the Clipboard, Settings, Image Mounting, and App Update pages
Security
- Added a mandatory delay after failed login attempts to prevent brute-force attacks
- Updated dependencies to patch known security vulnerabilities
feat: support custom mouse wheel speed
fix: prevent direct H.264 stream buffer overflow and replay
style: optimize virtual keyboard layout
style: optimize menu bar and settings styling
refactor: optimize mouse jiggler
refactor: custom swap file size
refactor: update power buttons ui
refactor: optimize web page title
perf: set the minimum screen size to 640x480
perf: add heartbeat in H.264
chore: upgrade axios and golang.org/x/net
fix: remove redundant STUN server
perf: support disable STUN server (for local networks)
perf: update GOMEMLIMIT from 50 to 75
perf: add `-b` parameter to `ether-wake`
chore: bump vite to v6.2.1
- changing password will modify both the web user and the system root user
- refactor menu bar
- add oled automatic sleep
- support setting GOMEMLIMIT, and automatically enabled when tailscale is logged in
- some other bug fixes and optimizations
* Add ability to properly configure logrus (e.x. specify output file)
* Make the code slightly more ideomatic (sort imports, etc)
* Replace some of the shell calls with equivalent native code
* Fix update process
* Improve error handling (handle 2 previously unhandled errors)
* Add locking for HID operations and make a HID-operations struct a singleton