agent-cli 0.102.1__tar.gz → 0.102.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 (452) hide show
  1. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/docs.yml +1 -1
  2. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/markdown-code-runner.yml +2 -2
  3. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/pytest.yml +2 -2
  4. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/release.yml +2 -16
  5. {agent_cli-0.102.1 → agent_cli-0.102.3}/.pre-commit-config.yaml +5 -2
  6. {agent_cli-0.102.1 → agent_cli-0.102.3}/PKG-INFO +2 -1
  7. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/diarization.txt +8 -8
  8. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/mlx-whisper.txt +3 -1
  9. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/nemo-whisper.txt +8 -8
  10. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/config.py +1 -1
  11. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/cli.py +4 -4
  12. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/project.py +9 -1
  13. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/mlx.py +14 -1
  14. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/dev.md +8 -3
  15. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/README.md +5 -2
  16. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/appcast.xml +49 -32
  17. {agent_cli-0.102.1 → agent_cli-0.102.3}/pyproject.toml +4 -0
  18. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/conftest.py +24 -4
  19. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_project.py +60 -0
  20. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_macos_app.py +5 -6
  21. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_mlx_backend.py +67 -1
  22. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_utils.py +42 -0
  23. {agent_cli-0.102.1 → agent_cli-0.102.3}/uv.lock +2 -0
  24. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  25. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude/skills/agent-cli-dev/examples.md +0 -0
  26. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude-plugin/README.md +0 -0
  27. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude-plugin/marketplace.json +0 -0
  28. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude-plugin/plugin.json +0 -0
  29. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  30. {agent_cli-0.102.1 → agent_cli-0.102.3}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  31. {agent_cli-0.102.1 → agent_cli-0.102.3}/.cursorrules +0 -0
  32. {agent_cli-0.102.1 → agent_cli-0.102.3}/.dockerignore +0 -0
  33. {agent_cli-0.102.1 → agent_cli-0.102.3}/.env.example +0 -0
  34. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/logo.svg +0 -0
  35. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/release-drafter.yml +0 -0
  36. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/renovate.json +0 -0
  37. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/scripts/check_extras_sync.py +0 -0
  38. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/scripts/check_plugin_skill_sync.py +0 -0
  39. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/scripts/normalize_appcast.py +0 -0
  40. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/scripts/sync_extras.py +0 -0
  41. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/scripts/sync_requirements.py +0 -0
  42. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/automerge.yml +0 -0
  43. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/docker.yml +0 -0
  44. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/release-drafter.yml +0 -0
  45. {agent_cli-0.102.1 → agent_cli-0.102.3}/.github/workflows/toc.yaml +0 -0
  46. {agent_cli-0.102.1 → agent_cli-0.102.3}/.gitignore +0 -0
  47. {agent_cli-0.102.1 → agent_cli-0.102.3}/.jscpd.json +0 -0
  48. {agent_cli-0.102.1 → agent_cli-0.102.3}/.prompts/docs-review.md +0 -0
  49. {agent_cli-0.102.1 → agent_cli-0.102.3}/.prompts/pr-review.md +0 -0
  50. {agent_cli-0.102.1 → agent_cli-0.102.3}/CLAUDE.md +0 -0
  51. {agent_cli-0.102.1 → agent_cli-0.102.3}/LICENSE +0 -0
  52. {agent_cli-0.102.1 → agent_cli-0.102.3}/LLAMA_SERVER_USAGE.md +0 -0
  53. {agent_cli-0.102.1 → agent_cli-0.102.3}/README.md +0 -0
  54. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/__init__.py +0 -0
  55. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/__main__.py +0 -0
  56. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_extras.json +0 -0
  57. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_overrides/nemo-whisper.txt +0 -0
  58. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/.gitkeep +0 -0
  59. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/audio.txt +0 -0
  60. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/faster-whisper.txt +0 -0
  61. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/kokoro.txt +0 -0
  62. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/llm.txt +0 -0
  63. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/memory.txt +0 -0
  64. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/piper.txt +0 -0
  65. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/rag.txt +0 -0
  66. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/server.txt +0 -0
  67. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/speed.txt +0 -0
  68. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/vad.txt +0 -0
  69. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/vectordb.txt +0 -0
  70. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  71. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_requirements/wyoming.txt +0 -0
  72. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/_tools.py +0 -0
  73. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/__init__.py +0 -0
  74. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/_voice_agent_common.py +0 -0
  75. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/assistant.py +0 -0
  76. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/autocorrect.py +0 -0
  77. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/chat.py +0 -0
  78. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/diarize_live_session.py +0 -0
  79. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/memory/__init__.py +0 -0
  80. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/memory/add.py +0 -0
  81. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/memory/proxy.py +0 -0
  82. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/rag_proxy.py +0 -0
  83. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/speak.py +0 -0
  84. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/speakers.py +0 -0
  85. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/transcribe.py +0 -0
  86. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/transcribe_live.py +0 -0
  87. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/agents/voice_edit.py +0 -0
  88. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/api.py +0 -0
  89. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/cli.py +0 -0
  90. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/config_cmd.py +0 -0
  91. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/constants.py +0 -0
  92. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/__init__.py +0 -0
  93. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/alignment.py +0 -0
  94. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/audio.py +0 -0
  95. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/audio_format.py +0 -0
  96. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/chroma.py +0 -0
  97. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/deps.py +0 -0
  98. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/diarization.py +0 -0
  99. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/openai_proxy.py +0 -0
  100. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/process.py +0 -0
  101. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/reranker.py +0 -0
  102. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/speaker_identity.py +0 -0
  103. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/sse.py +0 -0
  104. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/transcription_logger.py +0 -0
  105. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/utils.py +0 -0
  106. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/vad.py +0 -0
  107. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/core/watch.py +0 -0
  108. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/daemon/__init__.py +0 -0
  109. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/daemon/cli.py +0 -0
  110. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/__init__.py +0 -0
  111. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/_branch_name.py +0 -0
  112. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/_config.py +0 -0
  113. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/_output.py +0 -0
  114. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/cleanup.py +0 -0
  115. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/__init__.py +0 -0
  116. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/aider.py +0 -0
  117. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/base.py +0 -0
  118. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/claude.py +0 -0
  119. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/codex.py +0 -0
  120. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  121. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/copilot.py +0 -0
  122. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  123. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/gemini.py +0 -0
  124. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/opencode.py +0 -0
  125. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/coding_agents/registry.py +0 -0
  126. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/__init__.py +0 -0
  127. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/base.py +0 -0
  128. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/cursor.py +0 -0
  129. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/emacs.py +0 -0
  130. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/jetbrains.py +0 -0
  131. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/nano.py +0 -0
  132. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/neovim.py +0 -0
  133. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/registry.py +0 -0
  134. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/sublime.py +0 -0
  135. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/vim.py +0 -0
  136. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/vscode.py +0 -0
  137. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/editors/zed.py +0 -0
  138. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/hooks.py +0 -0
  139. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/launch.py +0 -0
  140. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/registry.py +0 -0
  141. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/skill/SKILL.md +0 -0
  142. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/skill/examples.md +0 -0
  143. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/__init__.py +0 -0
  144. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  145. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/base.py +0 -0
  146. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/cmux.py +0 -0
  147. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/gnome.py +0 -0
  148. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/iterm2.py +0 -0
  149. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/kitty.py +0 -0
  150. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/registry.py +0 -0
  151. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/tmux.py +0 -0
  152. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/warp.py +0 -0
  153. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/terminals/zellij.py +0 -0
  154. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/dev/worktree.py +0 -0
  155. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/docs_gen.py +0 -0
  156. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/example-config.toml +0 -0
  157. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/__init__.py +0 -0
  158. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/common.py +0 -0
  159. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/extras.py +0 -0
  160. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/hotkeys.py +0 -0
  161. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/launchd.py +0 -0
  162. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/service_config.py +0 -0
  163. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/services.py +0 -0
  164. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/install/systemd.py +0 -0
  165. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/__init__.py +0 -0
  166. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_files.py +0 -0
  167. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_filters.py +0 -0
  168. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_git.py +0 -0
  169. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_indexer.py +0 -0
  170. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_ingest.py +0 -0
  171. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_persistence.py +0 -0
  172. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_prompt.py +0 -0
  173. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_retrieval.py +0 -0
  174. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_store.py +0 -0
  175. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_streaming.py +0 -0
  176. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/_tasks.py +0 -0
  177. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/api.py +0 -0
  178. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/client.py +0 -0
  179. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/engine.py +0 -0
  180. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/entities.py +0 -0
  181. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/memory/models.py +0 -0
  182. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/opts.py +0 -0
  183. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/py.typed +0 -0
  184. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/__init__.py +0 -0
  185. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_indexer.py +0 -0
  186. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_indexing.py +0 -0
  187. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_prompt.py +0 -0
  188. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_retriever.py +0 -0
  189. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_store.py +0 -0
  190. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/_utils.py +0 -0
  191. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/api.py +0 -0
  192. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/client.py +0 -0
  193. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/engine.py +0 -0
  194. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/rag/models.py +0 -0
  195. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  196. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/__init__.py +0 -0
  197. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  198. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  199. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  200. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  201. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  202. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  203. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  204. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  205. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  206. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  207. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  208. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  209. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  210. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  211. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/run-openwakeword.sh +0 -0
  212. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  213. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/setup-linux.sh +0 -0
  214. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  215. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/setup-macos.sh +0 -0
  216. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/setup-windows.ps1 +0 -0
  217. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  218. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/scripts/start-all-services.sh +0 -0
  219. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/__init__.py +0 -0
  220. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/cli.py +0 -0
  221. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/common.py +0 -0
  222. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/model_manager.py +0 -0
  223. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/model_registry.py +0 -0
  224. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/proxy/__init__.py +0 -0
  225. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/proxy/api.py +0 -0
  226. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/streaming.py +0 -0
  227. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/__init__.py +0 -0
  228. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/api.py +0 -0
  229. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/backends/__init__.py +0 -0
  230. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/backends/base.py +0 -0
  231. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/backends/kokoro.py +0 -0
  232. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/backends/piper.py +0 -0
  233. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/model_manager.py +0 -0
  234. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/model_registry.py +0 -0
  235. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/tts/wyoming_handler.py +0 -0
  236. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/__init__.py +0 -0
  237. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/api.py +0 -0
  238. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/__init__.py +0 -0
  239. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/base.py +0 -0
  240. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  241. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/nemo.py +0 -0
  242. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/backends/transformers.py +0 -0
  243. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/languages.py +0 -0
  244. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/model_manager.py +0 -0
  245. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/model_registry.py +0 -0
  246. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  247. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/__init__.py +0 -0
  248. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/_wyoming_utils.py +0 -0
  249. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/asr.py +0 -0
  250. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/llm.py +0 -0
  251. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/tts.py +0 -0
  252. {agent_cli-0.102.1 → agent_cli-0.102.3}/agent_cli/services/wake_word.py +0 -0
  253. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/docker-compose.yml +0 -0
  254. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/memory-proxy.Dockerfile +0 -0
  255. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/rag-proxy.Dockerfile +0 -0
  256. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/transcribe-proxy.Dockerfile +0 -0
  257. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/tts.Dockerfile +0 -0
  258. {agent_cli-0.102.1 → agent_cli-0.102.3}/docker/whisper.Dockerfile +0 -0
  259. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/CNAME +0 -0
  260. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/architecture/index.md +0 -0
  261. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/architecture/memory.md +0 -0
  262. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/architecture/rag.md +0 -0
  263. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/assistant.md +0 -0
  264. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/autocorrect.md +0 -0
  265. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/chat.md +0 -0
  266. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/config.md +0 -0
  267. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/daemon.md +0 -0
  268. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/diarize-live-session.md +0 -0
  269. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/index.md +0 -0
  270. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/install-extras.md +0 -0
  271. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/install-hotkeys.md +0 -0
  272. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/install-services.md +0 -0
  273. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/memory.md +0 -0
  274. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/rag-proxy.md +0 -0
  275. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/server/index.md +0 -0
  276. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/server/transcribe-proxy.md +0 -0
  277. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/server/tts.md +0 -0
  278. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/server/whisper.md +0 -0
  279. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/speak.md +0 -0
  280. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/speakers.md +0 -0
  281. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/start-services.md +0 -0
  282. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/transcribe-live.md +0 -0
  283. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/transcribe.md +0 -0
  284. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/commands/voice-edit.md +0 -0
  285. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/configuration.md +0 -0
  286. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/getting-started.md +0 -0
  287. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/iOS_Shortcut_Guide.md +0 -0
  288. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/index.md +0 -0
  289. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/docker.md +0 -0
  290. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/index.md +0 -0
  291. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/linux.md +0 -0
  292. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/macos-app.md +0 -0
  293. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/macos.md +0 -0
  294. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/nixos.md +0 -0
  295. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/installation/windows.md +0 -0
  296. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/logo-avatar.svg +0 -0
  297. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/logo-clean.svg +0 -0
  298. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  299. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/run_markdown_code_runner.py +0 -0
  300. {agent_cli-0.102.1 → agent_cli-0.102.3}/docs/system-integration.md +0 -0
  301. {agent_cli-0.102.1 → agent_cli-0.102.3}/example.agent-cli-config.toml +0 -0
  302. {agent_cli-0.102.1 → agent_cli-0.102.3}/justfile +0 -0
  303. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Package.resolved +0 -0
  304. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Package.swift +0 -0
  305. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
  306. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Resources/Info.plist +0 -0
  307. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
  308. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
  309. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
  310. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
  311. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +0 -0
  312. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
  313. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
  314. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
  315. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
  316. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
  317. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
  318. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
  319. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/LiveTranscriptionPreview.swift +0 -0
  320. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
  321. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
  322. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
  323. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
  324. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
  325. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
  326. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
  327. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
  328. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
  329. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
  330. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
  331. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
  332. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
  333. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
  334. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
  335. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +0 -0
  336. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +0 -0
  337. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/LivePreviewSwiftTestingTests.swift +0 -0
  338. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/LiveTranscriptionPreviewTests.swift +0 -0
  339. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
  340. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
  341. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
  342. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
  343. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
  344. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/build-macos-app.sh +0 -0
  345. {agent_cli-0.102.1 → agent_cli-0.102.3}/macos/test-macos-app-e2e.sh +0 -0
  346. {agent_cli-0.102.1 → agent_cli-0.102.3}/reddit.md +0 -0
  347. {agent_cli-0.102.1 → agent_cli-0.102.3}/shell.nix +0 -0
  348. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/__init__.py +0 -0
  349. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/__init__.py +0 -0
  350. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_fix_my_text.py +0 -0
  351. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_interactive.py +0 -0
  352. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_interactive_extra.py +0 -0
  353. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_memory_add.py +0 -0
  354. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_speak.py +0 -0
  355. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_speak_e2e.py +0 -0
  356. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_speakers.py +0 -0
  357. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_transcribe.py +0 -0
  358. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_transcribe_agent.py +0 -0
  359. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_transcribe_e2e.py +0 -0
  360. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_transcribe_live.py +0 -0
  361. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_transcribe_recovery.py +0 -0
  362. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_tts_common.py +0 -0
  363. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_tts_common_extra.py +0 -0
  364. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_voice_agent_common.py +0 -0
  365. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_voice_edit.py +0 -0
  366. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_voice_edit_e2e.py +0 -0
  367. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/agents/test_wake_word_assistant.py +0 -0
  368. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/__init__.py +0 -0
  369. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_audio.py +0 -0
  370. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_audio_format.py +0 -0
  371. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_audio_levels.py +0 -0
  372. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_chroma.py +0 -0
  373. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_sse.py +0 -0
  374. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_vad.py +0 -0
  375. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/core/test_watch.py +0 -0
  376. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/__init__.py +0 -0
  377. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_cleanup.py +0 -0
  378. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_cli.py +0 -0
  379. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_coding_agents.py +0 -0
  380. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_editors.py +0 -0
  381. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_hooks.py +0 -0
  382. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_launch.py +0 -0
  383. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_terminals.py +0 -0
  384. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_verification.py +0 -0
  385. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/dev/test_worktree.py +0 -0
  386. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/install/__init__.py +0 -0
  387. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/install/test_extras.py +0 -0
  388. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/install/test_launchd.py +0 -0
  389. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/__init__.py +0 -0
  390. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_api_health.py +0 -0
  391. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_api_integration_liveish.py +0 -0
  392. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_client.py +0 -0
  393. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_engine.py +0 -0
  394. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_files.py +0 -0
  395. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_filters.py +0 -0
  396. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_git_integration.py +0 -0
  397. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_indexer.py +0 -0
  398. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_memory_integration.py +0 -0
  399. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_proxy_passthrough.py +0 -0
  400. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_store.py +0 -0
  401. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/memory/test_utils.py +0 -0
  402. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/mocks/__init__.py +0 -0
  403. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/mocks/audio.py +0 -0
  404. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/mocks/llm.py +0 -0
  405. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/mocks/wyoming.py +0 -0
  406. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/__init__.py +0 -0
  407. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_api.py +0 -0
  408. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_engine.py +0 -0
  409. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_history.py +0 -0
  410. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_indexer.py +0 -0
  411. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_indexing.py +0 -0
  412. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_rag_client.py +0 -0
  413. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_rag_integration_liveish.py +0 -0
  414. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  415. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_retriever.py +0 -0
  416. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_store.py +0 -0
  417. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/rag/test_utils.py +0 -0
  418. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_alignment.py +0 -0
  419. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_api.py +0 -0
  420. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_api_integration.py +0 -0
  421. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_asr.py +0 -0
  422. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_asr_recovery.py +0 -0
  423. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_audio_e2e.py +0 -0
  424. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_cli.py +0 -0
  425. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_config.py +0 -0
  426. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_config_cmd.py +0 -0
  427. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_daemon.py +0 -0
  428. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_diarization.py +0 -0
  429. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_diarize_live_session.py +0 -0
  430. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_docs_gen.py +0 -0
  431. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_env_vars.py +0 -0
  432. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_faster_whisper_backend.py +0 -0
  433. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_json_output.py +0 -0
  434. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_llm.py +0 -0
  435. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_llm_gemini.py +0 -0
  436. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_memory_tools.py +0 -0
  437. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_nemo_backend.py +0 -0
  438. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_normalize_appcast.py +0 -0
  439. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_process_manager.py +0 -0
  440. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_requires_extras.py +0 -0
  441. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_server_streaming.py +0 -0
  442. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_server_tts.py +0 -0
  443. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_server_tts_wyoming.py +0 -0
  444. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_server_whisper.py +0 -0
  445. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_services.py +0 -0
  446. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_speaker_identity.py +0 -0
  447. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_tools.py +0 -0
  448. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_transformers_backend.py +0 -0
  449. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_tts.py +0 -0
  450. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_wake_word.py +0 -0
  451. {agent_cli-0.102.1 → agent_cli-0.102.3}/tests/test_wyoming_utils.py +0 -0
  452. {agent_cli-0.102.1 → agent_cli-0.102.3}/zensical.toml +0 -0
@@ -32,7 +32,7 @@ jobs:
32
32
  lfs: true
33
33
 
34
34
  - name: Install uv
35
- uses: astral-sh/setup-uv@v8.3.2
35
+ uses: astral-sh/setup-uv@v9.0.0
36
36
 
37
37
  - name: Set up Python
38
38
  run: uv python install 3.12
@@ -17,12 +17,12 @@ jobs:
17
17
  fetch-depth: 0
18
18
 
19
19
  - name: Set up Python
20
- uses: actions/setup-python@v6.3.0
20
+ uses: actions/setup-python@v7.0.0
21
21
  with:
22
22
  python-version: "3.13.11"
23
23
 
24
24
  - name: Install uv
25
- uses: astral-sh/setup-uv@v8.3.2
25
+ uses: astral-sh/setup-uv@v9.0.0
26
26
 
27
27
  - name: Run markdown-code-runner
28
28
  env:
@@ -20,14 +20,14 @@ jobs:
20
20
  steps:
21
21
  - uses: actions/checkout@v7.0.1
22
22
  - name: Set up Python ${{ matrix.python-version }}
23
- uses: actions/setup-python@v6.3.0
23
+ uses: actions/setup-python@v7.0.0
24
24
  with:
25
25
  python-version: ${{ matrix.python-version }}
26
26
  - name: Install portaudio (Linux only)
27
27
  if: matrix.os == 'ubuntu-latest'
28
28
  run: sudo apt-get update && sudo apt-get install -y portaudio19-dev
29
29
  - name: Install uv
30
- uses: astral-sh/setup-uv@v8.3.2
30
+ uses: astral-sh/setup-uv@v9.0.0
31
31
  - name: Run macOS app Swift tests
32
32
  if: matrix.os == 'macos-latest' && matrix.python-version == '3.13'
33
33
  run: swift test --package-path macos/AgentCLI --enable-xctest
@@ -16,7 +16,7 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7.0.1
18
18
  - name: Install uv
19
- uses: astral-sh/setup-uv@v8.3.2
19
+ uses: astral-sh/setup-uv@v9.0.0
20
20
  - name: Build
21
21
  run: uv build
22
22
  - name: Publish package distributions to PyPI
@@ -31,7 +31,7 @@ jobs:
31
31
  steps:
32
32
  - uses: actions/checkout@v7.0.1
33
33
  - name: Install uv
34
- uses: astral-sh/setup-uv@v8.3.2
34
+ uses: astral-sh/setup-uv@v9.0.0
35
35
  - name: Import Developer ID certificate
36
36
  uses: apple-actions/import-codesign-certs@v7.0.0
37
37
  with:
@@ -126,17 +126,3 @@ jobs:
126
126
  git commit -m "Update AgentCLI release metadata to ${TAG_NAME}"
127
127
  git pull --rebase origin main
128
128
  git push origin HEAD:main
129
- - name: Trigger Homebrew tap update
130
- env:
131
- GH_TOKEN: ${{ secrets.HOMEBREW_TAP_DISPATCH_TOKEN }}
132
- TAG_NAME: ${{ github.event.release.tag_name }}
133
- run: |
134
- if [[ -z "$GH_TOKEN" ]]; then
135
- echo "HOMEBREW_TAP_DISPATCH_TOKEN is required to update basnijholt/homebrew-tap." >&2
136
- exit 1
137
- fi
138
-
139
- gh api repos/basnijholt/homebrew-tap/dispatches \
140
- -f event_type=agent-cli-release \
141
- -F "client_payload[tag_name]=$TAG_NAME" \
142
- -F "client_payload[asset_url]=https://github.com/basnijholt/agent-cli/releases/download/${TAG_NAME}/AgentCLI.dmg"
@@ -48,14 +48,17 @@ repos:
48
48
  name: uv lock
49
49
  entry: uv lock
50
50
  language: python
51
- additional_dependencies: ["uv"]
51
+ # Pinned: uv export's marker output differs between releases, so an
52
+ # unpinned uv makes agent_cli/_requirements/*.txt depend on whoever's
53
+ # hook cache is freshest.
54
+ additional_dependencies: ["uv==0.11.32"]
52
55
  pass_filenames: false
53
56
  files: pyproject\.toml
54
57
  - id: sync-requirements
55
58
  name: sync extra requirements
56
59
  entry: python .github/scripts/sync_requirements.py
57
60
  language: python
58
- additional_dependencies: ["uv"]
61
+ additional_dependencies: ["uv==0.11.32"]
59
62
  pass_filenames: false
60
63
  files: (pyproject\.toml|uv\.lock)
61
64
  - id: check-extras-sync
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.102.1
3
+ Version: 0.102.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>
@@ -61,6 +61,7 @@ Requires-Dist: watchfiles>=0.21.0; extra == 'memory'
61
61
  Provides-Extra: mlx-whisper
62
62
  Requires-Dist: fastapi[standard]; extra == 'mlx-whisper'
63
63
  Requires-Dist: mlx-whisper>=0.4.0; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
64
+ Requires-Dist: mlx>=0.24; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
64
65
  Provides-Extra: nemo-whisper
65
66
  Requires-Dist: fastapi[standard]; extra == 'nemo-whisper'
66
67
  Requires-Dist: nemo-toolkit[asr]>=2.2.0; (python_version < '3.14') and extra == 'nemo-whisper'
@@ -1,10 +1,10 @@
1
1
  # This file was autogenerated by uv via the following command:
2
2
  # uv export --extra diarization --no-dev --no-emit-project --no-hashes
3
- aiohappyeyeballs==2.6.2
3
+ aiohappyeyeballs==2.6.2 ; python_full_version < '3.13'
4
4
  # via aiohttp
5
- aiohttp==3.13.5
5
+ aiohttp==3.13.5 ; python_full_version < '3.13'
6
6
  # via fsspec
7
- aiosignal==1.4.0
7
+ aiosignal==1.4.0 ; python_full_version < '3.13'
8
8
  # via aiohttp
9
9
  alembic==1.18.4
10
10
  # via optuna
@@ -18,7 +18,7 @@ anyio==4.13.0
18
18
  # via httpx
19
19
  asteroid-filterbanks==0.4.0
20
20
  # via pyannote-audio
21
- attrs==26.1.0
21
+ attrs==26.1.0 ; python_full_version < '3.13'
22
22
  # via aiohttp
23
23
  certifi==2026.5.20
24
24
  # via
@@ -61,7 +61,7 @@ filelock==3.29.0
61
61
  # torch
62
62
  fonttools==4.63.0
63
63
  # via matplotlib
64
- frozenlist==1.8.0
64
+ frozenlist==1.8.0 ; python_full_version < '3.13'
65
65
  # via
66
66
  # aiohttp
67
67
  # aiosignal
@@ -136,7 +136,7 @@ mdurl==0.1.2
136
136
  # via markdown-it-py
137
137
  mpmath==1.3.0
138
138
  # via sympy
139
- multidict==6.7.1
139
+ multidict==6.7.1 ; python_full_version < '3.13'
140
140
  # via
141
141
  # aiohttp
142
142
  # yarl
@@ -267,7 +267,7 @@ pillow==12.2.0
267
267
  # via matplotlib
268
268
  primepy==1.3
269
269
  # via torch-pitch-shift
270
- propcache==0.5.2
270
+ propcache==0.5.2 ; python_full_version < '3.13'
271
271
  # via
272
272
  # aiohttp
273
273
  # yarl
@@ -480,5 +480,5 @@ tzdata==2026.2 ; sys_platform == 'emscripten' or sys_platform == 'win32'
480
480
  # via pandas
481
481
  urllib3==2.7.0
482
482
  # via requests
483
- yarl==1.24.2
483
+ yarl==1.24.2 ; python_full_version < '3.13'
484
484
  # via aiohttp
@@ -98,7 +98,9 @@ markupsafe==3.0.3
98
98
  mdurl==0.1.2
99
99
  # via markdown-it-py
100
100
  mlx==0.31.2 ; platform_machine == 'arm64' and sys_platform == 'darwin'
101
- # via mlx-whisper
101
+ # via
102
+ # agent-cli
103
+ # mlx-whisper
102
104
  mlx-metal==0.31.2 ; platform_machine == 'arm64' and sys_platform == 'darwin'
103
105
  # via mlx
104
106
  mlx-whisper==0.4.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
@@ -6,11 +6,11 @@ absl-py==2.4.0 ; python_full_version < '3.14'
6
6
  # tensorboard
7
7
  accelerate==1.13.0 ; python_full_version < '3.14'
8
8
  # via peft
9
- aiohappyeyeballs==2.6.2 ; python_full_version < '3.14'
9
+ aiohappyeyeballs==2.6.2 ; python_full_version < '3.13'
10
10
  # via aiohttp
11
- aiohttp==3.13.5 ; python_full_version < '3.14'
11
+ aiohttp==3.13.5 ; python_full_version < '3.13'
12
12
  # via fsspec
13
- aiosignal==1.4.0 ; python_full_version < '3.14'
13
+ aiosignal==1.4.0 ; python_full_version < '3.13'
14
14
  # via aiohttp
15
15
  alembic==1.18.4 ; python_full_version < '3.14'
16
16
  # via optuna
@@ -31,7 +31,7 @@ anyio==4.13.0
31
31
  # watchfiles
32
32
  asttokens==3.0.1 ; python_full_version < '3.14'
33
33
  # via stack-data
34
- attrs==26.1.0 ; python_full_version < '3.14'
34
+ attrs==26.1.0 ; python_full_version < '3.13'
35
35
  # via aiohttp
36
36
  audioop-lts==0.2.2 ; python_full_version == '3.13.*'
37
37
  # via
@@ -146,7 +146,7 @@ filelock==3.29.0 ; python_full_version < '3.14'
146
146
  # transformers
147
147
  fonttools==4.63.0 ; python_full_version < '3.14'
148
148
  # via matplotlib
149
- frozenlist==1.8.0 ; python_full_version < '3.14'
149
+ frozenlist==1.8.0 ; python_full_version < '3.13'
150
150
  # via
151
151
  # aiohttp
152
152
  # aiosignal
@@ -308,7 +308,7 @@ mpmath==1.3.0 ; python_full_version < '3.14'
308
308
  # via sympy
309
309
  msgpack==1.1.2 ; python_full_version < '3.14'
310
310
  # via librosa
311
- multidict==6.7.1 ; python_full_version < '3.14'
311
+ multidict==6.7.1 ; python_full_version < '3.13'
312
312
  # via
313
313
  # aiohttp
314
314
  # yarl
@@ -515,7 +515,7 @@ portalocker==3.2.0 ; python_full_version == '3.13.*'
515
515
  # via sacrebleu
516
516
  prompt-toolkit==3.0.52 ; python_full_version < '3.14'
517
517
  # via ipython
518
- propcache==0.5.2 ; python_full_version < '3.14'
518
+ propcache==0.5.2 ; python_full_version < '3.13'
519
519
  # via
520
520
  # aiohttp
521
521
  # yarl
@@ -888,5 +888,5 @@ wrapt==2.2.1 ; python_full_version < '3.14'
888
888
  # via nemo-toolkit
889
889
  xxhash==3.7.0 ; python_full_version < '3.14'
890
890
  # via datasets
891
- yarl==1.24.2 ; python_full_version < '3.14'
891
+ yarl==1.24.2 ; python_full_version < '3.13'
892
892
  # via aiohttp
@@ -316,7 +316,7 @@ class Dev(BaseModel):
316
316
  )
317
317
  agent_env: dict[str, dict[str, str]] | None = None
318
318
  setup: bool = True # Run project setup (npm install, etc.)
319
- copy_env: bool = True # Copy .env files from main repo
319
+ copy_env: bool = True # Copy env and local agent instruction files from main repo
320
320
  fetch: bool = True # Git fetch before creating worktree
321
321
 
322
322
 
@@ -290,12 +290,12 @@ def _setup_worktree_env(
290
290
  direnv: bool | None,
291
291
  verbose: bool,
292
292
  ) -> None:
293
- """Copy env files, run project setup, and configure direnv."""
293
+ """Copy local setup files, run project setup, and configure direnv."""
294
294
  if copy_env:
295
295
  copied = copy_env_files(repo_root, worktree_path)
296
296
  if copied:
297
297
  names = ", ".join(f.name for f in copied)
298
- success(f"Copied env file(s): {names}")
298
+ success(f"Copied local setup file(s): {names}")
299
299
 
300
300
  project = None
301
301
  if setup:
@@ -413,7 +413,7 @@ def new(
413
413
  bool,
414
414
  typer.Option(
415
415
  "--copy-env/--no-copy-env",
416
- help="Copy .env, .env.local, .env.example from main repo to worktree",
416
+ help="Copy env and local agent instruction files from main repo to worktree",
417
417
  ),
418
418
  ] = True,
419
419
  fetch: Annotated[
@@ -525,7 +525,7 @@ def new(
525
525
  **What happens:**
526
526
 
527
527
  1. Creates git worktree at `../REPO-worktrees/BRANCH/`
528
- 2. Copies .env files from main repo (--copy-env)
528
+ 2. Copies env and local agent instruction files from main repo (--copy-env)
529
529
  3. Runs project setup: npm install, uv sync, etc. (--setup)
530
530
  4. Sets up direnv if installed (--direnv)
531
531
  5. Opens editor if requested (-e/--editor)
@@ -12,6 +12,8 @@ if TYPE_CHECKING:
12
12
  from collections.abc import Callable
13
13
  from pathlib import Path
14
14
 
15
+ _LOCAL_AGENT_INSTRUCTION_FILES = ("AGENTS.local.md", "CLAUDE.local.md")
16
+
15
17
 
16
18
  @dataclass
17
19
  class ProjectType:
@@ -366,6 +368,7 @@ def copy_env_files(
366
368
  ".env.local",
367
369
  ".env.example",
368
370
  ".envrc",
371
+ *_LOCAL_AGENT_INSTRUCTION_FILES,
369
372
  ]
370
373
 
371
374
  copied: list[Path] = []
@@ -380,7 +383,12 @@ def copy_env_files(
380
383
 
381
384
  for src_file in source_files:
382
385
  if src_file.is_file():
383
- dest_file = dest / src_file.relative_to(source)
386
+ relative_path = src_file.relative_to(source)
387
+ dest_file = dest / relative_path
388
+ if relative_path.as_posix() in _LOCAL_AGENT_INSTRUCTION_FILES and os.path.lexists(
389
+ dest_file
390
+ ):
391
+ continue
384
392
  dest_file.parent.mkdir(parents=True, exist_ok=True)
385
393
  dest_file.write_bytes(src_file.read_bytes())
386
394
  copied.append(dest_file)
@@ -135,11 +135,24 @@ def _transcribe_in_subprocess(
135
135
  kwargs: dict[str, Any],
136
136
  ) -> dict[str, Any]:
137
137
  """Run transcription in subprocess. Model stays loaded between calls."""
138
+ import mlx.core as mx # noqa: PLC0415
138
139
  import mlx_whisper # noqa: PLC0415
139
140
  import numpy as np # noqa: PLC0415
140
141
 
141
142
  audio_array = np.frombuffer(audio_bytes, dtype=audio_dtype).reshape(audio_shape)
142
- result = mlx_whisper.transcribe(audio_array, path_or_hf_repo=model_name, **kwargs)
143
+ try:
144
+ result = mlx_whisper.transcribe(audio_array, path_or_hf_repo=model_name, **kwargs)
145
+ finally:
146
+ # Release MLX's reusable Metal buffer cache after each request. With --ttl 0
147
+ # the subprocess is never recycled, so without this the cache grows to the
148
+ # largest working set ever seen and gets pushed to swap, degrading latency.
149
+ # clear_cache() frees only the cache, NOT live arrays, so the loaded model
150
+ # weights stay resident and inference stays hot (no cold reload).
151
+ # In finally so a failed transcription also releases the buffers it
152
+ # allocated; otherwise the long-lived worker would retain them.
153
+ # Top-level clear_cache() needs mlx>=0.24 (pinned in the mlx-whisper
154
+ # extra); older releases only expose mx.metal.clear_cache().
155
+ mx.clear_cache()
143
156
 
144
157
  return {
145
158
  "text": result.get("text", ""),
@@ -78,7 +78,7 @@ agent-cli dev new [BRANCH] [OPTIONS]
78
78
  | `--agent` | - | Which AI agent to start: claude, codex, gemini, aider, copilot, cn (Continue), opencode, cursor-agent, or auto. Implies starting the agent |
79
79
  | `--with-editor` | - | Which editor to open: cursor, vscode, zed, nvim, vim, emacs, sublime, idea, pycharm, etc. |
80
80
  | `--setup/--no-setup` | `true` | Run project setup after creation: npm/pnpm/yarn install, poetry/uv sync, cargo build, etc. Auto-detects project type |
81
- | `--copy-env/--no-copy-env` | `true` | Copy .env, .env.local, .env.example from main repo to worktree |
81
+ | `--copy-env/--no-copy-env` | `true` | Copy env and local agent instruction files from main repo to worktree |
82
82
  | `--fetch/--no-fetch` | `true` | Run 'git fetch' before creating the worktree to ensure refs are up-to-date |
83
83
  | `--branch-name-mode` | `random` | How to auto-name branches when BRANCH is omitted: random (default), auto (AI only when --prompt/--prompt-file is set), or ai (always try AI first) |
84
84
  | `--branch-name-agent` | - | Headless agent for AI branch naming: claude, codex, or gemini. If omitted, uses --agent when supported, otherwise tries available agents in that order |
@@ -606,7 +606,7 @@ direnv = true # Always generate .envrc (--direnv)
606
606
 
607
607
  # Worktree creation behavior
608
608
  setup = true # Run project setup (npm install, etc.)
609
- copy_env = true # Copy .env files from main repo
609
+ copy_env = true # Copy env and local agent instruction files
610
610
  fetch = true # Git fetch before creating
611
611
 
612
612
  # Branch naming behavior when BRANCH argument is omitted
@@ -702,7 +702,7 @@ git lfs pull
702
702
 
703
703
  This ensures large files tracked by LFS are available in the worktree.
704
704
 
705
- ### Environment Files
705
+ ### Local Setup Files
706
706
 
707
707
  The following files are automatically copied to new dev environments:
708
708
 
@@ -710,6 +710,11 @@ The following files are automatically copied to new dev environments:
710
710
  - `.env.local`
711
711
  - `.env.example`
712
712
  - `.envrc`
713
+ - `AGENTS.local.md`
714
+ - `CLAUDE.local.md`
715
+
716
+ If the target branch already contains either local agent instruction file,
717
+ its checked-out version is preserved.
713
718
 
714
719
  Use `--no-copy-env` to skip this.
715
720
 
@@ -111,8 +111,11 @@ workflow expects these repository secrets:
111
111
  - `APPLE_APP_SPECIFIC_PASSWORD`: app-specific password for `notarytool`
112
112
  - `APPLE_TEAM_ID`: Apple Developer Team ID
113
113
  - `SPARKLE_PRIVATE_ED_KEY`: private Sparkle EdDSA key for signing updates
114
- - `HOMEBREW_TAP_DISPATCH_TOKEN`: fine-grained token with Contents write access
115
- to `basnijholt/homebrew-tap`, used to trigger the tap cask update workflow
114
+
115
+ The Homebrew cask is not published from here. `basnijholt/homebrew-tap` runs a
116
+ daily cron that reads the latest release and bumps `Casks/agent-cli.rb` itself;
117
+ run it on demand with
118
+ `gh workflow run update-agent-cli-cask.yml --repo basnijholt/homebrew-tap`.
116
119
 
117
120
  The workflow also expects the repository variable `SPARKLE_PUBLIC_ED_KEY`.
118
121
  Generate the key pair with Sparkle's `generate_keys` tool and store only the
@@ -4,6 +4,55 @@
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.102.2</title>
9
+ <pubDate>Sat, 25 Jul 2026 20:18:46 +0000</pubDate>
10
+ <link>https://github.com/basnijholt/agent-cli</link>
11
+ <sparkle:version>199</sparkle:version>
12
+ <sparkle:shortVersionString>0.102.2</sparkle:shortVersionString>
13
+ <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
14
+ <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
15
+ <description sparkle:format="markdown"><![CDATA[## Bug fixes
16
+
17
+ - **MLX Whisper: stop unbounded memory growth under `--ttl 0`** (#620). The long-lived transcription subprocess never released MLX's reusable Metal buffer cache, so it ratcheted up to the largest working set ever seen and eventually got pushed to swap — one deployment reached a 17.1 GB physical footprint for a 2.9 GB model, with a 5.2s clip degrading from ~2.0s to ~5.2s. The backend now calls `mx.clear_cache()` after each request, including on failure. Only the reusable cache is freed, not live arrays, so model weights stay resident and inference stays hot; measured cost is ~7.6 ms per request (~0.3%).
18
+
19
+ - **Require `mlx>=0.24` for the `mlx-whisper` extra** (#620). The top-level `mx.clear_cache()` does not exist before mlx 0.24 — 0.23.2 and older only expose the deprecated `mx.metal.clear_cache()` — and `mlx-whisper` itself only requires `mlx>=0.11`. Without the floor, an environment resolving an older mlx would raise `AttributeError` on every transcription.
20
+
21
+ ## Internal
22
+
23
+ - Pin `uv` in the `uv-lock` and `sync-requirements` pre-commit hooks so the generated `agent_cli/_requirements/*.txt` files depend on the config rather than on how fresh each contributor's hook cache is (#620).
24
+ - Render the shared consoles without colour during tests (#625).
25
+ - Drop the broken Homebrew tap dispatch from the release workflow (#623).
26
+ ]]></description>
27
+ <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.102.2/AgentCLI.zip" length="24329779" type="application/octet-stream" sparkle:edSignature="CeWZFIPSDJSiO8iQbm46QDRet3IYvIvgL4qSyYdDmwlTlkhV66IaXp05Wt04+xLBKTJcAv9333tA9n8BZ9IvBQ=="/>
28
+ </item>
29
+ <item>
30
+ <title>0.102.1</title>
31
+ <pubDate>Sat, 25 Jul 2026 18:58:28 +0000</pubDate>
32
+ <link>https://github.com/basnijholt/agent-cli</link>
33
+ <sparkle:version>198</sparkle:version>
34
+ <sparkle:shortVersionString>0.102.1</sparkle:shortVersionString>
35
+ <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
36
+ <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
37
+ <description sparkle:format="markdown"><![CDATA[## Bug fixes
38
+
39
+ * **Transcription now starts ~1.3s sooner after pressing the hotkey.** The macOS app spawned a login + interactive shell (`zsh -lic`) to discover `PATH` on *every* command it ran, costing 1.1–1.4s with a typical dotfiles setup. The recording pill appeared immediately but the microphone did not open until that shell finished, so speaking right away lost the first words. The login shell `PATH` is now resolved once per app launch, during the existing startup warm-up. Measured hotkey to first audio chunk: ~1.8s → ~0.4–0.6s. (#622)
40
+ * Only successful lookups are cached, so a login shell that fails once does not leave the app on a degraded `PATH` for the rest of the session.
41
+ * *Install or Update CLI* still re-probes, so a relocated `agent-cli` binary is picked up without restarting the app.
42
+
43
+ ## Performance
44
+
45
+ * `agent-cli` no longer reads its own distribution metadata on startup. `__version__` resolves lazily, saving ~29ms on every command. (#622)
46
+
47
+ ## Maintenance
48
+
49
+ * ⬆️ Update docker/login-action to v4.5.1 (#621, #619)
50
+ * ⬆️ Update actions/checkout to v7.0.1 (#617)
51
+ * ⬆️ Update release-drafter/release-drafter to v7.6.0 (#614)
52
+ * [pre-commit.ci] pre-commit autoupdate (#616)
53
+ ]]></description>
54
+ <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.102.1/AgentCLI.zip" length="24329452" type="application/octet-stream" sparkle:edSignature="MQizz/9FfhxJGKQc6I/XXtIUBLVPh20yWi/kvfE7xBpoQGPF4yE4C0T1Ex1WpU3im/vRLrMIbZMv0+yHYTifBQ=="/>
55
+ </item>
7
56
  <item>
8
57
  <title>0.102.0</title>
9
58
  <pubDate>Tue, 14 Jul 2026 05:57:01 +0000</pubDate>
@@ -148,37 +197,5 @@
148
197
  ]]></description>
149
198
  <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.2/AgentCLI.zip" length="22896370" type="application/octet-stream" sparkle:edSignature="2yWD4AB0k4GCxWKbXVysPQ5Hy0ehhW9XYlLHTipGwOCscaa+ZDVvlzM2WQtQ1EHDIsMR07loArT6PGKbXyyEBg=="/>
150
199
  </item>
151
- <item>
152
- <title>0.98.1</title>
153
- <pubDate>Thu, 04 Jun 2026 16:50:48 +0000</pubDate>
154
- <link>https://github.com/basnijholt/agent-cli</link>
155
- <sparkle:version>189</sparkle:version>
156
- <sparkle:shortVersionString>0.98.1</sparkle:shortVersionString>
157
- <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
158
- <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
159
- <description sparkle:format="markdown"><![CDATA[## What’s Changed
160
-
161
- * Add macOS transcription TTL setting (#578) @basnijholt
162
-
163
- ]]></description>
164
- <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.1/AgentCLI.zip" length="22896191" type="application/octet-stream" sparkle:edSignature="4g9PD/is1i4Htq5eM2TfAUjxEaXSb7xJJDjnliSfX5TQfqeLLsItUcaCLbhpXaOKqzq0YByVg5SLSpqHK08vAw=="/>
165
- </item>
166
- <item>
167
- <title>0.98.0</title>
168
- <pubDate>Thu, 04 Jun 2026 16:25:34 +0000</pubDate>
169
- <link>https://github.com/basnijholt/agent-cli</link>
170
- <sparkle:version>188</sparkle:version>
171
- <sparkle:shortVersionString>0.98.0</sparkle:shortVersionString>
172
- <sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
173
- <sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
174
- <description sparkle:format="markdown"><![CDATA[## What’s Changed
175
-
176
- * Document NeMo Parakeet setup (#573) @basnijholt
177
- * Add macOS transcription backend picker (#574) @basnijholt
178
- * Reference upstream NeMo validation_ds fix (#577) @basnijholt
179
-
180
- ]]></description>
181
- <enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.0/AgentCLI.zip" length="22891739" type="application/octet-stream" sparkle:edSignature="tC7V5Z+r9fyFe5GvISxKB2ExZJoyx8G7Qt/Zqnb1ELJcU6lm+0KSN3tx7d/BBm1Dbl8eKRiCorOATkTKE2HSCw=="/>
182
- </item>
183
200
  </channel>
184
201
  </rss>
@@ -60,6 +60,10 @@ faster-whisper = ["agent-cli[server]", "faster-whisper>=1.0.0", "ctranslate2>=4.
60
60
  mlx-whisper = [
61
61
  "agent-cli[server]; sys_platform == 'darwin' and platform_machine == 'arm64'",
62
62
  "mlx-whisper>=0.4.0; sys_platform == 'darwin' and platform_machine == 'arm64'",
63
+ # mlx-whisper only requires mlx>=0.11, but the MLX backend calls the
64
+ # top-level mx.clear_cache(), which does not exist before mlx 0.24
65
+ # (0.23.2 and older only expose the deprecated mx.metal.clear_cache).
66
+ "mlx>=0.24; sys_platform == 'darwin' and platform_machine == 'arm64'",
63
67
  ]
64
68
  whisper-transformers = ["agent-cli[server]", "transformers>=4.30.0", "torch>=2.0.0"]
65
69
  nemo-whisper = [
@@ -55,11 +55,31 @@ def mock_console() -> Console:
55
55
  return Console(file=io.StringIO(), width=80, force_terminal=True)
56
56
 
57
57
 
58
+ def force_plain_console(console: Console) -> None:
59
+ """Make a console audible and strip every escape sequence from its output.
60
+
61
+ `no_color` alone still emits bold and dim, so the colour system is switched
62
+ off outright.
63
+ """
64
+ console.quiet = False
65
+ console.no_color = True
66
+ console._color_system = None
67
+
68
+
58
69
  @pytest.fixture(autouse=True)
59
- def reset_rich_console_quiet() -> None:
60
- """Prevent JSON-mode CLI tests from silencing later command output."""
61
- utils.console.quiet = False
62
- utils.err_console.quiet = False
70
+ def reset_rich_console_state() -> None:
71
+ """Keep the shared consoles audible and plain for every test.
72
+
73
+ `quiet` is reset so JSON-mode CLI tests cannot silence later command output.
74
+
75
+ Colour is disabled because Rich honours `FORCE_COLOR` even when stdout is
76
+ captured, so a developer shell exporting it makes 29 tests fail on ANSI
77
+ escapes interleaved into otherwise-matching output. The consoles are mutated
78
+ in place rather than rebound: 17 modules hold a direct
79
+ `from agent_cli.core.utils import console` reference.
80
+ """
81
+ for console in (utils.console, utils.err_console):
82
+ force_plain_console(console)
63
83
 
64
84
 
65
85
  @pytest.fixture
@@ -534,6 +534,66 @@ class TestCopyEnvFiles:
534
534
  copied = copy_env_files(source, dest)
535
535
  assert len(copied) == 2
536
536
 
537
+ def test_copy_local_agent_instruction_files(self, tmp_path: Path) -> None:
538
+ """Copy local agent instruction files."""
539
+ source = tmp_path / "source"
540
+ dest = tmp_path / "dest"
541
+ source.mkdir()
542
+ dest.mkdir()
543
+ files = {
544
+ "AGENTS.local.md": "Use pytest.\n",
545
+ "CLAUDE.local.md": "Use ruff.\n",
546
+ }
547
+ for name, content in files.items():
548
+ (source / name).write_text(content)
549
+
550
+ copied = copy_env_files(source, dest)
551
+
552
+ assert {path.name for path in copied} == set(files)
553
+ for name, content in files.items():
554
+ assert (dest / name).read_text() == content
555
+
556
+ @pytest.mark.parametrize("name", ["AGENTS.local.md", "CLAUDE.local.md"])
557
+ def test_preserve_existing_local_agent_instruction_file(
558
+ self,
559
+ tmp_path: Path,
560
+ name: str,
561
+ ) -> None:
562
+ """Preserve local agent instructions checked out by the target branch."""
563
+ source = tmp_path / "source"
564
+ dest = tmp_path / "dest"
565
+ source.mkdir()
566
+ dest.mkdir()
567
+ (source / name).write_text("main worktree instructions\n")
568
+ (dest / name).write_text("target branch instructions\n")
569
+
570
+ copied = copy_env_files(source, dest)
571
+
572
+ assert copied == []
573
+ assert (dest / name).read_text() == "target branch instructions\n"
574
+
575
+ def test_preserve_dangling_local_agent_instruction_symlink(
576
+ self,
577
+ tmp_path: Path,
578
+ ) -> None:
579
+ """Preserve a dangling instruction symlink checked out by the target branch."""
580
+ source = tmp_path / "source"
581
+ dest = tmp_path / "dest"
582
+ source.mkdir()
583
+ dest.mkdir()
584
+ (source / "AGENTS.local.md").write_text("main worktree instructions\n")
585
+ dest_file = dest / "AGENTS.local.md"
586
+ try:
587
+ dest_file.symlink_to("missing-instructions.md")
588
+ except OSError as exc:
589
+ pytest.skip(f"Symlinks unavailable: {exc}")
590
+
591
+ copied = copy_env_files(source, dest)
592
+
593
+ assert copied == []
594
+ assert dest_file.is_symlink()
595
+ assert not (dest / "missing-instructions.md").exists()
596
+
537
597
  def test_skip_missing_files(self, tmp_path: Path) -> None:
538
598
  """Skip files that don't exist."""
539
599
  source = tmp_path / "source"
@@ -346,12 +346,11 @@ def test_release_workflow_publishes_macos_app_asset() -> None:
346
346
  assert "NOTARIZE=1" in workflow
347
347
  assert "gh release upload" in workflow
348
348
  assert "dist/macos/AgentCLI.dmg" in workflow
349
- assert "name: Trigger Homebrew tap update" in workflow
350
- assert "HOMEBREW_TAP_DISPATCH_TOKEN" in workflow
351
- assert "repos/basnijholt/homebrew-tap/dispatches" in workflow
352
- assert "event_type=agent-cli-release" in workflow
353
- assert "client_payload[tag_name]" in workflow
354
- assert "client_payload[asset_url]" in workflow
349
+ # The tap owns its own updates: basnijholt/homebrew-tap runs a daily cron that
350
+ # reads the latest release. Dispatching from here only duplicated that with an
351
+ # expiring cross-repo token, whose 401 turned every release run red.
352
+ assert "HOMEBREW_TAP_DISPATCH_TOKEN" not in workflow
353
+ assert "repos/basnijholt/homebrew-tap/dispatches" not in workflow
355
354
  assert "python3 .github/scripts/normalize_appcast.py macos/appcast.xml" in workflow
356
355
  assert workflow.index(
357
356
  "python3 .github/scripts/normalize_appcast.py macos/appcast.xml"