658a8541e9
SamiOS CI / lint-and-test (push) Successful in 14s
Major update adding full desktop environment support, complete branding suite, and project infrastructure: Desktop (WSL): - KDE Plasma + SDDM + Dolphin/Konsole/Kate/Firefox setup script - Windows 11 dark/light color schemes - PipeWire audio stack - WSLg-compatible launch script - SamiOS CLI tool (v0.2.0) with desktop command Branding: - Logos: face-on-pyramid with and without text (500px) - Icons: square + launcher (256/512/1024px) + SVG vector - Wallpapers: 1920x1080, 4K, clean variant (PIL-generated) - GRUB theme: full cobalt blue (#1424CE) theme with pyramid background - SDDM theme: SamiOS login screen configuration - Branding README with palette, typography, usage guidelines Fonts: - Sami Grotesk (Helvetica-like) as default system/UI font - Sami Sans as secondary - Full Sami font family support (excluding 7777 personal branding) - fontconfig rules mapping Helvetica/Arial → Sami Grotesk - Font policy enforcement in samios CLI Infrastructure: - Automated installer (samios-installer.sh): partition, format, pacstrap, bootloader - PKGBUILD for samios-branding package - Test suite: shell tests for profiledef, packages, pacman.conf, CLI, font policy - Makefile: test, lint, check, build, clean targets - Gitea Actions CI workflow - Voice integration architecture document (SamiType × SamiOS) - Updated roadmap reflecting completed phases
150 lines
6.0 KiB
Markdown
150 lines
6.0 KiB
Markdown
# SamiType × SamiOS Voice Integration Architecture
|
||
|
||
## Vision
|
||
|
||
Voice-first OS control — "Computer, open Firefox", "Computer, go to youtube.com",
|
||
"Computer, volume up" — Star Trek computer style, powered by SamiType (Sami's
|
||
custom speech-to-text engine).
|
||
|
||
## Architecture Overview
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ SamiOS Desktop │
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
|
||
│ │ Audio │──▶│ SamiType │──▶│ Command │ │
|
||
│ │ Capture │ │ STT │ │ Router │ │
|
||
│ └──────────┘ └──────────┘ └──────┬──────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────┼─────┐ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌──────────┐ ┌──────┐ ┌──────┐ │
|
||
│ │ KDE/WM │ │ Web │ │ Sys │ │
|
||
│ │ Control │ │ Nav │ │ Ctrl │ │
|
||
│ └──────────┘ └──────┘ └──────┘ │
|
||
│ │
|
||
│ ┌──────────────────────────────────────────┐ │
|
||
│ │ SamiType TTS (Voice Response) │ │
|
||
│ └──────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Components
|
||
|
||
### 1. Wake Word Engine
|
||
- **Trigger:** "Computer" (configurable)
|
||
- **Implementation:** Porcupine or openWakeWord (offline, low-latency)
|
||
- **Always listening** via systemd service, minimal CPU (< 2%)
|
||
- Push-to-talk fallback (keyboard shortcut or dedicated button)
|
||
|
||
### 2. SamiType STT (Speech-to-Text)
|
||
- Sami's existing speech-to-text engine
|
||
- **Offline-first** — models run locally, no cloud dependency
|
||
- **Streaming mode** — starts transcribing before user finishes speaking
|
||
- Outputs text + confidence score
|
||
|
||
### 3. Command Router
|
||
- Parses SamiType transcription → structured command
|
||
- Intent classification:
|
||
- **Navigation:** "go to [website]", "open [app]", "search for [query]"
|
||
- **System:** "volume [up/down/mute]", "brightness [N]", "screenshot", "lock screen"
|
||
- **Window:** "minimize", "maximize", "close window", "switch to [app]"
|
||
- **File:** "open [file]", "create folder [name]", "move [file] to [location]"
|
||
- **Query:** "what time is it", "what's the weather", "system status"
|
||
- **Fallback:** If no command match → pass to web search or LLM
|
||
|
||
### 4. Execution Layer
|
||
- **KDE/WM Control:** kdialog, qdbus, kstart, wmctrl, xdotool
|
||
- **Web Navigation:** xdg-open, firefox --new-tab [url]
|
||
- **System Control:** pactl (volume), brightnessctl, systemctl, loginctl
|
||
|
||
### 5. Voice Response (TTS)
|
||
- SamiType TTS engine for spoken confirmations
|
||
- "Opening Firefox", "Volume set to 50%", "Screenshot saved"
|
||
- Subtle — not chatty, only speaks when action confirmed or error
|
||
|
||
## Command Examples
|
||
|
||
| Voice Input | Action |
|
||
|-------------|--------|
|
||
| "Computer, open Firefox" | Launch Firefox |
|
||
| "Computer, go to youtube.com" | Open youtube.com in default browser |
|
||
| "Computer, volume up" | Increase volume by 10% |
|
||
| "Computer, mute" | Mute audio |
|
||
| "Computer, take a screenshot" | spectacle -f (fullscreen capture) |
|
||
| "Computer, lock screen" | loginctl lock-session |
|
||
| "Computer, what time is it" | TTS: "It's 3:42 PM" |
|
||
| "Computer, minimize all windows" | Show desktop (Meta+D) |
|
||
| "Computer, switch to Firefox" | Activate Firefox window |
|
||
| "Computer, check for updates" | Run pacman -Syu, TTS result |
|
||
|
||
## Integration Points
|
||
|
||
### SamiType → SamiOS
|
||
```
|
||
samiType.onTranscription(text, confidence) {
|
||
if (confidence < 0.6) return; // ignore low-confidence
|
||
|
||
command = CommandRouter.parse(text);
|
||
if (command) {
|
||
result = command.execute();
|
||
if (result.shouldSpeak) {
|
||
samiTypeTTS.speak(result.message);
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### systemd Service
|
||
```ini
|
||
[Unit]
|
||
Description=SamiOS Voice Assistant (SamiType)
|
||
After=pipewire.service
|
||
|
||
[Service]
|
||
ExecStart=/usr/local/bin/samios-voice
|
||
Restart=always
|
||
User=sami
|
||
|
||
[Install]
|
||
WantedBy=default.target
|
||
```
|
||
|
||
## Phased Rollout
|
||
|
||
### Phase 1: Foundation (MVP)
|
||
- [ ] SamiType running as systemd service in SamiOS
|
||
- [ ] Push-to-talk activation (keyboard shortcut)
|
||
- [ ] Basic command set: open apps, web nav, volume
|
||
- [ ] Text output in notification (no TTS yet)
|
||
|
||
### Phase 2: Always-On Wake Word
|
||
- [ ] Wake word "Computer" detection
|
||
- [ ] Expanded command set: window management, screenshots
|
||
- [ ] TTS voice feedback
|
||
|
||
### Phase 3: Natural Language
|
||
- [ ] LLM-powered intent parsing for complex commands
|
||
- [ ] "Computer, find all PDFs from last week and move them to Documents"
|
||
- [ ] Context awareness (current app, current selection)
|
||
|
||
### Phase 4: Full Voice OS
|
||
- [ ] Voice-controlled settings (display, network, bluetooth)
|
||
- [ ] Dictation mode (SamiType → any text field)
|
||
- [ ] Custom command creation ("Computer, when I say X, do Y")
|
||
- [ ] Multi-turn voice interactions
|
||
|
||
## Dependencies
|
||
- SamiType (STT + TTS)
|
||
- pipewire (audio capture/playback)
|
||
- KDE Plasma (window/desktop control via qdbus)
|
||
- wmctrl / xdotool (X11 window manipulation)
|
||
- Optional: openWakeWord or Porcupine (wake word detection)
|
||
|
||
## Security Considerations
|
||
- All processing is local (no cloud, no data leaves the machine)
|
||
- Microphone indicator (notification when listening)
|
||
- Manual disable switch (system tray toggle)
|
||
- No voice data stored unless explicitly saved by user
|