Skip to content

v0.1.12

Latest

Choose a tag to compare

@cristianonescu cristianonescu released this 23 May 16:53
· 1 commit to main since this release

New feature

Dedicated CPU / Memory / GPU / Network pages. The catch-all
"System" page is gone; each resource now has its own focused screen
with the full picture, no overlap. The Electron Live tab gets matching
cards.

CPU page

Per-core utilization bars + average headline, load average (1 / 5 /
15 min), current vs max frequency, CPU temperature, top 3
CPU-consuming processes, battery (when present).

Memory page

Memory-pressure bar (the cache-excluded "would-this-swap?" metric),
used / total GB, swap usage, breakdown by active / inactive / cached,
top 3 RAM-consuming processes, primary disk usage.

GPU page (new)

Cross-platform best-effort detection:

  • macOS (Apple Silicon + Intel) via ioreg -a -r -c IOAccelerator
    — IOAccelerator's PerformanceStatistics dict, parsed with
    plistlib. No sudo required. Apple Silicon has unified memory, so
    we show the currently allocated MB with no fixed total.
  • NVIDIA (any OS) via nvidia-smi --query-gpu CSV — util, VRAM,
    temperature, power.
  • Linux AMD via /sys/class/drm/card*/device/gpu_busy_percent +
    mem_info_vram_*.

When no GPU is detectable, the page renders a friendly "GPU stats not
available" with a user-facing reason ("NVIDIA driver tools are not
installed", "macOS did not expose GPU statistics", etc.) — not
jargon.

Network page (new)

Active outbound interface (discovered via the kernel route table),
current down / up throughput, per-interface table with cumulative
totals since the OS counters last reset (typically boot).

Wire-protocol additions

system.* gains cpu_freq_mhz, cpu_freq_max_mhz, load_1m/5m/15m,
ram_swap_*, ram_active/inactive/cached_gb, and an ifaces[] array
of the top-3 interfaces. New top-level gpu block with
{available, vendor, name, util_pct, vram_used_mb, vram_total_mb, temp_c, power_w, count}. Full schema example in docs/protocol.md.

Migration

The firmware page enum bumped from 8 → 12 IDs. PAGE_SYSTEM (id 1) is
kept as a reserved/deprecated slot and masked from display, so the
v0.1.11 pages_enabled_mask / pages_order blobs in NVS remain valid
across the upgrade — bit 1 is silently stripped at restore time, the
8-byte porder blob is detected and falls back to defaults. No
manual reset is needed; just update the firmware via Settings →
Updates.

Upgrading

  • Pages live in firmware — flash via Settings → Updates →
    "Update firmware"
    .
  • GPU collector + cards live in the agent + UI — updating the
    Electron app brings both.

After flashing, the device immediately picks up the 4 new pages. Use
Settings → Pages to reorder them and the auto-advance setting
from v0.1.9+ still cycles through whatever you've enabled.

Other notes

No removals — the system.* field shape stays backwards compatible
(legacy cpu_pct, ram_pct, net_up/down_kbps continue to be
emitted alongside the new fields). Old v0.1.11 firmware on a v0.1.12
agent keeps rendering the same metrics it always did.

Diagnosed and reviewed across multiple rounds with the codex agent —
including the implementation pass that caught the deprecated-page
counting bug, the sparse-id "all enabled" sentinel, line-scraping
ioreg fragility, and jargon error strings. All 3 firmware envs
compile clean. 176/176 agent tests pass (11 new GPU tests).