agent-cli 0.77.1__tar.gz → 0.79.0__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 (374) hide show
  1. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/scripts/check_extras_sync.py +1 -1
  2. {agent_cli-0.77.1/agent_cli → agent_cli-0.79.0/.github}/scripts/check_plugin_skill_sync.py +1 -1
  3. {agent_cli-0.77.1/agent_cli → agent_cli-0.79.0/.github}/scripts/sync_extras.py +3 -3
  4. {agent_cli-0.77.1 → agent_cli-0.79.0}/.pre-commit-config.yaml +1 -1
  5. {agent_cli-0.77.1 → agent_cli-0.79.0}/PKG-INFO +1 -1
  6. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/utils.py +2 -2
  7. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/daemon/cli.py +31 -10
  8. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/service_config.py +66 -6
  9. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/run-openwakeword.sh +3 -3
  10. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/setup-linux.sh +2 -2
  11. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/setup-macos.sh +2 -2
  12. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/setup-windows.ps1 +2 -2
  13. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/start-all-services-windows.ps1 +4 -4
  14. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/start-all-services.sh +39 -19
  15. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/daemon.md +17 -8
  16. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/linux.md +2 -2
  17. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/macos.md +2 -2
  18. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/windows.md +2 -2
  19. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_daemon.py +47 -3
  20. agent_cli-0.77.1/agent_cli/scripts/run-piper-windows.ps1 +0 -30
  21. agent_cli-0.77.1/agent_cli/scripts/run-piper.sh +0 -24
  22. agent_cli-0.77.1/agent_cli/scripts/run-whisper-linux.sh +0 -40
  23. agent_cli-0.77.1/agent_cli/scripts/run-whisper-macos.sh +0 -6
  24. agent_cli-0.77.1/agent_cli/scripts/run-whisper-windows.ps1 +0 -51
  25. agent_cli-0.77.1/agent_cli/scripts/run-whisper.sh +0 -9
  26. agent_cli-0.77.1/agent_cli/scripts/run_faster_whisper_server.py +0 -136
  27. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  28. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  29. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude-plugin/README.md +0 -0
  30. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude-plugin/marketplace.json +0 -0
  31. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude-plugin/plugin.json +0 -0
  32. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  33. {agent_cli-0.77.1 → agent_cli-0.79.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  34. {agent_cli-0.77.1 → agent_cli-0.79.0}/.cursorrules +0 -0
  35. {agent_cli-0.77.1 → agent_cli-0.79.0}/.dockerignore +0 -0
  36. {agent_cli-0.77.1 → agent_cli-0.79.0}/.env.example +0 -0
  37. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/logo.svg +0 -0
  38. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/release-drafter.yml +0 -0
  39. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/renovate.json +0 -0
  40. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/scripts/sync_requirements.py +0 -0
  41. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/automerge.yml +0 -0
  42. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/docker.yml +0 -0
  43. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/docs.yml +0 -0
  44. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/markdown-code-runner.yml +0 -0
  45. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/pytest.yml +0 -0
  46. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/release-drafter.yml +0 -0
  47. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/release.yml +0 -0
  48. {agent_cli-0.77.1 → agent_cli-0.79.0}/.github/workflows/toc.yaml +0 -0
  49. {agent_cli-0.77.1 → agent_cli-0.79.0}/.gitignore +0 -0
  50. {agent_cli-0.77.1 → agent_cli-0.79.0}/.jscpd.json +0 -0
  51. {agent_cli-0.77.1 → agent_cli-0.79.0}/.prompts/docs-review.md +0 -0
  52. {agent_cli-0.77.1 → agent_cli-0.79.0}/.prompts/pr-review.md +0 -0
  53. {agent_cli-0.77.1 → agent_cli-0.79.0}/CLAUDE.md +0 -0
  54. {agent_cli-0.77.1 → agent_cli-0.79.0}/LICENSE +0 -0
  55. {agent_cli-0.77.1 → agent_cli-0.79.0}/README.md +0 -0
  56. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/__init__.py +0 -0
  57. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/__main__.py +0 -0
  58. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_extras.json +0 -0
  59. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/.gitkeep +0 -0
  60. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/audio.txt +0 -0
  61. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
  62. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/kokoro.txt +0 -0
  63. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/llm.txt +0 -0
  64. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/memory.txt +0 -0
  65. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  66. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/piper.txt +0 -0
  67. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/rag.txt +0 -0
  68. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/server.txt +0 -0
  69. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/speed.txt +0 -0
  70. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/vad.txt +0 -0
  71. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  72. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_requirements/wyoming.txt +0 -0
  73. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/_tools.py +0 -0
  74. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/__init__.py +0 -0
  75. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  76. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/assistant.py +0 -0
  77. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/autocorrect.py +0 -0
  78. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/chat.py +0 -0
  79. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/memory/__init__.py +0 -0
  80. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/memory/add.py +0 -0
  81. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/memory/proxy.py +0 -0
  82. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/rag_proxy.py +0 -0
  83. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/speak.py +0 -0
  84. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/transcribe.py +0 -0
  85. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/transcribe_live.py +0 -0
  86. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/agents/voice_edit.py +0 -0
  87. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/api.py +0 -0
  88. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/cli.py +0 -0
  89. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/config.py +0 -0
  90. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/config_cmd.py +0 -0
  91. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/constants.py +0 -0
  92. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/__init__.py +0 -0
  93. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/audio.py +0 -0
  94. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/audio_format.py +0 -0
  95. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/chroma.py +0 -0
  96. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/deps.py +0 -0
  97. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/openai_proxy.py +0 -0
  98. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/process.py +0 -0
  99. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/reranker.py +0 -0
  100. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/sse.py +0 -0
  101. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/transcription_logger.py +0 -0
  102. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/vad.py +0 -0
  103. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/core/watch.py +0 -0
  104. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/daemon/__init__.py +0 -0
  105. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/__init__.py +0 -0
  106. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/cli.py +0 -0
  107. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  108. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  109. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/base.py +0 -0
  110. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  111. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  112. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  113. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  114. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  115. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  116. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  117. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  118. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/__init__.py +0 -0
  119. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/base.py +0 -0
  120. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/cursor.py +0 -0
  121. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/emacs.py +0 -0
  122. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  123. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/nano.py +0 -0
  124. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/neovim.py +0 -0
  125. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/registry.py +0 -0
  126. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/sublime.py +0 -0
  127. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/vim.py +0 -0
  128. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/vscode.py +0 -0
  129. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/editors/zed.py +0 -0
  130. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/project.py +0 -0
  131. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/registry.py +0 -0
  132. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/skill/SKILL.md +0 -0
  133. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/skill/examples.md +0 -0
  134. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/__init__.py +0 -0
  135. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  136. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/base.py +0 -0
  137. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/gnome.py +0 -0
  138. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  139. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/kitty.py +0 -0
  140. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/registry.py +0 -0
  141. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/tmux.py +0 -0
  142. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/warp.py +0 -0
  143. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/terminals/zellij.py +0 -0
  144. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/dev/worktree.py +0 -0
  145. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/docs_gen.py +0 -0
  146. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/example-config.toml +0 -0
  147. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/__init__.py +0 -0
  148. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/common.py +0 -0
  149. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/extras.py +0 -0
  150. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/hotkeys.py +0 -0
  151. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/launchd.py +0 -0
  152. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/services.py +0 -0
  153. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/install/systemd.py +0 -0
  154. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/__init__.py +0 -0
  155. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_files.py +0 -0
  156. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_filters.py +0 -0
  157. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_git.py +0 -0
  158. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_indexer.py +0 -0
  159. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_ingest.py +0 -0
  160. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_persistence.py +0 -0
  161. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_prompt.py +0 -0
  162. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_retrieval.py +0 -0
  163. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_store.py +0 -0
  164. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_streaming.py +0 -0
  165. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/_tasks.py +0 -0
  166. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/api.py +0 -0
  167. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/client.py +0 -0
  168. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/engine.py +0 -0
  169. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/entities.py +0 -0
  170. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/memory/models.py +0 -0
  171. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/opts.py +0 -0
  172. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/py.typed +0 -0
  173. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/__init__.py +0 -0
  174. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_indexer.py +0 -0
  175. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_indexing.py +0 -0
  176. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_prompt.py +0 -0
  177. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_retriever.py +0 -0
  178. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_store.py +0 -0
  179. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/_utils.py +0 -0
  180. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/api.py +0 -0
  181. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/client.py +0 -0
  182. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/engine.py +0 -0
  183. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/rag/models.py +0 -0
  184. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  185. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/__init__.py +0 -0
  186. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  187. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  188. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  189. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  190. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  191. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  192. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  193. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  194. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  195. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  196. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  197. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  198. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  199. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  200. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  201. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  202. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/__init__.py +0 -0
  203. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/cli.py +0 -0
  204. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/common.py +0 -0
  205. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/model_manager.py +0 -0
  206. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/model_registry.py +0 -0
  207. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/proxy/__init__.py +0 -0
  208. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/proxy/api.py +0 -0
  209. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/streaming.py +0 -0
  210. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/__init__.py +0 -0
  211. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/api.py +0 -0
  212. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  213. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/backends/base.py +0 -0
  214. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  215. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/backends/piper.py +0 -0
  216. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/model_manager.py +0 -0
  217. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/model_registry.py +0 -0
  218. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  219. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/__init__.py +0 -0
  220. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/api.py +0 -0
  221. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  222. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/base.py +0 -0
  223. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  224. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  225. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
  226. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/languages.py +0 -0
  227. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/model_manager.py +0 -0
  228. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/model_registry.py +0 -0
  229. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  230. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/__init__.py +0 -0
  231. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/_wyoming_utils.py +0 -0
  232. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/asr.py +0 -0
  233. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/llm.py +0 -0
  234. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/tts.py +0 -0
  235. {agent_cli-0.77.1 → agent_cli-0.79.0}/agent_cli/services/wake_word.py +0 -0
  236. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/docker-compose.yml +0 -0
  237. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/memory-proxy.Dockerfile +0 -0
  238. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/rag-proxy.Dockerfile +0 -0
  239. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/transcribe-proxy.Dockerfile +0 -0
  240. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/tts.Dockerfile +0 -0
  241. {agent_cli-0.77.1 → agent_cli-0.79.0}/docker/whisper.Dockerfile +0 -0
  242. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/CNAME +0 -0
  243. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/architecture/index.md +0 -0
  244. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/architecture/memory.md +0 -0
  245. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/architecture/rag.md +0 -0
  246. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/assistant.md +0 -0
  247. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/autocorrect.md +0 -0
  248. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/chat.md +0 -0
  249. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/config.md +0 -0
  250. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/dev.md +0 -0
  251. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/index.md +0 -0
  252. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/install-extras.md +0 -0
  253. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/install-hotkeys.md +0 -0
  254. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/install-services.md +0 -0
  255. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/memory.md +0 -0
  256. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/rag-proxy.md +0 -0
  257. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/server/index.md +0 -0
  258. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/server/transcribe-proxy.md +0 -0
  259. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/server/tts.md +0 -0
  260. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/server/whisper.md +0 -0
  261. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/speak.md +0 -0
  262. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/start-services.md +0 -0
  263. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/transcribe-live.md +0 -0
  264. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/transcribe.md +0 -0
  265. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/commands/voice-edit.md +0 -0
  266. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/configuration.md +0 -0
  267. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/getting-started.md +0 -0
  268. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/iOS_Shortcut_Guide.md +0 -0
  269. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/index.md +0 -0
  270. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/docker.md +0 -0
  271. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/index.md +0 -0
  272. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/installation/nixos.md +0 -0
  273. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/logo-clean.svg +0 -0
  274. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  275. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/run_markdown_code_runner.py +0 -0
  276. {agent_cli-0.77.1 → agent_cli-0.79.0}/docs/system-integration.md +0 -0
  277. {agent_cli-0.77.1 → agent_cli-0.79.0}/example.agent-cli-config.toml +0 -0
  278. {agent_cli-0.77.1 → agent_cli-0.79.0}/justfile +0 -0
  279. {agent_cli-0.77.1 → agent_cli-0.79.0}/pyproject.toml +0 -0
  280. {agent_cli-0.77.1 → agent_cli-0.79.0}/shell.nix +0 -0
  281. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/__init__.py +0 -0
  282. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/__init__.py +0 -0
  283. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_fix_my_text.py +0 -0
  284. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_interactive.py +0 -0
  285. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_interactive_extra.py +0 -0
  286. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_memory_add.py +0 -0
  287. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_speak.py +0 -0
  288. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_speak_e2e.py +0 -0
  289. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_transcribe.py +0 -0
  290. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_transcribe_agent.py +0 -0
  291. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_transcribe_e2e.py +0 -0
  292. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_transcribe_live.py +0 -0
  293. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_transcribe_recovery.py +0 -0
  294. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_tts_common.py +0 -0
  295. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_tts_common_extra.py +0 -0
  296. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_voice_agent_common.py +0 -0
  297. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_voice_edit.py +0 -0
  298. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  299. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/agents/test_wake_word_assistant.py +0 -0
  300. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/conftest.py +0 -0
  301. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/__init__.py +0 -0
  302. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/test_audio_format.py +0 -0
  303. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/test_chroma.py +0 -0
  304. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/test_sse.py +0 -0
  305. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/test_vad.py +0 -0
  306. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/core/test_watch.py +0 -0
  307. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/__init__.py +0 -0
  308. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_cli.py +0 -0
  309. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_coding_agents.py +0 -0
  310. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_editors.py +0 -0
  311. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_project.py +0 -0
  312. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_terminals.py +0 -0
  313. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_verification.py +0 -0
  314. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/dev/test_worktree.py +0 -0
  315. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/install/__init__.py +0 -0
  316. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/install/test_extras.py +0 -0
  317. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/__init__.py +0 -0
  318. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_api_health.py +0 -0
  319. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_api_integration_liveish.py +0 -0
  320. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_client.py +0 -0
  321. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_engine.py +0 -0
  322. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_files.py +0 -0
  323. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_filters.py +0 -0
  324. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_git_integration.py +0 -0
  325. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_indexer.py +0 -0
  326. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_memory_integration.py +0 -0
  327. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_proxy_passthrough.py +0 -0
  328. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_store.py +0 -0
  329. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/memory/test_utils.py +0 -0
  330. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/mocks/__init__.py +0 -0
  331. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/mocks/audio.py +0 -0
  332. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/mocks/llm.py +0 -0
  333. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/mocks/wyoming.py +0 -0
  334. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/__init__.py +0 -0
  335. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_api.py +0 -0
  336. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_engine.py +0 -0
  337. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_history.py +0 -0
  338. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_indexer.py +0 -0
  339. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_indexing.py +0 -0
  340. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_rag_client.py +0 -0
  341. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  342. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  343. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_retriever.py +0 -0
  344. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_store.py +0 -0
  345. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/rag/test_utils.py +0 -0
  346. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_api.py +0 -0
  347. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_api_integration.py +0 -0
  348. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_asr.py +0 -0
  349. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_asr_recovery.py +0 -0
  350. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_audio_e2e.py +0 -0
  351. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_cli.py +0 -0
  352. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_config.py +0 -0
  353. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_config_cmd.py +0 -0
  354. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_docs_gen.py +0 -0
  355. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_env_vars.py +0 -0
  356. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_json_output.py +0 -0
  357. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_llm.py +0 -0
  358. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_llm_gemini.py +0 -0
  359. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_memory_tools.py +0 -0
  360. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_mlx_backend.py +0 -0
  361. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_process_manager.py +0 -0
  362. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_requires_extras.py +0 -0
  363. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_server_streaming.py +0 -0
  364. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_server_tts.py +0 -0
  365. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_server_whisper.py +0 -0
  366. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_services.py +0 -0
  367. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_tools.py +0 -0
  368. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_transformers_backend.py +0 -0
  369. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_tts.py +0 -0
  370. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_utils.py +0 -0
  371. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_wake_word.py +0 -0
  372. {agent_cli-0.77.1 → agent_cli-0.79.0}/tests/test_wyoming_utils.py +0 -0
  373. {agent_cli-0.77.1 → agent_cli-0.79.0}/uv.lock +0 -0
  374. {agent_cli-0.77.1 → agent_cli-0.79.0}/zensical.toml +0 -0
@@ -64,7 +64,7 @@ def main() -> int:
64
64
  print("ERROR: _extras.json is out of sync with pyproject.toml")
65
65
  for error in errors:
66
66
  print(f" - {error}")
67
- print("\nRun 'python scripts/sync_extras.py' to regenerate _extras.json")
67
+ print("\nRun 'python .github/scripts/sync_extras.py' to regenerate _extras.json")
68
68
  return 1
69
69
 
70
70
  print("OK: _extras.json is in sync with pyproject.toml")
@@ -16,7 +16,7 @@ SYNC_PAIRS = [
16
16
 
17
17
  def main() -> int:
18
18
  """Check that plugin skill files match source files."""
19
- root = Path(__file__).parent.parent
19
+ root = Path(__file__).parent.parent.parent
20
20
  out_of_sync = []
21
21
 
22
22
  for source, target in SYNC_PAIRS:
@@ -5,7 +5,7 @@ This script parses the optional-dependencies in pyproject.toml and generates
5
5
  the agent_cli/_extras.json file with package-to-import mappings.
6
6
 
7
7
  Usage:
8
- python scripts/sync_extras.py
8
+ python .github/scripts/sync_extras.py
9
9
  """
10
10
 
11
11
  from __future__ import annotations
@@ -16,7 +16,7 @@ import sys
16
16
  import tomllib
17
17
  from pathlib import Path
18
18
 
19
- REPO_ROOT = Path(__file__).parent.parent
19
+ REPO_ROOT = Path(__file__).parent.parent.parent
20
20
  PYPROJECT = REPO_ROOT / "pyproject.toml"
21
21
  EXTRAS_FILE = REPO_ROOT / "agent_cli" / "_extras.json"
22
22
 
@@ -134,7 +134,7 @@ def main() -> int:
134
134
  missing = check_missing_metadata(extras)
135
135
  if missing:
136
136
  print(f"ERROR: The following extras need metadata in EXTRA_METADATA: {missing}")
137
- print("Please update EXTRA_METADATA in scripts/sync_extras.py")
137
+ print("Please update EXTRA_METADATA in .github/scripts/sync_extras.py")
138
138
  return 1
139
139
 
140
140
  # Generate the file
@@ -37,7 +37,7 @@ repos:
37
37
  always_run: true
38
38
  - id: check-plugin-skill-sync
39
39
  name: check plugin skill files in sync
40
- entry: python scripts/check_plugin_skill_sync.py
40
+ entry: python .github/scripts/check_plugin_skill_sync.py
41
41
  language: python
42
42
  pass_filenames: false
43
43
  files: (agent_cli/dev/skill/|\.claude-plugin/skills/|\.claude/skills/)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.77.1
3
+ Version: 0.79.0
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>
@@ -38,8 +38,8 @@ if TYPE_CHECKING:
38
38
  from logging import Handler
39
39
  from pathlib import Path
40
40
 
41
- console = Console()
42
- err_console = Console(stderr=True)
41
+ console = Console(soft_wrap=True)
42
+ err_console = Console(stderr=True, soft_wrap=True)
43
43
 
44
44
 
45
45
  def enable_json_mode() -> None:
@@ -15,7 +15,11 @@ from rich.panel import Panel
15
15
 
16
16
  from agent_cli.cli import app as main_app
17
17
  from agent_cli.core.utils import console, err_console
18
- from agent_cli.install.service_config import SERVICES, get_service_manager
18
+ from agent_cli.install.service_config import (
19
+ SERVICES,
20
+ get_default_services,
21
+ get_service_manager,
22
+ )
19
23
 
20
24
  app = typer.Typer(
21
25
  name="daemon",
@@ -29,8 +33,11 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
29
33
  | Daemon | Description | Ports |
30
34
  |--------|-------------|-------|
31
35
  | `whisper` | Speech-to-text ASR | 10300/10301 |
32
- | `tts` | Text-to-speech (Kokoro) | 10200/10201 |
36
+ | `tts-kokoro` | Text-to-speech (GPU) | 10200/10201 |
37
+ | `tts-piper` | Text-to-speech (CPU) | 10200/10201 |
33
38
  | `transcription-proxy` | ASR provider proxy | 61337 |
39
+ | `memory` | Long-term memory proxy | 8100 |
40
+ | `rag` | Document retrieval proxy | 8000 |
34
41
 
35
42
  **Examples:**
36
43
 
@@ -38,6 +45,9 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
38
45
  # Install whisper as a background daemon
39
46
  agent-cli daemon install whisper
40
47
 
48
+ # Install GPU-accelerated TTS
49
+ agent-cli daemon install tts-kokoro
50
+
41
51
  # Check status of all daemons
42
52
  agent-cli daemon status
43
53
 
@@ -83,7 +93,7 @@ def status_cmd(
83
93
  agent-cli daemon status whisper
84
94
 
85
95
  # Show more log lines
86
- agent-cli daemon status tts --logs 20
96
+ agent-cli daemon status tts-kokoro --logs 20
87
97
 
88
98
  # Hide logs
89
99
  agent-cli daemon status --logs 0
@@ -189,12 +199,16 @@ def install_cmd( # noqa: PLR0912, PLR0915
189
199
  services: Annotated[
190
200
  list[str] | None,
191
201
  typer.Argument(
192
- help="Services to install (whisper, tts, transcription-proxy).",
202
+ help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
193
203
  ),
194
204
  ] = None,
195
205
  all_services: Annotated[
196
206
  bool,
197
- typer.Option("--all", "-a", help="Install all available services"),
207
+ typer.Option(
208
+ "--all",
209
+ "-a",
210
+ help="Install all services (auto-selects tts-kokoro on GPU, tts-piper on CPU)",
211
+ ),
198
212
  ] = False,
199
213
  skip_deps: Annotated[
200
214
  bool,
@@ -216,17 +230,23 @@ def install_cmd( # noqa: PLR0912, PLR0915
216
230
 
217
231
  **Available daemons:**
218
232
  - **whisper**: Speech-to-text ASR server (ports 10300/10301)
219
- - **tts**: Text-to-speech with Kokoro (ports 10200/10201)
233
+ - **tts-kokoro**: Text-to-speech with Kokoro/GPU (ports 10200/10201)
234
+ - **tts-piper**: Text-to-speech with Piper/CPU (ports 10200/10201)
220
235
  - **transcription-proxy**: Proxy for ASR providers (port 61337)
236
+ - **memory**: Long-term memory proxy for LLMs (port 8100)
237
+ - **rag**: Document retrieval proxy for LLMs (port 8000)
238
+
239
+ Note: tts-kokoro and tts-piper use the same ports and are mutually exclusive.
240
+ Use `--all` to auto-select based on your platform (kokoro on GPU, piper on CPU).
221
241
 
222
242
  Daemons run via `uv tool run` and don't require a virtual environment.
223
243
 
224
244
  **Examples:**
225
245
 
226
246
  # Install specific daemons
227
- agent-cli daemon install whisper tts
247
+ agent-cli daemon install whisper tts-kokoro
228
248
 
229
- # Install all daemons
249
+ # Install all daemons (auto-selects TTS backend)
230
250
  agent-cli daemon install --all
231
251
 
232
252
  # Skip confirmation prompts
@@ -250,7 +270,8 @@ def install_cmd( # noqa: PLR0912, PLR0915
250
270
 
251
271
  # Determine which services to install
252
272
  if all_services:
253
- selected_services = list(SERVICES.keys())
273
+ # Get default services (auto-selects one TTS backend based on platform)
274
+ selected_services = get_default_services()
254
275
  else:
255
276
  assert services is not None # Already checked above
256
277
  invalid = [s for s in services if s not in SERVICES]
@@ -335,7 +356,7 @@ def uninstall_cmd(
335
356
  services: Annotated[
336
357
  list[str] | None,
337
358
  typer.Argument(
338
- help="Services to uninstall (whisper, tts, transcription-proxy).",
359
+ help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
339
360
  ),
340
361
  ] = None,
341
362
  all_services: Annotated[
@@ -26,9 +26,44 @@ class ServiceConfig:
26
26
  display_name: str
27
27
  description: str
28
28
  extra: str # uv extras to install (e.g., "server,kokoro,wyoming"), empty for external
29
- command_args: list[str] # Additional args after "agent-cli server <name>"
29
+ command_args: list[str] # Additional args after the base command
30
30
  python_version: str | None = None # Pin Python version for dependencies without py3.14 wheels
31
31
  macos_extra: str | None = None # Override extra on macOS (e.g., whisper-mlx)
32
+ # Custom command path (default: ["server", name]). For non-server commands like "memory proxy"
33
+ command: list[str] | None = None
34
+
35
+
36
+ # TTS services that are mutually exclusive (same ports)
37
+ TTS_SERVICES = ("tts-kokoro", "tts-piper")
38
+
39
+
40
+ def detect_preferred_tts() -> str:
41
+ """Detect the preferred TTS backend based on platform.
42
+
43
+ Returns tts-kokoro on macOS (MPS) or Linux with CUDA hints,
44
+ otherwise tts-piper for CPU-only systems.
45
+ """
46
+ system = platform.system()
47
+ if system == "Darwin":
48
+ # macOS has MPS on Apple Silicon
49
+ return "tts-kokoro"
50
+ if system == "Linux":
51
+ # Check for CUDA availability hints
52
+ cuda_hints = [
53
+ Path("/usr/local/cuda").exists(),
54
+ shutil.which("nvidia-smi") is not None,
55
+ os.environ.get("CUDA_HOME") is not None,
56
+ ]
57
+ if any(cuda_hints):
58
+ return "tts-kokoro"
59
+ return "tts-piper"
60
+
61
+
62
+ def get_default_services() -> list[str]:
63
+ """Get default services for --all, picking one TTS backend automatically."""
64
+ preferred_tts = detect_preferred_tts()
65
+ excluded_tts = "tts-piper" if preferred_tts == "tts-kokoro" else "tts-kokoro"
66
+ return [name for name in SERVICES if name != excluded_tts]
32
67
 
33
68
 
34
69
  # Available services for installation
@@ -42,14 +77,21 @@ SERVICES: dict[str, ServiceConfig] = {
42
77
  python_version="3.13", # onnxruntime lacks py3.14 wheels (Linux only)
43
78
  macos_extra="server,mlx-whisper,wyoming",
44
79
  ),
45
- "tts": ServiceConfig(
46
- name="tts",
80
+ "tts-kokoro": ServiceConfig(
81
+ name="tts", # Server command is still "tts"
47
82
  display_name="Kokoro TTS",
48
- description="Text-to-speech server (ports 10200/10201)",
83
+ description="Text-to-speech with Kokoro (GPU, ports 10200/10201)",
49
84
  extra="server,kokoro,wyoming",
50
85
  command_args=["--backend", "kokoro"],
51
86
  python_version="3.12", # curated-tokenizers (via kokoro→misaki→spacy) lacks py3.13 wheels
52
87
  ),
88
+ "tts-piper": ServiceConfig(
89
+ name="tts", # Server command is still "tts"
90
+ display_name="Piper TTS",
91
+ description="Text-to-speech with Piper (CPU, ports 10200/10201)",
92
+ extra="server,piper,wyoming",
93
+ command_args=["--backend", "piper"],
94
+ ),
53
95
  "transcription-proxy": ServiceConfig(
54
96
  name="transcription-proxy",
55
97
  display_name="Transcription Proxy",
@@ -57,6 +99,22 @@ SERVICES: dict[str, ServiceConfig] = {
57
99
  extra="server",
58
100
  command_args=[],
59
101
  ),
102
+ "memory": ServiceConfig(
103
+ name="memory",
104
+ display_name="Memory Proxy",
105
+ description="Long-term memory proxy for LLMs (port 8100)",
106
+ extra="memory",
107
+ command_args=[],
108
+ command=["memory", "proxy"],
109
+ ),
110
+ "rag": ServiceConfig(
111
+ name="rag",
112
+ display_name="RAG Proxy",
113
+ description="Document retrieval proxy for LLMs (port 8000)",
114
+ extra="rag",
115
+ command_args=[],
116
+ command=["rag-proxy"],
117
+ ),
60
118
  }
61
119
 
62
120
 
@@ -76,13 +134,15 @@ def build_service_command(
76
134
  if service.python_version and not (use_macos_extra and service.macos_extra):
77
135
  args.extend(["--python", service.python_version])
78
136
 
137
+ # Build the command: either custom command path or default "server <name>"
138
+ cmd_path = service.command if service.command else ["server", service.name]
139
+
79
140
  args.extend(
80
141
  [
81
142
  "--from",
82
143
  f"agent-cli[{extra}]",
83
144
  "agent-cli",
84
- "server",
85
- service.name,
145
+ *cmd_path,
86
146
  *service.command_args,
87
147
  ],
88
148
  )
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env bash
2
2
  echo "👂 Starting Wyoming OpenWakeWord on port 10400..."
3
3
 
4
- # Use the LiteRT fork until the PR is merged
5
- # PR: https://github.com/rhasspy/wyoming-openwakeword/pull/XXX
6
- # This version works on macOS and other platforms without tflite-runtime
4
+ # Use the LiteRT fork because upstream depends on tflite-runtime-nightly
5
+ # which lacks Python 3.12+ wheels. This fork uses ai-edge-litert instead.
6
+ # See: https://github.com/rhasspy/wyoming-openwakeword/pull/43
7
7
 
8
8
  uvx --python 3.12 --from git+https://github.com/basnijholt/wyoming-openwakeword.git@litert \
9
9
  wyoming-openwakeword \
@@ -99,8 +99,8 @@ echo " scripts/start-all-services.sh"
99
99
  echo ""
100
100
  echo "Option 2 - Run services individually:"
101
101
  echo " 1. Ollama: ollama serve"
102
- echo " 2. Whisper: scripts/run-whisper.sh"
103
- echo " 3. Piper: scripts/run-piper.sh"
102
+ echo " 2. Whisper: agent-cli server whisper"
103
+ echo " 3. Piper: agent-cli server tts --backend piper"
104
104
  echo " 4. OpenWakeWord: scripts/run-openwakeword.sh"
105
105
  echo ""
106
106
  echo "📝 Note: Services use uvx to run without needing virtual environments."
@@ -68,9 +68,9 @@ echo " 1. Ollama: running as brew service (brew services start ollama)"
68
68
  if [ "$(uname -m)" = "arm64" ]; then
69
69
  echo " 2. Whisper: running as launchd service (wyoming-mlx-whisper)"
70
70
  else
71
- echo " 2. Whisper: ./run-whisper.sh"
71
+ echo " 2. Whisper: agent-cli server whisper"
72
72
  fi
73
- echo " 3. Piper: ./run-piper.sh"
73
+ echo " 3. Piper: agent-cli server tts --backend piper"
74
74
  echo " 4. OpenWakeWord: ./run-openwakeword.sh"
75
75
  echo ""
76
76
  echo "🎉 agent-cli has been installed and is ready to use!"
@@ -55,8 +55,8 @@ Write-Host " .\scripts\start-all-services-windows.ps1" -ForegroundColor Gray
55
55
  Write-Host ""
56
56
  Write-Host "Option 2 - Run services individually:" -ForegroundColor White
57
57
  Write-Host " 1. Ollama: ollama serve (or it runs automatically as a service)" -ForegroundColor Gray
58
- Write-Host " 2. Whisper: .\scripts\run-whisper-windows.ps1" -ForegroundColor Gray
59
- Write-Host " 3. Piper: .\scripts\run-piper-windows.ps1" -ForegroundColor Gray
58
+ Write-Host " 2. Whisper: agent-cli server whisper" -ForegroundColor Gray
59
+ Write-Host " 3. Piper: agent-cli server tts --backend piper" -ForegroundColor Gray
60
60
  Write-Host ""
61
61
  Write-Host "📝 Note: Scripts use uvx to run without needing virtual environments." -ForegroundColor Yellow
62
62
  Write-Host "For GPU acceleration, make sure NVIDIA drivers and CUDA 12 are installed." -ForegroundColor Yellow
@@ -19,8 +19,8 @@ if ($UseWindowsTerminal) {
19
19
  # Start Windows Terminal with multiple tabs
20
20
  wt --title "agent-cli services" `
21
21
  new-tab --title "Ollama" powershell -NoExit -Command "ollama serve" `; `
22
- new-tab --title "Whisper" powershell -NoExit -ExecutionPolicy Bypass -File "$ScriptDir\run-whisper-windows.ps1" `; `
23
- new-tab --title "Piper" powershell -NoExit -ExecutionPolicy Bypass -File "$ScriptDir\run-piper-windows.ps1"
22
+ new-tab --title "Whisper" powershell -NoExit -Command "agent-cli server whisper" `; `
23
+ new-tab --title "Piper" powershell -NoExit -Command "agent-cli server tts --backend piper"
24
24
 
25
25
  Write-Host ""
26
26
  Write-Host "✅ Services started in Windows Terminal tabs!" -ForegroundColor Green
@@ -33,8 +33,8 @@ if ($UseWindowsTerminal) {
33
33
 
34
34
  # Start each service in a new PowerShell window
35
35
  Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Ollama' -ForegroundColor Cyan; ollama serve"
36
- Start-Process powershell -ArgumentList "-NoExit", "-ExecutionPolicy", "Bypass", "-File", "$ScriptDir\run-whisper-windows.ps1"
37
- Start-Process powershell -ArgumentList "-NoExit", "-ExecutionPolicy", "Bypass", "-File", "$ScriptDir\run-piper-windows.ps1"
36
+ Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Whisper' -ForegroundColor Cyan; agent-cli server whisper"
37
+ Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Piper' -ForegroundColor Cyan; agent-cli server tts --backend piper"
38
38
 
39
39
  Write-Host ""
40
40
  Write-Host "✅ Services started in separate windows!" -ForegroundColor Green
@@ -36,19 +36,28 @@ HELP_TEXT='╔══════════════════════
36
36
  ║ ║
37
37
  ╚═══════════════════════════════════════════════════════════════════╝'
38
38
 
39
- # On macOS, check if services are running via brew/launchd
39
+ # Check if services are running via system service managers
40
40
  OLLAMA_BREW_SERVICE=false
41
- WHISPER_LAUNCHD=false
41
+ WHISPER_DAEMON=false
42
+ TTS_DAEMON=false
42
43
  if [ "$(uname -s)" = "Darwin" ]; then
43
- # Check if Ollama is running as a brew service
44
+ # macOS: Check launchd services
44
45
  if launchctl list homebrew.mxcl.ollama &>/dev/null; then
45
46
  OLLAMA_BREW_SERVICE=true
46
47
  fi
47
- # Check if Whisper is running as a launchd service (ARM only)
48
- if [ "$(uname -m)" = "arm64" ]; then
49
- if launchctl list com.wyoming_mlx_whisper &>/dev/null; then
50
- WHISPER_LAUNCHD=true
51
- fi
48
+ if launchctl list com.agent_cli.whisper &>/dev/null; then
49
+ WHISPER_DAEMON=true
50
+ fi
51
+ if launchctl list com.agent_cli.tts &>/dev/null; then
52
+ TTS_DAEMON=true
53
+ fi
54
+ elif [ "$(uname -s)" = "Linux" ]; then
55
+ # Linux: Check systemd user services
56
+ if systemctl --user is-active --quiet agent-cli-whisper.service 2>/dev/null; then
57
+ WHISPER_DAEMON=true
58
+ fi
59
+ if systemctl --user is-active --quiet agent-cli-tts.service 2>/dev/null; then
60
+ TTS_DAEMON=true
52
61
  fi
53
62
  fi
54
63
 
@@ -70,29 +79,40 @@ else
70
79
  }"
71
80
  fi
72
81
 
73
- # Generate Whisper pane command based on whether launchd service is running
74
- if [ "$WHISPER_LAUNCHD" = true ]; then
82
+ # Generate Whisper pane command based on whether daemon is running
83
+ if [ "$WHISPER_DAEMON" = true ]; then
75
84
  WHISPER_PANE=" pane {
76
- name \"Whisper (launchd)\"
85
+ name \"Whisper (daemon)\"
77
86
  command \"sh\"
78
- args \"-c\" \"echo '🎤 Whisper is running as a background launchd service'; echo ''; echo 'Service: com.wyoming_mlx_whisper'; echo 'Logs: ~/Library/Logs/wyoming-mlx-whisper/'; echo ''; echo 'To view logs:'; echo ' tail -f ~/Library/Logs/wyoming-mlx-whisper/wyoming-mlx-whisper.out'; echo ''; echo 'To uninstall:'; echo ' curl -fsSL https://raw.githubusercontent.com/basnijholt/wyoming-mlx-whisper/main/scripts/uninstall_service.sh | bash'; echo ''; read -r\"
87
+ args \"-c\" \"echo '🎤 Whisper running via daemon'; echo ''; echo 'Check status: agent-cli daemon status whisper'; echo ''; read -r\"
79
88
  }"
80
89
  else
81
90
  WHISPER_PANE=" pane {
82
91
  name \"Whisper\"
83
- cwd \"$SCRIPTS_DIR\"
84
- command \"./run-whisper.sh\"
92
+ command \"agent-cli\"
93
+ args \"server\" \"whisper\"
85
94
  }"
86
95
  fi
87
96
 
97
+ # Generate TTS pane based on whether daemon is running
98
+ if [ "$TTS_DAEMON" = true ]; then
99
+ TTS_PANE=" pane {
100
+ name \"TTS (daemon)\"
101
+ command \"sh\"
102
+ args \"-c\" \"echo '🔊 TTS running via daemon'; echo ''; echo 'Check status: agent-cli daemon status'; echo ''; read -r\"
103
+ }"
104
+ else
105
+ TTS_PANE=" pane {
106
+ name \"TTS\"
107
+ command \"agent-cli\"
108
+ args \"server\" \"tts\" \"--backend\" \"piper\"
109
+ }"
110
+ fi
111
+
88
112
  BOTTOM_PANES=" pane split_direction=\"horizontal\" {
89
113
  $WHISPER_PANE
90
114
  pane split_direction=\"horizontal\" {
91
- pane {
92
- name \"Piper\"
93
- cwd \"$SCRIPTS_DIR\"
94
- command \"./run-piper.sh\"
95
- }
115
+ $TTS_PANE
96
116
  pane {
97
117
  name \"OpenWakeWord\"
98
118
  cwd \"$SCRIPTS_DIR\"
@@ -26,8 +26,11 @@ Daemons run via `uv tool run` and start automatically at login.
26
26
  | Daemon | Description | Ports |
27
27
  |--------|-------------|-------|
28
28
  | `whisper` | Speech-to-text ASR server | 10300/10301 |
29
- | `tts` | Text-to-speech (Kokoro) | 10200/10201 |
29
+ | `tts-kokoro` | Text-to-speech with Kokoro (GPU) | 10200/10201 |
30
+ | `tts-piper` | Text-to-speech with Piper (CPU) | 10200/10201 |
30
31
  | `transcription-proxy` | ASR provider proxy | 61337 |
32
+ | `memory` | Long-term memory proxy for LLMs | 8100 |
33
+ | `rag` | Document retrieval proxy for LLMs | 8000 |
31
34
 
32
35
  ## Commands
33
36
 
@@ -49,7 +52,7 @@ Install server daemons as background processes.
49
52
 
50
53
  ```bash
51
54
  # Install specific daemons
52
- agent-cli daemon install whisper tts
55
+ agent-cli daemon install whisper tts-kokoro
53
56
 
54
57
  # Install all daemons
55
58
  agent-cli daemon install --all
@@ -72,7 +75,7 @@ Uninstall server daemons.
72
75
 
73
76
  ```bash
74
77
  # Uninstall specific daemons
75
- agent-cli daemon uninstall whisper tts
78
+ agent-cli daemon uninstall whisper tts-kokoro
76
79
 
77
80
  # Uninstall all daemons
78
81
  agent-cli daemon uninstall --all
@@ -131,11 +134,14 @@ agent-cli daemon uninstall whisper
131
134
  Available daemons:
132
135
 
133
136
 
134
- Daemon Description Ports
135
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
136
- whisper Speech-to-text ASR 10300/10301
137
- tts Text-to-speech (Kokoro) 10200/10201
138
- transcription-proxy ASR provider proxy 61337
137
+ Daemon Description Ports
138
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
139
+ whisper Speech-to-text ASR 10300/10301
140
+ tts-kokoro Text-to-speech (GPU) 10200/10201
141
+ tts-piper Text-to-speech (CPU) 10200/10201
142
+ transcription-proxy ASR provider proxy 61337
143
+ memory Long-term memory proxy 8100
144
+ rag Document retrieval proxy 8000
139
145
 
140
146
 
141
147
  Examples:
@@ -144,6 +150,9 @@ agent-cli daemon uninstall whisper
144
150
  # Install whisper as a background daemon
145
151
  agent-cli daemon install whisper
146
152
 
153
+ # Install GPU-accelerated TTS
154
+ agent-cli daemon install tts-kokoro
155
+
147
156
  # Check status of all daemons
148
157
  agent-cli daemon status
149
158
 
@@ -72,10 +72,10 @@ curl -fsSL https://ollama.ai/install.sh | sh
72
72
  ollama serve
73
73
 
74
74
  # Terminal 2: Whisper (with GPU)
75
- scripts/run-whisper.sh
75
+ agent-cli server whisper
76
76
 
77
77
  # Terminal 3: Piper
78
- scripts/run-piper.sh
78
+ agent-cli server tts --backend piper
79
79
 
80
80
  # Terminal 4: OpenWakeWord
81
81
  scripts/run-openwakeword.sh
@@ -98,10 +98,10 @@ ollama serve
98
98
  # Whisper (Apple Silicon: launchd service or manual)
99
99
  launchctl list com.wyoming_mlx_whisper
100
100
  # Or run in foreground:
101
- scripts/run-whisper.sh
101
+ agent-cli server whisper
102
102
 
103
103
  # Piper
104
- scripts/run-piper.sh
104
+ agent-cli server tts --backend piper
105
105
 
106
106
  # OpenWakeWord
107
107
  scripts/run-openwakeword.sh
@@ -103,10 +103,10 @@ If you prefer manual setup:
103
103
  ollama serve
104
104
 
105
105
  # Terminal 2: Whisper
106
- powershell -ExecutionPolicy Bypass -File scripts/run-whisper-windows.ps1
106
+ agent-cli server whisper
107
107
 
108
108
  # Terminal 3: Piper
109
- powershell -ExecutionPolicy Bypass -File scripts/run-piper-windows.ps1
109
+ agent-cli server tts --backend piper
110
110
  ```
111
111
 
112
112
  ---
@@ -23,6 +23,7 @@ from agent_cli.install.service_config import (
23
23
  UninstallResult,
24
24
  build_service_command,
25
25
  find_uv,
26
+ get_default_services,
26
27
  get_service_manager,
27
28
  install_uv,
28
29
  )
@@ -46,8 +47,11 @@ class TestServiceConfig:
46
47
  def test_services_defined(self) -> None:
47
48
  """Test that expected services are defined."""
48
49
  assert "whisper" in SERVICES
49
- assert "tts" in SERVICES
50
+ assert "tts-kokoro" in SERVICES
51
+ assert "tts-piper" in SERVICES
50
52
  assert "transcription-proxy" in SERVICES
53
+ assert "memory" in SERVICES
54
+ assert "rag" in SERVICES
51
55
 
52
56
  def test_service_config_fields(self) -> None:
53
57
  """Test ServiceConfig has required fields."""
@@ -110,6 +114,46 @@ class TestServiceConfig:
110
114
  cmd = build_service_command(service, uv_path, use_macos_extra=True)
111
115
  assert "agent-cli[server,macos-dep]" in cmd
112
116
 
117
+ def test_build_service_command_custom_command(self, tmp_path: Path) -> None:
118
+ """Test building service command with custom command path."""
119
+ uv_path = tmp_path / "uv"
120
+ uv_path.touch()
121
+ # Test custom command like "memory proxy"
122
+ service = ServiceConfig(
123
+ name="memory",
124
+ display_name="Memory Proxy",
125
+ description="Memory proxy",
126
+ extra="memory",
127
+ command_args=["--port", "8100"],
128
+ command=["memory", "proxy"],
129
+ )
130
+ cmd = build_service_command(service, uv_path)
131
+ assert "agent-cli[memory]" in cmd
132
+ assert "memory" in cmd
133
+ assert "proxy" in cmd
134
+ assert "--port" in cmd
135
+ assert "8100" in cmd
136
+ # Should NOT have "server" in the command
137
+ assert cmd.count("server") == 0
138
+
139
+ def test_memory_and_rag_services(self, tmp_path: Path) -> None:
140
+ """Test that memory and rag services have correct custom commands."""
141
+ uv_path = tmp_path / "uv"
142
+ uv_path.touch()
143
+
144
+ memory = SERVICES["memory"]
145
+ assert memory.command == ["memory", "proxy"]
146
+ cmd = build_service_command(memory, uv_path)
147
+ assert "agent-cli[memory]" in cmd
148
+ assert "memory" in cmd
149
+ assert "proxy" in cmd
150
+
151
+ rag = SERVICES["rag"]
152
+ assert rag.command == ["rag-proxy"]
153
+ cmd = build_service_command(rag, uv_path)
154
+ assert "agent-cli[rag]" in cmd
155
+ assert "rag-proxy" in cmd
156
+
113
157
  def test_find_uv_in_path(self, tmp_path: Path) -> None:
114
158
  """Test finding uv when it exists in extra_paths."""
115
159
  uv_path = tmp_path / "uv"
@@ -306,8 +350,8 @@ class TestDaemonCLI:
306
350
 
307
351
  result = runner.invoke(app, ["daemon", "install", "--all", "-y"])
308
352
  assert result.exit_code == 0
309
- # Should install all services
310
- assert mock_manager.install_service.call_count == len(SERVICES)
353
+ # Should install default services (one TTS backend auto-selected)
354
+ assert mock_manager.install_service.call_count == len(get_default_services())
311
355
 
312
356
  @patch("agent_cli.daemon.cli.get_service_manager")
313
357
  def test_daemon_uninstall_no_args(self, mock_get_manager: MagicMock) -> None: