Make input-region calibration work across MJPEG and H.264 video modes, including robust four-sided black-border detection and initial-selection edge snapping. Persist multiple reusable manual regions, keep manual and original-resolution choices mutually exclusive, migrate legacy settings, and localize the new controls for every supported language.
Add device-level input-region APIs for reading, validating, and atomically persisting absolute mouse calibration settings, including automatic, manual, and disabled modes.
Introduce a shared screen viewport that keeps the rendered media geometry and configured input region aligned across MJPEG, direct H.264, and WebRTC streams. Add automatic black-border detection and a manual selection overlay with dragging, resizing, magnified preview, keyboard locking, and cancellation support.
Provide original-resolution presets so manual calibration can be recalculated for common aspect ratios, expose the controls from the desktop mouse menu, close menus before entering selection mode, and preserve active file transfers when the download menu closes.
Add localized control-region labels and messages for all supported locales, and update direct-frame rendering so media dimensions are reported after the canvas has been drawn.
- Add touch gestures for relative mouse mode, including tap, drag, long press, double-tap drag, and two-finger scrolling.
- Improve absolute mouse touch handling and prevent black letterbox areas from generating remote mouse events.
- Fit H.264 and MJPEG screens with contain scaling and disable browser touch handling on the screen elements.
- Move golang.org/x/sys to the direct dependency list.
Upgrade Vite to 8.2.0 and @vitejs/plugin-react to 6.0.5.
Use Vite's native tsconfig path resolver and remove vite-tsconfig-paths.
Verified with pnpm build and pnpm lint (existing warnings only).
Layer the frontend toolchain on top of the existing release builder
image so a single container covers Go, C support-layer and web
development, with the builder image remaining the single source of
truth for the cross toolchain, Go and MaixCDK.
- Mount the workspace at /home/build/NanoKVM, where the Makefile and
support/sg2002/build expect it, and resync MaixCDK components via
update_lib on create so C builds never use stale sources
- Install Node from official dist tarballs (integrity-checked, pinned
to the major used by CI), with NODE_DIST_MIRROR / NPM_REGISTRY /
BASE_IMAGE build args for restrictive or mirrored corporate networks
- Export the MaixCDK virtualenv via remoteEnv so non-interactive
processes (tasks, extensions, exec) get it too; make
updateRemoteUserUID explicit since the published builder image bakes
the CI runner's uid
- Run pnpm non-interactively during post-create (no TTY) and give the
skeleton-less home a standard ~/.profile -> ~/.bashrc chain
- Make the web toolchain convention explicit via package.json engines
(Node >= 22, pnpm >= 11, matching CI) and document it in web/README
- Document the dev container in the README, point server/README at the
container flow that works on any host OS, and ignore .pnpm-store/
+ Add persistent custom update server configuration, authenticated URL support, manifest validation, and the settings UI.
+ Keep application updates rebootless by coordinating video shutdown, migration-time service startup, and online/offline service restarts.
+ Localize the custom update server workflow across all supported languages.
- 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.
Cancel PicoClaw start/readiness waits when MCP takes control, clear held manual input state after failed release reports, and keep paste duration below the control-mode wait budget.
Also add MCP copy failure translations and avoid reconnect effect churn when the locale changes.
Add the MCP settings view and frontend API bindings for configuring remote-control access.
Expose AI-control ownership state in PicoClaw, lock conflicting keyboard input paths, and preserve chat state when control is released.
- Replace the Discussion community link with Discord
- Align terminal and script ordering in the menu and appearance settings
- Remove the divider before the leader key menu item
Normalize stored MAC addresses, avoid shell execution for ether-wake, handle missing WOL history gracefully, and improve the WOL menu display for named MAC entries.
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.
- Wait for gateway session release before reconnecting to a new or selected session
- Refresh runtime status before deciding whether a selected history session can reconnect
- Render structured thought messages from gateway payload metadata
- Prevent PicoClaw history rows from overflowing horizontally
- Add localized labels for the verifying install stage
- Bump PostCSS to 8.5.10 and refresh the pnpm lockfile
- Regenerate the MSW service worker for msw 2.12.10
- Add pnpm build approvals for frontend tooling
- Add missing localized strings for recent UI features, including keyboard shortcuts, clipboard paste, Wi-Fi AP auth, terminal options, device settings, Tailscale, updates, and PicoClaw.
- Align non-English locale resources with the English translation keys.
- Add DNS configuration APIs for manual and DHCP modes, including persistence and udhcpc hook support.
- Add a Network settings tab with DNS controls, move Wi-Fi and HTTPS settings into it, and update translations.
- Update locales
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