agent-cli 0.82.1__tar.gz → 0.82.3__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.3}/.github/workflows/docker.yml +8 -8
  2. {agent_cli-0.82.1 → agent_cli-0.82.3}/.pre-commit-config.yaml +1 -1
  3. {agent_cli-0.82.1 → agent_cli-0.82.3}/PKG-INFO +2 -2
  4. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/audio.txt +1 -4
  5. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/faster-whisper.txt +1 -4
  6. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/kokoro.txt +1 -4
  7. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/llm.txt +1 -4
  8. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/memory.txt +1 -4
  9. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/mlx-whisper.txt +1 -4
  10. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/piper.txt +1 -4
  11. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/rag.txt +1 -4
  12. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/server.txt +1 -4
  13. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/speed.txt +1 -4
  14. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/vad.txt +1 -4
  15. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/vectordb.txt +1 -4
  16. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/whisper-transformers.txt +1 -4
  17. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/wyoming.txt +1 -4
  18. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/assistant.py +1 -1
  19. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/chat.py +1 -1
  20. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/speak.py +1 -1
  21. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/transcribe.py +1 -1
  22. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/transcribe_live.py +1 -1
  23. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/voice_edit.py +1 -1
  24. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/audio.py +53 -2
  25. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/deps.py +29 -3
  26. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/process.py +26 -12
  27. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/hotkeys.py +17 -1
  28. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +14 -4
  29. {agent_cli-0.82.1 → agent_cli-0.82.3}/pyproject.toml +1 -1
  30. agent_cli-0.82.3/tests/core/test_audio.py +102 -0
  31. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_vad.py +3 -1
  32. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_process_manager.py +65 -8
  33. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_requires_extras.py +73 -0
  34. {agent_cli-0.82.1 → agent_cli-0.82.3}/uv.lock +2 -8
  35. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  36. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude/skills/agent-cli-dev/examples.md +0 -0
  37. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/README.md +0 -0
  38. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/marketplace.json +0 -0
  39. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/plugin.json +0 -0
  40. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  41. {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  42. {agent_cli-0.82.1 → agent_cli-0.82.3}/.cursorrules +0 -0
  43. {agent_cli-0.82.1 → agent_cli-0.82.3}/.dockerignore +0 -0
  44. {agent_cli-0.82.1 → agent_cli-0.82.3}/.env.example +0 -0
  45. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/logo.svg +0 -0
  46. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/release-drafter.yml +0 -0
  47. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/renovate.json +0 -0
  48. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/check_extras_sync.py +0 -0
  49. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/check_plugin_skill_sync.py +0 -0
  50. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/sync_extras.py +0 -0
  51. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/sync_requirements.py +0 -0
  52. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/automerge.yml +0 -0
  53. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/docs.yml +0 -0
  54. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/markdown-code-runner.yml +0 -0
  55. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/pytest.yml +0 -0
  56. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/release-drafter.yml +0 -0
  57. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/release.yml +0 -0
  58. {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/toc.yaml +0 -0
  59. {agent_cli-0.82.1 → agent_cli-0.82.3}/.gitignore +0 -0
  60. {agent_cli-0.82.1 → agent_cli-0.82.3}/.jscpd.json +0 -0
  61. {agent_cli-0.82.1 → agent_cli-0.82.3}/.prompts/docs-review.md +0 -0
  62. {agent_cli-0.82.1 → agent_cli-0.82.3}/.prompts/pr-review.md +0 -0
  63. {agent_cli-0.82.1 → agent_cli-0.82.3}/CLAUDE.md +0 -0
  64. {agent_cli-0.82.1 → agent_cli-0.82.3}/LICENSE +0 -0
  65. {agent_cli-0.82.1 → agent_cli-0.82.3}/README.md +0 -0
  66. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/__init__.py +0 -0
  67. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/__main__.py +0 -0
  68. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_extras.json +0 -0
  69. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/.gitkeep +0 -0
  70. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_tools.py +0 -0
  71. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/__init__.py +0 -0
  72. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/_voice_agent_common.py +0 -0
  73. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/autocorrect.py +0 -0
  74. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/__init__.py +0 -0
  75. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/add.py +0 -0
  76. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/proxy.py +0 -0
  77. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/rag_proxy.py +0 -0
  78. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/api.py +0 -0
  79. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/cli.py +0 -0
  80. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/config.py +0 -0
  81. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/config_cmd.py +0 -0
  82. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/constants.py +0 -0
  83. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/__init__.py +0 -0
  84. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/audio_format.py +0 -0
  85. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/chroma.py +0 -0
  86. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/openai_proxy.py +0 -0
  87. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/reranker.py +0 -0
  88. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/sse.py +0 -0
  89. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/transcription_logger.py +0 -0
  90. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/utils.py +0 -0
  91. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/vad.py +0 -0
  92. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/watch.py +0 -0
  93. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/daemon/__init__.py +0 -0
  94. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/daemon/cli.py +0 -0
  95. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/__init__.py +0 -0
  96. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/_branch_name.py +0 -0
  97. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/_output.py +0 -0
  98. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/cleanup.py +0 -0
  99. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/cli.py +0 -0
  100. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/__init__.py +0 -0
  101. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/aider.py +0 -0
  102. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/base.py +0 -0
  103. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/claude.py +0 -0
  104. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/codex.py +0 -0
  105. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  106. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/copilot.py +0 -0
  107. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  108. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/gemini.py +0 -0
  109. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/opencode.py +0 -0
  110. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/registry.py +0 -0
  111. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/__init__.py +0 -0
  112. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/base.py +0 -0
  113. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/cursor.py +0 -0
  114. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/emacs.py +0 -0
  115. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/jetbrains.py +0 -0
  116. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/nano.py +0 -0
  117. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/neovim.py +0 -0
  118. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/registry.py +0 -0
  119. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/sublime.py +0 -0
  120. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/vim.py +0 -0
  121. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/vscode.py +0 -0
  122. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/zed.py +0 -0
  123. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/launch.py +0 -0
  124. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/project.py +0 -0
  125. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/registry.py +0 -0
  126. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/skill/SKILL.md +0 -0
  127. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/skill/examples.md +0 -0
  128. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/__init__.py +0 -0
  129. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  130. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/base.py +0 -0
  131. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/gnome.py +0 -0
  132. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/iterm2.py +0 -0
  133. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/kitty.py +0 -0
  134. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/registry.py +0 -0
  135. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/tmux.py +0 -0
  136. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/warp.py +0 -0
  137. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/zellij.py +0 -0
  138. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/worktree.py +0 -0
  139. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/docs_gen.py +0 -0
  140. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/example-config.toml +0 -0
  141. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/__init__.py +0 -0
  142. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/common.py +0 -0
  143. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/extras.py +0 -0
  144. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/launchd.py +0 -0
  145. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/service_config.py +0 -0
  146. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/services.py +0 -0
  147. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/systemd.py +0 -0
  148. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/__init__.py +0 -0
  149. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_files.py +0 -0
  150. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_filters.py +0 -0
  151. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_git.py +0 -0
  152. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_indexer.py +0 -0
  153. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_ingest.py +0 -0
  154. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_persistence.py +0 -0
  155. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_prompt.py +0 -0
  156. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_retrieval.py +0 -0
  157. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_store.py +0 -0
  158. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_streaming.py +0 -0
  159. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_tasks.py +0 -0
  160. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/api.py +0 -0
  161. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/client.py +0 -0
  162. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/engine.py +0 -0
  163. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/entities.py +0 -0
  164. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/models.py +0 -0
  165. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/opts.py +0 -0
  166. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/py.typed +0 -0
  167. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/__init__.py +0 -0
  168. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_indexer.py +0 -0
  169. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_indexing.py +0 -0
  170. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_prompt.py +0 -0
  171. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_retriever.py +0 -0
  172. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_store.py +0 -0
  173. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_utils.py +0 -0
  174. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/api.py +0 -0
  175. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/client.py +0 -0
  176. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/engine.py +0 -0
  177. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/models.py +0 -0
  178. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  179. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/__init__.py +0 -0
  180. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  181. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  182. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  183. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  184. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  185. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  186. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  187. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  188. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  189. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  190. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  191. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  192. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  193. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/run-openwakeword.sh +0 -0
  194. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  195. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-linux.sh +0 -0
  196. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  197. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-macos.sh +0 -0
  198. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-windows.ps1 +0 -0
  199. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  200. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/start-all-services.sh +0 -0
  201. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/__init__.py +0 -0
  202. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/cli.py +0 -0
  203. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/common.py +0 -0
  204. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/model_manager.py +0 -0
  205. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/model_registry.py +0 -0
  206. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/proxy/__init__.py +0 -0
  207. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/proxy/api.py +0 -0
  208. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/streaming.py +0 -0
  209. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/__init__.py +0 -0
  210. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/api.py +0 -0
  211. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/__init__.py +0 -0
  212. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/base.py +0 -0
  213. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/kokoro.py +0 -0
  214. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/piper.py +0 -0
  215. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/model_manager.py +0 -0
  216. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/model_registry.py +0 -0
  217. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/wyoming_handler.py +0 -0
  218. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/__init__.py +0 -0
  219. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/api.py +0 -0
  220. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/__init__.py +0 -0
  221. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/base.py +0 -0
  222. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  223. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/mlx.py +0 -0
  224. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/transformers.py +0 -0
  225. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/languages.py +0 -0
  226. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/model_manager.py +0 -0
  227. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/model_registry.py +0 -0
  228. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  229. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/__init__.py +0 -0
  230. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/_wyoming_utils.py +0 -0
  231. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/asr.py +0 -0
  232. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/llm.py +0 -0
  233. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/tts.py +0 -0
  234. {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/wake_word.py +0 -0
  235. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/docker-compose.yml +0 -0
  236. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/memory-proxy.Dockerfile +0 -0
  237. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/rag-proxy.Dockerfile +0 -0
  238. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/transcribe-proxy.Dockerfile +0 -0
  239. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/tts.Dockerfile +0 -0
  240. {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/whisper.Dockerfile +0 -0
  241. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/CNAME +0 -0
  242. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/index.md +0 -0
  243. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/memory.md +0 -0
  244. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/rag.md +0 -0
  245. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/assistant.md +0 -0
  246. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/autocorrect.md +0 -0
  247. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/chat.md +0 -0
  248. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/config.md +0 -0
  249. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/daemon.md +0 -0
  250. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/dev.md +0 -0
  251. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/index.md +0 -0
  252. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-extras.md +0 -0
  253. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-hotkeys.md +0 -0
  254. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-services.md +0 -0
  255. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/memory.md +0 -0
  256. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/rag-proxy.md +0 -0
  257. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/index.md +0 -0
  258. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/transcribe-proxy.md +0 -0
  259. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/tts.md +0 -0
  260. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/whisper.md +0 -0
  261. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/speak.md +0 -0
  262. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/start-services.md +0 -0
  263. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/transcribe-live.md +0 -0
  264. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/transcribe.md +0 -0
  265. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/voice-edit.md +0 -0
  266. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/configuration.md +0 -0
  267. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/getting-started.md +0 -0
  268. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/iOS_Shortcut_Guide.md +0 -0
  269. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/index.md +0 -0
  270. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/docker.md +0 -0
  271. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/index.md +0 -0
  272. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/linux.md +0 -0
  273. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/macos.md +0 -0
  274. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/nixos.md +0 -0
  275. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/windows.md +0 -0
  276. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/logo-clean.svg +0 -0
  277. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  278. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/run_markdown_code_runner.py +0 -0
  279. {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/system-integration.md +0 -0
  280. {agent_cli-0.82.1 → agent_cli-0.82.3}/example.agent-cli-config.toml +0 -0
  281. {agent_cli-0.82.1 → agent_cli-0.82.3}/justfile +0 -0
  282. {agent_cli-0.82.1 → agent_cli-0.82.3}/shell.nix +0 -0
  283. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/__init__.py +0 -0
  284. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/__init__.py +0 -0
  285. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_fix_my_text.py +0 -0
  286. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_interactive.py +0 -0
  287. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_interactive_extra.py +0 -0
  288. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_memory_add.py +0 -0
  289. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_speak.py +0 -0
  290. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_speak_e2e.py +0 -0
  291. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe.py +0 -0
  292. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_agent.py +0 -0
  293. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_e2e.py +0 -0
  294. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_live.py +0 -0
  295. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_recovery.py +0 -0
  296. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_tts_common.py +0 -0
  297. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_tts_common_extra.py +0 -0
  298. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_agent_common.py +0 -0
  299. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_edit.py +0 -0
  300. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_edit_e2e.py +0 -0
  301. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_wake_word_assistant.py +0 -0
  302. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/conftest.py +0 -0
  303. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/__init__.py +0 -0
  304. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_audio_format.py +0 -0
  305. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_chroma.py +0 -0
  306. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_sse.py +0 -0
  307. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_watch.py +0 -0
  308. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/__init__.py +0 -0
  309. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_cli.py +0 -0
  310. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_coding_agents.py +0 -0
  311. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_editors.py +0 -0
  312. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_project.py +0 -0
  313. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_terminals.py +0 -0
  314. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_verification.py +0 -0
  315. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_worktree.py +0 -0
  316. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/install/__init__.py +0 -0
  317. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/install/test_extras.py +0 -0
  318. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/__init__.py +0 -0
  319. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_api_health.py +0 -0
  320. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_api_integration_liveish.py +0 -0
  321. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_client.py +0 -0
  322. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_engine.py +0 -0
  323. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_files.py +0 -0
  324. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_filters.py +0 -0
  325. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_git_integration.py +0 -0
  326. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_indexer.py +0 -0
  327. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_memory_integration.py +0 -0
  328. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_proxy_passthrough.py +0 -0
  329. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_store.py +0 -0
  330. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_utils.py +0 -0
  331. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/__init__.py +0 -0
  332. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/audio.py +0 -0
  333. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/llm.py +0 -0
  334. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/wyoming.py +0 -0
  335. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/__init__.py +0 -0
  336. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_api.py +0 -0
  337. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_engine.py +0 -0
  338. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_history.py +0 -0
  339. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_indexer.py +0 -0
  340. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_indexing.py +0 -0
  341. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_client.py +0 -0
  342. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_integration_liveish.py +0 -0
  343. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  344. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_retriever.py +0 -0
  345. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_store.py +0 -0
  346. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_utils.py +0 -0
  347. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_api.py +0 -0
  348. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_api_integration.py +0 -0
  349. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_asr.py +0 -0
  350. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_asr_recovery.py +0 -0
  351. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_audio_e2e.py +0 -0
  352. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_cli.py +0 -0
  353. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_config.py +0 -0
  354. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_config_cmd.py +0 -0
  355. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_daemon.py +0 -0
  356. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_docs_gen.py +0 -0
  357. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_env_vars.py +0 -0
  358. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_json_output.py +0 -0
  359. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_llm.py +0 -0
  360. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_llm_gemini.py +0 -0
  361. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_memory_tools.py +0 -0
  362. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_mlx_backend.py +0 -0
  363. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_streaming.py +0 -0
  364. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_tts.py +0 -0
  365. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_whisper.py +0 -0
  366. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_services.py +0 -0
  367. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_tools.py +0 -0
  368. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_transformers_backend.py +0 -0
  369. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_tts.py +0 -0
  370. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_utils.py +0 -0
  371. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_wake_word.py +0 -0
  372. {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_wyoming_utils.py +0 -0
  373. {agent_cli-0.82.1 → agent_cli-0.82.3}/zensical.toml +0 -0
@@ -51,10 +51,10 @@ jobs:
51
51
  fetch-depth: 0 # Full history for version detection
52
52
 
53
53
  - name: Set up Docker Buildx
54
- uses: docker/setup-buildx-action@v3
54
+ uses: docker/setup-buildx-action@v4
55
55
 
56
56
  - name: Log in to Container Registry
57
- uses: docker/login-action@v3
57
+ uses: docker/login-action@v4
58
58
  with:
59
59
  registry: ${{ env.REGISTRY }}
60
60
  username: ${{ github.actor }}
@@ -71,7 +71,7 @@ jobs:
71
71
 
72
72
  - name: Extract metadata
73
73
  id: meta
74
- uses: docker/metadata-action@v5
74
+ uses: docker/metadata-action@v6
75
75
  with:
76
76
  images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
77
77
  tags: |
@@ -80,7 +80,7 @@ jobs:
80
80
  type=sha,suffix=-${{ matrix.suffix }}
81
81
 
82
82
  - name: Build and push
83
- uses: docker/build-push-action@v6
83
+ uses: docker/build-push-action@v7
84
84
  with:
85
85
  context: .
86
86
  file: ${{ matrix.dockerfile }}
@@ -116,10 +116,10 @@ jobs:
116
116
  fetch-depth: 0 # Full history for version detection
117
117
 
118
118
  - name: Set up Docker Buildx
119
- uses: docker/setup-buildx-action@v3
119
+ uses: docker/setup-buildx-action@v4
120
120
 
121
121
  - name: Log in to Container Registry
122
- uses: docker/login-action@v3
122
+ uses: docker/login-action@v4
123
123
  with:
124
124
  registry: ${{ env.REGISTRY }}
125
125
  username: ${{ github.actor }}
@@ -136,7 +136,7 @@ jobs:
136
136
 
137
137
  - name: Extract metadata
138
138
  id: meta
139
- uses: docker/metadata-action@v5
139
+ uses: docker/metadata-action@v6
140
140
  with:
141
141
  images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
142
142
  tags: |
@@ -145,7 +145,7 @@ jobs:
145
145
  type=sha
146
146
 
147
147
  - name: Build and push
148
- uses: docker/build-push-action@v6
148
+ uses: docker/build-push-action@v7
149
149
  with:
150
150
  context: .
151
151
  file: ${{ matrix.dockerfile }}
@@ -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.5"
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.3
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
@@ -230,7 +230,7 @@ async def _async_main(
230
230
 
231
231
 
232
232
  @app.command("assistant", rich_help_panel="Voice Commands")
233
- @requires_extras("audio", "llm")
233
+ @requires_extras("audio", "llm", process_name="assistant")
234
234
  def assistant(
235
235
  *,
236
236
  # --- Provider Selection ---
@@ -377,7 +377,7 @@ async def _async_main(
377
377
 
378
378
 
379
379
  @app.command("chat", rich_help_panel="Voice Commands")
380
- @requires_extras("audio", "llm")
380
+ @requires_extras("audio", "llm", process_name="chat")
381
381
  def chat(
382
382
  *,
383
383
  # --- Provider Selection ---
@@ -81,7 +81,7 @@ async def _async_main(
81
81
 
82
82
 
83
83
  @app.command("speak", rich_help_panel="Text Commands")
84
- @requires_extras("audio")
84
+ @requires_extras("audio", process_name="speak")
85
85
  def speak(
86
86
  *,
87
87
  text: str | None = typer.Argument(
@@ -465,7 +465,7 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
465
465
 
466
466
 
467
467
  @app.command("transcribe", rich_help_panel="Voice Commands")
468
- @requires_extras("audio", "llm")
468
+ @requires_extras("audio", "llm", process_name="transcribe")
469
469
  def transcribe( # noqa: PLR0912
470
470
  *,
471
471
  extra_instructions: str | None = typer.Option(
@@ -288,7 +288,7 @@ async def _daemon_loop(cfg: DaemonConfig) -> None: # noqa: PLR0912, PLR0915
288
288
 
289
289
 
290
290
  @app.command("transcribe-live", rich_help_panel="Voice Commands")
291
- @requires_extras("audio", "vad", "llm")
291
+ @requires_extras("audio", "vad", "llm", process_name="transcribe-live")
292
292
  def transcribe_live( # noqa: PLR0912
293
293
  *,
294
294
  # Daemon-specific options
@@ -174,7 +174,7 @@ async def _async_main(
174
174
 
175
175
 
176
176
  @app.command("voice-edit", rich_help_panel="Voice Commands")
177
- @requires_extras("audio", "llm")
177
+ @requires_extras("audio", "llm", process_name="voice-edit")
178
178
  def voice_edit(
179
179
  *,
180
180
  # --- Provider Selection ---
@@ -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(
@@ -311,8 +311,12 @@ def _try_auto_install(missing_display: list[str], extras_to_install: list[str])
311
311
 
312
312
  def _maybe_reexec_after_install() -> None:
313
313
  """Re-execute after auto-install so new packages are visible."""
314
- executable = shutil.which("agent-cli") or sys.executable
315
- _maybe_exec_with_marker([executable, *sys.argv[1:]], "Re-running with installed extras...")
314
+ argv0 = sys.argv[0] if sys.argv else ""
315
+ if argv0:
316
+ cmd = [argv0, *sys.argv[1:]]
317
+ else:
318
+ cmd = [sys.executable, "-m", "agent_cli.cli", *sys.argv[1:]]
319
+ _maybe_exec_with_marker(cmd, "Re-running with installed extras...")
316
320
 
317
321
 
318
322
  # -- Main Orchestration --
@@ -362,7 +366,26 @@ def _check_and_install_extras(extras: tuple[str, ...]) -> list[str]:
362
366
  # -- Decorator --
363
367
 
364
368
 
365
- def requires_extras(*extras: str) -> Callable[[F], F]:
369
+ def _should_skip_extra_check_for_process_control(
370
+ kwargs: dict[str, object],
371
+ process_name: str | None,
372
+ ) -> bool:
373
+ """Skip dependency checks when the command only needs process control."""
374
+ if not process_name:
375
+ return False
376
+
377
+ if bool(kwargs.get("stop")) or bool(kwargs.get("status")):
378
+ return True
379
+
380
+ if not bool(kwargs.get("toggle")):
381
+ return False
382
+
383
+ from agent_cli.core import process # noqa: PLC0415
384
+
385
+ return process.is_process_running(process_name)
386
+
387
+
388
+ def requires_extras(*extras: str, process_name: str | None = None) -> Callable[[F], F]:
366
389
  """Decorator to declare required extras for a command.
367
390
 
368
391
  Auto-installs missing extras by default. Disable via AGENT_CLI_NO_AUTO_INSTALL=1
@@ -374,11 +397,14 @@ def requires_extras(*extras: str) -> Callable[[F], F]:
374
397
 
375
398
  @functools.wraps(func)
376
399
  def wrapper(*args: object, **kwargs: object) -> object:
400
+ if _should_skip_extra_check_for_process_control(kwargs, process_name):
401
+ return func(*args, **kwargs)
377
402
  if _check_and_install_extras(extras):
378
403
  raise typer.Exit(1)
379
404
  return func(*args, **kwargs)
380
405
 
381
406
  wrapper._required_extras = extras # type: ignore[attr-defined]
407
+ wrapper._required_process_name = process_name # type: ignore[attr-defined]
382
408
  return wrapper # type: ignore[return-value]
383
409
 
384
410
  return decorator
@@ -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)
@@ -4,8 +4,11 @@ from __future__ import annotations
4
4
 
5
5
  import platform
6
6
 
7
+ import typer
8
+
7
9
  from agent_cli.cli import app
8
- from agent_cli.core.utils import print_with_style
10
+ from agent_cli.core.deps import _check_extra_installed, install_extras_impl
11
+ from agent_cli.core.utils import print_error_message, print_with_style
9
12
  from agent_cli.install.common import execute_installation_script, get_platform_script
10
13
 
11
14
 
@@ -39,6 +42,19 @@ def install_hotkeys() -> None:
39
42
  **Customizing hotkeys** (macOS): Edit `~/.config/skhd/skhdrc` and restart skhd:
40
43
  `skhd --restart-service`
41
44
  """
45
+ required_extras = ["audio", "llm"]
46
+ missing_extras = [extra for extra in required_extras if not _check_extra_installed(extra)]
47
+ if missing_extras:
48
+ print_with_style(
49
+ f"Installing required extras for hotkeys: {', '.join(missing_extras)}",
50
+ "cyan",
51
+ )
52
+ if not install_extras_impl(missing_extras):
53
+ print_error_message(
54
+ "Failed to install required extras for hotkeys: " + ", ".join(missing_extras),
55
+ )
56
+ raise typer.Exit(1)
57
+
42
58
  script_name = get_platform_script("setup-macos-hotkeys.sh", "setup-linux-hotkeys.sh")
43
59
  system = platform.system().lower()
44
60