agent-cli 0.104.0__tar.gz → 0.105.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/docker.yml +87 -1
  2. {agent_cli-0.104.0 → agent_cli-0.105.1}/PKG-INFO +1 -1
  3. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/cli.py +12 -0
  4. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/base.py +1 -0
  5. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/transformers.py +73 -3
  6. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/model_manager.py +2 -0
  7. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/docker-compose.yml +2 -2
  8. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/server/transcribe-proxy.md +9 -5
  9. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/server/whisper.md +4 -0
  10. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/docker.md +1 -1
  11. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/appcast.xml +35 -31
  12. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_api_integration.py +38 -0
  13. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_server_whisper.py +3 -0
  14. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_transformers_backend.py +169 -2
  15. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  16. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude/skills/agent-cli-dev/examples.md +0 -0
  17. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude-plugin/README.md +0 -0
  18. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude-plugin/marketplace.json +0 -0
  19. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude-plugin/plugin.json +0 -0
  20. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  21. {agent_cli-0.104.0 → agent_cli-0.105.1}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  22. {agent_cli-0.104.0 → agent_cli-0.105.1}/.cursorrules +0 -0
  23. {agent_cli-0.104.0 → agent_cli-0.105.1}/.dockerignore +0 -0
  24. {agent_cli-0.104.0 → agent_cli-0.105.1}/.env.example +0 -0
  25. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/logo.svg +0 -0
  26. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/release-drafter.yml +0 -0
  27. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/renovate.json +0 -0
  28. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/scripts/check_extras_sync.py +0 -0
  29. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/scripts/check_plugin_skill_sync.py +0 -0
  30. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/scripts/normalize_appcast.py +0 -0
  31. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/scripts/sync_extras.py +0 -0
  32. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/scripts/sync_requirements.py +0 -0
  33. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/automerge.yml +0 -0
  34. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/docs.yml +0 -0
  35. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/markdown-code-runner.yml +0 -0
  36. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/pytest.yml +0 -0
  37. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/release-drafter.yml +0 -0
  38. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/release.yml +0 -0
  39. {agent_cli-0.104.0 → agent_cli-0.105.1}/.github/workflows/toc.yaml +0 -0
  40. {agent_cli-0.104.0 → agent_cli-0.105.1}/.gitignore +0 -0
  41. {agent_cli-0.104.0 → agent_cli-0.105.1}/.jscpd.json +0 -0
  42. {agent_cli-0.104.0 → agent_cli-0.105.1}/.pre-commit-config.yaml +0 -0
  43. {agent_cli-0.104.0 → agent_cli-0.105.1}/.prompts/docs-review.md +0 -0
  44. {agent_cli-0.104.0 → agent_cli-0.105.1}/.prompts/pr-review.md +0 -0
  45. {agent_cli-0.104.0 → agent_cli-0.105.1}/CLAUDE.md +0 -0
  46. {agent_cli-0.104.0 → agent_cli-0.105.1}/LICENSE +0 -0
  47. {agent_cli-0.104.0 → agent_cli-0.105.1}/LLAMA_SERVER_USAGE.md +0 -0
  48. {agent_cli-0.104.0 → agent_cli-0.105.1}/README.md +0 -0
  49. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/__init__.py +0 -0
  50. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/__main__.py +0 -0
  51. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_extras.json +0 -0
  52. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_overrides/nemo-whisper.txt +0 -0
  53. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/.gitkeep +0 -0
  54. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/audio.txt +0 -0
  55. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/diarization.txt +0 -0
  56. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/faster-whisper.txt +0 -0
  57. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/kokoro.txt +0 -0
  58. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/llm.txt +0 -0
  59. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/memory.txt +0 -0
  60. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  61. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/nemo-whisper.txt +0 -0
  62. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/piper.txt +0 -0
  63. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/rag.txt +0 -0
  64. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/server.txt +0 -0
  65. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/speed.txt +0 -0
  66. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/vad.txt +0 -0
  67. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/vectordb.txt +0 -0
  68. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  69. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_requirements/wyoming.txt +0 -0
  70. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/_tools.py +0 -0
  71. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/__init__.py +0 -0
  72. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/_voice_agent_common.py +0 -0
  73. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/assistant.py +0 -0
  74. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/autocorrect.py +0 -0
  75. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/chat.py +0 -0
  76. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/diarize_live_session.py +0 -0
  77. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/memory/__init__.py +0 -0
  78. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/memory/add.py +0 -0
  79. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/memory/proxy.py +0 -0
  80. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/rag_proxy.py +0 -0
  81. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/speak.py +0 -0
  82. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/speakers.py +0 -0
  83. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/transcribe.py +0 -0
  84. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/transcribe_live.py +0 -0
  85. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/agents/voice_edit.py +0 -0
  86. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/api.py +0 -0
  87. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/cli.py +0 -0
  88. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/config.py +0 -0
  89. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/config_cmd.py +0 -0
  90. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/constants.py +0 -0
  91. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/__init__.py +0 -0
  92. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/alignment.py +0 -0
  93. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/audio.py +0 -0
  94. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/audio_format.py +0 -0
  95. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/chroma.py +0 -0
  96. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/deps.py +0 -0
  97. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/diarization.py +0 -0
  98. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/openai_proxy.py +0 -0
  99. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/process.py +0 -0
  100. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/reranker.py +0 -0
  101. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/speaker_identity.py +0 -0
  102. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/sse.py +0 -0
  103. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/transcription_logger.py +0 -0
  104. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/utils.py +0 -0
  105. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/vad.py +0 -0
  106. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/core/watch.py +0 -0
  107. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/daemon/__init__.py +0 -0
  108. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/daemon/cli.py +0 -0
  109. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/__init__.py +0 -0
  110. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/_branch_name.py +0 -0
  111. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/_config.py +0 -0
  112. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/_output.py +0 -0
  113. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/cleanup.py +0 -0
  114. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/cli.py +0 -0
  115. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/__init__.py +0 -0
  116. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/aider.py +0 -0
  117. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/base.py +0 -0
  118. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/claude.py +0 -0
  119. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/codex.py +0 -0
  120. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  121. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/copilot.py +0 -0
  122. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  123. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/gemini.py +0 -0
  124. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/opencode.py +0 -0
  125. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/coding_agents/registry.py +0 -0
  126. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/__init__.py +0 -0
  127. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/base.py +0 -0
  128. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/cursor.py +0 -0
  129. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/emacs.py +0 -0
  130. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/jetbrains.py +0 -0
  131. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/nano.py +0 -0
  132. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/neovim.py +0 -0
  133. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/registry.py +0 -0
  134. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/sublime.py +0 -0
  135. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/vim.py +0 -0
  136. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/vscode.py +0 -0
  137. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/editors/zed.py +0 -0
  138. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/hooks.py +0 -0
  139. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/launch.py +0 -0
  140. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/project.py +0 -0
  141. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/registry.py +0 -0
  142. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/skill/SKILL.md +0 -0
  143. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/skill/examples.md +0 -0
  144. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/__init__.py +0 -0
  145. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  146. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/base.py +0 -0
  147. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/cmux.py +0 -0
  148. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/gnome.py +0 -0
  149. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/iterm2.py +0 -0
  150. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/kitty.py +0 -0
  151. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/registry.py +0 -0
  152. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/tmux.py +0 -0
  153. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/warp.py +0 -0
  154. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/terminals/zellij.py +0 -0
  155. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/dev/worktree.py +0 -0
  156. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/docs_gen.py +0 -0
  157. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/example-config.toml +0 -0
  158. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/__init__.py +0 -0
  159. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/common.py +0 -0
  160. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/extras.py +0 -0
  161. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/hotkeys.py +0 -0
  162. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/launchd.py +0 -0
  163. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/service_config.py +0 -0
  164. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/services.py +0 -0
  165. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/install/systemd.py +0 -0
  166. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/__init__.py +0 -0
  167. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_files.py +0 -0
  168. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_filters.py +0 -0
  169. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_git.py +0 -0
  170. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_indexer.py +0 -0
  171. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_ingest.py +0 -0
  172. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_persistence.py +0 -0
  173. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_prompt.py +0 -0
  174. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_retrieval.py +0 -0
  175. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_store.py +0 -0
  176. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_streaming.py +0 -0
  177. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/_tasks.py +0 -0
  178. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/api.py +0 -0
  179. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/client.py +0 -0
  180. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/engine.py +0 -0
  181. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/entities.py +0 -0
  182. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/memory/models.py +0 -0
  183. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/opts.py +0 -0
  184. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/py.typed +0 -0
  185. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/__init__.py +0 -0
  186. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_indexer.py +0 -0
  187. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_indexing.py +0 -0
  188. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_prompt.py +0 -0
  189. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_retriever.py +0 -0
  190. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_store.py +0 -0
  191. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/_utils.py +0 -0
  192. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/api.py +0 -0
  193. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/client.py +0 -0
  194. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/engine.py +0 -0
  195. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/rag/models.py +0 -0
  196. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  197. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/__init__.py +0 -0
  198. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  199. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  200. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  201. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  202. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  203. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  204. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  205. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  206. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  207. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  208. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  209. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  210. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  211. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  212. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/run-openwakeword.sh +0 -0
  213. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  214. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/setup-linux.sh +0 -0
  215. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  216. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/setup-macos.sh +0 -0
  217. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/setup-windows.ps1 +0 -0
  218. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  219. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/scripts/start-all-services.sh +0 -0
  220. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/__init__.py +0 -0
  221. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/common.py +0 -0
  222. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/model_manager.py +0 -0
  223. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/model_registry.py +0 -0
  224. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/proxy/__init__.py +0 -0
  225. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/proxy/api.py +0 -0
  226. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/proxy/diarization.py +0 -0
  227. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/streaming.py +0 -0
  228. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/__init__.py +0 -0
  229. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/api.py +0 -0
  230. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/backends/__init__.py +0 -0
  231. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/backends/base.py +0 -0
  232. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/backends/kokoro.py +0 -0
  233. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/backends/piper.py +0 -0
  234. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/model_manager.py +0 -0
  235. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/model_registry.py +0 -0
  236. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/tts/wyoming_handler.py +0 -0
  237. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/__init__.py +0 -0
  238. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/api.py +0 -0
  239. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/__init__.py +0 -0
  240. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  241. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/mlx.py +0 -0
  242. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/backends/nemo.py +0 -0
  243. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/languages.py +0 -0
  244. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/model_registry.py +0 -0
  245. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  246. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/__init__.py +0 -0
  247. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/_wyoming_utils.py +0 -0
  248. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/asr.py +0 -0
  249. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/llm.py +0 -0
  250. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/tts.py +0 -0
  251. {agent_cli-0.104.0 → agent_cli-0.105.1}/agent_cli/services/wake_word.py +0 -0
  252. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/diarization.Dockerfile +0 -0
  253. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/memory-proxy.Dockerfile +0 -0
  254. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/rag-proxy.Dockerfile +0 -0
  255. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/transcribe-proxy.Dockerfile +0 -0
  256. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/tts.Dockerfile +0 -0
  257. {agent_cli-0.104.0 → agent_cli-0.105.1}/docker/whisper.Dockerfile +0 -0
  258. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/CNAME +0 -0
  259. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/architecture/index.md +0 -0
  260. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/architecture/memory.md +0 -0
  261. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/architecture/rag.md +0 -0
  262. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/assistant.md +0 -0
  263. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/autocorrect.md +0 -0
  264. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/chat.md +0 -0
  265. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/config.md +0 -0
  266. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/daemon.md +0 -0
  267. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/dev.md +0 -0
  268. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/diarize-live-session.md +0 -0
  269. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/index.md +0 -0
  270. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/install-extras.md +0 -0
  271. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/install-hotkeys.md +0 -0
  272. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/install-services.md +0 -0
  273. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/memory.md +0 -0
  274. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/rag-proxy.md +0 -0
  275. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/server/index.md +0 -0
  276. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/server/tts.md +0 -0
  277. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/speak.md +0 -0
  278. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/speakers.md +0 -0
  279. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/start-services.md +0 -0
  280. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/transcribe-live.md +0 -0
  281. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/transcribe.md +0 -0
  282. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/commands/voice-edit.md +0 -0
  283. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/configuration.md +0 -0
  284. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/getting-started.md +0 -0
  285. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/iOS_Shortcut_Guide.md +0 -0
  286. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/index.md +0 -0
  287. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/index.md +0 -0
  288. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/linux.md +0 -0
  289. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/macos-app.md +0 -0
  290. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/macos.md +0 -0
  291. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/nixos.md +0 -0
  292. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/installation/windows.md +0 -0
  293. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/logo-avatar.svg +0 -0
  294. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/logo-clean.svg +0 -0
  295. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  296. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/run_markdown_code_runner.py +0 -0
  297. {agent_cli-0.104.0 → agent_cli-0.105.1}/docs/system-integration.md +0 -0
  298. {agent_cli-0.104.0 → agent_cli-0.105.1}/example.agent-cli-config.toml +0 -0
  299. {agent_cli-0.104.0 → agent_cli-0.105.1}/justfile +0 -0
  300. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Package.resolved +0 -0
  301. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Package.swift +0 -0
  302. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/README.md +0 -0
  303. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
  304. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Resources/Info.plist +0 -0
  305. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
  306. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
  307. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
  308. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
  309. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +0 -0
  310. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
  311. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
  312. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
  313. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
  314. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
  315. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
  316. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
  317. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/LiveTranscriptionPreview.swift +0 -0
  318. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
  319. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
  320. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
  321. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
  322. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
  323. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
  324. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
  325. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
  326. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
  327. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
  328. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
  329. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
  330. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
  331. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
  332. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
  333. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +0 -0
  334. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +0 -0
  335. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/LivePreviewSwiftTestingTests.swift +0 -0
  336. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/LiveTranscriptionPreviewTests.swift +0 -0
  337. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
  338. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
  339. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
  340. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
  341. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
  342. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/build-macos-app.sh +0 -0
  343. {agent_cli-0.104.0 → agent_cli-0.105.1}/macos/test-macos-app-e2e.sh +0 -0
  344. {agent_cli-0.104.0 → agent_cli-0.105.1}/pyproject.toml +0 -0
  345. {agent_cli-0.104.0 → agent_cli-0.105.1}/reddit.md +0 -0
  346. {agent_cli-0.104.0 → agent_cli-0.105.1}/shell.nix +0 -0
  347. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/__init__.py +0 -0
  348. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/__init__.py +0 -0
  349. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_fix_my_text.py +0 -0
  350. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_interactive.py +0 -0
  351. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_interactive_extra.py +0 -0
  352. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_memory_add.py +0 -0
  353. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_speak.py +0 -0
  354. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_speak_e2e.py +0 -0
  355. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_speakers.py +0 -0
  356. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_transcribe.py +0 -0
  357. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_transcribe_agent.py +0 -0
  358. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_transcribe_e2e.py +0 -0
  359. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_transcribe_live.py +0 -0
  360. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_transcribe_recovery.py +0 -0
  361. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_tts_common.py +0 -0
  362. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_tts_common_extra.py +0 -0
  363. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_voice_agent_common.py +0 -0
  364. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_voice_edit.py +0 -0
  365. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_voice_edit_e2e.py +0 -0
  366. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/agents/test_wake_word_assistant.py +0 -0
  367. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/conftest.py +0 -0
  368. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/__init__.py +0 -0
  369. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_audio.py +0 -0
  370. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_audio_format.py +0 -0
  371. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_audio_levels.py +0 -0
  372. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_chroma.py +0 -0
  373. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_sse.py +0 -0
  374. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_vad.py +0 -0
  375. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/core/test_watch.py +0 -0
  376. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/__init__.py +0 -0
  377. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_cleanup.py +0 -0
  378. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_cli.py +0 -0
  379. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_coding_agents.py +0 -0
  380. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_editors.py +0 -0
  381. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_hooks.py +0 -0
  382. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_launch.py +0 -0
  383. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_project.py +0 -0
  384. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_terminals.py +0 -0
  385. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_verification.py +0 -0
  386. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/dev/test_worktree.py +0 -0
  387. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/install/__init__.py +0 -0
  388. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/install/test_extras.py +0 -0
  389. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/install/test_launchd.py +0 -0
  390. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/__init__.py +0 -0
  391. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_api_health.py +0 -0
  392. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_api_integration_liveish.py +0 -0
  393. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_client.py +0 -0
  394. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_engine.py +0 -0
  395. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_files.py +0 -0
  396. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_filters.py +0 -0
  397. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_git_integration.py +0 -0
  398. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_indexer.py +0 -0
  399. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_memory_integration.py +0 -0
  400. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_proxy_passthrough.py +0 -0
  401. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_store.py +0 -0
  402. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/memory/test_utils.py +0 -0
  403. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/mocks/__init__.py +0 -0
  404. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/mocks/audio.py +0 -0
  405. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/mocks/llm.py +0 -0
  406. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/mocks/wyoming.py +0 -0
  407. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/__init__.py +0 -0
  408. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_api.py +0 -0
  409. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_engine.py +0 -0
  410. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_history.py +0 -0
  411. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_indexer.py +0 -0
  412. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_indexing.py +0 -0
  413. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_rag_client.py +0 -0
  414. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_rag_integration_liveish.py +0 -0
  415. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  416. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_retriever.py +0 -0
  417. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_store.py +0 -0
  418. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/rag/test_utils.py +0 -0
  419. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_alignment.py +0 -0
  420. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_api.py +0 -0
  421. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_asr.py +0 -0
  422. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_asr_recovery.py +0 -0
  423. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_audio_e2e.py +0 -0
  424. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_cli.py +0 -0
  425. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_config.py +0 -0
  426. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_config_cmd.py +0 -0
  427. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_daemon.py +0 -0
  428. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_diarization.py +0 -0
  429. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_diarize_live_session.py +0 -0
  430. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_docs_gen.py +0 -0
  431. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_env_vars.py +0 -0
  432. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_faster_whisper_backend.py +0 -0
  433. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_json_output.py +0 -0
  434. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_llm.py +0 -0
  435. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_llm_gemini.py +0 -0
  436. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_macos_app.py +0 -0
  437. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_memory_tools.py +0 -0
  438. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_mlx_backend.py +0 -0
  439. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_nemo_backend.py +0 -0
  440. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_normalize_appcast.py +0 -0
  441. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_process_manager.py +0 -0
  442. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_proxy_diarization.py +0 -0
  443. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_requires_extras.py +0 -0
  444. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_server_streaming.py +0 -0
  445. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_server_tts.py +0 -0
  446. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_server_tts_wyoming.py +0 -0
  447. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_server_whisper_wyoming.py +0 -0
  448. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_services.py +0 -0
  449. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_speaker_identity.py +0 -0
  450. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_tools.py +0 -0
  451. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_tts.py +0 -0
  452. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_utils.py +0 -0
  453. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_wake_word.py +0 -0
  454. {agent_cli-0.104.0 → agent_cli-0.105.1}/tests/test_wyoming_utils.py +0 -0
  455. {agent_cli-0.104.0 → agent_cli-0.105.1}/uv.lock +0 -0
  456. {agent_cli-0.104.0 → agent_cli-0.105.1}/zensical.toml +0 -0
@@ -90,7 +90,7 @@ jobs:
90
90
  cache-from: type=gha
91
91
  cache-to: type=gha,mode=max
92
92
 
93
- # Single-target images (transcribe-proxy)
93
+ # Single-target images (proxies and diarization)
94
94
  build-single-target:
95
95
  runs-on: ubuntu-latest
96
96
  permissions:
@@ -106,8 +106,16 @@ jobs:
106
106
  dockerfile: docker/rag-proxy.Dockerfile
107
107
  - image: memory-proxy
108
108
  dockerfile: docker/memory-proxy.Dockerfile
109
+ - image: diarization
110
+ dockerfile: docker/diarization.Dockerfile
109
111
 
110
112
  steps:
113
+ - name: Free disk space
114
+ run: |
115
+ sudo rm -rf /usr/share/dotnet
116
+ sudo rm -rf /usr/local/lib/android
117
+ df -h
118
+
111
119
  - name: Checkout repository
112
120
  uses: actions/checkout@v7.0.1
113
121
  with:
@@ -153,3 +161,81 @@ jobs:
153
161
  labels: ${{ steps.meta.outputs.labels }}
154
162
  cache-from: type=gha
155
163
  cache-to: type=gha,mode=max
164
+
165
+ smoke-diarization:
166
+ needs: build-single-target
167
+ runs-on: ubuntu-latest
168
+ timeout-minutes: 15
169
+ permissions:
170
+ contents: read
171
+ packages: read
172
+
173
+ steps:
174
+ - name: Free disk space
175
+ run: |
176
+ sudo rm -rf /usr/share/dotnet
177
+ sudo rm -rf /usr/local/lib/android
178
+ df -h
179
+
180
+ - name: Log in to Container Registry
181
+ uses: docker/login-action@v4.5.1
182
+ with:
183
+ registry: ${{ env.REGISTRY }}
184
+ username: ${{ github.actor }}
185
+ password: ${{ secrets.GITHUB_TOKEN }}
186
+
187
+ - name: Resolve image reference
188
+ id: image
189
+ run: |
190
+ tag="sha-${GITHUB_SHA::7}"
191
+ echo "ref=${REGISTRY}/${GITHUB_REPOSITORY}-diarization:${tag}" >> "$GITHUB_OUTPUT"
192
+
193
+ - name: Pull published image
194
+ run: docker pull "${{ steps.image.outputs.ref }}"
195
+
196
+ - name: Verify package version
197
+ env:
198
+ IMAGE_REF: ${{ steps.image.outputs.ref }}
199
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
200
+ run: |
201
+ actual_version=$(
202
+ docker run --rm --entrypoint /app/.venv/bin/python "$IMAGE_REF" \
203
+ -c 'import importlib.metadata; print(importlib.metadata.version("agent-cli"))'
204
+ )
205
+ if [[ "$GITHUB_EVENT_NAME" == "release" ]]; then
206
+ expected_version="${RELEASE_TAG#v}"
207
+ if [[ "${actual_version%%+*}" != "$expected_version" ]]; then
208
+ echo "Expected agent-cli $expected_version, got $actual_version" >&2
209
+ exit 1
210
+ fi
211
+ fi
212
+ echo "Verified agent-cli $actual_version"
213
+
214
+ - name: Verify health and API routes
215
+ env:
216
+ IMAGE_REF: ${{ steps.image.outputs.ref }}
217
+ run: |
218
+ container_id=$(docker run --detach --publish 61337:61337 "$IMAGE_REF")
219
+ trap 'docker rm --force "$container_id" >/dev/null 2>&1 || true' EXIT
220
+
221
+ ready=false
222
+ for _ in {1..30}; do
223
+ if curl --fail --silent --connect-timeout 1 --max-time 2 \
224
+ http://localhost:61337/health | jq --exit-status '.status == "healthy"' >/dev/null; then
225
+ ready=true
226
+ break
227
+ fi
228
+ sleep 2
229
+ done
230
+ if [[ "$ready" != "true" ]]; then
231
+ docker logs "$container_id"
232
+ exit 1
233
+ fi
234
+
235
+ if ! curl --fail --silent --show-error --connect-timeout 1 --max-time 2 \
236
+ http://localhost:61337/openapi.json | jq --exit-status \
237
+ '.paths["/health"].get and .paths["/transcribe"].post and .paths["/diarize"].post' \
238
+ >/dev/null; then
239
+ docker logs "$container_id"
240
+ exit 1
241
+ fi
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-cli
3
- Version: 0.104.0
3
+ Version: 0.105.1
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>
@@ -403,6 +403,17 @@ def whisper_cmd( # noqa: C901, PLR0912, PLR0915
403
403
  ),
404
404
  ),
405
405
  ] = False,
406
+ max_new_tokens: Annotated[
407
+ int,
408
+ typer.Option(
409
+ "--max-new-tokens",
410
+ min=1,
411
+ help=(
412
+ "Maximum output tokens for autoregressive transformers ASR models. "
413
+ "Increase for unusually long audio"
414
+ ),
415
+ ),
416
+ ] = 4096,
406
417
  ttl: Annotated[
407
418
  int,
408
419
  typer.Option(
@@ -602,6 +613,7 @@ def whisper_cmd( # noqa: C901, PLR0912, PLR0915
602
613
  compute_type=compute_type,
603
614
  default_language=default_language,
604
615
  trust_remote_code=trust_remote_code,
616
+ max_new_tokens=max_new_tokens,
605
617
  ttl_seconds=ttl,
606
618
  cache_dir=cache_dir,
607
619
  backend_type=resolved_backend, # type: ignore[arg-type]
@@ -32,6 +32,7 @@ class BackendConfig:
32
32
  cache_dir: Path | None = None
33
33
  default_language: str | None = None
34
34
  trust_remote_code: bool = False
35
+ max_new_tokens: int = 4096
35
36
 
36
37
 
37
38
  class InvalidAudioError(ValueError):
@@ -6,6 +6,7 @@ import asyncio
6
6
  import logging
7
7
  import tempfile
8
8
  import time
9
+ import traceback
9
10
  import wave
10
11
  from concurrent.futures import ProcessPoolExecutor
11
12
  from dataclasses import dataclass
@@ -47,6 +48,10 @@ _MODEL_MAP: dict[str, str] = {
47
48
  _REMOTE_CODE_MODEL_PREFIXES = ("CohereLabs/cohere-transcribe",)
48
49
 
49
50
 
51
+ class TranscriptionTruncatedError(RuntimeError):
52
+ """Raised when an autoregressive ASR model exhausts its output budget."""
53
+
54
+
50
55
  def _resolve_model_name(model_name: str) -> str:
51
56
  """Resolve a model name to a HuggingFace repo."""
52
57
  if "/" in model_name:
@@ -220,6 +225,22 @@ def _move_inputs_to_device(inputs: Any) -> Any:
220
225
  return {k: v.to(_state.device) if hasattr(v, "to") else v for k, v in inputs.items()}
221
226
 
222
227
 
228
+ def _qwen_generation_was_truncated(generated_ids: Any, max_new_tokens: int) -> bool:
229
+ """Return whether Qwen exhausted its token budget without emitting EOS."""
230
+ if generated_ids.shape[1] < max_new_tokens:
231
+ return False
232
+
233
+ generation_config = getattr(_state.model, "generation_config", None)
234
+ eos_token_ids = getattr(generation_config, "eos_token_id", None)
235
+ if eos_token_ids is None:
236
+ return True
237
+ if isinstance(eos_token_ids, int):
238
+ eos_token_ids = [eos_token_ids]
239
+
240
+ last_token_id = generated_ids[:, -1:].tolist()[0][0]
241
+ return last_token_id not in eos_token_ids
242
+
243
+
223
244
  def _transcribe_cohere_asr(
224
245
  *,
225
246
  audio_array: Any,
@@ -276,6 +297,7 @@ def _transcribe_qwen3_asr(
276
297
  task: str,
277
298
  initial_prompt: str | None,
278
299
  duration: float,
300
+ max_new_tokens: int,
279
301
  ) -> dict[str, Any]:
280
302
  """Transcribe with Qwen3-ASR's native transformers interface."""
281
303
  if task != "transcribe":
@@ -294,11 +316,19 @@ def _transcribe_qwen3_asr(
294
316
  with torch.inference_mode():
295
317
  output_ids = _state.model.generate(
296
318
  **inputs,
297
- max_new_tokens=256,
319
+ max_new_tokens=max_new_tokens,
298
320
  do_sample=False,
299
321
  )
300
322
 
301
323
  generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
324
+ if _qwen_generation_was_truncated(generated_ids, max_new_tokens):
325
+ msg = (
326
+ "Qwen3-ASR transcription reached "
327
+ f"max_new_tokens={max_new_tokens} before completion. "
328
+ "Restart the server with a higher --max-new-tokens value "
329
+ "or split the audio into shorter chunks."
330
+ )
331
+ raise TranscriptionTruncatedError(msg)
302
332
  parsed = _state.processor.decode(generated_ids, return_format="parsed")[0]
303
333
  language = parsed["language"] or effective_language or "unknown"
304
334
 
@@ -399,8 +429,8 @@ def _transcribe_with_generate(
399
429
  )
400
430
 
401
431
 
402
- def _transcribe_in_subprocess(kwargs: dict[str, Any]) -> dict[str, Any]:
403
- """Run transcription in subprocess. Reuses model from _state."""
432
+ def _transcribe_with_loaded_model(kwargs: dict[str, Any]) -> dict[str, Any]:
433
+ """Dispatch transcription using the model retained in this worker."""
404
434
  if _state.model is None or _state.processor is None:
405
435
  msg = "Model not loaded in subprocess. Call _load_model_in_subprocess first."
406
436
  raise RuntimeError(msg)
@@ -416,6 +446,7 @@ def _transcribe_in_subprocess(kwargs: dict[str, Any]) -> dict[str, Any]:
416
446
  task=task,
417
447
  initial_prompt=kwargs.get("initial_prompt"),
418
448
  duration=_read_wav_duration(wav_path),
449
+ max_new_tokens=kwargs.get("max_new_tokens", 4096),
419
450
  )
420
451
 
421
452
  audio_array, sample_rate, duration = _read_wav_audio(wav_path)
@@ -449,6 +480,44 @@ def _transcribe_in_subprocess(kwargs: dict[str, Any]) -> dict[str, Any]:
449
480
  )
450
481
 
451
482
 
483
+ def _clear_exception_frames(exc: BaseException) -> None:
484
+ """Release helper locals retained by an exception and its chained failures."""
485
+ pending = [exc]
486
+ seen: set[int] = set()
487
+ while pending:
488
+ current = pending.pop()
489
+ if id(current) in seen:
490
+ continue
491
+ seen.add(id(current))
492
+ traceback.clear_frames(current.__traceback__)
493
+ pending.extend(
494
+ error for error in (current.__cause__, current.__context__) if error is not None
495
+ )
496
+ if isinstance(current, BaseExceptionGroup):
497
+ pending.extend(current.exceptions)
498
+
499
+
500
+ def _transcribe_in_subprocess(kwargs: dict[str, Any]) -> dict[str, Any]:
501
+ """Transcribe and return unused CUDA memory while keeping model weights loaded."""
502
+ if not _state.device or not _state.device.startswith("cuda"):
503
+ return _transcribe_with_loaded_model(kwargs)
504
+
505
+ import torch # noqa: PLC0415
506
+
507
+ try:
508
+ return _transcribe_with_loaded_model(kwargs)
509
+ except BaseException as exc:
510
+ # Failed helper frames otherwise keep temporary tensors live until the
511
+ # executor serializes the exception, which happens after our finally.
512
+ # Clear locals without losing the traceback's function names and lines.
513
+ _clear_exception_frames(exc)
514
+ raise
515
+ finally:
516
+ # Helper frames have returned, so their temporary tensors are now free.
517
+ # Only unused allocator blocks are released; model weights stay resident.
518
+ torch.cuda.empty_cache()
519
+
520
+
452
521
  class TransformersWhisperBackend:
453
522
  """ASR backend using HuggingFace transformers.
454
523
 
@@ -548,6 +617,7 @@ class TransformersWhisperBackend:
548
617
  "default_language": self._config.default_language,
549
618
  "task": task,
550
619
  "initial_prompt": initial_prompt,
620
+ "max_new_tokens": self._config.max_new_tokens,
551
621
  }
552
622
 
553
623
  try:
@@ -30,6 +30,7 @@ class WhisperModelConfig(ModelConfig):
30
30
  backend_type: BackendType = "auto"
31
31
  default_language: str | None = None
32
32
  trust_remote_code: bool = False
33
+ max_new_tokens: int = 4096
33
34
 
34
35
 
35
36
  class WhisperModelManager:
@@ -50,6 +51,7 @@ class WhisperModelManager:
50
51
  cache_dir=config.cache_dir,
51
52
  default_language=config.default_language,
52
53
  trust_remote_code=config.trust_remote_code,
54
+ max_new_tokens=config.max_new_tokens,
53
55
  ),
54
56
  backend_type=config.backend_type,
55
57
  )
@@ -240,10 +240,10 @@ services:
240
240
  restart: unless-stopped
241
241
 
242
242
  # Optional transcription proxy with local diarization. Start explicitly with:
243
- # docker compose -f docker/docker-compose.yml up --build diarization
243
+ # docker compose -f docker/docker-compose.yml up diarization
244
244
  # Shares port 61337 with transcribe-proxy; run one of them at a time.
245
245
  diarization:
246
- image: agent-cli-diarization
246
+ image: ghcr.io/basnijholt/agent-cli-diarization:latest
247
247
  build:
248
248
  context: ..
249
249
  dockerfile: docker/diarization.Dockerfile
@@ -211,15 +211,13 @@ docker compose -f docker/docker-compose.yml --profile cpu up transcribe-proxy
211
211
 
212
212
  ### Docker with diarization
213
213
 
214
- Build the image that includes pyannote, PyTorch, and FFmpeg:
214
+ Run the published image, which includes pyannote, PyTorch, and FFmpeg:
215
215
 
216
216
  ```bash
217
- docker build -f docker/diarization.Dockerfile -t agent-cli-diarization .
218
-
219
217
  docker run --rm -p 61337:61337 \
220
218
  -e HF_TOKEN \
221
219
  -v agent-cli-diarization-cache:/home/transcribe/.cache \
222
- agent-cli-diarization
220
+ ghcr.io/basnijholt/agent-cli-diarization:latest
223
221
  ```
224
222
 
225
223
  This runs `/diarize` on CPU. For NVIDIA GPU inference, add `--gpus all -e DIARIZATION_DEVICE=cuda` to `docker run`. For `/transcribe`, also provide your ASR environment variables, for example `-e ASR_PROVIDER=openai -e ASR_OPENAI_BASE_URL=http://your-whisper-host:10301/v1 -e OPENAI_API_KEY=dummy`.
@@ -228,11 +226,17 @@ The optional Compose service can run beside the existing Whisper server:
228
226
 
229
227
  ```bash
230
228
  # HF_TOKEN must be exported in the shell or set in docker/.env.
231
- docker compose -f docker/docker-compose.yml --profile cpu up --build whisper-cpu diarization
229
+ docker compose -f docker/docker-compose.yml --profile cpu up whisper-cpu diarization
232
230
  ```
233
231
 
234
232
  Use `diarization` in place of `transcribe-proxy`, since both default to port 61337. Set `DIARIZATION_PORT` to use a different host port. The model cache persists in `agent-cli-diarization-cache`. GPU instructions are included beside the service in the Compose file.
235
233
 
234
+ To build from source instead, add `--build` to the Compose command or run:
235
+
236
+ ```bash
237
+ docker build -f docker/diarization.Dockerfile -t agent-cli-diarization .
238
+ ```
239
+
236
240
  ### Environment Variables
237
241
 
238
242
  Configure the proxy using environment variables (priority: env var > config file > default):
@@ -55,6 +55,7 @@ Run a local ASR server with automatic backend selection based on your platform:
55
55
  - **OpenAI-compatible API** at `/v1/audio/transcriptions` - drop-in replacement for OpenAI's Whisper API
56
56
  - **Wyoming protocol** for [Home Assistant](https://www.home-assistant.io/) voice integration (Wyoming is the standard protocol for local voice services)
57
57
  - **TTL-based memory management** - models unload after idle period, freeing RAM/VRAM
58
+ - **CUDA cache cleanup** - the transformers backend releases unused GPU cache after each transcription while keeping model weights loaded
58
59
  - **Multiple models** - run different model sizes with independent TTLs
59
60
  - **Background preloading** - downloads start at startup without blocking; use `--preload` to wait
60
61
  - **Multi-platform support** - automatically uses the optimal backend for your hardware (`auto` switches to `nemo` for Parakeet models)
@@ -130,6 +131,7 @@ agent-cli server whisper \
130
131
  | `--cache-dir` | - | Custom directory for downloaded models (default: HuggingFace cache) |
131
132
  | `--default-language` | - | Fallback language code for requests that omit `language`. Required for models that do not support language auto-detection (for example Cohere Transcribe). |
132
133
  | `--trust-remote-code` | `false` | Allow Hugging Face model repositories to execute custom Python code. Known supported remote-code ASR models are trusted automatically. |
134
+ | `--max-new-tokens` | `4096` | Maximum output tokens for autoregressive transformers ASR models. Increase for unusually long audio |
133
135
  | `--ttl` | `300` | Seconds of inactivity before unloading model from memory. Set to 0 to keep loaded indefinitely |
134
136
  | `--preload` | `false` | Load model(s) immediately at startup instead of on first request. Useful for reducing first-request latency |
135
137
  | `--host` | `0.0.0.0` | Network interface to bind. Use `0.0.0.0` for all interfaces |
@@ -311,6 +313,8 @@ agent-cli server whisper \
311
313
 
312
314
  Qwen3-ASR supports transcription, automatic language detection, and context or hotwords through the OpenAI-compatible `prompt` field. Translation and timestamped subtitle output are not currently supported.
313
315
 
316
+ The default output budget is 4096 tokens, which accommodates long recordings. For unusually long or dense speech, increase it with `--max-new-tokens`. If Qwen3-ASR exhausts the configured budget, the request fails with a clear error instead of returning a silently truncated transcript.
317
+
314
318
  To install it as the standard `whisper` background daemon:
315
319
 
316
320
  ```bash
@@ -59,7 +59,7 @@ The Docker setup provides:
59
59
  | ----------------------- | --------------------------------- | ----------- | ------------------------------ |
60
60
  | **whisper** | agent-cli-whisper (custom) | 10300/10301 | Speech-to-text (Faster Whisper)|
61
61
  | **tts** | agent-cli-tts (custom) | 10200/10201 | Text-to-speech (Kokoro/Piper) |
62
- | **diarization** | agent-cli-diarization (local build) | 61337 | Speaker timing and labeled transcripts (optional) |
62
+ | **diarization** | agent-cli-diarization | 61337 | Speaker timing and labeled transcripts (optional) |
63
63
  | **transcribe-proxy** | agent-cli-transcribe-proxy | 61337 | ASR proxy for iOS/external apps|
64
64
  | **rag-proxy** | agent-cli-rag-proxy | 8000 | Document-aware chat (RAG) |
65
65
  | **memory-proxy** | agent-cli-memory-proxy | 8100 | Long-term memory chat |
@@ -4,6 +4,41 @@
4
4
  <title>Agent CLI Updates</title>
5
5
  <link>https://github.com/basnijholt/agent-cli</link>
6
6
  <description>Signed Agent CLI macOS app updates.</description>
7
+ <item>
8
+ <title>0.105.0</title>
9
+ <pubDate>Tue, 08 Sep 2026 10:29:52 +0000</pubDate>
10
+ <link>https://github.com/basnijholt/agent-cli</link>
11
+ <sparkle:version>204</sparkle:version>
12
+ <sparkle:shortVersionString>0.105.0</sparkle:shortVersionString>
13
+ <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
14
+ <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
15
+ <description sparkle:format="markdown"><![CDATA[## What’s Changed
16
+
17
+ * Prevent Qwen long-audio truncation (#641) @basnijholt
18
+ * Publish diarization Docker image (#640) @basnijholt
19
+
20
+ ]]></description>
21
+ <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.105.0/AgentCLI.zip" length="18454913" type="application/octet-stream" sparkle:edSignature="Z3253GuNAV6GC2V4Qib0Bm7m8bSdlWHPiXeHIZNa06qAJaY+qRXzrSPRyT8iZW5GnkZOJHciIbqvkkoJ9/DoCw=="/>
22
+ </item>
23
+ <item>
24
+ <title>0.104.0</title>
25
+ <pubDate>Mon, 07 Sep 2026 21:38:19 +0000</pubDate>
26
+ <link>https://github.com/basnijholt/agent-cli</link>
27
+ <sparkle:version>203</sparkle:version>
28
+ <sparkle:shortVersionString>0.104.0</sparkle:shortVersionString>
29
+ <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
30
+ <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
31
+ <description sparkle:format="markdown"><![CDATA[## What’s Changed
32
+
33
+ * Add speaker diarization API and Docker image (#639) @basnijholt
34
+ * Fix Docker image publishing and runtime extras (#638) @basnijholt
35
+ * ⬆️ Update actions/deploy-pages action to v5.0.1 (#637) [@renovate[bot]](https://github.com/apps/renovate)
36
+ * ⬆️ Update docker/setup-buildx-action action to v4.3.0 (#635) [@renovate[bot]](https://github.com/apps/renovate)
37
+
38
+
39
+ ]]></description>
40
+ <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.104.0/AgentCLI.zip" length="18454336" type="application/octet-stream" sparkle:edSignature="p7BVeR6YS/LBGO61o0xR8GE9beHf+4uaz0c28HrHX4oyWjVZSBgwI6jIjR2Mn23HNLS65CfECbp2NSJoIc+ABw=="/>
41
+ </item>
7
42
  <item>
8
43
  <title>0.103.0</title>
9
44
  <pubDate>Tue, 01 Sep 2026 19:34:50 +0000</pubDate>
@@ -174,36 +209,5 @@
174
209
  ]]></description>
175
210
  <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.100.0/AgentCLI.zip" length="22908645" type="application/octet-stream" sparkle:edSignature="2xn/3yQOqyqwCQ5871EAgFra/D/z6UrDl1B+ZxUh7PnOxJpL4Oe44UzQgjFB+LJXzqrY6Kmqvu9GBmk+3aZ1Ag=="/>
176
211
  </item>
177
- <item>
178
- <title>0.99.0</title>
179
- <pubDate>Fri, 05 Jun 2026 22:57:28 +0000</pubDate>
180
- <link>https://github.com/basnijholt/agent-cli</link>
181
- <sparkle:version>194</sparkle:version>
182
- <sparkle:shortVersionString>0.99.0</sparkle:shortVersionString>
183
- <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
184
- <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
185
- <description sparkle:format="markdown"><![CDATA[## What’s Changed
186
-
187
- * Add live transcription preview (#571) @basnijholt
188
-
189
- ]]></description>
190
- <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.99.0/AgentCLI.zip" length="22924494" type="application/octet-stream" sparkle:edSignature="COI8nqDd0cBtOO9jw/QRmsucsxE0SPiSgNF/o+s/nv3FCjSXy0C+gZX/bIFtCYyz/DYkff+IaHaLzhw8Z5aEBQ=="/>
191
- </item>
192
- <item>
193
- <title>0.98.5</title>
194
- <pubDate>Fri, 05 Jun 2026 20:33:00 +0000</pubDate>
195
- <link>https://github.com/basnijholt/agent-cli</link>
196
- <sparkle:version>193</sparkle:version>
197
- <sparkle:shortVersionString>0.98.5</sparkle:shortVersionString>
198
- <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
199
- <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
200
- <description sparkle:format="markdown"><![CDATA[## What’s Changed
201
-
202
- * Fix macOS F1 shortcut recorder crash (#584) @basnijholt
203
- * Retry Fn hotkeys after Accessibility approval (#583) @basnijholt
204
-
205
- ]]></description>
206
- <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.5/AgentCLI.zip" length="22904207" type="application/octet-stream" sparkle:edSignature="ZUCHwTaFNGvFW3w/cq1Wf5OzB0e/1mjUQjCksmNaDJy9muTY1r5dRcDuIk15hp7iB4ELNAUUDqqa+PMi/tyiAA=="/>
207
- </item>
208
212
  </channel>
209
213
  </rss>
@@ -129,9 +129,47 @@ def test_server_whisper_command_in_cli() -> None:
129
129
  assert "--model" in clean_output
130
130
  assert "--ttl" in clean_output
131
131
  assert "--wyoming-port" in clean_output
132
+ assert "--max-new-tokens" in clean_output
132
133
  assert "nemo" in clean_output
133
134
 
134
135
 
136
+ @patch("uvicorn.run")
137
+ def test_server_whisper_propagates_max_new_tokens(mock_uvicorn_run: MagicMock) -> None:
138
+ """Whisper server should propagate the generation limit to model config."""
139
+ runner = CliRunner()
140
+ registry = MagicMock()
141
+ registry.default_model = "Qwen/Qwen3-ASR-1.7B-hf"
142
+
143
+ with (
144
+ patch("agent_cli.core.deps._check_and_install_extras", return_value=[]),
145
+ patch("agent_cli.server.cli._check_whisper_deps"),
146
+ patch("agent_cli.server.cli._check_transformers_audio_model_deps"),
147
+ patch(
148
+ "agent_cli.server.whisper.model_registry.create_whisper_registry",
149
+ return_value=registry,
150
+ ),
151
+ ):
152
+ result = runner.invoke(
153
+ cli_app,
154
+ [
155
+ "server",
156
+ "whisper",
157
+ "--model",
158
+ "Qwen/Qwen3-ASR-1.7B-hf",
159
+ "--backend",
160
+ "transformers",
161
+ "--no-wyoming",
162
+ "--max-new-tokens",
163
+ "2048",
164
+ ],
165
+ )
166
+
167
+ assert result.exit_code == 0
168
+ registered_config = registry.register.call_args.args[0]
169
+ assert registered_config.max_new_tokens == 2048
170
+ mock_uvicorn_run.assert_called_once()
171
+
172
+
135
173
  @patch("uvicorn.run")
136
174
  def test_server_whisper_accepts_asr_wyoming_port_alias(mock_uvicorn_run: MagicMock) -> None:
137
175
  """Whisper server should accept the client-style ASR Wyoming port alias."""
@@ -52,6 +52,7 @@ class TestModelConfig:
52
52
  assert config.backend_type == "auto"
53
53
  assert config.default_language is None
54
54
  assert config.trust_remote_code is False
55
+ assert config.max_new_tokens == 4096
55
56
 
56
57
  def test_custom_values(self) -> None:
57
58
  """Test custom configuration values."""
@@ -64,6 +65,7 @@ class TestModelConfig:
64
65
  cpu_threads=8,
65
66
  default_language="en",
66
67
  trust_remote_code=True,
68
+ max_new_tokens=2048,
67
69
  )
68
70
  assert config.model_name == "small"
69
71
  assert config.device == "cuda:0"
@@ -73,6 +75,7 @@ class TestModelConfig:
73
75
  assert config.cpu_threads == 8
74
76
  assert config.default_language == "en"
75
77
  assert config.trust_remote_code is True
78
+ assert config.max_new_tokens == 2048
76
79
 
77
80
  def test_zero_ttl_disables_auto_unload(self) -> None:
78
81
  """TTL 0 should be accepted as keep-loaded mode."""