agent-cli 0.82.1__tar.gz → 0.82.2__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 (373) hide show
  1. {agent_cli-0.82.1 → agent_cli-0.82.2}/.pre-commit-config.yaml +1 -1
  2. {agent_cli-0.82.1 → agent_cli-0.82.2}/PKG-INFO +2 -2
  3. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/audio.txt +1 -4
  4. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/faster-whisper.txt +1 -4
  5. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/kokoro.txt +1 -4
  6. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/llm.txt +1 -4
  7. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/memory.txt +1 -4
  8. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/mlx-whisper.txt +1 -4
  9. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/piper.txt +1 -4
  10. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/rag.txt +1 -4
  11. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/server.txt +1 -4
  12. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/speed.txt +1 -4
  13. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/vad.txt +1 -4
  14. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/vectordb.txt +1 -4
  15. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/whisper-transformers.txt +1 -4
  16. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/wyoming.txt +1 -4
  17. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/audio.py +53 -2
  18. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/process.py +26 -12
  19. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +13 -3
  20. {agent_cli-0.82.1 → agent_cli-0.82.2}/pyproject.toml +1 -1
  21. agent_cli-0.82.2/tests/core/test_audio.py +102 -0
  22. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_vad.py +3 -1
  23. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_process_manager.py +65 -8
  24. {agent_cli-0.82.1 → agent_cli-0.82.2}/uv.lock +2 -8
  25. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  26. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude/skills/agent-cli-dev/examples.md +0 -0
  27. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/README.md +0 -0
  28. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/marketplace.json +0 -0
  29. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/plugin.json +0 -0
  30. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  31. {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  32. {agent_cli-0.82.1 → agent_cli-0.82.2}/.cursorrules +0 -0
  33. {agent_cli-0.82.1 → agent_cli-0.82.2}/.dockerignore +0 -0
  34. {agent_cli-0.82.1 → agent_cli-0.82.2}/.env.example +0 -0
  35. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/logo.svg +0 -0
  36. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/release-drafter.yml +0 -0
  37. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/renovate.json +0 -0
  38. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/check_extras_sync.py +0 -0
  39. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/check_plugin_skill_sync.py +0 -0
  40. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/sync_extras.py +0 -0
  41. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/sync_requirements.py +0 -0
  42. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/automerge.yml +0 -0
  43. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/docker.yml +0 -0
  44. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/docs.yml +0 -0
  45. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/markdown-code-runner.yml +0 -0
  46. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/pytest.yml +0 -0
  47. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/release-drafter.yml +0 -0
  48. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/release.yml +0 -0
  49. {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/toc.yaml +0 -0
  50. {agent_cli-0.82.1 → agent_cli-0.82.2}/.gitignore +0 -0
  51. {agent_cli-0.82.1 → agent_cli-0.82.2}/.jscpd.json +0 -0
  52. {agent_cli-0.82.1 → agent_cli-0.82.2}/.prompts/docs-review.md +0 -0
  53. {agent_cli-0.82.1 → agent_cli-0.82.2}/.prompts/pr-review.md +0 -0
  54. {agent_cli-0.82.1 → agent_cli-0.82.2}/CLAUDE.md +0 -0
  55. {agent_cli-0.82.1 → agent_cli-0.82.2}/LICENSE +0 -0
  56. {agent_cli-0.82.1 → agent_cli-0.82.2}/README.md +0 -0
  57. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/__init__.py +0 -0
  58. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/__main__.py +0 -0
  59. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_extras.json +0 -0
  60. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/.gitkeep +0 -0
  61. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_tools.py +0 -0
  62. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/__init__.py +0 -0
  63. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/_voice_agent_common.py +0 -0
  64. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/assistant.py +0 -0
  65. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/autocorrect.py +0 -0
  66. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/chat.py +0 -0
  67. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/__init__.py +0 -0
  68. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/add.py +0 -0
  69. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/proxy.py +0 -0
  70. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/rag_proxy.py +0 -0
  71. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/speak.py +0 -0
  72. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/transcribe.py +0 -0
  73. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/transcribe_live.py +0 -0
  74. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/voice_edit.py +0 -0
  75. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/api.py +0 -0
  76. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/cli.py +0 -0
  77. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/config.py +0 -0
  78. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/config_cmd.py +0 -0
  79. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/constants.py +0 -0
  80. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/__init__.py +0 -0
  81. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/audio_format.py +0 -0
  82. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/chroma.py +0 -0
  83. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/deps.py +0 -0
  84. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/openai_proxy.py +0 -0
  85. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/reranker.py +0 -0
  86. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/sse.py +0 -0
  87. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/transcription_logger.py +0 -0
  88. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/utils.py +0 -0
  89. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/vad.py +0 -0
  90. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/watch.py +0 -0
  91. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/daemon/__init__.py +0 -0
  92. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/daemon/cli.py +0 -0
  93. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/__init__.py +0 -0
  94. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/_branch_name.py +0 -0
  95. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/_output.py +0 -0
  96. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/cleanup.py +0 -0
  97. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/cli.py +0 -0
  98. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/__init__.py +0 -0
  99. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/aider.py +0 -0
  100. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/base.py +0 -0
  101. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/claude.py +0 -0
  102. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/codex.py +0 -0
  103. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  104. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/copilot.py +0 -0
  105. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  106. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/gemini.py +0 -0
  107. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/opencode.py +0 -0
  108. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/registry.py +0 -0
  109. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/__init__.py +0 -0
  110. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/base.py +0 -0
  111. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/cursor.py +0 -0
  112. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/emacs.py +0 -0
  113. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/jetbrains.py +0 -0
  114. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/nano.py +0 -0
  115. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/neovim.py +0 -0
  116. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/registry.py +0 -0
  117. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/sublime.py +0 -0
  118. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/vim.py +0 -0
  119. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/vscode.py +0 -0
  120. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/zed.py +0 -0
  121. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/launch.py +0 -0
  122. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/project.py +0 -0
  123. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/registry.py +0 -0
  124. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/skill/SKILL.md +0 -0
  125. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/skill/examples.md +0 -0
  126. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/__init__.py +0 -0
  127. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  128. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/base.py +0 -0
  129. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/gnome.py +0 -0
  130. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/iterm2.py +0 -0
  131. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/kitty.py +0 -0
  132. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/registry.py +0 -0
  133. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/tmux.py +0 -0
  134. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/warp.py +0 -0
  135. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/zellij.py +0 -0
  136. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/worktree.py +0 -0
  137. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/docs_gen.py +0 -0
  138. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/example-config.toml +0 -0
  139. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/__init__.py +0 -0
  140. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/common.py +0 -0
  141. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/extras.py +0 -0
  142. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/hotkeys.py +0 -0
  143. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/launchd.py +0 -0
  144. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/service_config.py +0 -0
  145. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/services.py +0 -0
  146. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/systemd.py +0 -0
  147. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/__init__.py +0 -0
  148. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_files.py +0 -0
  149. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_filters.py +0 -0
  150. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_git.py +0 -0
  151. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_indexer.py +0 -0
  152. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_ingest.py +0 -0
  153. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_persistence.py +0 -0
  154. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_prompt.py +0 -0
  155. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_retrieval.py +0 -0
  156. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_store.py +0 -0
  157. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_streaming.py +0 -0
  158. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_tasks.py +0 -0
  159. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/api.py +0 -0
  160. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/client.py +0 -0
  161. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/engine.py +0 -0
  162. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/entities.py +0 -0
  163. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/models.py +0 -0
  164. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/opts.py +0 -0
  165. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/py.typed +0 -0
  166. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/__init__.py +0 -0
  167. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_indexer.py +0 -0
  168. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_indexing.py +0 -0
  169. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_prompt.py +0 -0
  170. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_retriever.py +0 -0
  171. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_store.py +0 -0
  172. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_utils.py +0 -0
  173. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/api.py +0 -0
  174. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/client.py +0 -0
  175. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/engine.py +0 -0
  176. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/models.py +0 -0
  177. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  178. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/__init__.py +0 -0
  179. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  180. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  181. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  182. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  183. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  184. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  185. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  186. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  187. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  188. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  189. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  190. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  191. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  192. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/run-openwakeword.sh +0 -0
  193. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  194. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-linux.sh +0 -0
  195. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  196. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-macos.sh +0 -0
  197. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-windows.ps1 +0 -0
  198. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  199. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/start-all-services.sh +0 -0
  200. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/__init__.py +0 -0
  201. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/cli.py +0 -0
  202. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/common.py +0 -0
  203. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/model_manager.py +0 -0
  204. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/model_registry.py +0 -0
  205. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/proxy/__init__.py +0 -0
  206. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/proxy/api.py +0 -0
  207. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/streaming.py +0 -0
  208. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/__init__.py +0 -0
  209. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/api.py +0 -0
  210. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/__init__.py +0 -0
  211. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/base.py +0 -0
  212. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/kokoro.py +0 -0
  213. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/piper.py +0 -0
  214. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/model_manager.py +0 -0
  215. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/model_registry.py +0 -0
  216. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/wyoming_handler.py +0 -0
  217. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/__init__.py +0 -0
  218. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/api.py +0 -0
  219. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/__init__.py +0 -0
  220. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/base.py +0 -0
  221. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  222. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/mlx.py +0 -0
  223. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/transformers.py +0 -0
  224. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/languages.py +0 -0
  225. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/model_manager.py +0 -0
  226. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/model_registry.py +0 -0
  227. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  228. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/__init__.py +0 -0
  229. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/_wyoming_utils.py +0 -0
  230. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/asr.py +0 -0
  231. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/llm.py +0 -0
  232. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/tts.py +0 -0
  233. {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/wake_word.py +0 -0
  234. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/docker-compose.yml +0 -0
  235. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/memory-proxy.Dockerfile +0 -0
  236. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/rag-proxy.Dockerfile +0 -0
  237. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/transcribe-proxy.Dockerfile +0 -0
  238. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/tts.Dockerfile +0 -0
  239. {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/whisper.Dockerfile +0 -0
  240. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/CNAME +0 -0
  241. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/index.md +0 -0
  242. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/memory.md +0 -0
  243. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/rag.md +0 -0
  244. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/assistant.md +0 -0
  245. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/autocorrect.md +0 -0
  246. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/chat.md +0 -0
  247. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/config.md +0 -0
  248. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/daemon.md +0 -0
  249. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/dev.md +0 -0
  250. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/index.md +0 -0
  251. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-extras.md +0 -0
  252. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-hotkeys.md +0 -0
  253. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-services.md +0 -0
  254. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/memory.md +0 -0
  255. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/rag-proxy.md +0 -0
  256. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/index.md +0 -0
  257. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/transcribe-proxy.md +0 -0
  258. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/tts.md +0 -0
  259. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/whisper.md +0 -0
  260. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/speak.md +0 -0
  261. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/start-services.md +0 -0
  262. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/transcribe-live.md +0 -0
  263. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/transcribe.md +0 -0
  264. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/voice-edit.md +0 -0
  265. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/configuration.md +0 -0
  266. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/getting-started.md +0 -0
  267. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/iOS_Shortcut_Guide.md +0 -0
  268. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/index.md +0 -0
  269. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/docker.md +0 -0
  270. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/index.md +0 -0
  271. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/linux.md +0 -0
  272. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/macos.md +0 -0
  273. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/nixos.md +0 -0
  274. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/windows.md +0 -0
  275. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/logo-clean.svg +0 -0
  276. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  277. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/run_markdown_code_runner.py +0 -0
  278. {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/system-integration.md +0 -0
  279. {agent_cli-0.82.1 → agent_cli-0.82.2}/example.agent-cli-config.toml +0 -0
  280. {agent_cli-0.82.1 → agent_cli-0.82.2}/justfile +0 -0
  281. {agent_cli-0.82.1 → agent_cli-0.82.2}/shell.nix +0 -0
  282. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/__init__.py +0 -0
  283. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/__init__.py +0 -0
  284. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_fix_my_text.py +0 -0
  285. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_interactive.py +0 -0
  286. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_interactive_extra.py +0 -0
  287. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_memory_add.py +0 -0
  288. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_speak.py +0 -0
  289. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_speak_e2e.py +0 -0
  290. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe.py +0 -0
  291. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_agent.py +0 -0
  292. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_e2e.py +0 -0
  293. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_live.py +0 -0
  294. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_recovery.py +0 -0
  295. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_tts_common.py +0 -0
  296. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_tts_common_extra.py +0 -0
  297. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_agent_common.py +0 -0
  298. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_edit.py +0 -0
  299. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_edit_e2e.py +0 -0
  300. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_wake_word_assistant.py +0 -0
  301. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/conftest.py +0 -0
  302. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/__init__.py +0 -0
  303. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_audio_format.py +0 -0
  304. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_chroma.py +0 -0
  305. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_sse.py +0 -0
  306. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_watch.py +0 -0
  307. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/__init__.py +0 -0
  308. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_cli.py +0 -0
  309. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_coding_agents.py +0 -0
  310. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_editors.py +0 -0
  311. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_project.py +0 -0
  312. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_terminals.py +0 -0
  313. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_verification.py +0 -0
  314. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_worktree.py +0 -0
  315. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/install/__init__.py +0 -0
  316. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/install/test_extras.py +0 -0
  317. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/__init__.py +0 -0
  318. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_api_health.py +0 -0
  319. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_api_integration_liveish.py +0 -0
  320. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_client.py +0 -0
  321. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_engine.py +0 -0
  322. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_files.py +0 -0
  323. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_filters.py +0 -0
  324. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_git_integration.py +0 -0
  325. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_indexer.py +0 -0
  326. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_memory_integration.py +0 -0
  327. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_proxy_passthrough.py +0 -0
  328. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_store.py +0 -0
  329. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_utils.py +0 -0
  330. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/__init__.py +0 -0
  331. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/audio.py +0 -0
  332. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/llm.py +0 -0
  333. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/wyoming.py +0 -0
  334. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/__init__.py +0 -0
  335. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_api.py +0 -0
  336. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_engine.py +0 -0
  337. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_history.py +0 -0
  338. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_indexer.py +0 -0
  339. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_indexing.py +0 -0
  340. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_client.py +0 -0
  341. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_integration_liveish.py +0 -0
  342. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  343. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_retriever.py +0 -0
  344. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_store.py +0 -0
  345. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_utils.py +0 -0
  346. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_api.py +0 -0
  347. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_api_integration.py +0 -0
  348. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_asr.py +0 -0
  349. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_asr_recovery.py +0 -0
  350. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_audio_e2e.py +0 -0
  351. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_cli.py +0 -0
  352. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_config.py +0 -0
  353. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_config_cmd.py +0 -0
  354. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_daemon.py +0 -0
  355. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_docs_gen.py +0 -0
  356. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_env_vars.py +0 -0
  357. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_json_output.py +0 -0
  358. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_llm.py +0 -0
  359. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_llm_gemini.py +0 -0
  360. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_memory_tools.py +0 -0
  361. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_mlx_backend.py +0 -0
  362. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_requires_extras.py +0 -0
  363. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_streaming.py +0 -0
  364. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_tts.py +0 -0
  365. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_whisper.py +0 -0
  366. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_services.py +0 -0
  367. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_tools.py +0 -0
  368. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_transformers_backend.py +0 -0
  369. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_tts.py +0 -0
  370. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_utils.py +0 -0
  371. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_wake_word.py +0 -0
  372. {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_wyoming_utils.py +0 -0
  373. {agent_cli-0.82.1 → agent_cli-0.82.2}/zensical.toml +0 -0
@@ -11,7 +11,7 @@ repos:
11
11
  - id: end-of-file-fixer
12
12
  - id: mixed-line-ending
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: "v0.15.0"
14
+ rev: "v0.15.2"
15
15
  hooks:
16
16
  - id: ruff
17
17
  args: ["--fix"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.82.1
3
+ Version: 0.82.2
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>
@@ -14,7 +14,7 @@ Requires-Dist: pyperclip
14
14
  Requires-Dist: rich
15
15
  Requires-Dist: setproctitle
16
16
  Requires-Dist: typer
17
- Requires-Dist: typer-slim[standard]
17
+ Requires-Dist: typer-slim
18
18
  Provides-Extra: audio
19
19
  Requires-Dist: numpy; extra == 'audio'
20
20
  Requires-Dist: sounddevice>=0.4.6; extra == 'audio'
@@ -52,13 +52,10 @@ rich==14.2.0
52
52
  # via
53
53
  # agent-cli
54
54
  # typer
55
- # typer-slim
56
55
  setproctitle==1.3.7
57
56
  # via agent-cli
58
57
  shellingham==1.5.4
59
- # via
60
- # typer
61
- # typer-slim
58
+ # via typer
62
59
  sounddevice==0.5.3
63
60
  # via agent-cli
64
61
  typer==0.21.1
@@ -147,7 +147,6 @@ rich==14.2.0
147
147
  # agent-cli
148
148
  # rich-toolkit
149
149
  # typer
150
- # typer-slim
151
150
  rich-toolkit==0.17.1
152
151
  # via
153
152
  # fastapi-cli
@@ -161,9 +160,7 @@ setproctitle==1.3.7
161
160
  setuptools==80.9.0
162
161
  # via ctranslate2
163
162
  shellingham==1.5.4
164
- # via
165
- # typer
166
- # typer-slim
163
+ # via typer
167
164
  starlette==0.50.0
168
165
  # via fastapi
169
166
  sympy==1.14.0
@@ -291,7 +291,6 @@ rich==14.2.0
291
291
  # agent-cli
292
292
  # rich-toolkit
293
293
  # typer
294
- # typer-slim
295
294
  rich-toolkit==0.17.1
296
295
  # via
297
296
  # fastapi-cli
@@ -316,9 +315,7 @@ setuptools==80.9.0
316
315
  # thinc
317
316
  # torch
318
317
  shellingham==1.5.4
319
- # via
320
- # typer
321
- # typer-slim
318
+ # via typer
322
319
  six==1.17.0
323
320
  # via python-dateutil
324
321
  smart-open==7.5.0
@@ -134,15 +134,12 @@ rich==14.2.0
134
134
  # via
135
135
  # agent-cli
136
136
  # typer
137
- # typer-slim
138
137
  rsa==4.9.1
139
138
  # via google-auth
140
139
  setproctitle==1.3.7
141
140
  # via agent-cli
142
141
  shellingham==1.5.4
143
- # via
144
- # typer
145
- # typer-slim
142
+ # via typer
146
143
  sniffio==1.3.1
147
144
  # via
148
145
  # google-genai
@@ -295,7 +295,6 @@ rich==14.2.0
295
295
  # chromadb
296
296
  # rich-toolkit
297
297
  # typer
298
- # typer-slim
299
298
  rich-toolkit==0.17.1
300
299
  # via
301
300
  # fastapi-cli
@@ -315,9 +314,7 @@ sentry-sdk==2.49.0
315
314
  setproctitle==1.3.7
316
315
  # via agent-cli
317
316
  shellingham==1.5.4
318
- # via
319
- # typer
320
- # typer-slim
317
+ # via typer
321
318
  six==1.17.0
322
319
  # via
323
320
  # kubernetes
@@ -149,7 +149,6 @@ rich==14.2.0
149
149
  # agent-cli
150
150
  # rich-toolkit
151
151
  # typer
152
- # typer-slim
153
152
  rich-toolkit==0.17.1
154
153
  # via
155
154
  # fastapi-cli
@@ -165,9 +164,7 @@ setproctitle==1.3.7
165
164
  setuptools==80.9.0 ; python_full_version >= '3.12' and platform_machine == 'arm64' and sys_platform == 'darwin'
166
165
  # via torch
167
166
  shellingham==1.5.4
168
- # via
169
- # typer
170
- # typer-slim
167
+ # via typer
171
168
  starlette==0.50.0
172
169
  # via fastapi
173
170
  sympy==1.14.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
@@ -119,7 +119,6 @@ rich==14.2.0
119
119
  # agent-cli
120
120
  # rich-toolkit
121
121
  # typer
122
- # typer-slim
123
122
  rich-toolkit==0.17.1
124
123
  # via
125
124
  # fastapi-cli
@@ -131,9 +130,7 @@ sentry-sdk==2.49.0
131
130
  setproctitle==1.3.7
132
131
  # via agent-cli
133
132
  shellingham==1.5.4
134
- # via
135
- # typer
136
- # typer-slim
133
+ # via typer
137
134
  starlette==0.50.0
138
135
  # via fastapi
139
136
  sympy==1.14.0
@@ -335,7 +335,6 @@ rich==14.2.0
335
335
  # chromadb
336
336
  # rich-toolkit
337
337
  # typer
338
- # typer-slim
339
338
  rich-toolkit==0.17.1
340
339
  # via
341
340
  # fastapi-cli
@@ -355,9 +354,7 @@ sentry-sdk==2.49.0
355
354
  setproctitle==1.3.7
356
355
  # via agent-cli
357
356
  shellingham==1.5.4
358
- # via
359
- # typer
360
- # typer-slim
357
+ # via typer
361
358
  six==1.17.0
362
359
  # via
363
360
  # kubernetes
@@ -99,7 +99,6 @@ rich==14.2.0
99
99
  # agent-cli
100
100
  # rich-toolkit
101
101
  # typer
102
- # typer-slim
103
102
  rich-toolkit==0.17.1
104
103
  # via
105
104
  # fastapi-cli
@@ -111,9 +110,7 @@ sentry-sdk==2.49.0
111
110
  setproctitle==1.3.7
112
111
  # via agent-cli
113
112
  shellingham==1.5.4
114
- # via
115
- # typer
116
- # typer-slim
113
+ # via typer
117
114
  starlette==0.50.0
118
115
  # via fastapi
119
116
  typer==0.21.1
@@ -52,13 +52,10 @@ rich==14.2.0
52
52
  # via
53
53
  # agent-cli
54
54
  # typer
55
- # typer-slim
56
55
  setproctitle==1.3.7
57
56
  # via agent-cli
58
57
  shellingham==1.5.4
59
- # via
60
- # typer
61
- # typer-slim
58
+ # via typer
62
59
  termcolor==3.3.0
63
60
  # via fire
64
61
  typer==0.21.1
@@ -64,13 +64,10 @@ rich==14.2.0
64
64
  # via
65
65
  # agent-cli
66
66
  # typer
67
- # typer-slim
68
67
  setproctitle==1.3.7
69
68
  # via agent-cli
70
69
  shellingham==1.5.4
71
- # via
72
- # typer
73
- # typer-slim
70
+ # via typer
74
71
  sympy==1.14.0
75
72
  # via onnxruntime
76
73
  typer==0.21.1
@@ -294,7 +294,6 @@ rich==14.2.0
294
294
  # chromadb
295
295
  # rich-toolkit
296
296
  # typer
297
- # typer-slim
298
297
  rich-toolkit==0.17.1
299
298
  # via
300
299
  # fastapi-cli
@@ -314,9 +313,7 @@ sentry-sdk==2.49.0
314
313
  setproctitle==1.3.7
315
314
  # via agent-cli
316
315
  shellingham==1.5.4
317
- # via
318
- # typer
319
- # typer-slim
316
+ # via typer
320
317
  six==1.17.0
321
318
  # via
322
319
  # kubernetes
@@ -179,7 +179,6 @@ rich==14.2.0
179
179
  # agent-cli
180
180
  # rich-toolkit
181
181
  # typer
182
- # typer-slim
183
182
  rich-toolkit==0.17.1
184
183
  # via
185
184
  # fastapi-cli
@@ -195,9 +194,7 @@ setproctitle==1.3.7
195
194
  setuptools==80.9.0 ; python_full_version >= '3.12'
196
195
  # via torch
197
196
  shellingham==1.5.4
198
- # via
199
- # typer
200
- # typer-slim
197
+ # via typer
201
198
  starlette==0.50.0
202
199
  # via fastapi
203
200
  sympy==1.14.0
@@ -46,13 +46,10 @@ rich==14.2.0
46
46
  # via
47
47
  # agent-cli
48
48
  # typer
49
- # typer-slim
50
49
  setproctitle==1.3.7
51
50
  # via agent-cli
52
51
  shellingham==1.5.4
53
- # via
54
- # typer
55
- # typer-slim
52
+ # via typer
56
53
  typer==0.21.1
57
54
  # via agent-cli
58
55
  typer-slim==0.21.1
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  import functools
7
7
  import logging
8
+ import threading
8
9
  from contextlib import asynccontextmanager, contextmanager
9
10
  from dataclasses import dataclass
10
11
  from typing import TYPE_CHECKING, Literal
@@ -27,6 +28,9 @@ if TYPE_CHECKING:
27
28
 
28
29
  from agent_cli import config
29
30
 
31
+ LOGGER = logging.getLogger(__name__)
32
+ _AUDIO_SHUTDOWN_TIMEOUT_SECONDS = 0.5
33
+
30
34
 
31
35
  @dataclass
32
36
  class StreamConfig:
@@ -178,8 +182,55 @@ def open_audio_stream(
178
182
  try:
179
183
  yield stream
180
184
  finally:
181
- stream.stop()
182
- stream.close()
185
+ # Use abort for teardown to avoid PortAudio/CoreAudio stop deadlocks.
186
+ _run_with_timeout(
187
+ lambda: stream.abort(ignore_errors=True),
188
+ action="audio stream.abort()",
189
+ )
190
+ _run_with_timeout(
191
+ lambda: stream.close(ignore_errors=True),
192
+ action="audio stream.close()",
193
+ )
194
+
195
+
196
+ def _run_with_timeout(
197
+ operation: Callable[[], None],
198
+ *,
199
+ action: str,
200
+ timeout_seconds: float = _AUDIO_SHUTDOWN_TIMEOUT_SECONDS,
201
+ ) -> bool:
202
+ """Run a blocking operation in a daemon thread with a timeout guard."""
203
+ done = threading.Event()
204
+ errors: list[Exception] = []
205
+
206
+ def _invoke() -> None:
207
+ try:
208
+ operation()
209
+ except Exception as exc: # pragma: no cover - defensive logging path
210
+ errors.append(exc)
211
+ finally:
212
+ done.set()
213
+
214
+ thread = threading.Thread(
215
+ target=_invoke,
216
+ name="agent-cli-audio-shutdown",
217
+ daemon=True,
218
+ )
219
+ thread.start()
220
+
221
+ if not done.wait(timeout_seconds):
222
+ LOGGER.warning(
223
+ "Timed out after %.2fs waiting for %s; continuing.",
224
+ timeout_seconds,
225
+ action,
226
+ )
227
+ return False
228
+
229
+ if errors:
230
+ LOGGER.warning("%s failed: %s", action, errors[0])
231
+ return False
232
+
233
+ return True
183
234
 
184
235
 
185
236
  async def read_audio_stream(
@@ -110,6 +110,7 @@ def _get_running_pid(process_name: str) -> int | None:
110
110
  # Clean up stale/invalid PID file
111
111
  if pid_file.exists():
112
112
  pid_file.unlink()
113
+ clear_stop_file(process_name)
113
114
  return None
114
115
 
115
116
 
@@ -133,6 +134,7 @@ def kill_process(process_name: str) -> bool:
133
134
 
134
135
  # If no PID file exists at all, nothing to do
135
136
  if not pid_file.exists():
137
+ clear_stop_file(process_name)
136
138
  return False
137
139
 
138
140
  # Check if we have a running process
@@ -140,28 +142,42 @@ def kill_process(process_name: str) -> bool:
140
142
 
141
143
  # If _get_running_pid returned None but file existed, it cleaned up a stale file
142
144
  if pid is None:
145
+ clear_stop_file(process_name)
143
146
  return True
144
147
 
148
+ stop_file = _get_stop_file(process_name)
149
+ should_force_kill = sys.platform != "win32" and stop_file.exists()
150
+
145
151
  # On Windows, create stop file to signal graceful shutdown
146
152
  if sys.platform == "win32":
147
- _get_stop_file(process_name).touch()
153
+ stop_file.touch()
148
154
 
149
- # Send SIGINT for graceful shutdown
155
+ # Send SIGINT first; escalate to SIGKILL only when the same PID survives
156
+ # repeated stop attempts beyond the configured timeout.
157
+ stop_signal = signal.SIGKILL if should_force_kill else signal.SIGINT
158
+ process_stopped = False
150
159
  try:
151
- os.kill(pid, signal.SIGINT)
160
+ os.kill(pid, stop_signal)
152
161
  # Wait for process to terminate
153
162
  for _ in range(10): # 1 second max
154
- if not is_process_running(process_name):
163
+ if not _is_pid_running(pid):
164
+ process_stopped = True
155
165
  break
156
166
  time.sleep(0.1)
157
167
  except (ProcessLookupError, PermissionError):
158
- pass # Process dead or no permission - we'll clean up regardless
168
+ process_stopped = not _is_pid_running(pid)
159
169
 
160
170
  # Clean up
161
171
  if sys.platform == "win32":
162
172
  clear_stop_file(process_name)
163
- if pid_file.exists():
164
- pid_file.unlink()
173
+ # Keep PID file if process is still alive so subsequent --status/--toggle
174
+ # calls continue targeting the same process.
175
+ if process_stopped:
176
+ clear_stop_file(process_name)
177
+ if pid_file.exists():
178
+ pid_file.unlink()
179
+ elif not should_force_kill:
180
+ stop_file.touch()
165
181
 
166
182
  return True
167
183
 
@@ -178,9 +194,8 @@ def pid_file_context(process_name: str) -> Generator[Path, None, None]:
178
194
  print(f"Process {process_name} is already running (PID: {existing_pid})")
179
195
  sys.exit(1)
180
196
 
181
- # Clear any stale stop file from previous run (Windows only)
182
- if sys.platform == "win32":
183
- clear_stop_file(process_name)
197
+ # Clear stale stop markers from previous runs.
198
+ clear_stop_file(process_name)
184
199
 
185
200
  pid_file = _get_pid_file(process_name)
186
201
  with pid_file.open("w") as f:
@@ -191,5 +206,4 @@ def pid_file_context(process_name: str) -> Generator[Path, None, None]:
191
206
  finally:
192
207
  if pid_file.exists():
193
208
  pid_file.unlink()
194
- if sys.platform == "win32":
195
- clear_stop_file(process_name)
209
+ clear_stop_file(process_name)
@@ -3,6 +3,8 @@
3
3
  # Toggle script for agent-cli transcription on macOS
4
4
 
5
5
  NOTIFIER=${NOTIFIER:-/opt/homebrew/bin/terminal-notifier}
6
+ AGENT_CLI=${AGENT_CLI:-"$HOME/.local/bin/agent-cli"}
7
+ PID_FILE=${PID_FILE:-"$HOME/.cache/agent-cli/transcribe.pid"}
6
8
  RECORDING_GROUP="agent-cli-transcribe-recording"
7
9
  TEMP_PREFIX="agent-cli-transcribe-temp"
8
10
 
@@ -19,14 +21,22 @@ notify_temp() {
19
21
  ) &
20
22
  }
21
23
 
22
- if pgrep -f "agent-cli transcribe( |$)" > /dev/null; then
23
- pkill -INT -f "agent-cli transcribe( |$)"
24
+ is_transcribe_running() {
25
+ [ -f "$PID_FILE" ] || return 1
26
+ local pid
27
+ pid=$(cat "$PID_FILE" 2>/dev/null || true)
28
+ [ -n "$pid" ] && kill -0 "$pid" >/dev/null 2>&1
29
+ }
30
+
31
+ if is_transcribe_running; then
32
+ "$AGENT_CLI" transcribe --toggle --quiet >/dev/null 2>&1 || true
33
+
24
34
  "$NOTIFIER" -remove "$RECORDING_GROUP" >/dev/null 2>&1 || true
25
35
  notify_temp "🛑 Stopped" "Processing results..."
26
36
  else
27
37
  "$NOTIFIER" -title "🎙️ Started" -message "Listening..." -group "$RECORDING_GROUP"
28
38
  (
29
- OUTPUT=$("$HOME/.local/bin/agent-cli" transcribe --llm --quiet 2>/dev/null)
39
+ OUTPUT=$("$AGENT_CLI" transcribe --toggle --llm --quiet 2>/dev/null)
30
40
  "$NOTIFIER" -remove "$RECORDING_GROUP" >/dev/null 2>&1 || true
31
41
  if [ -n "$OUTPUT" ]; then
32
42
  notify_temp "📄 Result" "$OUTPUT"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "pydantic", # Required for config.py models
13
13
  "rich",
14
14
  "pyperclip",
15
- "typer-slim[standard]", # Depend on both typer and typer-slim to prevent
15
+ "typer-slim", # Depend on both typer and typer-slim to prevent
16
16
  "typer", # uv namespace corruption (astral-sh/uv#17645)
17
17
  "dotenv",
18
18
  "httpx",
@@ -0,0 +1,102 @@
1
+ """Tests for core audio stream lifecycle helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ import time
7
+ from typing import Any
8
+ from unittest.mock import MagicMock
9
+
10
+ from agent_cli.core import audio
11
+
12
+
13
+ class _FakeStream:
14
+ def __init__(self) -> None:
15
+ self.calls: list[str] = []
16
+
17
+ def start(self) -> None:
18
+ self.calls.append("start")
19
+
20
+ def stop(self, ignore_errors: bool = True) -> None: # noqa: ARG002
21
+ self.calls.append("stop")
22
+
23
+ def abort(self, ignore_errors: bool = True) -> None: # noqa: ARG002
24
+ self.calls.append("abort")
25
+
26
+ def close(self, ignore_errors: bool = True) -> None: # noqa: ARG002
27
+ self.calls.append("close")
28
+
29
+
30
+ def test_open_audio_stream_stops_and_closes() -> None:
31
+ """open_audio_stream should start, then abort and close the stream."""
32
+ stream = _FakeStream()
33
+ config = MagicMock()
34
+ config.to_stream.return_value = stream
35
+
36
+ with audio.open_audio_stream(config):
37
+ assert stream.calls == ["start"]
38
+
39
+ assert stream.calls == ["start", "abort", "close"]
40
+
41
+
42
+ def test_open_audio_stream_runs_abort_then_close(
43
+ monkeypatch: Any,
44
+ ) -> None:
45
+ """open_audio_stream should invoke abort before close."""
46
+ stream = _FakeStream()
47
+ config = MagicMock()
48
+ config.to_stream.return_value = stream
49
+ actions: list[str] = []
50
+
51
+ def fake_call(
52
+ operation: Any,
53
+ *,
54
+ action: str,
55
+ timeout_seconds: float = audio._AUDIO_SHUTDOWN_TIMEOUT_SECONDS,
56
+ ) -> bool:
57
+ _ = operation
58
+ _ = timeout_seconds
59
+ actions.append(action)
60
+ return True
61
+
62
+ monkeypatch.setattr(audio, "_run_with_timeout", fake_call)
63
+
64
+ with audio.open_audio_stream(config):
65
+ pass
66
+
67
+ assert actions == ["audio stream.abort()", "audio stream.close()"]
68
+
69
+
70
+ def test_run_with_timeout_timeout_logs_warning(
71
+ caplog: Any,
72
+ ) -> None:
73
+ """Timeout path should log a warning and return False."""
74
+
75
+ def hang() -> None:
76
+ time.sleep(0.2)
77
+
78
+ with caplog.at_level(logging.WARNING):
79
+ result = audio._run_with_timeout(
80
+ hang,
81
+ action="audio stream.close()",
82
+ timeout_seconds=0.01,
83
+ )
84
+
85
+ assert result is False
86
+ assert "Timed out after" in caplog.text
87
+
88
+
89
+ def test_run_with_timeout_exception_logs_warning(
90
+ caplog: Any,
91
+ ) -> None:
92
+ """Exceptions from stream methods should be logged and reported as failure."""
93
+
94
+ def explode() -> None:
95
+ msg = "boom"
96
+ raise RuntimeError(msg)
97
+
98
+ with caplog.at_level(logging.WARNING):
99
+ result = audio._run_with_timeout(explode, action="audio stream.close()")
100
+
101
+ assert result is False
102
+ assert "audio stream.close() failed" in caplog.text
@@ -26,7 +26,9 @@ def ensure_model_cached() -> None:
26
26
  SILERO_VAD_CACHE.parent.mkdir(parents=True, exist_ok=True)
27
27
  try:
28
28
  with (
29
- urllib.request.urlopen(SILERO_VAD_URL, timeout=30) as response, # noqa: S310
29
+ # Keep this below the global pytest-timeout (10s) so transient
30
+ # network slowness results in a clean skip instead of a timeout failure.
31
+ urllib.request.urlopen(SILERO_VAD_URL, timeout=5) as response, # noqa: S310
30
32
  SILERO_VAD_CACHE.open("wb") as f,
31
33
  ):
32
34
  shutil.copyfileobj(response, f)