python-voiceio 0.3.12__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. {python_voiceio-0.3.12/python_voiceio.egg-info → python_voiceio-0.4.0}/PKG-INFO +61 -35
  2. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/README.md +58 -30
  3. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/pyproject.toml +3 -5
  4. {python_voiceio-0.3.12 → python_voiceio-0.4.0/python_voiceio.egg-info}/PKG-INFO +61 -35
  5. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/python_voiceio.egg-info/SOURCES.txt +14 -0
  6. python_voiceio-0.4.0/tests/test_adjudicate.py +288 -0
  7. python_voiceio-0.4.0/tests/test_audio_quality.py +138 -0
  8. python_voiceio-0.4.0/tests/test_audit.py +297 -0
  9. python_voiceio-0.4.0/tests/test_autocorrect.py +527 -0
  10. python_voiceio-0.4.0/tests/test_autocorrect_state.py +51 -0
  11. python_voiceio-0.4.0/tests/test_cli.py +264 -0
  12. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_config.py +1 -1
  13. python_voiceio-0.4.0/tests/test_correct_batch.py +129 -0
  14. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_llm_api.py +45 -1
  15. python_voiceio-0.4.0/tests/test_postcorrect.py +163 -0
  16. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_postprocess.py +48 -1
  17. python_voiceio-0.4.0/tests/test_retention.py +99 -0
  18. python_voiceio-0.4.0/tests/test_snapshots.py +54 -0
  19. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_streaming.py +1 -1
  20. python_voiceio-0.4.0/tests/test_vocabulary.py +162 -0
  21. python_voiceio-0.4.0/voiceio/__init__.py +1 -0
  22. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/app.py +158 -12
  23. python_voiceio-0.4.0/voiceio/audit.py +409 -0
  24. python_voiceio-0.4.0/voiceio/autocorrect.py +713 -0
  25. python_voiceio-0.4.0/voiceio/autocorrect_state.py +184 -0
  26. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/cli.py +447 -57
  27. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/config.py +47 -2
  28. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/corrections.py +37 -3
  29. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/feedback.py +8 -5
  30. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/history.py +27 -3
  31. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/llm_api.py +24 -6
  32. python_voiceio-0.4.0/voiceio/postcorrect.py +200 -0
  33. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/postprocess.py +11 -0
  34. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/prompt.py +10 -2
  35. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/recorder.py +27 -0
  36. python_voiceio-0.4.0/voiceio/retention.py +85 -0
  37. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/service.py +71 -0
  38. python_voiceio-0.4.0/voiceio/snapshots.py +78 -0
  39. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/streaming.py +15 -1
  40. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/transcriber.py +43 -3
  41. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/vad.py +22 -3
  42. python_voiceio-0.4.0/voiceio/vocabulary.py +186 -0
  43. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/wizard.py +38 -5
  44. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/worker.py +23 -3
  45. python_voiceio-0.3.12/tests/test_autocorrect.py +0 -264
  46. python_voiceio-0.3.12/tests/test_vocabulary.py +0 -71
  47. python_voiceio-0.3.12/voiceio/__init__.py +0 -1
  48. python_voiceio-0.3.12/voiceio/autocorrect.py +0 -284
  49. python_voiceio-0.3.12/voiceio/vocabulary.py +0 -59
  50. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/LICENSE +0 -0
  51. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/python_voiceio.egg-info/dependency_links.txt +0 -0
  52. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/python_voiceio.egg-info/entry_points.txt +0 -0
  53. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/python_voiceio.egg-info/requires.txt +0 -0
  54. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/python_voiceio.egg-info/top_level.txt +0 -0
  55. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/setup.cfg +0 -0
  56. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_app_wiring.py +0 -0
  57. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_backend_probes.py +0 -0
  58. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_clipboard_read.py +0 -0
  59. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_commands.py +0 -0
  60. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_corrections.py +0 -0
  61. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_fallback.py +0 -0
  62. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_health.py +0 -0
  63. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_hints.py +0 -0
  64. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_history.py +0 -0
  65. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_ibus_typer.py +0 -0
  66. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_llm.py +0 -0
  67. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_numbers.py +0 -0
  68. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_platform.py +0 -0
  69. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_prebuffer.py +0 -0
  70. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_prompt.py +0 -0
  71. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_recorder_integration.py +0 -0
  72. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_robustness.py +0 -0
  73. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_transcriber.py +0 -0
  74. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_tts.py +0 -0
  75. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_vad.py +0 -0
  76. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/tests/test_wordfreq.py +0 -0
  77. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/__main__.py +0 -0
  78. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/backends.py +0 -0
  79. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/clipboard_read.py +0 -0
  80. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/commands.py +0 -0
  81. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/demo.py +0 -0
  82. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/health.py +0 -0
  83. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hints.py +0 -0
  84. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/__init__.py +0 -0
  85. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/base.py +0 -0
  86. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/chain.py +0 -0
  87. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/evdev.py +0 -0
  88. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/pynput_backend.py +0 -0
  89. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/hotkeys/socket_backend.py +0 -0
  90. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/ibus/__init__.py +0 -0
  91. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/ibus/engine.py +0 -0
  92. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/llm.py +0 -0
  93. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/models/__init__.py +0 -0
  94. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/models/silero_vad.onnx +0 -0
  95. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/numbers.py +0 -0
  96. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/pidlock.py +0 -0
  97. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/platform.py +0 -0
  98. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/sounds/__init__.py +0 -0
  99. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/sounds/commit.wav +0 -0
  100. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/sounds/start.wav +0 -0
  101. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/sounds/stop.wav +0 -0
  102. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tray/__init__.py +0 -0
  103. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tray/_icons.py +0 -0
  104. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tray/_indicator.py +0 -0
  105. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tray/_pystray.py +0 -0
  106. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/__init__.py +0 -0
  107. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/base.py +0 -0
  108. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/chain.py +0 -0
  109. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/edge_engine.py +0 -0
  110. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/espeak.py +0 -0
  111. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/piper_engine.py +0 -0
  112. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/tts/player.py +0 -0
  113. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/__init__.py +0 -0
  114. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/base.py +0 -0
  115. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/chain.py +0 -0
  116. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/clipboard.py +0 -0
  117. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/ibus.py +0 -0
  118. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/pynput_type.py +0 -0
  119. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/wtype.py +0 -0
  120. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/xdotool.py +0 -0
  121. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/typers/ydotool.py +0 -0
  122. {python_voiceio-0.3.12 → python_voiceio-0.4.0}/voiceio/wordfreq.py +0 -0
@@ -1,20 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.3.12
4
- Summary: Speak → text, locally, instantly.
3
+ Version: 0.4.0
4
+ Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/Hugo0/voiceio
8
8
  Project-URL: Repository, https://github.com/Hugo0/voiceio
9
9
  Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
10
10
  Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
11
- Keywords: voice,speech-to-text,whisper,linux,windows,dictation,wayland,ibus
11
+ Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: X11 Applications
14
14
  Classifier: Intended Audience :: End Users/Desktop
15
15
  Classifier: Operating System :: POSIX :: Linux
16
- Classifier: Operating System :: Microsoft :: Windows
17
- Classifier: Operating System :: MacOS
18
16
  Classifier: Programming Language :: Python :: 3
19
17
  Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
20
18
  Requires-Python: >=3.11
@@ -61,10 +59,18 @@ Dynamic: license-file
61
59
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
62
60
  [![Downloads](https://img.shields.io/pepy/dt/python-voiceio)](https://pepy.tech/projects/python-voiceio)
63
61
 
64
- Speak text, locally, instantly.
62
+ Voice dictation for Linux. Local, yours, and it learns how you speak.
65
63
 
66
64
  https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
67
65
 
66
+ Open-source, sovereign voice input/output. Your speech is transcribed on your own machine, everything it learns about you stays in local files you own, and it gets better the more you use it.
67
+
68
+ - **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/faster-whisper); audio never leaves the machine. Your history, retained audio, corrections, and vocabulary all live in plain local files (JSONL / TOML / txt) you can read, edit, and delete. Zero telemetry. The one honest nuance: two *optional, off-by-default* features send text (never audio) to a cloud LLM you configure yourself — final-transcript polish (`[postcorrect]`) and the weekly correction-mining review.
69
+ - **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
70
+ - **Linux-first & hackable** — Wayland/X11, GNOME/KDE/sway/i3, chosen automatically by chain-and-probe backends. It's plain Python you can read in an afternoon and [contribute to](CLAUDE.md).
71
+
72
+ > **Linux-first.** voiceio is developed and tested daily on Linux (GNOME/Wayland). Windows and macOS ship as **experimental, untested** targets — the code paths exist but are unmaintained and likely broken. See [Experimental platforms](#experimental-platforms).
73
+
68
74
  ## Quick start
69
75
 
70
76
  ```bash
@@ -102,28 +108,9 @@ voiceio setup
102
108
  </details>
103
109
 
104
110
  <details>
105
- <summary><strong>Windows</strong></summary>
106
-
107
- ```powershell
108
- # Option A: Install with pip (requires Python 3.11+)
109
- pip install python-voiceio
110
- voiceio setup
111
-
112
- # Option B: Download the installer from GitHub Releases (no Python needed)
113
- # https://github.com/Hugo0/voiceio/releases
114
- # Also available as a portable .zip if you prefer no installation.
115
- ```
111
+ <summary><strong>Windows / macOS (experimental)</strong></summary>
116
112
 
117
- Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
118
- </details>
119
-
120
- <details>
121
- <summary><strong>macOS</strong></summary>
122
-
123
- ```bash
124
- pipx install python-voiceio
125
- voiceio setup
126
- ```
113
+ See [Experimental platforms](#experimental-platforms) below these builds are untested and unmaintained.
127
114
  </details>
128
115
 
129
116
  <details>
@@ -152,7 +139,35 @@ hotkey → mic capture → whisper (local) → text at cursor
152
139
  pre-buffered streaming IBus / clipboard
153
140
  ```
154
141
 
155
- Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
142
+ Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals. It runs in real time on a modern CPU and ships with model tiers from `tiny` to `large-v3`.
143
+
144
+ ## How it learns
145
+
146
+ Most dictation tools transcribe the same way on day 100 as on day 1. voiceio adapts to *you* — your jargon, names, and accent — entirely from data that never leaves your machine.
147
+
148
+ ```mermaid
149
+ flowchart LR
150
+ subgraph live ["every utterance"]
151
+ A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
152
+ A --> C["hotwords + recent context\nbias the Whisper decoder"]
153
+ A --> D["optional LLM pass fixes\nmisheard proper nouns"]
154
+ end
155
+ subgraph weekly ["weekly, in the background"]
156
+ E["mine history for recurring errors\n→ learn corrections + vocabulary\n(safety-gated, multi-vote)"] --> F["teacher model replays your audio\n→ audits what was learned"]
157
+ F -->|"bad rule"| G["auto-retired"]
158
+ F -->|"quality regressed"| H["whole week rolled back"]
159
+ end
160
+ B --> E
161
+ F -->|"confirmed"| C
162
+ ```
163
+
164
+ 1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
165
+ 2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
166
+ 3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
167
+ 4. **Mine** — a weekly background job scans your history for recurring errors and auto-learns corrections and vocabulary. Multi-vote adjudication and a protected-languages guard (for bilingual users) keep it safe; it never asks you to triage.
168
+ 5. **Audit** — a teacher model (a larger Whisper) replays your retained audio to verify what was learned. Bad rules are retired automatically, and a system-level drift metric rolls back an entire week of learning if quality regressed.
169
+
170
+ Rules are always **probationary, never tenured** — anything that stops helping is dropped. Your only touchpoint is an occasional desktop notification telling you what was learned.
156
171
 
157
172
  ## Features
158
173
 
@@ -202,7 +217,7 @@ voiceio uninstall Remove all system integrations
202
217
  `voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
203
218
 
204
219
  - Linux/macOS: `~/.config/voiceio/config.toml`
205
- - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
220
+ - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
206
221
 
207
222
  ```bash
208
223
  voiceio --model large-v3 --language auto -v
@@ -224,12 +239,12 @@ voiceio logs # check debug output
224
239
  | Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
225
240
  | Transcription too slow | Use a smaller model: `voiceio --model tiny` |
226
241
  | Want to start fresh | `voiceio uninstall` then `voiceio setup` |
227
- | Windows: antivirus blocks hotkeys | pynput uses global keyboard hooksadd an exception for voiceio |
228
- | Windows: no sound feedback | Check `voiceio logs` for audio device info |
229
- | macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
242
+ | Windows / macOS issues | These platforms are experimental and untested see [Experimental platforms](#experimental-platforms) |
230
243
 
231
244
  ## Platform support
232
245
 
246
+ voiceio targets **Linux**. That's what it's developed and tested against.
247
+
233
248
  | Platform | Status | Text injection | Hotkeys | Streaming preview |
234
249
  |----------|--------|---------------|---------|-------------------|
235
250
  | Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
@@ -237,11 +252,22 @@ voiceio logs # check debug output
237
252
  | Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
238
253
  | Arch Linux | Supported | IBus | evdev | Yes |
239
254
  | KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
240
- | Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
241
- | macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
242
255
 
243
256
  voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
244
257
 
258
+ ## Experimental platforms
259
+
260
+ Windows and macOS code paths exist, but they are **experimental, untested, and unmaintained** — the maintainer only develops on Linux, so they may be broken at any given time. No parity with Linux is promised. Contributions are welcome, but please don't file bugs expecting a fix.
261
+
262
+ | Platform | Status | Text injection | Hotkeys | Streaming preview |
263
+ |----------|--------|---------------|---------|-------------------|
264
+ | Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
265
+ | macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
266
+
267
+ - **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
268
+ - **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
269
+ - Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
270
+
245
271
  ## Uninstall
246
272
 
247
273
  ```bash
@@ -275,7 +301,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
275
301
  - [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
276
302
  - [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
277
303
  - [x] Smart punctuation & capitalization post-processing
278
- - [x] Windows support
304
+ - [x] Windows support (experimental, untested)
279
305
  - [x] System tray icon with animated states
280
306
  - [x] Auto-stop on silence
281
307
 
@@ -15,10 +15,18 @@
15
15
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
16
16
  [![Downloads](https://img.shields.io/pepy/dt/python-voiceio)](https://pepy.tech/projects/python-voiceio)
17
17
 
18
- Speak text, locally, instantly.
18
+ Voice dictation for Linux. Local, yours, and it learns how you speak.
19
19
 
20
20
  https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
21
21
 
22
+ Open-source, sovereign voice input/output. Your speech is transcribed on your own machine, everything it learns about you stays in local files you own, and it gets better the more you use it.
23
+
24
+ - **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/faster-whisper); audio never leaves the machine. Your history, retained audio, corrections, and vocabulary all live in plain local files (JSONL / TOML / txt) you can read, edit, and delete. Zero telemetry. The one honest nuance: two *optional, off-by-default* features send text (never audio) to a cloud LLM you configure yourself — final-transcript polish (`[postcorrect]`) and the weekly correction-mining review.
25
+ - **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
26
+ - **Linux-first & hackable** — Wayland/X11, GNOME/KDE/sway/i3, chosen automatically by chain-and-probe backends. It's plain Python you can read in an afternoon and [contribute to](CLAUDE.md).
27
+
28
+ > **Linux-first.** voiceio is developed and tested daily on Linux (GNOME/Wayland). Windows and macOS ship as **experimental, untested** targets — the code paths exist but are unmaintained and likely broken. See [Experimental platforms](#experimental-platforms).
29
+
22
30
  ## Quick start
23
31
 
24
32
  ```bash
@@ -56,28 +64,9 @@ voiceio setup
56
64
  </details>
57
65
 
58
66
  <details>
59
- <summary><strong>Windows</strong></summary>
60
-
61
- ```powershell
62
- # Option A: Install with pip (requires Python 3.11+)
63
- pip install python-voiceio
64
- voiceio setup
65
-
66
- # Option B: Download the installer from GitHub Releases (no Python needed)
67
- # https://github.com/Hugo0/voiceio/releases
68
- # Also available as a portable .zip if you prefer no installation.
69
- ```
67
+ <summary><strong>Windows / macOS (experimental)</strong></summary>
70
68
 
71
- Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
72
- </details>
73
-
74
- <details>
75
- <summary><strong>macOS</strong></summary>
76
-
77
- ```bash
78
- pipx install python-voiceio
79
- voiceio setup
80
- ```
69
+ See [Experimental platforms](#experimental-platforms) below these builds are untested and unmaintained.
81
70
  </details>
82
71
 
83
72
  <details>
@@ -106,7 +95,35 @@ hotkey → mic capture → whisper (local) → text at cursor
106
95
  pre-buffered streaming IBus / clipboard
107
96
  ```
108
97
 
109
- Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
98
+ Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals. It runs in real time on a modern CPU and ships with model tiers from `tiny` to `large-v3`.
99
+
100
+ ## How it learns
101
+
102
+ Most dictation tools transcribe the same way on day 100 as on day 1. voiceio adapts to *you* — your jargon, names, and accent — entirely from data that never leaves your machine.
103
+
104
+ ```mermaid
105
+ flowchart LR
106
+ subgraph live ["every utterance"]
107
+ A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
108
+ A --> C["hotwords + recent context\nbias the Whisper decoder"]
109
+ A --> D["optional LLM pass fixes\nmisheard proper nouns"]
110
+ end
111
+ subgraph weekly ["weekly, in the background"]
112
+ E["mine history for recurring errors\n→ learn corrections + vocabulary\n(safety-gated, multi-vote)"] --> F["teacher model replays your audio\n→ audits what was learned"]
113
+ F -->|"bad rule"| G["auto-retired"]
114
+ F -->|"quality regressed"| H["whole week rolled back"]
115
+ end
116
+ B --> E
117
+ F -->|"confirmed"| C
118
+ ```
119
+
120
+ 1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
121
+ 2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
122
+ 3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
123
+ 4. **Mine** — a weekly background job scans your history for recurring errors and auto-learns corrections and vocabulary. Multi-vote adjudication and a protected-languages guard (for bilingual users) keep it safe; it never asks you to triage.
124
+ 5. **Audit** — a teacher model (a larger Whisper) replays your retained audio to verify what was learned. Bad rules are retired automatically, and a system-level drift metric rolls back an entire week of learning if quality regressed.
125
+
126
+ Rules are always **probationary, never tenured** — anything that stops helping is dropped. Your only touchpoint is an occasional desktop notification telling you what was learned.
110
127
 
111
128
  ## Features
112
129
 
@@ -156,7 +173,7 @@ voiceio uninstall Remove all system integrations
156
173
  `voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
157
174
 
158
175
  - Linux/macOS: `~/.config/voiceio/config.toml`
159
- - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
176
+ - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
160
177
 
161
178
  ```bash
162
179
  voiceio --model large-v3 --language auto -v
@@ -178,12 +195,12 @@ voiceio logs # check debug output
178
195
  | Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
179
196
  | Transcription too slow | Use a smaller model: `voiceio --model tiny` |
180
197
  | Want to start fresh | `voiceio uninstall` then `voiceio setup` |
181
- | Windows: antivirus blocks hotkeys | pynput uses global keyboard hooksadd an exception for voiceio |
182
- | Windows: no sound feedback | Check `voiceio logs` for audio device info |
183
- | macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
198
+ | Windows / macOS issues | These platforms are experimental and untested see [Experimental platforms](#experimental-platforms) |
184
199
 
185
200
  ## Platform support
186
201
 
202
+ voiceio targets **Linux**. That's what it's developed and tested against.
203
+
187
204
  | Platform | Status | Text injection | Hotkeys | Streaming preview |
188
205
  |----------|--------|---------------|---------|-------------------|
189
206
  | Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
@@ -191,11 +208,22 @@ voiceio logs # check debug output
191
208
  | Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
192
209
  | Arch Linux | Supported | IBus | evdev | Yes |
193
210
  | KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
194
- | Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
195
- | macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
196
211
 
197
212
  voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
198
213
 
214
+ ## Experimental platforms
215
+
216
+ Windows and macOS code paths exist, but they are **experimental, untested, and unmaintained** — the maintainer only develops on Linux, so they may be broken at any given time. No parity with Linux is promised. Contributions are welcome, but please don't file bugs expecting a fix.
217
+
218
+ | Platform | Status | Text injection | Hotkeys | Streaming preview |
219
+ |----------|--------|---------------|---------|-------------------|
220
+ | Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
221
+ | macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
222
+
223
+ - **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
224
+ - **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
225
+ - Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
226
+
199
227
  ## Uninstall
200
228
 
201
229
  ```bash
@@ -229,7 +257,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
229
257
  - [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
230
258
  - [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
231
259
  - [x] Smart punctuation & capitalization post-processing
232
- - [x] Windows support
260
+ - [x] Windows support (experimental, untested)
233
261
  - [x] System tray icon with animated states
234
262
  - [x] Auto-stop on silence
235
263
 
@@ -4,20 +4,18 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-voiceio"
7
- version = "0.3.12"
8
- description = "Speak → text, locally, instantly."
7
+ version = "0.4.0"
8
+ description = "Voice dictation for Linux. Speak → text, locally, instantly."
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.11"
12
12
  authors = [{ name = "Hugo Montenegro" }]
13
- keywords = ["voice", "speech-to-text", "whisper", "linux", "windows", "dictation", "wayland", "ibus"]
13
+ keywords = ["voice", "speech-to-text", "whisper", "linux", "dictation", "wayland", "ibus"]
14
14
  classifiers = [
15
15
  "Development Status :: 4 - Beta",
16
16
  "Environment :: X11 Applications",
17
17
  "Intended Audience :: End Users/Desktop",
18
18
  "Operating System :: POSIX :: Linux",
19
- "Operating System :: Microsoft :: Windows",
20
- "Operating System :: MacOS",
21
19
  "Programming Language :: Python :: 3",
22
20
  "Topic :: Multimedia :: Sound/Audio :: Speech",
23
21
  ]
@@ -1,20 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.3.12
4
- Summary: Speak → text, locally, instantly.
3
+ Version: 0.4.0
4
+ Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/Hugo0/voiceio
8
8
  Project-URL: Repository, https://github.com/Hugo0/voiceio
9
9
  Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
10
10
  Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
11
- Keywords: voice,speech-to-text,whisper,linux,windows,dictation,wayland,ibus
11
+ Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: X11 Applications
14
14
  Classifier: Intended Audience :: End Users/Desktop
15
15
  Classifier: Operating System :: POSIX :: Linux
16
- Classifier: Operating System :: Microsoft :: Windows
17
- Classifier: Operating System :: MacOS
18
16
  Classifier: Programming Language :: Python :: 3
19
17
  Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
20
18
  Requires-Python: >=3.11
@@ -61,10 +59,18 @@ Dynamic: license-file
61
59
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
62
60
  [![Downloads](https://img.shields.io/pepy/dt/python-voiceio)](https://pepy.tech/projects/python-voiceio)
63
61
 
64
- Speak text, locally, instantly.
62
+ Voice dictation for Linux. Local, yours, and it learns how you speak.
65
63
 
66
64
  https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
67
65
 
66
+ Open-source, sovereign voice input/output. Your speech is transcribed on your own machine, everything it learns about you stays in local files you own, and it gets better the more you use it.
67
+
68
+ - **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/faster-whisper); audio never leaves the machine. Your history, retained audio, corrections, and vocabulary all live in plain local files (JSONL / TOML / txt) you can read, edit, and delete. Zero telemetry. The one honest nuance: two *optional, off-by-default* features send text (never audio) to a cloud LLM you configure yourself — final-transcript polish (`[postcorrect]`) and the weekly correction-mining review.
69
+ - **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
70
+ - **Linux-first & hackable** — Wayland/X11, GNOME/KDE/sway/i3, chosen automatically by chain-and-probe backends. It's plain Python you can read in an afternoon and [contribute to](CLAUDE.md).
71
+
72
+ > **Linux-first.** voiceio is developed and tested daily on Linux (GNOME/Wayland). Windows and macOS ship as **experimental, untested** targets — the code paths exist but are unmaintained and likely broken. See [Experimental platforms](#experimental-platforms).
73
+
68
74
  ## Quick start
69
75
 
70
76
  ```bash
@@ -102,28 +108,9 @@ voiceio setup
102
108
  </details>
103
109
 
104
110
  <details>
105
- <summary><strong>Windows</strong></summary>
106
-
107
- ```powershell
108
- # Option A: Install with pip (requires Python 3.11+)
109
- pip install python-voiceio
110
- voiceio setup
111
-
112
- # Option B: Download the installer from GitHub Releases (no Python needed)
113
- # https://github.com/Hugo0/voiceio/releases
114
- # Also available as a portable .zip if you prefer no installation.
115
- ```
111
+ <summary><strong>Windows / macOS (experimental)</strong></summary>
116
112
 
117
- Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
118
- </details>
119
-
120
- <details>
121
- <summary><strong>macOS</strong></summary>
122
-
123
- ```bash
124
- pipx install python-voiceio
125
- voiceio setup
126
- ```
113
+ See [Experimental platforms](#experimental-platforms) below these builds are untested and unmaintained.
127
114
  </details>
128
115
 
129
116
  <details>
@@ -152,7 +139,35 @@ hotkey → mic capture → whisper (local) → text at cursor
152
139
  pre-buffered streaming IBus / clipboard
153
140
  ```
154
141
 
155
- Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
142
+ Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via [faster-whisper](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals. It runs in real time on a modern CPU and ships with model tiers from `tiny` to `large-v3`.
143
+
144
+ ## How it learns
145
+
146
+ Most dictation tools transcribe the same way on day 100 as on day 1. voiceio adapts to *you* — your jargon, names, and accent — entirely from data that never leaves your machine.
147
+
148
+ ```mermaid
149
+ flowchart LR
150
+ subgraph live ["every utterance"]
151
+ A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
152
+ A --> C["hotwords + recent context\nbias the Whisper decoder"]
153
+ A --> D["optional LLM pass fixes\nmisheard proper nouns"]
154
+ end
155
+ subgraph weekly ["weekly, in the background"]
156
+ E["mine history for recurring errors\n→ learn corrections + vocabulary\n(safety-gated, multi-vote)"] --> F["teacher model replays your audio\n→ audits what was learned"]
157
+ F -->|"bad rule"| G["auto-retired"]
158
+ F -->|"quality regressed"| H["whole week rolled back"]
159
+ end
160
+ B --> E
161
+ F -->|"confirmed"| C
162
+ ```
163
+
164
+ 1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
165
+ 2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
166
+ 3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
167
+ 4. **Mine** — a weekly background job scans your history for recurring errors and auto-learns corrections and vocabulary. Multi-vote adjudication and a protected-languages guard (for bilingual users) keep it safe; it never asks you to triage.
168
+ 5. **Audit** — a teacher model (a larger Whisper) replays your retained audio to verify what was learned. Bad rules are retired automatically, and a system-level drift metric rolls back an entire week of learning if quality regressed.
169
+
170
+ Rules are always **probationary, never tenured** — anything that stops helping is dropped. Your only touchpoint is an occasional desktop notification telling you what was learned.
156
171
 
157
172
  ## Features
158
173
 
@@ -202,7 +217,7 @@ voiceio uninstall Remove all system integrations
202
217
  `voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
203
218
 
204
219
  - Linux/macOS: `~/.config/voiceio/config.toml`
205
- - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
220
+ - Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
206
221
 
207
222
  ```bash
208
223
  voiceio --model large-v3 --language auto -v
@@ -224,12 +239,12 @@ voiceio logs # check debug output
224
239
  | Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
225
240
  | Transcription too slow | Use a smaller model: `voiceio --model tiny` |
226
241
  | Want to start fresh | `voiceio uninstall` then `voiceio setup` |
227
- | Windows: antivirus blocks hotkeys | pynput uses global keyboard hooksadd an exception for voiceio |
228
- | Windows: no sound feedback | Check `voiceio logs` for audio device info |
229
- | macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
242
+ | Windows / macOS issues | These platforms are experimental and untested see [Experimental platforms](#experimental-platforms) |
230
243
 
231
244
  ## Platform support
232
245
 
246
+ voiceio targets **Linux**. That's what it's developed and tested against.
247
+
233
248
  | Platform | Status | Text injection | Hotkeys | Streaming preview |
234
249
  |----------|--------|---------------|---------|-------------------|
235
250
  | Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
@@ -237,11 +252,22 @@ voiceio logs # check debug output
237
252
  | Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
238
253
  | Arch Linux | Supported | IBus | evdev | Yes |
239
254
  | KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
240
- | Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
241
- | macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
242
255
 
243
256
  voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
244
257
 
258
+ ## Experimental platforms
259
+
260
+ Windows and macOS code paths exist, but they are **experimental, untested, and unmaintained** — the maintainer only develops on Linux, so they may be broken at any given time. No parity with Linux is promised. Contributions are welcome, but please don't file bugs expecting a fix.
261
+
262
+ | Platform | Status | Text injection | Hotkeys | Streaming preview |
263
+ |----------|--------|---------------|---------|-------------------|
264
+ | Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
265
+ | macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
266
+
267
+ - **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
268
+ - **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
269
+ - Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
270
+
245
271
  ## Uninstall
246
272
 
247
273
  ```bash
@@ -275,7 +301,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
275
301
  - [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
276
302
  - [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
277
303
  - [x] Smart punctuation & capitalization post-processing
278
- - [x] Windows support
304
+ - [x] Windows support (experimental, untested)
279
305
  - [x] System tray icon with animated states
280
306
  - [x] Auto-stop on silence
281
307
 
@@ -7,12 +7,18 @@ python_voiceio.egg-info/dependency_links.txt
7
7
  python_voiceio.egg-info/entry_points.txt
8
8
  python_voiceio.egg-info/requires.txt
9
9
  python_voiceio.egg-info/top_level.txt
10
+ tests/test_adjudicate.py
10
11
  tests/test_app_wiring.py
12
+ tests/test_audio_quality.py
13
+ tests/test_audit.py
11
14
  tests/test_autocorrect.py
15
+ tests/test_autocorrect_state.py
12
16
  tests/test_backend_probes.py
17
+ tests/test_cli.py
13
18
  tests/test_clipboard_read.py
14
19
  tests/test_commands.py
15
20
  tests/test_config.py
21
+ tests/test_correct_batch.py
16
22
  tests/test_corrections.py
17
23
  tests/test_fallback.py
18
24
  tests/test_health.py
@@ -23,11 +29,14 @@ tests/test_llm.py
23
29
  tests/test_llm_api.py
24
30
  tests/test_numbers.py
25
31
  tests/test_platform.py
32
+ tests/test_postcorrect.py
26
33
  tests/test_postprocess.py
27
34
  tests/test_prebuffer.py
28
35
  tests/test_prompt.py
29
36
  tests/test_recorder_integration.py
37
+ tests/test_retention.py
30
38
  tests/test_robustness.py
39
+ tests/test_snapshots.py
31
40
  tests/test_streaming.py
32
41
  tests/test_transcriber.py
33
42
  tests/test_tts.py
@@ -37,7 +46,9 @@ tests/test_wordfreq.py
37
46
  voiceio/__init__.py
38
47
  voiceio/__main__.py
39
48
  voiceio/app.py
49
+ voiceio/audit.py
40
50
  voiceio/autocorrect.py
51
+ voiceio/autocorrect_state.py
41
52
  voiceio/backends.py
42
53
  voiceio/cli.py
43
54
  voiceio/clipboard_read.py
@@ -54,10 +65,13 @@ voiceio/llm_api.py
54
65
  voiceio/numbers.py
55
66
  voiceio/pidlock.py
56
67
  voiceio/platform.py
68
+ voiceio/postcorrect.py
57
69
  voiceio/postprocess.py
58
70
  voiceio/prompt.py
59
71
  voiceio/recorder.py
72
+ voiceio/retention.py
60
73
  voiceio/service.py
74
+ voiceio/snapshots.py
61
75
  voiceio/streaming.py
62
76
  voiceio/transcriber.py
63
77
  voiceio/vad.py