agent-cli 0.70.4__tar.gz → 0.70.5__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 (362) hide show
  1. {agent_cli-0.70.4 → agent_cli-0.70.5}/PKG-INFO +3 -1
  2. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_extras.json +2 -1
  3. agent_cli-0.70.5/agent_cli/_requirements/wyoming.txt +71 -0
  4. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/cli.py +1 -1
  5. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/proxy/api.py +12 -1
  6. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/__init__.py +46 -5
  7. {agent_cli-0.70.4 → agent_cli-0.70.5}/docker/transcribe-proxy.Dockerfile +1 -1
  8. {agent_cli-0.70.4 → agent_cli-0.70.5}/docker/tts.Dockerfile +2 -2
  9. {agent_cli-0.70.4 → agent_cli-0.70.5}/docker/whisper.Dockerfile +1 -1
  10. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/install-extras.md +2 -1
  11. {agent_cli-0.70.4 → agent_cli-0.70.5}/pyproject.toml +2 -1
  12. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_api_integration.py +2 -0
  13. {agent_cli-0.70.4 → agent_cli-0.70.5}/uv.lock +5 -1
  14. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  15. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude/skills/agent-cli-dev/examples.md +0 -0
  16. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude-plugin/README.md +0 -0
  17. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude-plugin/marketplace.json +0 -0
  18. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude-plugin/plugin.json +0 -0
  19. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  20. {agent_cli-0.70.4 → agent_cli-0.70.5}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  21. {agent_cli-0.70.4 → agent_cli-0.70.5}/.cursorrules +0 -0
  22. {agent_cli-0.70.4 → agent_cli-0.70.5}/.dockerignore +0 -0
  23. {agent_cli-0.70.4 → agent_cli-0.70.5}/.env.example +0 -0
  24. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/logo.svg +0 -0
  25. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/release-drafter.yml +0 -0
  26. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/renovate.json +0 -0
  27. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/scripts/check_extras_sync.py +0 -0
  28. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/scripts/sync_requirements.py +0 -0
  29. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/automerge.yml +0 -0
  30. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/docker.yml +0 -0
  31. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/docs.yml +0 -0
  32. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/markdown-code-runner.yml +0 -0
  33. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/pytest.yml +0 -0
  34. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/release-drafter.yml +0 -0
  35. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/release.yml +0 -0
  36. {agent_cli-0.70.4 → agent_cli-0.70.5}/.github/workflows/toc.yaml +0 -0
  37. {agent_cli-0.70.4 → agent_cli-0.70.5}/.gitignore +0 -0
  38. {agent_cli-0.70.4 → agent_cli-0.70.5}/.jscpd.json +0 -0
  39. {agent_cli-0.70.4 → agent_cli-0.70.5}/.pre-commit-config.yaml +0 -0
  40. {agent_cli-0.70.4 → agent_cli-0.70.5}/.prompts/docs-review.md +0 -0
  41. {agent_cli-0.70.4 → agent_cli-0.70.5}/.prompts/pr-review.md +0 -0
  42. {agent_cli-0.70.4 → agent_cli-0.70.5}/CLAUDE.md +0 -0
  43. {agent_cli-0.70.4 → agent_cli-0.70.5}/LICENSE +0 -0
  44. {agent_cli-0.70.4 → agent_cli-0.70.5}/README.md +0 -0
  45. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/__init__.py +0 -0
  46. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/__main__.py +0 -0
  47. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/.gitkeep +0 -0
  48. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/audio.txt +0 -0
  49. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/faster-whisper.txt +0 -0
  50. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/kokoro.txt +0 -0
  51. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/llm.txt +0 -0
  52. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/memory.txt +0 -0
  53. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  54. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/piper.txt +0 -0
  55. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/rag.txt +0 -0
  56. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/server.txt +0 -0
  57. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/speed.txt +0 -0
  58. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_requirements/vad.txt +0 -0
  59. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/_tools.py +0 -0
  60. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/__init__.py +0 -0
  61. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/_voice_agent_common.py +0 -0
  62. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/assistant.py +0 -0
  63. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/autocorrect.py +0 -0
  64. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/chat.py +0 -0
  65. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/memory/__init__.py +0 -0
  66. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/memory/add.py +0 -0
  67. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/memory/proxy.py +0 -0
  68. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/rag_proxy.py +0 -0
  69. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/speak.py +0 -0
  70. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/transcribe.py +0 -0
  71. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/transcribe_daemon.py +0 -0
  72. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/agents/voice_edit.py +0 -0
  73. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/api.py +0 -0
  74. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/cli.py +0 -0
  75. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/config.py +0 -0
  76. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/config_cmd.py +0 -0
  77. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/constants.py +0 -0
  78. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/__init__.py +0 -0
  79. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/audio.py +0 -0
  80. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/audio_format.py +0 -0
  81. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/chroma.py +0 -0
  82. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/deps.py +0 -0
  83. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/openai_proxy.py +0 -0
  84. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/process.py +0 -0
  85. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/reranker.py +0 -0
  86. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/sse.py +0 -0
  87. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/transcription_logger.py +0 -0
  88. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/utils.py +0 -0
  89. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/vad.py +0 -0
  90. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/core/watch.py +0 -0
  91. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/__init__.py +0 -0
  92. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/cli.py +0 -0
  93. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/__init__.py +0 -0
  94. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/aider.py +0 -0
  95. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/base.py +0 -0
  96. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/claude.py +0 -0
  97. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/codex.py +0 -0
  98. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  99. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/copilot.py +0 -0
  100. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  101. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/gemini.py +0 -0
  102. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/opencode.py +0 -0
  103. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/coding_agents/registry.py +0 -0
  104. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/__init__.py +0 -0
  105. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/base.py +0 -0
  106. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/cursor.py +0 -0
  107. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/emacs.py +0 -0
  108. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/jetbrains.py +0 -0
  109. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/nano.py +0 -0
  110. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/neovim.py +0 -0
  111. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/registry.py +0 -0
  112. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/sublime.py +0 -0
  113. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/vim.py +0 -0
  114. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/vscode.py +0 -0
  115. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/editors/zed.py +0 -0
  116. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/project.py +0 -0
  117. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/registry.py +0 -0
  118. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/skill/SKILL.md +0 -0
  119. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/skill/examples.md +0 -0
  120. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/__init__.py +0 -0
  121. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  122. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/base.py +0 -0
  123. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/gnome.py +0 -0
  124. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/iterm2.py +0 -0
  125. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/kitty.py +0 -0
  126. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/registry.py +0 -0
  127. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/tmux.py +0 -0
  128. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/warp.py +0 -0
  129. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/terminals/zellij.py +0 -0
  130. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/dev/worktree.py +0 -0
  131. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/docs_gen.py +0 -0
  132. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/example-config.toml +0 -0
  133. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/install/__init__.py +0 -0
  134. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/install/common.py +0 -0
  135. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/install/extras.py +0 -0
  136. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/install/hotkeys.py +0 -0
  137. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/install/services.py +0 -0
  138. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/__init__.py +0 -0
  139. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_files.py +0 -0
  140. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_filters.py +0 -0
  141. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_git.py +0 -0
  142. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_indexer.py +0 -0
  143. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_ingest.py +0 -0
  144. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_persistence.py +0 -0
  145. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_prompt.py +0 -0
  146. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_retrieval.py +0 -0
  147. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_store.py +0 -0
  148. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_streaming.py +0 -0
  149. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/_tasks.py +0 -0
  150. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/api.py +0 -0
  151. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/client.py +0 -0
  152. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/engine.py +0 -0
  153. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/entities.py +0 -0
  154. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/memory/models.py +0 -0
  155. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/opts.py +0 -0
  156. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/py.typed +0 -0
  157. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/__init__.py +0 -0
  158. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_indexer.py +0 -0
  159. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_indexing.py +0 -0
  160. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_prompt.py +0 -0
  161. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_retriever.py +0 -0
  162. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_store.py +0 -0
  163. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/_utils.py +0 -0
  164. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/api.py +0 -0
  165. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/client.py +0 -0
  166. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/engine.py +0 -0
  167. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/rag/models.py +0 -0
  168. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  169. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/__init__.py +0 -0
  170. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/check_plugin_skill_sync.py +0 -0
  171. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  172. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  173. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  174. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  175. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  176. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  177. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  178. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  179. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  180. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  181. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  182. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  183. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  184. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  185. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-openwakeword.sh +0 -0
  186. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
  187. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-piper.sh +0 -0
  188. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-whisper-linux.sh +0 -0
  189. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-whisper-macos.sh +0 -0
  190. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
  191. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run-whisper.sh +0 -0
  192. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
  193. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  194. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/setup-linux.sh +0 -0
  195. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  196. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/setup-macos.sh +0 -0
  197. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/setup-windows.ps1 +0 -0
  198. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  199. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/start-all-services.sh +0 -0
  200. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/scripts/sync_extras.py +0 -0
  201. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/__init__.py +0 -0
  202. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/common.py +0 -0
  203. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/model_manager.py +0 -0
  204. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/model_registry.py +0 -0
  205. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/proxy/__init__.py +0 -0
  206. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/streaming.py +0 -0
  207. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/__init__.py +0 -0
  208. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/api.py +0 -0
  209. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/backends/__init__.py +0 -0
  210. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/backends/base.py +0 -0
  211. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/backends/kokoro.py +0 -0
  212. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/backends/piper.py +0 -0
  213. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/model_manager.py +0 -0
  214. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/model_registry.py +0 -0
  215. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/tts/wyoming_handler.py +0 -0
  216. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/__init__.py +0 -0
  217. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/api.py +0 -0
  218. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/backends/__init__.py +0 -0
  219. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/backends/base.py +0 -0
  220. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  221. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/backends/mlx.py +0 -0
  222. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/languages.py +0 -0
  223. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/model_manager.py +0 -0
  224. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/model_registry.py +0 -0
  225. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  226. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/_wyoming_utils.py +0 -0
  227. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/asr.py +0 -0
  228. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/llm.py +0 -0
  229. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/tts.py +0 -0
  230. {agent_cli-0.70.4 → agent_cli-0.70.5}/agent_cli/services/wake_word.py +0 -0
  231. {agent_cli-0.70.4 → agent_cli-0.70.5}/docker/docker-compose.yml +0 -0
  232. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/CNAME +0 -0
  233. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/architecture/index.md +0 -0
  234. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/architecture/memory.md +0 -0
  235. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/architecture/rag.md +0 -0
  236. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/assistant.md +0 -0
  237. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/autocorrect.md +0 -0
  238. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/chat.md +0 -0
  239. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/config.md +0 -0
  240. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/dev.md +0 -0
  241. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/index.md +0 -0
  242. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/install-hotkeys.md +0 -0
  243. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/install-services.md +0 -0
  244. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/memory.md +0 -0
  245. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/rag-proxy.md +0 -0
  246. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/server/index.md +0 -0
  247. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/server/transcribe-proxy.md +0 -0
  248. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/server/tts.md +0 -0
  249. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/server/whisper.md +0 -0
  250. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/speak.md +0 -0
  251. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/start-services.md +0 -0
  252. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/transcribe-daemon.md +0 -0
  253. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/transcribe.md +0 -0
  254. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/commands/voice-edit.md +0 -0
  255. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/configuration.md +0 -0
  256. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/getting-started.md +0 -0
  257. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/iOS_Shortcut_Guide.md +0 -0
  258. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/index.md +0 -0
  259. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/docker.md +0 -0
  260. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/index.md +0 -0
  261. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/linux.md +0 -0
  262. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/macos.md +0 -0
  263. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/nixos.md +0 -0
  264. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/installation/windows.md +0 -0
  265. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/logo-clean.svg +0 -0
  266. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  267. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/run_markdown_code_runner.py +0 -0
  268. {agent_cli-0.70.4 → agent_cli-0.70.5}/docs/system-integration.md +0 -0
  269. {agent_cli-0.70.4 → agent_cli-0.70.5}/example.agent-cli-config.toml +0 -0
  270. {agent_cli-0.70.4 → agent_cli-0.70.5}/justfile +0 -0
  271. {agent_cli-0.70.4 → agent_cli-0.70.5}/shell.nix +0 -0
  272. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/__init__.py +0 -0
  273. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/__init__.py +0 -0
  274. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_fix_my_text.py +0 -0
  275. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_interactive.py +0 -0
  276. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_interactive_extra.py +0 -0
  277. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_memory_add.py +0 -0
  278. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_speak.py +0 -0
  279. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_speak_e2e.py +0 -0
  280. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_transcribe.py +0 -0
  281. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_transcribe_agent.py +0 -0
  282. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_transcribe_daemon.py +0 -0
  283. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_transcribe_e2e.py +0 -0
  284. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_transcribe_recovery.py +0 -0
  285. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_tts_common.py +0 -0
  286. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_tts_common_extra.py +0 -0
  287. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_voice_agent_common.py +0 -0
  288. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_voice_edit.py +0 -0
  289. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_voice_edit_e2e.py +0 -0
  290. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/agents/test_wake_word_assistant.py +0 -0
  291. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/conftest.py +0 -0
  292. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/__init__.py +0 -0
  293. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/test_audio_format.py +0 -0
  294. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/test_chroma.py +0 -0
  295. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/test_sse.py +0 -0
  296. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/test_vad.py +0 -0
  297. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/core/test_watch.py +0 -0
  298. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/__init__.py +0 -0
  299. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_cli.py +0 -0
  300. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_coding_agents.py +0 -0
  301. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_editors.py +0 -0
  302. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_project.py +0 -0
  303. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_terminals.py +0 -0
  304. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_verification.py +0 -0
  305. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/dev/test_worktree.py +0 -0
  306. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/install/__init__.py +0 -0
  307. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/install/test_extras.py +0 -0
  308. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/__init__.py +0 -0
  309. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_api_health.py +0 -0
  310. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_api_integration_liveish.py +0 -0
  311. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_client.py +0 -0
  312. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_engine.py +0 -0
  313. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_files.py +0 -0
  314. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_filters.py +0 -0
  315. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_git_integration.py +0 -0
  316. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_indexer.py +0 -0
  317. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_memory_integration.py +0 -0
  318. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_proxy_passthrough.py +0 -0
  319. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_store.py +0 -0
  320. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/memory/test_utils.py +0 -0
  321. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/mocks/__init__.py +0 -0
  322. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/mocks/audio.py +0 -0
  323. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/mocks/llm.py +0 -0
  324. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/mocks/wyoming.py +0 -0
  325. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/__init__.py +0 -0
  326. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_api.py +0 -0
  327. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_engine.py +0 -0
  328. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_history.py +0 -0
  329. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_indexer.py +0 -0
  330. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_indexing.py +0 -0
  331. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_rag_client.py +0 -0
  332. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_rag_integration_liveish.py +0 -0
  333. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  334. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_retriever.py +0 -0
  335. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_store.py +0 -0
  336. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/rag/test_utils.py +0 -0
  337. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_api.py +0 -0
  338. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_asr.py +0 -0
  339. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_asr_recovery.py +0 -0
  340. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_audio_e2e.py +0 -0
  341. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_cli.py +0 -0
  342. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_config.py +0 -0
  343. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_config_cmd.py +0 -0
  344. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_docs_gen.py +0 -0
  345. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_env_vars.py +0 -0
  346. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_json_output.py +0 -0
  347. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_llm.py +0 -0
  348. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_llm_gemini.py +0 -0
  349. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_memory_tools.py +0 -0
  350. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_mlx_backend.py +0 -0
  351. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_process_manager.py +0 -0
  352. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_requires_extras.py +0 -0
  353. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_server_streaming.py +0 -0
  354. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_server_tts.py +0 -0
  355. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_server_whisper.py +0 -0
  356. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_services.py +0 -0
  357. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_tools.py +0 -0
  358. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_tts.py +0 -0
  359. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_utils.py +0 -0
  360. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_wake_word.py +0 -0
  361. {agent_cli-0.70.4 → agent_cli-0.70.5}/tests/test_wyoming_utils.py +0 -0
  362. {agent_cli-0.70.4 → agent_cli-0.70.5}/zensical.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.70.4
3
+ Version: 0.70.5
4
4
  Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
5
5
  Project-URL: Homepage, https://github.com/basnijholt/agent-cli
6
6
  Author-email: Bas Nijholt <bas@nijho.lt>
@@ -80,6 +80,8 @@ Requires-Dist: pytest-timeout; extra == 'test'
80
80
  Requires-Dist: pytest>=7.0.0; extra == 'test'
81
81
  Provides-Extra: vad
82
82
  Requires-Dist: silero-vad>=5.1; extra == 'vad'
83
+ Provides-Extra: wyoming
84
+ Requires-Dist: wyoming>=1.5.2; extra == 'wyoming'
83
85
  Description-Content-Type: text/markdown
84
86
 
85
87
  # Agent CLI
@@ -1,5 +1,6 @@
1
1
  {
2
- "audio": ["Audio recording/playback with Wyoming protocol", ["numpy", "sounddevice", "wyoming"]],
2
+ "wyoming": ["Wyoming protocol for ASR/TTS servers", ["wyoming"]],
3
+ "audio": ["Local audio recording/playback", ["numpy", "sounddevice", "wyoming"]],
3
4
  "llm": ["LLM framework (pydantic-ai)", ["pydantic_ai"]],
4
5
  "memory": ["Long-term memory proxy", ["chromadb", "yaml"]],
5
6
  "rag": ["RAG proxy (ChromaDB, embeddings)", ["chromadb"]],
@@ -0,0 +1,71 @@
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv export --extra wyoming --no-dev --no-emit-project --no-hashes
3
+ annotated-types==0.7.0
4
+ # via pydantic
5
+ anyio==4.12.1
6
+ # via httpx
7
+ certifi==2026.1.4
8
+ # via
9
+ # httpcore
10
+ # httpx
11
+ click==8.3.1
12
+ # via
13
+ # typer
14
+ # typer-slim
15
+ colorama==0.4.6 ; sys_platform == 'win32'
16
+ # via click
17
+ dotenv==0.9.9
18
+ # via agent-cli
19
+ h11==0.16.0
20
+ # via httpcore
21
+ httpcore==1.0.9
22
+ # via httpx
23
+ httpx==0.28.1
24
+ # via agent-cli
25
+ idna==3.11
26
+ # via
27
+ # anyio
28
+ # httpx
29
+ markdown-it-py==4.0.0
30
+ # via rich
31
+ mdurl==0.1.2
32
+ # via markdown-it-py
33
+ psutil==7.2.1 ; sys_platform == 'win32'
34
+ # via agent-cli
35
+ pydantic==2.12.5
36
+ # via agent-cli
37
+ pydantic-core==2.41.5
38
+ # via pydantic
39
+ pygments==2.19.2
40
+ # via rich
41
+ pyperclip==1.11.0
42
+ # via agent-cli
43
+ python-dotenv==1.2.1
44
+ # via dotenv
45
+ rich==14.2.0
46
+ # via
47
+ # agent-cli
48
+ # typer
49
+ # typer-slim
50
+ setproctitle==1.3.7
51
+ # via agent-cli
52
+ shellingham==1.5.4
53
+ # via
54
+ # typer
55
+ # typer-slim
56
+ typer==0.21.1
57
+ # via agent-cli
58
+ typer-slim==0.21.1
59
+ # via agent-cli
60
+ typing-extensions==4.15.0
61
+ # via
62
+ # anyio
63
+ # pydantic
64
+ # pydantic-core
65
+ # typer
66
+ # typer-slim
67
+ # typing-inspection
68
+ typing-inspection==0.4.2
69
+ # via pydantic
70
+ wyoming==1.8.0
71
+ # via agent-cli
@@ -417,7 +417,7 @@ def whisper_cmd( # noqa: PLR0912, PLR0915
417
417
 
418
418
 
419
419
  @app.command("transcribe-proxy")
420
- @requires_extras("server", "audio", "llm")
420
+ @requires_extras("server", "wyoming", "llm")
421
421
  def transcribe_proxy_cmd(
422
422
  host: Annotated[
423
423
  str,
@@ -121,6 +121,7 @@ async def health_check() -> HealthResponse:
121
121
 
122
122
  async def _transcribe_with_provider(
123
123
  audio_data: bytes,
124
+ filename: str,
124
125
  provider_cfg: config.ProviderSelection,
125
126
  wyoming_asr_cfg: config.WyomingASR,
126
127
  openai_asr_cfg: config.OpenAIASR,
@@ -128,6 +129,7 @@ async def _transcribe_with_provider(
128
129
  ) -> str:
129
130
  """Transcribe audio using the configured provider."""
130
131
  transcriber = asr.create_recorded_audio_transcriber(provider_cfg)
132
+ file_suffix = Path(filename).suffix.lower() or ".wav"
131
133
 
132
134
  if provider_cfg.asr_provider == "wyoming":
133
135
  return await transcriber(
@@ -140,12 +142,14 @@ async def _transcribe_with_provider(
140
142
  audio_data=audio_data,
141
143
  openai_asr_cfg=openai_asr_cfg,
142
144
  logger=LOGGER,
145
+ file_suffix=file_suffix,
143
146
  )
144
147
  if provider_cfg.asr_provider == "gemini":
145
148
  return await transcriber(
146
149
  audio_data=audio_data,
147
150
  gemini_asr_cfg=gemini_asr_cfg,
148
151
  logger=LOGGER,
152
+ file_suffix=file_suffix,
149
153
  )
150
154
  msg = f"Unsupported ASR provider: {provider_cfg.asr_provider}"
151
155
  raise NotImplementedError(msg)
@@ -356,8 +360,14 @@ async def transcribe_audio(
356
360
  defaults,
357
361
  ) = _load_transcription_configs()
358
362
 
359
- # Save uploaded file
363
+ # Read uploaded file
360
364
  audio_data = await audio_file.read()
365
+ LOGGER.info(
366
+ "Received audio: filename=%s, size=%d bytes, content_type=%s",
367
+ audio_file.filename,
368
+ len(audio_data),
369
+ audio_file.content_type,
370
+ )
361
371
 
362
372
  # Convert audio to Wyoming format if using local ASR
363
373
  if provider_cfg.asr_provider == "wyoming":
@@ -366,6 +376,7 @@ async def transcribe_audio(
366
376
  # Transcribe audio using the configured provider
367
377
  raw_transcript = await _transcribe_with_provider(
368
378
  audio_data,
379
+ audio_file.filename or "audio.wav",
369
380
  provider_cfg,
370
381
  wyoming_asr_cfg,
371
382
  openai_asr_cfg,
@@ -17,6 +17,7 @@ if TYPE_CHECKING:
17
17
 
18
18
 
19
19
  _RIFF_HEADER = b"RIFF"
20
+ _LOG_TRUNCATE_LENGTH = 100
20
21
 
21
22
 
22
23
  def _is_wav_file(data: bytes) -> bool:
@@ -112,9 +113,17 @@ async def transcribe_audio_gemini(
112
113
  # Determine MIME type from file suffix
113
114
  mime_type = _GEMINI_MIME_TYPES.get(file_suffix.lower(), "audio/wav")
114
115
 
116
+ logger.debug(
117
+ "Received audio: size=%d bytes, file_suffix=%s, is_wav=%s",
118
+ len(audio_data),
119
+ file_suffix,
120
+ _is_wav_file(audio_data),
121
+ )
122
+
115
123
  # If raw PCM (no recognized format header), convert to WAV
124
+ # Only do this if file_suffix is .wav but data doesn't have WAV header (indicating raw PCM)
116
125
  if not _is_wav_file(audio_data) and file_suffix.lower() == ".wav":
117
- logger.debug("Converting raw PCM to WAV format for Gemini")
126
+ logger.debug("Wrapping raw PCM data with WAV header (16kHz, 16-bit, mono)")
118
127
  audio_data = pcm_to_wav(
119
128
  audio_data,
120
129
  sample_rate=constants.AUDIO_RATE,
@@ -141,7 +150,19 @@ async def transcribe_audio_gemini(
141
150
  types.Part.from_bytes(data=audio_data, mime_type=mime_type),
142
151
  ],
143
152
  )
144
- return response.text.strip()
153
+ text = response.text.strip()
154
+
155
+ if text:
156
+ logger.info(
157
+ "Transcription result: %s",
158
+ text[:_LOG_TRUNCATE_LENGTH] + "..." if len(text) > _LOG_TRUNCATE_LENGTH else text,
159
+ )
160
+ else:
161
+ logger.warning(
162
+ "Empty transcription returned - audio may be silent, corrupted, or in wrong format",
163
+ )
164
+
165
+ return text
145
166
 
146
167
 
147
168
  def _get_openai_client(api_key: str | None, base_url: str | None = None) -> AsyncOpenAI:
@@ -197,9 +218,17 @@ async def transcribe_audio_openai(
197
218
  base_url=openai_asr_cfg.openai_base_url,
198
219
  )
199
220
 
221
+ logger.debug(
222
+ "Received audio: size=%d bytes, file_suffix=%s, is_wav=%s",
223
+ len(audio_data),
224
+ file_suffix,
225
+ _is_wav_file(audio_data),
226
+ )
227
+
200
228
  # Convert raw PCM to WAV if needed (custom endpoints like faster-whisper require proper format)
229
+ # Only do this if file_suffix is .wav but data doesn't have WAV header (indicating raw PCM)
201
230
  if not _is_wav_file(audio_data) and file_suffix.lower() == ".wav":
202
- logger.debug("Converting raw PCM to WAV format")
231
+ logger.debug("Wrapping raw PCM data with WAV header (16kHz, 16-bit, mono)")
203
232
  audio_data = pcm_to_wav(
204
233
  audio_data,
205
234
  sample_rate=constants.AUDIO_RATE,
@@ -211,7 +240,7 @@ async def transcribe_audio_openai(
211
240
  # Use the correct file extension so OpenAI knows the format
212
241
  audio_file.name = f"audio{file_suffix}"
213
242
 
214
- logger.debug("Using filename: %s", audio_file.name)
243
+ logger.debug("Sending to OpenAI with filename: %s", audio_file.name)
215
244
 
216
245
  transcription_params: dict[str, object] = {
217
246
  "model": openai_asr_cfg.asr_openai_model,
@@ -225,7 +254,19 @@ async def transcribe_audio_openai(
225
254
  logger.debug("Using OpenAI ASR with prompt")
226
255
 
227
256
  response = await client.audio.transcriptions.create(**transcription_params)
228
- return response.text
257
+ text = response.text
258
+
259
+ if text:
260
+ logger.info(
261
+ "Transcription result: %s",
262
+ text[:_LOG_TRUNCATE_LENGTH] + "..." if len(text) > _LOG_TRUNCATE_LENGTH else text,
263
+ )
264
+ else:
265
+ logger.warning(
266
+ "Empty transcription returned - audio may be silent, corrupted, or in wrong format",
267
+ )
268
+
269
+ return text
229
270
 
230
271
 
231
272
  async def synthesize_speech_openai(
@@ -38,7 +38,7 @@ COPY pyproject.toml uv.lock README.md ./
38
38
  COPY .git ./.git
39
39
  COPY agent_cli ./agent_cli
40
40
  COPY scripts ./scripts
41
- RUN uv sync --frozen --no-dev --no-editable --extra server --extra audio --extra llm
41
+ RUN uv sync --frozen --no-dev --no-editable --extra server --extra wyoming --extra llm
42
42
 
43
43
  # =============================================================================
44
44
  # Runtime stage - minimal image
@@ -26,7 +26,7 @@ COPY pyproject.toml uv.lock README.md ./
26
26
  COPY .git ./.git
27
27
  COPY agent_cli ./agent_cli
28
28
  COPY scripts ./scripts
29
- RUN uv sync --frozen --no-dev --no-editable --extra server --extra kokoro --extra audio && \
29
+ RUN uv sync --frozen --no-dev --no-editable --extra server --extra kokoro --extra wyoming && \
30
30
  /app/.venv/bin/python -m spacy download en_core_web_sm
31
31
 
32
32
  # =============================================================================
@@ -46,7 +46,7 @@ COPY pyproject.toml uv.lock README.md ./
46
46
  COPY .git ./.git
47
47
  COPY agent_cli ./agent_cli
48
48
  COPY scripts ./scripts
49
- RUN uv sync --frozen --no-dev --no-editable --extra server --extra piper --extra audio
49
+ RUN uv sync --frozen --no-dev --no-editable --extra server --extra piper --extra wyoming
50
50
 
51
51
  # =============================================================================
52
52
  # CUDA target: GPU-accelerated with Kokoro TTS
@@ -26,7 +26,7 @@ COPY pyproject.toml uv.lock README.md ./
26
26
  COPY .git ./.git
27
27
  COPY agent_cli ./agent_cli
28
28
  COPY scripts ./scripts
29
- RUN uv sync --frozen --no-dev --no-editable --extra server --extra faster-whisper --extra audio
29
+ RUN uv sync --frozen --no-dev --no-editable --extra server --extra faster-whisper --extra wyoming
30
30
 
31
31
  # =============================================================================
32
32
  # CUDA target: GPU-accelerated with faster-whisper
@@ -31,7 +31,8 @@ Available extras:
31
31
  <!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
32
32
  | Extra | Description |
33
33
  |-------|-------------|
34
- | `audio` | Audio recording/playback with Wyoming protocol |
34
+ | `wyoming` | Wyoming protocol for ASR/TTS servers |
35
+ | `audio` | Local audio recording/playback |
35
36
  | `llm` | LLM framework (pydantic-ai) |
36
37
  | `memory` | Long-term memory proxy |
37
38
  | `rag` | RAG proxy (ChromaDB, embeddings) |
@@ -31,7 +31,8 @@ Homepage = "https://github.com/basnijholt/agent-cli"
31
31
 
32
32
  [project.optional-dependencies]
33
33
  # Provider extras (previously base dependencies, now optional)
34
- audio = ["numpy", "sounddevice>=0.4.6", "wyoming>=1.5.2"]
34
+ wyoming = ["wyoming>=1.5.2"] # Wyoming protocol only (for servers)
35
+ audio = ["numpy", "sounddevice>=0.4.6", "agent-cli[wyoming]"] # Local audio recording
35
36
  llm = ["pydantic-ai-slim[openai,google,duckduckgo,vertexai]>=0.1.1"]
36
37
 
37
38
  # Feature extras
@@ -52,6 +52,7 @@ async def test_full_transcription_workflow() -> None:
52
52
  # Create mock upload file
53
53
  class MockUploadFile:
54
54
  filename = "test.wav"
55
+ content_type = "audio/wav"
55
56
 
56
57
  async def read(self) -> bytes:
57
58
  return audio_data
@@ -215,6 +216,7 @@ async def test_concurrent_requests() -> None:
215
216
  class MockUploadFile:
216
217
  def __init__(self, idx: int) -> None:
217
218
  self.filename = f"test{idx}.wav"
219
+ self.content_type = "audio/wav"
218
220
  self.idx = idx
219
221
 
220
222
  async def read(self) -> bytes:
@@ -113,6 +113,9 @@ test = [
113
113
  vad = [
114
114
  { name = "silero-vad" },
115
115
  ]
116
+ wyoming = [
117
+ { name = "wyoming" },
118
+ ]
116
119
 
117
120
  [package.dev-dependencies]
118
121
  dev = [
@@ -194,9 +197,10 @@ requires-dist = [
194
197
  { name = "watchfiles", marker = "extra == 'memory'", specifier = ">=0.21.0" },
195
198
  { name = "watchfiles", marker = "extra == 'rag'", specifier = ">=0.21.0" },
196
199
  { name = "wyoming", marker = "extra == 'audio'", specifier = ">=1.5.2" },
200
+ { name = "wyoming", marker = "extra == 'wyoming'", specifier = ">=1.5.2" },
197
201
  { name = "zensical", marker = "extra == 'dev'" },
198
202
  ]
199
- provides-extras = ["audio", "dev", "faster-whisper", "kokoro", "llm", "memory", "mlx-whisper", "piper", "rag", "server", "speed", "test", "vad"]
203
+ provides-extras = ["audio", "dev", "faster-whisper", "kokoro", "llm", "memory", "mlx-whisper", "piper", "rag", "server", "speed", "test", "vad", "wyoming"]
200
204
 
201
205
  [package.metadata.requires-dev]
202
206
  dev = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes