Skip to content

v0.17.3

Choose a tag to compare

@github-actions github-actions released this 28 Jun 00:20
· 139 commits to main since this release
3e56aec

Fixed

  • Component inventory now persists across redeploys. INVENTORY_PATH was
    never set, so inventory.json fell back to a package-relative path on the
    container's ephemeral root filesystem and was lost on every pod restart. The
    Dockerfile now sets INVENTORY_PATH=/data/inventory.json, putting it on the
    wirestudio-data PVC 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-token or 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 } and POST /mcp/token/rotate. Rotation takes effect without a restart -- the bearer
    middleware now reads the live token from a TokenStore on each request
    instead of capturing it at mount time; resolve_token() stays as a thin
    delegate. When the token is set via WIRESTUDIO_MCP_TOKEN it 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 holds FLEET_TOKEN),
    mirroring the standalone path's /lorawan/firmware/{cache_key} so the
    existing lib/flash.ts consumes 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 is passed,
    pulls the factory image, then writes it to a blank board at 0x0 with
    eraseAll: true (NVS is empty, /lorawan/provision-esphome re-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.