agent-cli 0.78.0__tar.gz → 0.79.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/scripts/check_extras_sync.py +1 -1
  2. {agent_cli-0.78.0/agent_cli → agent_cli-0.79.1/.github}/scripts/check_plugin_skill_sync.py +1 -1
  3. {agent_cli-0.78.0/agent_cli → agent_cli-0.79.1/.github}/scripts/sync_extras.py +3 -3
  4. {agent_cli-0.78.0 → agent_cli-0.79.1}/.pre-commit-config.yaml +1 -1
  5. {agent_cli-0.78.0 → agent_cli-0.79.1}/PKG-INFO +1 -1
  6. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/utils.py +2 -2
  7. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/daemon/cli.py +22 -6
  8. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/service_config.py +56 -3
  9. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/run-openwakeword.sh +3 -3
  10. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/setup-linux.sh +2 -2
  11. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/setup-macos.sh +5 -15
  12. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/setup-windows.ps1 +2 -2
  13. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/start-all-services-windows.ps1 +4 -4
  14. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/start-all-services.sh +39 -19
  15. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/daemon.md +10 -6
  16. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/linux.md +2 -2
  17. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/macos.md +15 -14
  18. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/windows.md +2 -2
  19. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_daemon.py +45 -2
  20. agent_cli-0.78.0/agent_cli/scripts/run-piper-windows.ps1 +0 -30
  21. agent_cli-0.78.0/agent_cli/scripts/run-piper.sh +0 -24
  22. agent_cli-0.78.0/agent_cli/scripts/run-whisper-linux.sh +0 -40
  23. agent_cli-0.78.0/agent_cli/scripts/run-whisper-macos.sh +0 -6
  24. agent_cli-0.78.0/agent_cli/scripts/run-whisper-windows.ps1 +0 -51
  25. agent_cli-0.78.0/agent_cli/scripts/run-whisper.sh +0 -9
  26. agent_cli-0.78.0/agent_cli/scripts/run_faster_whisper_server.py +0 -136
  27. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  28. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude/skills/agent-cli-dev/examples.md +0 -0
  29. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude-plugin/README.md +0 -0
  30. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude-plugin/marketplace.json +0 -0
  31. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude-plugin/plugin.json +0 -0
  32. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  33. {agent_cli-0.78.0 → agent_cli-0.79.1}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  34. {agent_cli-0.78.0 → agent_cli-0.79.1}/.cursorrules +0 -0
  35. {agent_cli-0.78.0 → agent_cli-0.79.1}/.dockerignore +0 -0
  36. {agent_cli-0.78.0 → agent_cli-0.79.1}/.env.example +0 -0
  37. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/logo.svg +0 -0
  38. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/release-drafter.yml +0 -0
  39. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/renovate.json +0 -0
  40. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/scripts/sync_requirements.py +0 -0
  41. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/automerge.yml +0 -0
  42. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/docker.yml +0 -0
  43. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/docs.yml +0 -0
  44. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/markdown-code-runner.yml +0 -0
  45. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/pytest.yml +0 -0
  46. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/release-drafter.yml +0 -0
  47. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/release.yml +0 -0
  48. {agent_cli-0.78.0 → agent_cli-0.79.1}/.github/workflows/toc.yaml +0 -0
  49. {agent_cli-0.78.0 → agent_cli-0.79.1}/.gitignore +0 -0
  50. {agent_cli-0.78.0 → agent_cli-0.79.1}/.jscpd.json +0 -0
  51. {agent_cli-0.78.0 → agent_cli-0.79.1}/.prompts/docs-review.md +0 -0
  52. {agent_cli-0.78.0 → agent_cli-0.79.1}/.prompts/pr-review.md +0 -0
  53. {agent_cli-0.78.0 → agent_cli-0.79.1}/CLAUDE.md +0 -0
  54. {agent_cli-0.78.0 → agent_cli-0.79.1}/LICENSE +0 -0
  55. {agent_cli-0.78.0 → agent_cli-0.79.1}/README.md +0 -0
  56. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/__init__.py +0 -0
  57. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/__main__.py +0 -0
  58. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_extras.json +0 -0
  59. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/.gitkeep +0 -0
  60. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/audio.txt +0 -0
  61. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/faster-whisper.txt +0 -0
  62. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/kokoro.txt +0 -0
  63. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/llm.txt +0 -0
  64. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/memory.txt +0 -0
  65. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  66. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/piper.txt +0 -0
  67. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/rag.txt +0 -0
  68. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/server.txt +0 -0
  69. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/speed.txt +0 -0
  70. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/vad.txt +0 -0
  71. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  72. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_requirements/wyoming.txt +0 -0
  73. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/_tools.py +0 -0
  74. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/__init__.py +0 -0
  75. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/_voice_agent_common.py +0 -0
  76. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/assistant.py +0 -0
  77. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/autocorrect.py +0 -0
  78. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/chat.py +0 -0
  79. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/memory/__init__.py +0 -0
  80. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/memory/add.py +0 -0
  81. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/memory/proxy.py +0 -0
  82. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/rag_proxy.py +0 -0
  83. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/speak.py +0 -0
  84. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/transcribe.py +0 -0
  85. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/transcribe_live.py +0 -0
  86. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/agents/voice_edit.py +0 -0
  87. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/api.py +0 -0
  88. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/cli.py +0 -0
  89. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/config.py +0 -0
  90. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/config_cmd.py +0 -0
  91. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/constants.py +0 -0
  92. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/__init__.py +0 -0
  93. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/audio.py +0 -0
  94. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/audio_format.py +0 -0
  95. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/chroma.py +0 -0
  96. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/deps.py +0 -0
  97. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/openai_proxy.py +0 -0
  98. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/process.py +0 -0
  99. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/reranker.py +0 -0
  100. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/sse.py +0 -0
  101. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/transcription_logger.py +0 -0
  102. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/vad.py +0 -0
  103. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/core/watch.py +0 -0
  104. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/daemon/__init__.py +0 -0
  105. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/__init__.py +0 -0
  106. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/cli.py +0 -0
  107. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/__init__.py +0 -0
  108. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/aider.py +0 -0
  109. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/base.py +0 -0
  110. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/claude.py +0 -0
  111. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/codex.py +0 -0
  112. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  113. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/copilot.py +0 -0
  114. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  115. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/gemini.py +0 -0
  116. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/opencode.py +0 -0
  117. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/coding_agents/registry.py +0 -0
  118. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/__init__.py +0 -0
  119. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/base.py +0 -0
  120. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/cursor.py +0 -0
  121. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/emacs.py +0 -0
  122. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/jetbrains.py +0 -0
  123. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/nano.py +0 -0
  124. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/neovim.py +0 -0
  125. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/registry.py +0 -0
  126. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/sublime.py +0 -0
  127. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/vim.py +0 -0
  128. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/vscode.py +0 -0
  129. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/editors/zed.py +0 -0
  130. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/project.py +0 -0
  131. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/registry.py +0 -0
  132. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/skill/SKILL.md +0 -0
  133. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/skill/examples.md +0 -0
  134. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/__init__.py +0 -0
  135. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  136. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/base.py +0 -0
  137. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/gnome.py +0 -0
  138. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/iterm2.py +0 -0
  139. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/kitty.py +0 -0
  140. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/registry.py +0 -0
  141. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/tmux.py +0 -0
  142. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/warp.py +0 -0
  143. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/terminals/zellij.py +0 -0
  144. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/dev/worktree.py +0 -0
  145. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/docs_gen.py +0 -0
  146. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/example-config.toml +0 -0
  147. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/__init__.py +0 -0
  148. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/common.py +0 -0
  149. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/extras.py +0 -0
  150. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/hotkeys.py +0 -0
  151. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/launchd.py +0 -0
  152. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/services.py +0 -0
  153. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/install/systemd.py +0 -0
  154. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/__init__.py +0 -0
  155. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_files.py +0 -0
  156. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_filters.py +0 -0
  157. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_git.py +0 -0
  158. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_indexer.py +0 -0
  159. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_ingest.py +0 -0
  160. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_persistence.py +0 -0
  161. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_prompt.py +0 -0
  162. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_retrieval.py +0 -0
  163. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_store.py +0 -0
  164. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_streaming.py +0 -0
  165. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/_tasks.py +0 -0
  166. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/api.py +0 -0
  167. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/client.py +0 -0
  168. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/engine.py +0 -0
  169. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/entities.py +0 -0
  170. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/memory/models.py +0 -0
  171. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/opts.py +0 -0
  172. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/py.typed +0 -0
  173. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/__init__.py +0 -0
  174. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_indexer.py +0 -0
  175. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_indexing.py +0 -0
  176. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_prompt.py +0 -0
  177. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_retriever.py +0 -0
  178. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_store.py +0 -0
  179. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/_utils.py +0 -0
  180. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/api.py +0 -0
  181. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/client.py +0 -0
  182. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/engine.py +0 -0
  183. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/rag/models.py +0 -0
  184. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  185. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/__init__.py +0 -0
  186. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  187. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  188. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  189. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  190. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  191. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  192. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  193. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  194. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  195. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  196. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  197. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  198. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  199. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  200. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  201. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  202. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/__init__.py +0 -0
  203. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/cli.py +0 -0
  204. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/common.py +0 -0
  205. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/model_manager.py +0 -0
  206. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/model_registry.py +0 -0
  207. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/proxy/__init__.py +0 -0
  208. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/proxy/api.py +0 -0
  209. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/streaming.py +0 -0
  210. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/__init__.py +0 -0
  211. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/api.py +0 -0
  212. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/backends/__init__.py +0 -0
  213. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/backends/base.py +0 -0
  214. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/backends/kokoro.py +0 -0
  215. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/backends/piper.py +0 -0
  216. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/model_manager.py +0 -0
  217. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/model_registry.py +0 -0
  218. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/tts/wyoming_handler.py +0 -0
  219. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/__init__.py +0 -0
  220. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/api.py +0 -0
  221. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/backends/__init__.py +0 -0
  222. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/backends/base.py +0 -0
  223. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  224. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/backends/mlx.py +0 -0
  225. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/backends/transformers.py +0 -0
  226. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/languages.py +0 -0
  227. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/model_manager.py +0 -0
  228. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/model_registry.py +0 -0
  229. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  230. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/__init__.py +0 -0
  231. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/_wyoming_utils.py +0 -0
  232. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/asr.py +0 -0
  233. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/llm.py +0 -0
  234. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/tts.py +0 -0
  235. {agent_cli-0.78.0 → agent_cli-0.79.1}/agent_cli/services/wake_word.py +0 -0
  236. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/docker-compose.yml +0 -0
  237. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/memory-proxy.Dockerfile +0 -0
  238. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/rag-proxy.Dockerfile +0 -0
  239. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/transcribe-proxy.Dockerfile +0 -0
  240. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/tts.Dockerfile +0 -0
  241. {agent_cli-0.78.0 → agent_cli-0.79.1}/docker/whisper.Dockerfile +0 -0
  242. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/CNAME +0 -0
  243. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/architecture/index.md +0 -0
  244. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/architecture/memory.md +0 -0
  245. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/architecture/rag.md +0 -0
  246. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/assistant.md +0 -0
  247. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/autocorrect.md +0 -0
  248. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/chat.md +0 -0
  249. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/config.md +0 -0
  250. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/dev.md +0 -0
  251. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/index.md +0 -0
  252. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/install-extras.md +0 -0
  253. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/install-hotkeys.md +0 -0
  254. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/install-services.md +0 -0
  255. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/memory.md +0 -0
  256. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/rag-proxy.md +0 -0
  257. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/server/index.md +0 -0
  258. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/server/transcribe-proxy.md +0 -0
  259. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/server/tts.md +0 -0
  260. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/server/whisper.md +0 -0
  261. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/speak.md +0 -0
  262. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/start-services.md +0 -0
  263. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/transcribe-live.md +0 -0
  264. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/transcribe.md +0 -0
  265. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/commands/voice-edit.md +0 -0
  266. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/configuration.md +0 -0
  267. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/getting-started.md +0 -0
  268. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/iOS_Shortcut_Guide.md +0 -0
  269. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/index.md +0 -0
  270. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/docker.md +0 -0
  271. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/index.md +0 -0
  272. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/installation/nixos.md +0 -0
  273. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/logo-clean.svg +0 -0
  274. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  275. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/run_markdown_code_runner.py +0 -0
  276. {agent_cli-0.78.0 → agent_cli-0.79.1}/docs/system-integration.md +0 -0
  277. {agent_cli-0.78.0 → agent_cli-0.79.1}/example.agent-cli-config.toml +0 -0
  278. {agent_cli-0.78.0 → agent_cli-0.79.1}/justfile +0 -0
  279. {agent_cli-0.78.0 → agent_cli-0.79.1}/pyproject.toml +0 -0
  280. {agent_cli-0.78.0 → agent_cli-0.79.1}/shell.nix +0 -0
  281. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/__init__.py +0 -0
  282. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/__init__.py +0 -0
  283. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_fix_my_text.py +0 -0
  284. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_interactive.py +0 -0
  285. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_interactive_extra.py +0 -0
  286. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_memory_add.py +0 -0
  287. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_speak.py +0 -0
  288. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_speak_e2e.py +0 -0
  289. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_transcribe.py +0 -0
  290. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_transcribe_agent.py +0 -0
  291. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_transcribe_e2e.py +0 -0
  292. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_transcribe_live.py +0 -0
  293. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_transcribe_recovery.py +0 -0
  294. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_tts_common.py +0 -0
  295. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_tts_common_extra.py +0 -0
  296. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_voice_agent_common.py +0 -0
  297. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_voice_edit.py +0 -0
  298. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_voice_edit_e2e.py +0 -0
  299. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/agents/test_wake_word_assistant.py +0 -0
  300. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/conftest.py +0 -0
  301. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/__init__.py +0 -0
  302. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/test_audio_format.py +0 -0
  303. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/test_chroma.py +0 -0
  304. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/test_sse.py +0 -0
  305. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/test_vad.py +0 -0
  306. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/core/test_watch.py +0 -0
  307. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/__init__.py +0 -0
  308. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_cli.py +0 -0
  309. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_coding_agents.py +0 -0
  310. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_editors.py +0 -0
  311. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_project.py +0 -0
  312. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_terminals.py +0 -0
  313. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_verification.py +0 -0
  314. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/dev/test_worktree.py +0 -0
  315. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/install/__init__.py +0 -0
  316. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/install/test_extras.py +0 -0
  317. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/__init__.py +0 -0
  318. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_api_health.py +0 -0
  319. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_api_integration_liveish.py +0 -0
  320. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_client.py +0 -0
  321. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_engine.py +0 -0
  322. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_files.py +0 -0
  323. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_filters.py +0 -0
  324. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_git_integration.py +0 -0
  325. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_indexer.py +0 -0
  326. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_memory_integration.py +0 -0
  327. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_proxy_passthrough.py +0 -0
  328. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_store.py +0 -0
  329. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/memory/test_utils.py +0 -0
  330. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/mocks/__init__.py +0 -0
  331. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/mocks/audio.py +0 -0
  332. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/mocks/llm.py +0 -0
  333. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/mocks/wyoming.py +0 -0
  334. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/__init__.py +0 -0
  335. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_api.py +0 -0
  336. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_engine.py +0 -0
  337. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_history.py +0 -0
  338. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_indexer.py +0 -0
  339. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_indexing.py +0 -0
  340. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_rag_client.py +0 -0
  341. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_rag_integration_liveish.py +0 -0
  342. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  343. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_retriever.py +0 -0
  344. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_store.py +0 -0
  345. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/rag/test_utils.py +0 -0
  346. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_api.py +0 -0
  347. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_api_integration.py +0 -0
  348. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_asr.py +0 -0
  349. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_asr_recovery.py +0 -0
  350. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_audio_e2e.py +0 -0
  351. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_cli.py +0 -0
  352. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_config.py +0 -0
  353. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_config_cmd.py +0 -0
  354. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_docs_gen.py +0 -0
  355. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_env_vars.py +0 -0
  356. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_json_output.py +0 -0
  357. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_llm.py +0 -0
  358. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_llm_gemini.py +0 -0
  359. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_memory_tools.py +0 -0
  360. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_mlx_backend.py +0 -0
  361. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_process_manager.py +0 -0
  362. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_requires_extras.py +0 -0
  363. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_server_streaming.py +0 -0
  364. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_server_tts.py +0 -0
  365. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_server_whisper.py +0 -0
  366. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_services.py +0 -0
  367. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_tools.py +0 -0
  368. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_transformers_backend.py +0 -0
  369. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_tts.py +0 -0
  370. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_utils.py +0 -0
  371. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_wake_word.py +0 -0
  372. {agent_cli-0.78.0 → agent_cli-0.79.1}/tests/test_wyoming_utils.py +0 -0
  373. {agent_cli-0.78.0 → agent_cli-0.79.1}/uv.lock +0 -0
  374. {agent_cli-0.78.0 → agent_cli-0.79.1}/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.78.0
3
+ Version: 0.79.1
4
4
  Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
5
5
  Project-URL: Homepage, https://github.com/basnijholt/agent-cli
6
6
  Author-email: Bas Nijholt <bas@nijho.lt>
@@ -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",
@@ -32,6 +36,8 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
32
36
  | `tts-kokoro` | Text-to-speech (GPU) | 10200/10201 |
33
37
  | `tts-piper` | Text-to-speech (CPU) | 10200/10201 |
34
38
  | `transcription-proxy` | ASR provider proxy | 61337 |
39
+ | `memory` | Long-term memory proxy | 8100 |
40
+ | `rag` | Document retrieval proxy | 8000 |
35
41
 
36
42
  **Examples:**
37
43
 
@@ -193,12 +199,16 @@ def install_cmd( # noqa: PLR0912, PLR0915
193
199
  services: Annotated[
194
200
  list[str] | None,
195
201
  typer.Argument(
196
- help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy).",
202
+ help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
197
203
  ),
198
204
  ] = None,
199
205
  all_services: Annotated[
200
206
  bool,
201
- 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
+ ),
202
212
  ] = False,
203
213
  skip_deps: Annotated[
204
214
  bool,
@@ -223,6 +233,11 @@ def install_cmd( # noqa: PLR0912, PLR0915
223
233
  - **tts-kokoro**: Text-to-speech with Kokoro/GPU (ports 10200/10201)
224
234
  - **tts-piper**: Text-to-speech with Piper/CPU (ports 10200/10201)
225
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).
226
241
 
227
242
  Daemons run via `uv tool run` and don't require a virtual environment.
228
243
 
@@ -231,7 +246,7 @@ def install_cmd( # noqa: PLR0912, PLR0915
231
246
  # Install specific daemons
232
247
  agent-cli daemon install whisper tts-kokoro
233
248
 
234
- # Install all daemons
249
+ # Install all daemons (auto-selects TTS backend)
235
250
  agent-cli daemon install --all
236
251
 
237
252
  # Skip confirmation prompts
@@ -255,7 +270,8 @@ def install_cmd( # noqa: PLR0912, PLR0915
255
270
 
256
271
  # Determine which services to install
257
272
  if all_services:
258
- selected_services = list(SERVICES.keys())
273
+ # Get default services (auto-selects one TTS backend based on platform)
274
+ selected_services = get_default_services()
259
275
  else:
260
276
  assert services is not None # Already checked above
261
277
  invalid = [s for s in services if s not in SERVICES]
@@ -340,7 +356,7 @@ def uninstall_cmd(
340
356
  services: Annotated[
341
357
  list[str] | None,
342
358
  typer.Argument(
343
- help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy).",
359
+ help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
344
360
  ),
345
361
  ] = None,
346
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
@@ -64,6 +99,22 @@ SERVICES: dict[str, ServiceConfig] = {
64
99
  extra="server",
65
100
  command_args=[],
66
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
+ ),
67
118
  }
68
119
 
69
120
 
@@ -83,13 +134,15 @@ def build_service_command(
83
134
  if service.python_version and not (use_macos_extra and service.macos_extra):
84
135
  args.extend(["--python", service.python_version])
85
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
+
86
140
  args.extend(
87
141
  [
88
142
  "--from",
89
143
  f"agent-cli[{extra}]",
90
144
  "agent-cli",
91
- "server",
92
- service.name,
145
+ *cmd_path,
93
146
  *service.command_args,
94
147
  ],
95
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."
@@ -47,15 +47,9 @@ echo "⏳ This may take a few minutes depending on your internet connection..."
47
47
  sleep 2 # Give Ollama service time to start
48
48
  ollama pull gemma3:4b
49
49
 
50
- # Install wyoming-mlx-whisper as a launchd service (Apple Silicon only)
51
- if [ "$(uname -m)" = "arm64" ]; then
52
- echo "🎤 Installing wyoming-mlx-whisper as a background service..."
53
- echo " This will run speech-to-text on Apple Silicon using MLX"
54
- curl -fsSL https://raw.githubusercontent.com/basnijholt/wyoming-mlx-whisper/main/scripts/install_service.sh | bash
55
- echo "✅ wyoming-mlx-whisper installed as launchd service"
56
- else
57
- echo "ℹ️ Skipping wyoming-mlx-whisper service (Intel Mac - use Linux-style setup)"
58
- fi
50
+ # Install whisper and tts as launchd daemons
51
+ echo "🎤 Installing whisper and tts-kokoro as background daemons..."
52
+ agent-cli daemon install whisper tts-kokoro -y
59
53
 
60
54
  echo ""
61
55
  echo "✅ Setup complete! You can now run the services:"
@@ -65,12 +59,8 @@ echo " ./start-all-services.sh"
65
59
  echo ""
66
60
  echo "Option 2 - Run services individually:"
67
61
  echo " 1. Ollama: running as brew service (brew services start ollama)"
68
- if [ "$(uname -m)" = "arm64" ]; then
69
- echo " 2. Whisper: running as launchd service (wyoming-mlx-whisper)"
70
- else
71
- echo " 2. Whisper: ./run-whisper.sh"
72
- fi
73
- echo " 3. Piper: ./run-piper.sh"
62
+ echo " 2. Whisper: running as launchd daemon (agent-cli daemon status whisper)"
63
+ echo " 3. TTS: running as launchd daemon (agent-cli daemon status tts-kokoro)"
74
64
  echo " 4. OpenWakeWord: ./run-openwakeword.sh"
75
65
  echo ""
76
66
  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\"
@@ -29,6 +29,8 @@ Daemons run via `uv tool run` and start automatically at login.
29
29
  | `tts-kokoro` | Text-to-speech with Kokoro (GPU) | 10200/10201 |
30
30
  | `tts-piper` | Text-to-speech with Piper (CPU) | 10200/10201 |
31
31
  | `transcription-proxy` | ASR provider proxy | 61337 |
32
+ | `memory` | Long-term memory proxy for LLMs | 8100 |
33
+ | `rag` | Document retrieval proxy for LLMs | 8000 |
32
34
 
33
35
  ## Commands
34
36
 
@@ -132,12 +134,14 @@ agent-cli daemon uninstall whisper
132
134
  Available daemons:
133
135
 
134
136
 
135
- Daemon Description Ports
136
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
137
- whisper Speech-to-text ASR 10300/10301
138
- tts-kokoro Text-to-speech (GPU) 10200/10201
139
- tts-piper Text-to-speech (CPU) 10200/10201
140
- 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
141
145
 
142
146
 
143
147
  Examples:
@@ -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
@@ -52,19 +52,19 @@ The `setup-macos.sh` script:
52
52
  - ✅ Installs `uv` if needed
53
53
  - ✅ Installs/checks Ollama (native macOS app)
54
54
  - ✅ Installs Zellij for session management
55
- - ✅ Prepares Wyoming service runners
55
+ - ✅ Installs Whisper and TTS as launchd daemons via `agent-cli daemon install`
56
56
 
57
57
  ## Services Overview
58
58
 
59
- | Service | Implementation | Port | GPU Support |
60
- | ---------------- | ---------------------- | ----- | -------------------- |
61
- | **Ollama** | Native macOS app | 11434 | ✅ Metal GPU |
62
- | **Whisper** | Wyoming MLX Whisper | 10300 | ✅ Apple Silicon MLX |
63
- | **Piper** | Wyoming Piper (via uv) | 10200 | N/A |
64
- | **OpenWakeWord** | Wyoming OpenWakeWord | 10400 | N/A |
59
+ | Service | Implementation | Port | GPU Support |
60
+ | ---------------- | ----------------------- | ----- | -------------------- |
61
+ | **Ollama** | Native macOS app | 11434 | ✅ Metal GPU |
62
+ | **Whisper** | MLX Whisper (via daemon)| 10300 | ✅ Apple Silicon MLX |
63
+ | **TTS (Kokoro)** | Kokoro TTS (via daemon) | 10200 | ✅ Metal GPU (MPS) |
64
+ | **OpenWakeWord** | Wyoming OpenWakeWord | 10400 | N/A |
65
65
 
66
66
  > [!NOTE]
67
- > Whisper uses [wyoming-mlx-whisper](https://github.com/basnijholt/wyoming-mlx-whisper) with `whisper-large-v3-turbo` for near real-time transcription on Apple Silicon.
67
+ > Whisper and TTS run as launchd daemons via `agent-cli daemon install`, using MLX and Metal for GPU acceleration on Apple Silicon.
68
68
 
69
69
  ## Session Management with Zellij
70
70
 
@@ -95,13 +95,14 @@ brew services start ollama
95
95
  # Or run in foreground:
96
96
  ollama serve
97
97
 
98
- # Whisper (Apple Silicon: launchd service or manual)
99
- launchctl list com.wyoming_mlx_whisper
100
- # Or run in foreground:
101
- scripts/run-whisper.sh
98
+ # Whisper and TTS are installed as launchd daemons
99
+ agent-cli daemon status # Check all daemon status
100
+ agent-cli daemon install whisper # Install whisper daemon
101
+ agent-cli daemon install tts-kokoro # Install TTS daemon
102
102
 
103
- # Piper
104
- scripts/run-piper.sh
103
+ # Or run in foreground (without daemon):
104
+ agent-cli server whisper
105
+ agent-cli server tts --backend kokoro
105
106
 
106
107
  # OpenWakeWord
107
108
  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
  )
@@ -49,6 +50,8 @@ class TestServiceConfig:
49
50
  assert "tts-kokoro" in SERVICES
50
51
  assert "tts-piper" in SERVICES
51
52
  assert "transcription-proxy" in SERVICES
53
+ assert "memory" in SERVICES
54
+ assert "rag" in SERVICES
52
55
 
53
56
  def test_service_config_fields(self) -> None:
54
57
  """Test ServiceConfig has required fields."""
@@ -111,6 +114,46 @@ class TestServiceConfig:
111
114
  cmd = build_service_command(service, uv_path, use_macos_extra=True)
112
115
  assert "agent-cli[server,macos-dep]" in cmd
113
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
+
114
157
  def test_find_uv_in_path(self, tmp_path: Path) -> None:
115
158
  """Test finding uv when it exists in extra_paths."""
116
159
  uv_path = tmp_path / "uv"
@@ -307,8 +350,8 @@ class TestDaemonCLI:
307
350
 
308
351
  result = runner.invoke(app, ["daemon", "install", "--all", "-y"])
309
352
  assert result.exit_code == 0
310
- # Should install all services
311
- 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())
312
355
 
313
356
  @patch("agent_cli.daemon.cli.get_service_manager")
314
357
  def test_daemon_uninstall_no_args(self, mock_get_manager: MagicMock) -> None:
@@ -1,30 +0,0 @@
1
- # PowerShell script to run Wyoming Piper TTS on Windows
2
- # Run with: powershell -ExecutionPolicy Bypass -File scripts/run-piper-windows.ps1
3
-
4
- Write-Host "🔊 Starting Wyoming Piper on port 10200..." -ForegroundColor Cyan
5
-
6
- # Create .runtime directory
7
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
8
- $RuntimeDir = Join-Path $ScriptDir ".runtime"
9
- $PiperDataDir = Join-Path $RuntimeDir "piper-data"
10
- if (-not (Test-Path $PiperDataDir)) {
11
- New-Item -ItemType Directory -Path $PiperDataDir -Force | Out-Null
12
- }
13
-
14
- # Download voice if not present
15
- $VoiceDir = Join-Path $PiperDataDir "en_US-lessac-medium"
16
- if (-not (Test-Path $VoiceDir)) {
17
- Write-Host "⬇️ Downloading voice model..." -ForegroundColor Yellow
18
- Push-Location $PiperDataDir
19
- uvx --python 3.12 --from piper-tts python -m piper.download_voices en_US-lessac-medium
20
- Pop-Location
21
- }
22
-
23
- # Run Wyoming Piper using uvx
24
- uvx --python 3.12 `
25
- --from "git+https://github.com/rhasspy/wyoming-piper.git@v2.1.1" `
26
- wyoming-piper `
27
- --voice en_US-lessac-medium `
28
- --uri "tcp://0.0.0.0:10200" `
29
- --data-dir $PiperDataDir `
30
- --download-dir $PiperDataDir