feat: complete voice pipeline — fix wake word crash, bridge timeout, HA conversation agent

- Fix Wyoming satellite crash on wake word: convert macOS .aiff chimes to .wav
  (Python wave module only reads RIFF format, not AIFF)
- Fix OpenClaw HTTP bridge: increase subprocess timeout 30s → 120s, add SO_REUSEADDR
- Fix HA conversation component: use HTTP agent (not CLI) since HA runs in Docker
  on a different machine; update default host to Mac Mini IP, timeout to 120s
- Rewrite character manager as Vite+React app with schema validation
- Add Wyoming satellite wake word command, ElevenLabs TTS server, wakeword monitor
- Add Phase 5 development plan
- Update TODO.md: mark voice pipeline and agent tasks complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Aodhan Collins
2026-03-11 00:15:55 +00:00
parent 664bb6d275
commit 6db8ae4492
34 changed files with 4649 additions and 1083 deletions

View File

@@ -13,7 +13,7 @@
<string>--wake-word</string>
<string>hey_jarvis</string>
<string>--notify-url</string>
<string>http://localhost:8080/wake</string>
<string>http://localhost:8081/wake</string>
</array>
<key>RunAtLoad</key>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.homeai.wyoming-elevenlabs</string>
<key>ProgramArguments</key>
<array>
<string>/Users/aodhan/homeai-voice-env/bin/python3</string>
<string>/Users/aodhan/gitea/homeai/homeai-voice/tts/wyoming_elevenlabs_server.py</string>
<string>--uri</string>
<string>tcp://0.0.0.0:10302</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/homeai-wyoming-elevenlabs.log</string>
<key>StandardErrorPath</key>
<string>/tmp/homeai-wyoming-elevenlabs.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</dict>
</plist>

View File

@@ -18,9 +18,9 @@
<string>--area</string>
<string>Living Room</string>
<string>--mic-command</string>
<string>rec -q -r 16000 -c 1 -b 16 -t raw -</string>
<string>/opt/homebrew/bin/rec -q -r 16000 -c 1 -b 16 -t raw -</string>
<string>--snd-command</string>
<string>play -q -r 24000 -c 1 -b 16 -t raw -</string>
<string>/opt/homebrew/bin/play -q -t raw -r 24000 -c 1 -b 16 -e signed-integer -</string>
<string>--mic-command-rate</string>
<string>16000</string>
<string>--mic-command-width</string>
@@ -33,10 +33,18 @@
<string>2</string>
<string>--snd-command-channels</string>
<string>1</string>
<string>--wake-command</string>
<string>/Users/aodhan/homeai-voice-env/bin/python3 /Users/aodhan/gitea/homeai/homeai-voice/wyoming/wakeword_command.py --wake-word hey_jarvis --threshold 0.5</string>
<string>--wake-command-rate</string>
<string>16000</string>
<string>--wake-command-width</string>
<string>2</string>
<string>--wake-command-channels</string>
<string>1</string>
<string>--awake-wav</string>
<string>/System/Library/Sounds/Glass.aiff</string>
<string>/Users/aodhan/homeai-data/sounds/awake.wav</string>
<string>--done-wav</string>
<string>/System/Library/Sounds/Blow.aiff</string>
<string>/Users/aodhan/homeai-data/sounds/done.wav</string>
<string>--no-zeroconf</string>
</array>

View File

@@ -0,0 +1,10 @@
#!/bin/bash
# Monitor wake word detection in real-time
echo "Monitoring wake word detection..."
echo "Say 'Hey Jarvis' to test"
echo "Press Ctrl+C to stop"
echo ""
# Watch both the wake word log and bridge log
tail -f /tmp/homeai-wakeword-error.log /tmp/homeai-openclaw-bridge.log 2>/dev/null | grep -E "(Wake word detected|Listening|Failed to notify)"