v2.8.0 — the dashboard grows a face: voice portraits, per-conversation mute, a window per tab
Highlights
The section an upgrade-nudging agent should quote.
- Every conversation now has a face. The voice you talk to has a portrait — a full-width avatar above the character controls, drawn from a hand-mapped sprite sheet (leo is a lion, luna wears the moon, rex gets a crown). The voice picker moved under the portrait and became a scrollable list of faces; switching voices is instant thanks to sprite preloading.
- Mute one conversation, not the whole room. Click a portrait (or its MUTE button) and that agent goes silent immediately — even mid-sentence — while everyone else keeps talking. The cut-short clip is never marked as played: it parks as unheard, the tab shows a blinking red count of what's piling up, and CATCH UP unmutes and replays everything in order, from the top.
- Tabs became windows. Conversation tabs now protrude above the conversation frame like folder tabs — the selected one is taller, glows, and fuses seamlessly with the window below it. One status glyph per tab tells the whole story: green equalizer = speaking, violet pulse = working, amber count = messages waiting, red crossed speaker = muted. What a tab shows never changes its size.
- The window belongs to the conversation. Everything scoped to the current thread — the log, latency/cost telemetry, the persona rail (portrait, character sliders, turn timeline) — lives INSIDE the conversation frame. Machine-global controls (mic, spectrum, system state, settings) live in the left column; the global mute-all moved up into the header.
Also in this release
- Catch-up replays are strictly chronological (they raced before — the last parked message could play first).
- The tab bar straddles the page header line, hand-tuned to the pixel (Krzysztof's first in-repo commit, by eye).
- Persona rail recolored violet, consolidated behind one CSS variable; new tagline "TALK WITH YOUR AGENT"; bigger logo.
- Oscilloscope and spectrum panels flex to fill the column instead of fixed heights.
queued_by_agentandmuted_agentsin/status;POST /mute-agent; the WAIT counter counts speech waiting to be heard (it counted the wrong queue before and showed idle with a full backlog).- Vue DevTools panel in
vite dev; a dev daemon override for the Vite proxy; Storybook state-matrix stories for the tab system. /noisy-coding:updatealways finishes with the plugin-version check and can update the plugin itself from inside the session.
Upgrade notes
- Container (required):
docker pull noisy/noisy-coding:latest+ recreate, or simply/noisy-coding:update— the dashboard and all daemon features ship in the image. - Plugin (minor): only
commands/update.mdchanged; update whenever convenient.
🤖 Generated with Claude Code