v0.17.3
Fixed
- Component inventory now persists across redeploys.
INVENTORY_PATHwas
never set, soinventory.jsonfell back to a package-relative path on the
container's ephemeral root filesystem and was lost on every pod restart. The
Dockerfile now setsINVENTORY_PATH=/data/inventory.json, putting it on the
wirestudio-dataPVC alongside designs and sessions.
Documentation
- MCP token UI documented. The MCP guide's "Copy the token" step and the
user guide's Web UI section now point at the header Settings (gear)
dialog for viewing, copying, and regenerating the MCP bearer token.
Added
-
MCP bearer token: view and rotate from the web UI. The token was only
discoverable by reading~/.config/wirestudio/mcp-tokenor grepping server
logs. A Settings dialog (header gear icon) now shows it masked with a reveal
toggle, a copy button, and a regenerate action. Two routes back it on the
unauthenticated API surface (a client must see the token before it can
present it):GET /mcp/token->{ token, managed }andPOST /mcp/token/rotate. Rotation takes effect without a restart -- the bearer
middleware now reads the live token from aTokenStoreon each request
instead of capturing it at mount time;resolve_token()stays as a thin
delegate. When the token is set viaWIRESTUDIO_MCP_TOKENit is shown
read-only and rotation returns 409 (the operator owns the secret). -
LoRaWAN: flash fleet-built firmware via WebSerial from the provision
dialog. Closes the workflow gap where the external-component LoRaWAN
path built firmware on the fleet but had no way to land it on a headless
device (no network OTA, no fleet flasher). New
FleetClient.get_firmware(run_id, *, factory=)+GET /fleet/jobs/{run_id}/firmware[?factory=true]route ferry the addon's
build artifact through the studio (browser never holdsFLEET_TOKEN),
mirroring the standalone path's/lorawan/firmware/{cache_key}so the
existinglib/flash.tsconsumes both paths identically. The provision
dialog gains a Flash via WebSerial → step after a successful Push to
fleet: polls the run-status endpoint until the verdict ispassed,
pulls the factory image, then writes it to a blank board at 0x0 with
eraseAll: true(NVS is empty,/lorawan/provision-esphomere-flushed
DevNonces, so the wipe is safe per §2.1). Scoped in
docs/lorawan/fleet-firmware-flash.md. The upstream addon endpoint is
still being implemented; until it ships, the button stays available but
the call resolves to 404 with a clear "firmware artifact not available"
message rather than a silent hang.