From a67ff9e403912db66ea7075b6cd25c6ef4fbcf0e Mon Sep 17 00:00:00 2001 From: root Date: Wed, 10 Jun 2026 00:06:08 +1000 Subject: [PATCH] fix(dross): wire send button + drop host wrapper --- .../specs/2026-06-09-floating-dross-chat-design.md | 1 + public/components/dross_bubble.js | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/superpowers/specs/2026-06-09-floating-dross-chat-design.md b/docs/superpowers/specs/2026-06-09-floating-dross-chat-design.md index 4346d3f..c1c0a0f 100644 --- a/docs/superpowers/specs/2026-06-09-floating-dross-chat-design.md +++ b/docs/superpowers/specs/2026-06-09-floating-dross-chat-design.md @@ -21,6 +21,7 @@ The chat mechanics are already factored into a reusable engine (`public/componen 5. **Colour** — Dross is **violet** by default, but his accent is **tunable in Settings** (his own vars, independent of the UI theme). 6. **Persona** — give him the real Cradle-Dross voice (dry, sardonic, impatient, brilliant, secretly loyal) via an **editable system prompt in Settings** (tunable). 7. **Voice** — record a clip → transcribe with **local faster-whisper on the Ollama box (CT 102, GPU, CPU-fallback)** → transcript lands in the input for **review-and-send first (mode 1)**. A *voice-mode* setting allows graduating to **hands-free auto-send (mode 2)**, then **interpret-into-confirmable-action (mode 3)** later. +8. **Audio retention (Phase 2, added 2026-06-09)** — by default the clip is transcribed then **destroyed** (transient). Add a **Dross setting** "Keep voice clips" that, when on, **saves each audio clip paired with its transcript**, stored **safely and securely** (encrypted at rest / access-controlled; on a homelab dataset, owner-only — exact store TBD in P2: e.g. a `voice_clips` table + blob on a ZFS dataset, or object store). Off by default. This is a P2 deliverable, designed-for now. ## Non-goals (this iteration) diff --git a/public/components/dross_bubble.js b/public/components/dross_bubble.js index 6f9a50a..152fe54 100644 --- a/public/components/dross_bubble.js +++ b/public/components/dross_bubble.js @@ -16,9 +16,6 @@ function applyAccent(node, hex) { export async function renderDrossBubble() { try { cfg = { ...cfg, ...(await api.get('/api/dross/settings')) }; } catch { /* defaults */ } - const host = el('div', { class: 'dross-host' }); - document.getElementById('shell').appendChild(host); - const fab = el('div', { class: 'dross-fab', title: 'Dross' }, el('div', { class: 'dross-ping', style: { display: 'none' } }, ''), drossAvatar(cfg.avatar, 60)); const log = el('div', { class: 'dross-log' }); @@ -35,7 +32,7 @@ export async function renderDrossBubble() { const panel = el('div', { class: 'dross-panel' }, header, log, el('div', { class: 'dross-inwrap' }, input, el('div', { class: 'dross-btnrow' }, mic, sendBtn)), collapse); - host.append(fab, panel); + document.getElementById('shell').append(fab, panel); applyAccent(fab, cfg.accent); applyAccent(panel, cfg.accent); const chat = wireAgentChat({