python-voiceio 1.16.0__tar.gz → 1.16.1__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 (234) hide show
  1. {python_voiceio-1.16.0/python_voiceio.egg-info → python_voiceio-1.16.1}/PKG-INFO +1 -1
  2. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/pyproject.toml +1 -1
  3. {python_voiceio-1.16.0 → python_voiceio-1.16.1/python_voiceio.egg-info}/PKG-INFO +1 -1
  4. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_service.py +19 -0
  5. python_voiceio-1.16.1/voiceio/__init__.py +1 -0
  6. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/app.py +4 -0
  7. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/servicecmd.py +8 -2
  8. python_voiceio-1.16.0/voiceio/__init__.py +0 -1
  9. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/LICENSE +0 -0
  10. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/README.md +0 -0
  11. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/python_voiceio.egg-info/SOURCES.txt +0 -0
  12. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/python_voiceio.egg-info/dependency_links.txt +0 -0
  13. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/python_voiceio.egg-info/entry_points.txt +0 -0
  14. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/python_voiceio.egg-info/requires.txt +0 -0
  15. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/python_voiceio.egg-info/top_level.txt +0 -0
  16. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/setup.cfg +0 -0
  17. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_announce.py +0 -0
  18. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_app_wiring.py +0 -0
  19. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_audio_quality.py +0 -0
  20. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_audio_source.py +0 -0
  21. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_backend_probes.py +0 -0
  22. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_cancel.py +0 -0
  23. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_cli.py +0 -0
  24. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_clipboard_read.py +0 -0
  25. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_clipboard_typer.py +0 -0
  26. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_commands.py +0 -0
  27. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_concurrency_lockdown.py +0 -0
  28. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_config.py +0 -0
  29. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_context_terms.py +0 -0
  30. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_corrections.py +0 -0
  31. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_dead_mic.py +0 -0
  32. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_decoders.py +0 -0
  33. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_engine.py +0 -0
  34. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_evdev_uaccess.py +0 -0
  35. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_fallback.py +0 -0
  36. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_fcitx_bridge.py +0 -0
  37. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_feedback_stream.py +0 -0
  38. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_focus.py +0 -0
  39. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_gpu_fallback.py +0 -0
  40. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_health.py +0 -0
  41. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_hints.py +0 -0
  42. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_history.py +0 -0
  43. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_hotkey_modes.py +0 -0
  44. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_engine_limits.py +0 -0
  45. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_engine_listener.py +0 -0
  46. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_pending.py +0 -0
  47. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_pids.py +0 -0
  48. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_ping.py +0 -0
  49. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_session.py +0 -0
  50. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_textlimit.py +0 -0
  51. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_ibus_typer.py +0 -0
  52. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_idle_audio.py +0 -0
  53. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_clean.py +0 -0
  54. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_import.py +0 -0
  55. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_language.py +0 -0
  56. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_metrics.py +0 -0
  57. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_pipeline.py +0 -0
  58. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_quiet.py +0 -0
  59. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_resume.py +0 -0
  60. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_review.py +0 -0
  61. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_learn_targets.py +0 -0
  62. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_llm.py +0 -0
  63. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_llm_api.py +0 -0
  64. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_mic_gain.py +0 -0
  65. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_modifier_guard.py +0 -0
  66. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_numbers.py +0 -0
  67. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_paste_last.py +0 -0
  68. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_pipeline.py +0 -0
  69. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_platform.py +0 -0
  70. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_postcorrect.py +0 -0
  71. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_postprocess.py +0 -0
  72. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_prebuffer.py +0 -0
  73. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_presence.py +0 -0
  74. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_prompt.py +0 -0
  75. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_quiet_audio.py +0 -0
  76. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_recorder_integration.py +0 -0
  77. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_report.py +0 -0
  78. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_retention.py +0 -0
  79. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_robustness.py +0 -0
  80. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_security_hardening.py +0 -0
  81. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_server.py +0 -0
  82. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_setup.py +0 -0
  83. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_sherpa.py +0 -0
  84. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_spool.py +0 -0
  85. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_streaming.py +0 -0
  86. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_suggest.py +0 -0
  87. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_tokens.py +0 -0
  88. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_transcriber.py +0 -0
  89. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_tray.py +0 -0
  90. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_tts.py +0 -0
  91. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_typer_manager.py +0 -0
  92. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_vad.py +0 -0
  93. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_vocabulary.py +0 -0
  94. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_wordfreq.py +0 -0
  95. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/tests/test_worker_decode.py +0 -0
  96. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/__main__.py +0 -0
  97. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/announce.py +0 -0
  98. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/audio_source.py +0 -0
  99. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/backends.py +0 -0
  100. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/__init__.py +0 -0
  101. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/configcmd.py +0 -0
  102. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/corrections.py +0 -0
  103. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/doctor.py +0 -0
  104. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/history.py +0 -0
  105. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/learn.py +0 -0
  106. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/models.py +0 -0
  107. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/uninstall.py +0 -0
  108. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/cli/vocab.py +0 -0
  109. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/clipboard_read.py +0 -0
  110. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/commands.py +0 -0
  111. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/config.py +0 -0
  112. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/consent.py +0 -0
  113. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/context_terms.py +0 -0
  114. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/__init__.py +0 -0
  115. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/bias.py +0 -0
  116. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/__init__.py +0 -0
  117. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/base.py +0 -0
  118. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/catalog.py +0 -0
  119. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/faster_whisper/__init__.py +0 -0
  120. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/faster_whisper/worker.py +0 -0
  121. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/fetch.py +0 -0
  122. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/lanes.py +0 -0
  123. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/sherpa.py +0 -0
  124. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/decoders/whispercpp.py +0 -0
  125. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/engine.py +0 -0
  126. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/core/pipeline.py +0 -0
  127. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/corrections.py +0 -0
  128. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/data/60-voiceio-uaccess.rules +0 -0
  129. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/data/__init__.py +0 -0
  130. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/demo.py +0 -0
  131. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/display.py +0 -0
  132. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/feedback.py +0 -0
  133. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/focus.py +0 -0
  134. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/health.py +0 -0
  135. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hints.py +0 -0
  136. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/history.py +0 -0
  137. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/__init__.py +0 -0
  138. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/base.py +0 -0
  139. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/chain.py +0 -0
  140. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/evdev.py +0 -0
  141. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/pynput_backend.py +0 -0
  142. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/hotkeys/socket_backend.py +0 -0
  143. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/__init__.py +0 -0
  144. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/engine.py +0 -0
  145. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/install.py +0 -0
  146. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/pending.py +0 -0
  147. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/session.py +0 -0
  148. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ibus/textlimit.py +0 -0
  149. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/idle_audio.py +0 -0
  150. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/__init__.py +0 -0
  151. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/augment.py +0 -0
  152. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/clean.py +0 -0
  153. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/evaluate.py +0 -0
  154. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/importer.py +0 -0
  155. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/metrics.py +0 -0
  156. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/quiet.py +0 -0
  157. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/review.py +0 -0
  158. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/store.py +0 -0
  159. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/teacher.py +0 -0
  160. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/learn/train.py +0 -0
  161. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/llm.py +0 -0
  162. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/llm_api.py +0 -0
  163. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/mic_gain.py +0 -0
  164. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/models/__init__.py +0 -0
  165. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/models/silero_vad.onnx +0 -0
  166. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/numbers.py +0 -0
  167. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/pidlock.py +0 -0
  168. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/platform.py +0 -0
  169. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/postcorrect.py +0 -0
  170. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/postprocess.py +0 -0
  171. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/power.py +0 -0
  172. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/presence.py +0 -0
  173. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/privacy.py +0 -0
  174. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/prompt.py +0 -0
  175. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/quiet_audio.py +0 -0
  176. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/recorder.py +0 -0
  177. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/report.py +0 -0
  178. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/retention.py +0 -0
  179. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/server/__init__.py +0 -0
  180. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/server/__main__.py +0 -0
  181. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/server/app.py +0 -0
  182. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/server/config.py +0 -0
  183. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/server/runtime.py +0 -0
  184. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/service.py +0 -0
  185. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/__init__.py +0 -0
  186. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/configfile.py +0 -0
  187. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/extras.py +0 -0
  188. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/hotkey.py +0 -0
  189. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/noninteractive.py +0 -0
  190. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/speech.py +0 -0
  191. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/steps.py +0 -0
  192. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/system.py +0 -0
  193. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/setup/ui.py +0 -0
  194. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/sounds/__init__.py +0 -0
  195. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/sounds/alert.wav +0 -0
  196. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/sounds/commit.wav +0 -0
  197. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/sounds/start.wav +0 -0
  198. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/sounds/stop.wav +0 -0
  199. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/spool.py +0 -0
  200. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/streaming.py +0 -0
  201. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/suggest.py +0 -0
  202. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tokens.py +0 -0
  203. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tray/__init__.py +0 -0
  204. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tray/_icons.py +0 -0
  205. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tray/_indicator.py +0 -0
  206. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tray/_pystray.py +0 -0
  207. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/__init__.py +0 -0
  208. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/base.py +0 -0
  209. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/chain.py +0 -0
  210. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/edge_engine.py +0 -0
  211. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/espeak.py +0 -0
  212. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/piper_engine.py +0 -0
  213. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/player.py +0 -0
  214. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/tts/supertonic_engine.py +0 -0
  215. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/__init__.py +0 -0
  216. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/base.py +0 -0
  217. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/chain.py +0 -0
  218. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/clipboard.py +0 -0
  219. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/collecting.py +0 -0
  220. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/fcitx_bridge.py +0 -0
  221. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/ibus.py +0 -0
  222. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/manager.py +0 -0
  223. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/modifier_guard.py +0 -0
  224. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/paste.py +0 -0
  225. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/pynput_type.py +0 -0
  226. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/wtype.py +0 -0
  227. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/xdotool.py +0 -0
  228. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/typers/ydotool.py +0 -0
  229. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/ui.py +0 -0
  230. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/vad.py +0 -0
  231. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/vocab_stats.py +0 -0
  232. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/vocabulary.py +0 -0
  233. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/watchdog.py +0 -0
  234. {python_voiceio-1.16.0 → python_voiceio-1.16.1}/voiceio/wordfreq.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 1.16.0
3
+ Version: 1.16.1
4
4
  Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-voiceio"
7
- version = "1.16.0"
7
+ version = "1.16.1"
8
8
  description = "Voice dictation for Linux. Speak → text, locally, instantly."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 1.16.0
3
+ Version: 1.16.1
4
4
  Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
@@ -96,6 +96,25 @@ def test_daemon_publishes_state_and_restart_waits_for_idle(monkeypatch):
96
96
  assert not wait_until_idle(timeout=60, poll=0.05, finalizing_timeout=0.2)
97
97
 
98
98
 
99
+ def test_restart_after_a_long_recording_still_waits_for_its_finalize(monkeypatch):
100
+ """The finalize budget counts from when finalizing starts: a recording
101
+ longer than it must not make the restart skip the finalize (11-02)."""
102
+ import threading
103
+
104
+ from voiceio import config, pidlock
105
+ from voiceio.app import VoiceIO, _State
106
+ from voiceio.cli.servicecmd import wait_until_idle
107
+
108
+ vio = VoiceIO.__new__(VoiceIO)
109
+ vio._publishes_state = True
110
+ vio._state = _State.RECORDING
111
+ monkeypatch.setattr(pidlock, "daemon_alive", lambda path: True)
112
+ threading.Timer(0.4, lambda: setattr(vio, "_state", _State.FINALIZING)).start()
113
+ threading.Timer(0.7, lambda: setattr(vio, "_state", _State.IDLE)).start()
114
+ assert wait_until_idle(timeout=5, poll=0.05, finalizing_timeout=0.5)
115
+ assert config.STATE_PATH.read_text() == "idle"
116
+
117
+
99
118
  def test_daemon_alive_probes_the_pid_lock(tmp_path):
100
119
  import fcntl
101
120
 
@@ -0,0 +1 @@
1
+ __version__ = "1.16.1"
@@ -1076,6 +1076,10 @@ class VoiceIO:
1076
1076
  self._tts_engine.shutdown()
1077
1077
  self._idle_audio.shutdown()
1078
1078
  self.recorder.close_stream()
1079
+ # Lets a cue still playing finish: PortAudio torn down at exit
1080
+ # under a write corrupts the heap (ABRT on stop after a dictation).
1081
+ from voiceio import feedback
1082
+ feedback.close_cue_stream()
1079
1083
  self._quiet.close()
1080
1084
  self.decoder.close()
1081
1085
  tray.stop()
@@ -96,6 +96,7 @@ def wait_until_idle(timeout: float = 300.0, poll: float = 0.25,
96
96
  from voiceio.config import PID_PATH, STATE_PATH
97
97
  from voiceio.pidlock import daemon_alive
98
98
  start, told = time.monotonic(), False
99
+ seen, since = None, start
99
100
  try:
100
101
  while True:
101
102
  if not daemon_alive(PID_PATH):
@@ -106,8 +107,13 @@ def wait_until_idle(timeout: float = 300.0, poll: float = 0.25,
106
107
  return True # pre-1.1 daemon: nothing to wait for
107
108
  if state in ("idle", "error"):
108
109
  return True
109
- waited = time.monotonic() - start
110
- if waited > (finalizing_timeout if state == "finalizing" else timeout):
110
+ now = time.monotonic()
111
+ if state != seen:
112
+ seen, since = state, now
113
+ # A finalize's budget starts when it does: after a long recording
114
+ # the total wait already exceeds it.
115
+ if (now - since > finalizing_timeout if state == "finalizing"
116
+ else now - start > timeout):
111
117
  print(f"Still {state}; going ahead. (--now skips the wait.)", file=sys.stderr)
112
118
  return False
113
119
  if not told:
@@ -1 +0,0 @@
1
- __version__ = "1.16.0"
File without changes