progress: always-on listening (P3.1 MVP), update gap + deploy notes
This commit is contained in:
+23
-5
@@ -88,6 +88,10 @@ tests, `-race` in `make test`.
|
||||
on the **desk PC** (hypridle-gated systemd timer), posts over wg to mavweb.
|
||||
- **Kuma `service_down`** — needs an API key created in Kuma → Settings → API Keys,
|
||||
passed to `mavpoll -kuma-key`.
|
||||
- **`mavwaked`** (always-on listening) — needs a docker-compose service entry
|
||||
with audio device passthrough (`/dev/snd` + `group_add: audio` on the container,
|
||||
or run as a systemd unit on the host for lower ALSA latency). Deferred until
|
||||
the USB mic is on the homesrv and tested.
|
||||
|
||||
Caveats / gotchas:
|
||||
- **desk_active is a workstation deploy, not code** — 0 facts ever written; presence
|
||||
@@ -110,6 +114,17 @@ Caveats / gotchas:
|
||||
Seven tasks (`SESSION-06-07-2026.md`), one commit each, merged to `master`.
|
||||
This session was run through **opencode**, not Claude Code (co-author trailer).
|
||||
|
||||
Since then (**2026-07-06, second session**):
|
||||
|
||||
- **Always-on listening (gap 1, MVP)** — `cmd/mavwaked/`: 825 lines, 10 `-race`
|
||||
tests. Energy-based VAD over 30ms windows (same RMS threshold as mavsttd's
|
||||
`gateReason`), adaptive noise floor, speech→silence state machine. Captures
|
||||
PCM from arecord(1) subprocess, sends `PushToTalk` with `Surface=SurfaceVoice`
|
||||
(L0 — no destructive acts). Reply plays through aplay(1). No wake word yet
|
||||
(pure VAD trigger); the 30ms frame shape matches silero-vad ONNX input 1:1,
|
||||
so swapping energy-threshold for ONNX inference is a local change in vad.go.
|
||||
`Makefile` `build-waked` target; Docker image includes `alsa-utils` + binary.
|
||||
|
||||
- **Calendar querying (task 3)** — "что у меня завтра?" now answers from the
|
||||
CalDAV facts the poller already writes. Added `store.CalendarEvents(from,to)`,
|
||||
a RU date-scope parser («сегодня»/«завтра») in `router/slots.go`, and an
|
||||
@@ -237,11 +252,14 @@ Earlier: notes/query recall, `/dash` monitoring, `wg_handshake` poller (NO-OP).
|
||||
What separates Maven today from the thing the spec describes. Dealbreakers
|
||||
first — these define the category:
|
||||
|
||||
1. **No always-on listening.** Voice is push-to-talk in a web page: open the
|
||||
PWA, hold, speak, release. No wake word, no ambient mic, no room hardware.
|
||||
Today it's a dictaphone with a brain, not something you talk to across the
|
||||
kitchen. Highest-leverage gap — a wake word + speaker device changes what
|
||||
Maven *is*, not just how good it is. (Listening modes 2–3 in maven.md.)
|
||||
1. **Always-on listening is code-complete (MVP).** `cmd/mavwaked` captures
|
||||
PCM from arecord → energy-based VAD → PushToTalk with `Surface=SurfaceVoice`
|
||||
(L0). Gap narrowed: no wake word yet (pure voice-activity trigger; every
|
||||
utterance fires). The 30ms frame shape and 16kHz PCM match silero-vad's
|
||||
ONNX input exactly, so a wake-word model swap is a local change in vad.go.
|
||||
Hardware: needs a mic on the always-on box (USB mic on homesrv or the desk
|
||||
PC). Builds and tests; deploy action pending (docker-compose service + audio
|
||||
device passthrough).
|
||||
2. **Conversation is thin, not absent.** The router still classifies one
|
||||
utterance → one reply and there's no anaphora resolution or LLM-driven
|
||||
dialogue. But `internal/dialogue` is now **wired** (jul6 task 6 + follow-up):
|
||||
|
||||
Reference in New Issue
Block a user