+ 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.
Groundwork for building outside an interactive terminal.
- IMAGE_NAME becomes overridable so a prebuilt image can be used instead
of building one locally
- docker run no longer hardcodes -it on the app and support recipes:
allocating a TTY fails where there is none. shell stays interactive
- install patchelf, which server/build.sh needs to set the RPATH on the
server binary
The script has no error handling of its own, so these all pass silently.
- update_lib exited 1 after succeeding, so callers could not chain it
- a failed maixcdk build printed "Build Error!" and exited 0, letting a
caller carry on with no artifacts
- add_to_kvmapp did the same when the source did not exist
- the copies in update_lib were unchecked; since update_lib is what keeps
the SDK components in sync with the source tree, a silent failure there
yields libraries built from stale sources
The USB network gadget (rndis.usb0 / ncm.usb0) is created without dev_addr or
host_addr, so the kernel picks a random MAC for both the device side and the
host side on every bind. S10uuid later pins the device-side usb0 via
'ip link set', but the host_addr -- the MAC the attached PC's RNDIS/NCM adapter
uses -- stays random and changes on every re-enumeration/reboot. The host then
registers a brand-new network adapter each time, piling up stale adapters/MACs
(e.g. ~10 after a few reboots) and breaking anything that keys off the MAC.
Derive both MACs from the chip UID (same scheme S10uuid already uses for eth0
and usb0), before binding the gadget:
dev_addr = 48:da:35:6e:<uid>
host_addr = 48:da:35:6d:<uid>
Verified on a NanoKVM Cube: host_addr went from random a6:3f:5d:8a:7d:52 to a
stable 48:da:35:6d:26:62, identical across two reboots.
Fixes#740
Co-authored-by: BeaconCat <BeaconCat@users.noreply.github.com>
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.
Add an MCP Streamable HTTP server with token authentication, screenshot capture, keyboard, and mouse tools.
Introduce shared control-mode and input-control coordination so MCP, PicoClaw, and local HID paths serialize ownership safely.
Integrate PicoClaw gateway/runtime control handoff with PID-managed startup and focused unit coverage.
Move frame ownership and zero-copy VENC handling into the tracked MMF
and Vision sources instead of relying on a preload hook. Keep the sensor
name mapping aligned with middleware enums and release deferred VI frames
safely across encoder lifecycle changes.
OLED sleep settings are stored as seconds, but the kvm_system reader parsed the value into a uint8_t before assigning it to the uint16_t state field. Values above 255 seconds wrapped, so 5 min, 10 min, 30 min, and 1 hour did not behave as selected.
Parse the setting into a uint16_t-sized temporary value and terminate the read buffer before atoi so all configured durations up to 3600 seconds are preserved.
Closes#826
* feat(download): add sha256sum check and cancellable downloads
+ server/proto/download.go
+ add DownloadImageReq and sha256 argument
server/router/download.go
+ add cancel download router
server/service/download/service.go
+ sha256 decode and check
+ remove HEAD request
+ cancel download
* refactor(download): synchronize image and application transfers
sovel the the problem that image downloading and app downloading would conflict
at same time
* fix: optimized UI of image download and locale issue
* fix: locale
- 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
Read DHCP DNS from /tmp/resolv.conf when the cached DHCP resolv file is empty, and only fall back to the active resolv.conf when DHCP mode is active or no manual boot config exists.
- 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.