Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
81 lines
4.6 KiB
Markdown
81 lines
4.6 KiB
Markdown
# voice-input-settings.screen
|
||
|
||
S2 settings category — voice + input config. Implements per [brief S §S2](./S-settings-ia.brief.md). Reached from settings-root.screen.md "Voice & input" card. Voice: working.
|
||
|
||
## Layout (full-screen sheet)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ ◄ Settings Done │ 56pt
|
||
├─────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ─── Speech-to-text ─── │
|
||
│ Recognizer: ● iOS native ○ Cloud (cocotte.io) │
|
||
│ Auto-punctuate: ☑ │
|
||
│ Auto-stop on silence: [ 2s ▼ ] │
|
||
│ │
|
||
│ ─── Text-to-speech (Cocotte's voice) ─── │
|
||
│ TTS engine: [ system-default ▼ ] │ speech-synthesis MCP picks
|
||
│ Voice character: [ warm-alto ▼ ] │ per available voices
|
||
│ Speak action receipts: ○ Always ● High-stakes ○ Off│
|
||
│ Speed: ━━●━━ 1.0× │
|
||
│ │
|
||
│ ─── Mic / push-to-talk ─── │
|
||
│ Tap behavior: ● Push-to-talk ○ Tap-and-release │
|
||
│ Long-press behavior: [ Cook-mode ▼ ] │
|
||
│ Voice trigger word ("hey cocotte"): ☐ enabled │ opt-in
|
||
│ ⓘ Background mic listening uses more battery. │
|
||
│ │
|
||
│ ─── Composer input ─── │
|
||
│ Default keyboard: [ system ▼ ] │
|
||
│ Auto-correct: ☑ Predictive text: ☑ │
|
||
│ Markdown shortcuts (`**`, `_`, `>`): ☑ │
|
||
│ │
|
||
│ ─── Voice register override ─── │
|
||
│ ○ Auto (let Cocotte pick) ● Hearth ○ Working ○ Plain│
|
||
│ ⓘ Forces all Cocotte copy to one register. │
|
||
│ │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Components
|
||
|
||
| Component | Notes |
|
||
|---|---|
|
||
| STT | Recognizer choice (iOS-native = on-device; cloud = `cocotte.io` cloud transcription for hands-busy fidelity). |
|
||
| TTS | Engine + character + when-to-speak + speed. Hands off to [speech-synthesis MCP](./_engineering-v2-port-map.md). |
|
||
| Mic / PTT | Push-to-talk vs tap-and-release default; long-press routes to cook-mode or alternate. Voice-trigger opt-in (battery impact disclosed). |
|
||
| Composer input | Keyboard, autocorrect, predictive, markdown shortcuts. |
|
||
| Voice register override | Auto / hearth / working / plain. Auto = brief T register-by-surface; override = global. |
|
||
|
||
## States
|
||
|
||
1. **Default (iOS-native STT, system TTS)** — privacy-leaning defaults.
|
||
2. **Cloud STT selected** — banner: "Audio is sent to cocotte.io for transcription, retained 30s. Override at any time."
|
||
3. **Voice trigger on** — banner: "Background mic on. Battery impact: ~5% / day. Disable if unsure."
|
||
4. **Voice register forced** — chip on settings-root.screen.md: "Voice override active."
|
||
5. **VoiceOver** — same content read; mic settings have additional VoiceOver hints.
|
||
|
||
## Interactions
|
||
|
||
- **Tap recognizer radio** → confirm sheet on cloud-STT switch (privacy disclosure).
|
||
- **Tap TTS voice picker** → speech-synthesis MCP voice list.
|
||
- **Tap "Speak action receipts"** → updates listen-rule for chat-home receipts.
|
||
- **Tap voice register override** → commits; chat-home banner reflects.
|
||
|
||
## Edge cases
|
||
|
||
- **No microphone permission** — banner: "Cocotte doesn't have mic access. Grant in iOS Settings to enable voice."
|
||
- **TTS voice unavailable** (offline) — fallback to system default with chip "voice unavailable, using system."
|
||
- **Reduced-haptics + mic active** — single-haptic on mic-start; no haptic on each word recognized.
|
||
|
||
## Related
|
||
- [Brief S §S2](./S-settings-ia.brief.md) — parent.
|
||
- [`voice.md`](./00-system-voice.md) — voice register source.
|
||
- [Brief J](./_engineering-v2-port-map.md) — speech-synthesis MCP.
|
||
- [Brief X](./X-accessibility.brief.md) — accessibility override layer.
|
||
- [chat-home.screen.md](./chat-home.screen.md) — composer mic affordance source.
|
||
|
||
## Out of scope
|
||
- Per-language STT (English-only at P0).
|
||
- Custom TTS voice training (defer).
|