agent-cli 0.77.0__tar.gz → 0.78.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.0 → agent_cli-0.78.0}/PKG-INFO +1 -1
  2. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/daemon/cli.py +44 -8
  3. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/launchd.py +25 -0
  4. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/service_config.py +11 -3
  5. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/systemd.py +26 -0
  6. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/cli.py +12 -0
  7. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/tts.py +4 -1
  8. agent_cli-0.78.0/docs/commands/daemon.md +174 -0
  9. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/index.md +1 -0
  10. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_daemon.py +2 -1
  11. {agent_cli-0.77.0 → agent_cli-0.78.0}/zensical.toml +1 -0
  12. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  13. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  14. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/README.md +0 -0
  15. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/marketplace.json +0 -0
  16. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/plugin.json +0 -0
  17. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  18. {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  19. {agent_cli-0.77.0 → agent_cli-0.78.0}/.cursorrules +0 -0
  20. {agent_cli-0.77.0 → agent_cli-0.78.0}/.dockerignore +0 -0
  21. {agent_cli-0.77.0 → agent_cli-0.78.0}/.env.example +0 -0
  22. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/logo.svg +0 -0
  23. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/release-drafter.yml +0 -0
  24. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/renovate.json +0 -0
  25. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/scripts/check_extras_sync.py +0 -0
  26. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/scripts/sync_requirements.py +0 -0
  27. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/automerge.yml +0 -0
  28. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/docker.yml +0 -0
  29. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/docs.yml +0 -0
  30. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/markdown-code-runner.yml +0 -0
  31. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/pytest.yml +0 -0
  32. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/release-drafter.yml +0 -0
  33. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/release.yml +0 -0
  34. {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/toc.yaml +0 -0
  35. {agent_cli-0.77.0 → agent_cli-0.78.0}/.gitignore +0 -0
  36. {agent_cli-0.77.0 → agent_cli-0.78.0}/.jscpd.json +0 -0
  37. {agent_cli-0.77.0 → agent_cli-0.78.0}/.pre-commit-config.yaml +0 -0
  38. {agent_cli-0.77.0 → agent_cli-0.78.0}/.prompts/docs-review.md +0 -0
  39. {agent_cli-0.77.0 → agent_cli-0.78.0}/.prompts/pr-review.md +0 -0
  40. {agent_cli-0.77.0 → agent_cli-0.78.0}/CLAUDE.md +0 -0
  41. {agent_cli-0.77.0 → agent_cli-0.78.0}/LICENSE +0 -0
  42. {agent_cli-0.77.0 → agent_cli-0.78.0}/README.md +0 -0
  43. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/__init__.py +0 -0
  44. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/__main__.py +0 -0
  45. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_extras.json +0 -0
  46. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/.gitkeep +0 -0
  47. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/audio.txt +0 -0
  48. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
  49. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/kokoro.txt +0 -0
  50. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/llm.txt +0 -0
  51. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/memory.txt +0 -0
  52. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  53. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/piper.txt +0 -0
  54. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/rag.txt +0 -0
  55. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/server.txt +0 -0
  56. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/speed.txt +0 -0
  57. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/vad.txt +0 -0
  58. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  59. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/wyoming.txt +0 -0
  60. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_tools.py +0 -0
  61. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/__init__.py +0 -0
  62. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  63. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/assistant.py +0 -0
  64. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/autocorrect.py +0 -0
  65. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/chat.py +0 -0
  66. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/__init__.py +0 -0
  67. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/add.py +0 -0
  68. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/proxy.py +0 -0
  69. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/rag_proxy.py +0 -0
  70. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/speak.py +0 -0
  71. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/transcribe.py +0 -0
  72. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/transcribe_live.py +0 -0
  73. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/voice_edit.py +0 -0
  74. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/api.py +0 -0
  75. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/cli.py +0 -0
  76. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/config.py +0 -0
  77. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/config_cmd.py +0 -0
  78. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/constants.py +0 -0
  79. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/__init__.py +0 -0
  80. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/audio.py +0 -0
  81. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/audio_format.py +0 -0
  82. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/chroma.py +0 -0
  83. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/deps.py +0 -0
  84. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/openai_proxy.py +0 -0
  85. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/process.py +0 -0
  86. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/reranker.py +0 -0
  87. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/sse.py +0 -0
  88. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/transcription_logger.py +0 -0
  89. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/utils.py +0 -0
  90. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/vad.py +0 -0
  91. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/watch.py +0 -0
  92. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/daemon/__init__.py +0 -0
  93. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/__init__.py +0 -0
  94. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/cli.py +0 -0
  95. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  96. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  97. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/base.py +0 -0
  98. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  99. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  100. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  101. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  102. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  103. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  104. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  105. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  106. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/__init__.py +0 -0
  107. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/base.py +0 -0
  108. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/cursor.py +0 -0
  109. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/emacs.py +0 -0
  110. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  111. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/nano.py +0 -0
  112. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/neovim.py +0 -0
  113. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/registry.py +0 -0
  114. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/sublime.py +0 -0
  115. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/vim.py +0 -0
  116. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/vscode.py +0 -0
  117. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/zed.py +0 -0
  118. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/project.py +0 -0
  119. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/registry.py +0 -0
  120. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/skill/SKILL.md +0 -0
  121. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/skill/examples.md +0 -0
  122. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/__init__.py +0 -0
  123. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  124. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/base.py +0 -0
  125. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/gnome.py +0 -0
  126. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  127. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/kitty.py +0 -0
  128. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/registry.py +0 -0
  129. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/tmux.py +0 -0
  130. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/warp.py +0 -0
  131. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/zellij.py +0 -0
  132. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/worktree.py +0 -0
  133. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/docs_gen.py +0 -0
  134. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/example-config.toml +0 -0
  135. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/__init__.py +0 -0
  136. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/common.py +0 -0
  137. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/extras.py +0 -0
  138. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/hotkeys.py +0 -0
  139. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/services.py +0 -0
  140. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/__init__.py +0 -0
  141. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_files.py +0 -0
  142. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_filters.py +0 -0
  143. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_git.py +0 -0
  144. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_indexer.py +0 -0
  145. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_ingest.py +0 -0
  146. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_persistence.py +0 -0
  147. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_prompt.py +0 -0
  148. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_retrieval.py +0 -0
  149. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_store.py +0 -0
  150. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_streaming.py +0 -0
  151. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_tasks.py +0 -0
  152. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/api.py +0 -0
  153. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/client.py +0 -0
  154. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/engine.py +0 -0
  155. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/entities.py +0 -0
  156. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/models.py +0 -0
  157. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/opts.py +0 -0
  158. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/py.typed +0 -0
  159. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/__init__.py +0 -0
  160. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_indexer.py +0 -0
  161. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_indexing.py +0 -0
  162. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_prompt.py +0 -0
  163. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_retriever.py +0 -0
  164. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_store.py +0 -0
  165. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_utils.py +0 -0
  166. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/api.py +0 -0
  167. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/client.py +0 -0
  168. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/engine.py +0 -0
  169. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/models.py +0 -0
  170. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  171. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/__init__.py +0 -0
  172. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/check_plugin_skill_sync.py +0 -0
  173. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  174. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  175. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  176. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  177. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  178. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  179. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  180. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  181. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  182. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  183. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  184. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  185. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  186. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  187. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
  188. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
  189. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-piper.sh +0 -0
  190. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-linux.sh +0 -0
  191. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-macos.sh +0 -0
  192. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
  193. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper.sh +0 -0
  194. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
  195. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  196. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-linux.sh +0 -0
  197. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  198. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-macos.sh +0 -0
  199. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
  200. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  201. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/start-all-services.sh +0 -0
  202. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/sync_extras.py +0 -0
  203. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/__init__.py +0 -0
  204. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/common.py +0 -0
  205. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/model_manager.py +0 -0
  206. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/model_registry.py +0 -0
  207. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/proxy/__init__.py +0 -0
  208. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/proxy/api.py +0 -0
  209. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/streaming.py +0 -0
  210. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/__init__.py +0 -0
  211. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/api.py +0 -0
  212. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  213. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/base.py +0 -0
  214. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  215. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/piper.py +0 -0
  216. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/model_manager.py +0 -0
  217. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/model_registry.py +0 -0
  218. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  219. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/__init__.py +0 -0
  220. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/api.py +0 -0
  221. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  222. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/base.py +0 -0
  223. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  224. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  225. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
  226. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/languages.py +0 -0
  227. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/model_manager.py +0 -0
  228. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/model_registry.py +0 -0
  229. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  230. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/__init__.py +0 -0
  231. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/_wyoming_utils.py +0 -0
  232. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/asr.py +0 -0
  233. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/llm.py +0 -0
  234. {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/wake_word.py +0 -0
  235. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/docker-compose.yml +0 -0
  236. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/memory-proxy.Dockerfile +0 -0
  237. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/rag-proxy.Dockerfile +0 -0
  238. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/transcribe-proxy.Dockerfile +0 -0
  239. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/tts.Dockerfile +0 -0
  240. {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/whisper.Dockerfile +0 -0
  241. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/CNAME +0 -0
  242. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/index.md +0 -0
  243. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/memory.md +0 -0
  244. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/rag.md +0 -0
  245. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/assistant.md +0 -0
  246. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/autocorrect.md +0 -0
  247. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/chat.md +0 -0
  248. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/config.md +0 -0
  249. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/dev.md +0 -0
  250. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-extras.md +0 -0
  251. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-hotkeys.md +0 -0
  252. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-services.md +0 -0
  253. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/memory.md +0 -0
  254. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/rag-proxy.md +0 -0
  255. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/index.md +0 -0
  256. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/transcribe-proxy.md +0 -0
  257. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/tts.md +0 -0
  258. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/whisper.md +0 -0
  259. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/speak.md +0 -0
  260. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/start-services.md +0 -0
  261. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/transcribe-live.md +0 -0
  262. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/transcribe.md +0 -0
  263. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/voice-edit.md +0 -0
  264. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/configuration.md +0 -0
  265. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/getting-started.md +0 -0
  266. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/iOS_Shortcut_Guide.md +0 -0
  267. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/index.md +0 -0
  268. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/docker.md +0 -0
  269. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/index.md +0 -0
  270. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/linux.md +0 -0
  271. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/macos.md +0 -0
  272. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/nixos.md +0 -0
  273. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/windows.md +0 -0
  274. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/logo-clean.svg +0 -0
  275. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  276. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/run_markdown_code_runner.py +0 -0
  277. {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/system-integration.md +0 -0
  278. {agent_cli-0.77.0 → agent_cli-0.78.0}/example.agent-cli-config.toml +0 -0
  279. {agent_cli-0.77.0 → agent_cli-0.78.0}/justfile +0 -0
  280. {agent_cli-0.77.0 → agent_cli-0.78.0}/pyproject.toml +0 -0
  281. {agent_cli-0.77.0 → agent_cli-0.78.0}/shell.nix +0 -0
  282. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/__init__.py +0 -0
  283. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/__init__.py +0 -0
  284. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_fix_my_text.py +0 -0
  285. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_interactive.py +0 -0
  286. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_interactive_extra.py +0 -0
  287. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_memory_add.py +0 -0
  288. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_speak.py +0 -0
  289. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_speak_e2e.py +0 -0
  290. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe.py +0 -0
  291. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_agent.py +0 -0
  292. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_e2e.py +0 -0
  293. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_live.py +0 -0
  294. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_recovery.py +0 -0
  295. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_tts_common.py +0 -0
  296. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_tts_common_extra.py +0 -0
  297. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_agent_common.py +0 -0
  298. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_edit.py +0 -0
  299. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  300. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_wake_word_assistant.py +0 -0
  301. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/conftest.py +0 -0
  302. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/__init__.py +0 -0
  303. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_audio_format.py +0 -0
  304. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_chroma.py +0 -0
  305. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_sse.py +0 -0
  306. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_vad.py +0 -0
  307. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_watch.py +0 -0
  308. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/__init__.py +0 -0
  309. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_cli.py +0 -0
  310. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_coding_agents.py +0 -0
  311. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_editors.py +0 -0
  312. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_project.py +0 -0
  313. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_terminals.py +0 -0
  314. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_verification.py +0 -0
  315. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_worktree.py +0 -0
  316. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/install/__init__.py +0 -0
  317. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/install/test_extras.py +0 -0
  318. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/__init__.py +0 -0
  319. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_api_health.py +0 -0
  320. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_api_integration_liveish.py +0 -0
  321. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_client.py +0 -0
  322. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_engine.py +0 -0
  323. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_files.py +0 -0
  324. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_filters.py +0 -0
  325. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_git_integration.py +0 -0
  326. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_indexer.py +0 -0
  327. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_memory_integration.py +0 -0
  328. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_proxy_passthrough.py +0 -0
  329. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_store.py +0 -0
  330. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_utils.py +0 -0
  331. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/__init__.py +0 -0
  332. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/audio.py +0 -0
  333. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/llm.py +0 -0
  334. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/wyoming.py +0 -0
  335. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/__init__.py +0 -0
  336. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_api.py +0 -0
  337. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_engine.py +0 -0
  338. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_history.py +0 -0
  339. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_indexer.py +0 -0
  340. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_indexing.py +0 -0
  341. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_client.py +0 -0
  342. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  343. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  344. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_retriever.py +0 -0
  345. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_store.py +0 -0
  346. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_utils.py +0 -0
  347. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_api.py +0 -0
  348. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_api_integration.py +0 -0
  349. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_asr.py +0 -0
  350. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_asr_recovery.py +0 -0
  351. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_audio_e2e.py +0 -0
  352. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_cli.py +0 -0
  353. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_config.py +0 -0
  354. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_config_cmd.py +0 -0
  355. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_docs_gen.py +0 -0
  356. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_env_vars.py +0 -0
  357. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_json_output.py +0 -0
  358. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_llm.py +0 -0
  359. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_llm_gemini.py +0 -0
  360. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_memory_tools.py +0 -0
  361. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_mlx_backend.py +0 -0
  362. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_process_manager.py +0 -0
  363. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_requires_extras.py +0 -0
  364. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_streaming.py +0 -0
  365. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_tts.py +0 -0
  366. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_whisper.py +0 -0
  367. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_services.py +0 -0
  368. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_tools.py +0 -0
  369. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_transformers_backend.py +0 -0
  370. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_tts.py +0 -0
  371. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_utils.py +0 -0
  372. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_wake_word.py +0 -0
  373. {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_wyoming_utils.py +0 -0
  374. {agent_cli-0.77.0 → agent_cli-0.78.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.77.0
3
+ Version: 0.78.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>
@@ -29,7 +29,8 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
29
29
  | Daemon | Description | Ports |
30
30
  |--------|-------------|-------|
31
31
  | `whisper` | Speech-to-text ASR | 10300/10301 |
32
- | `tts` | Text-to-speech (Kokoro) | 10200/10201 |
32
+ | `tts-kokoro` | Text-to-speech (GPU) | 10200/10201 |
33
+ | `tts-piper` | Text-to-speech (CPU) | 10200/10201 |
33
34
  | `transcription-proxy` | ASR provider proxy | 61337 |
34
35
 
35
36
  **Examples:**
@@ -38,6 +39,9 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
38
39
  # Install whisper as a background daemon
39
40
  agent-cli daemon install whisper
40
41
 
42
+ # Install GPU-accelerated TTS
43
+ agent-cli daemon install tts-kokoro
44
+
41
45
  # Check status of all daemons
42
46
  agent-cli daemon status
43
47
 
@@ -62,10 +66,18 @@ def status_cmd(
62
66
  help="Service to check, or omit for all services",
63
67
  ),
64
68
  ] = None,
69
+ logs: Annotated[
70
+ int,
71
+ typer.Option(
72
+ "--logs",
73
+ "-l",
74
+ help="Number of recent log lines to show (0 to disable)",
75
+ ),
76
+ ] = 10,
65
77
  ) -> None:
66
78
  """Check status of installed daemons.
67
79
 
68
- Shows whether each daemon is installed and running.
80
+ Shows whether each daemon is installed and running, along with recent log output.
69
81
 
70
82
  Examples:
71
83
  # Check all daemons
@@ -74,6 +86,12 @@ def status_cmd(
74
86
  # Check specific daemon
75
87
  agent-cli daemon status whisper
76
88
 
89
+ # Show more log lines
90
+ agent-cli daemon status tts-kokoro --logs 20
91
+
92
+ # Hide logs
93
+ agent-cli daemon status --logs 0
94
+
77
95
  """
78
96
  try:
79
97
  manager = get_service_manager()
@@ -102,12 +120,29 @@ def status_cmd(
102
120
  else:
103
121
  console.print(f" {svc_name}: [yellow]installed but not running[/yellow]")
104
122
 
123
+ # Show recent logs for installed services
124
+ if logs > 0 and status.installed:
125
+ log_lines = manager.get_recent_logs(svc_name, logs)
126
+ if log_lines:
127
+ console.print()
128
+ console.print(f" [dim]Recent logs ({len(log_lines)} lines):[/dim]")
129
+ max_line_width = 120
130
+ for line in log_lines:
131
+ # Truncate long lines for readability
132
+ display_line = (
133
+ line[:max_line_width] + "..." if len(line) > max_line_width else line
134
+ )
135
+ console.print(f" [dim]{display_line}[/dim]")
136
+ elif status.running:
137
+ console.print()
138
+ console.print(" [dim]No recent logs available[/dim]")
139
+
105
140
  console.print()
106
141
  system = platform.system()
107
142
  if system == "Darwin":
108
- console.print("[dim]Log locations: ~/Library/Logs/agent-cli-<service>/[/dim]")
143
+ console.print("[dim]Full logs: ~/Library/Logs/agent-cli-<service>/[/dim]")
109
144
  else:
110
- console.print("[dim]Log locations: journalctl --user -u agent-cli-<service>[/dim]")
145
+ console.print("[dim]Full logs: journalctl --user -u agent-cli-<service> -f[/dim]")
111
146
 
112
147
 
113
148
  def _confirm_action(message: str) -> bool:
@@ -158,7 +193,7 @@ def install_cmd( # noqa: PLR0912, PLR0915
158
193
  services: Annotated[
159
194
  list[str] | None,
160
195
  typer.Argument(
161
- help="Services to install (whisper, tts, transcription-proxy).",
196
+ help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy).",
162
197
  ),
163
198
  ] = None,
164
199
  all_services: Annotated[
@@ -185,7 +220,8 @@ def install_cmd( # noqa: PLR0912, PLR0915
185
220
 
186
221
  **Available daemons:**
187
222
  - **whisper**: Speech-to-text ASR server (ports 10300/10301)
188
- - **tts**: Text-to-speech with Kokoro (ports 10200/10201)
223
+ - **tts-kokoro**: Text-to-speech with Kokoro/GPU (ports 10200/10201)
224
+ - **tts-piper**: Text-to-speech with Piper/CPU (ports 10200/10201)
189
225
  - **transcription-proxy**: Proxy for ASR providers (port 61337)
190
226
 
191
227
  Daemons run via `uv tool run` and don't require a virtual environment.
@@ -193,7 +229,7 @@ def install_cmd( # noqa: PLR0912, PLR0915
193
229
  **Examples:**
194
230
 
195
231
  # Install specific daemons
196
- agent-cli daemon install whisper tts
232
+ agent-cli daemon install whisper tts-kokoro
197
233
 
198
234
  # Install all daemons
199
235
  agent-cli daemon install --all
@@ -304,7 +340,7 @@ def uninstall_cmd(
304
340
  services: Annotated[
305
341
  list[str] | None,
306
342
  typer.Argument(
307
- help="Services to uninstall (whisper, tts, transcription-proxy).",
343
+ help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy).",
308
344
  ),
309
345
  ] = None,
310
346
  all_services: Annotated[
@@ -46,6 +46,30 @@ def _get_log_command(service_name: str) -> str:
46
46
  return f"tail -f {log_dir}/*.log"
47
47
 
48
48
 
49
+ def _get_recent_logs(service_name: str, num_lines: int = 10) -> list[str]:
50
+ """Get recent log lines for a service."""
51
+ log_dir = _get_log_dir(service_name)
52
+ stderr_log = log_dir / "stderr.log"
53
+ stdout_log = log_dir / "stdout.log"
54
+
55
+ lines: list[str] = []
56
+
57
+ # Prefer stdout as it has structured output (startup message, usage examples)
58
+ # stderr often has noisy warnings from libraries like PyTorch/Kokoro
59
+ for log_file in [stdout_log, stderr_log]:
60
+ if log_file.exists():
61
+ try:
62
+ with log_file.open() as f:
63
+ all_lines = f.readlines()
64
+ lines = [line.rstrip() for line in all_lines[-num_lines:]]
65
+ if lines:
66
+ break
67
+ except OSError:
68
+ continue
69
+
70
+ return lines
71
+
72
+
49
73
  def _generate_plist(
50
74
  service: ServiceConfig,
51
75
  uv_path: Path,
@@ -217,4 +241,5 @@ manager = ServiceManager(
217
241
  uninstall_service=_uninstall_service,
218
242
  get_service_status=_get_service_status,
219
243
  get_log_command=_get_log_command,
244
+ get_recent_logs=_get_recent_logs,
220
245
  )
@@ -42,14 +42,21 @@ SERVICES: dict[str, ServiceConfig] = {
42
42
  python_version="3.13", # onnxruntime lacks py3.14 wheels (Linux only)
43
43
  macos_extra="server,mlx-whisper,wyoming",
44
44
  ),
45
- "tts": ServiceConfig(
46
- name="tts",
45
+ "tts-kokoro": ServiceConfig(
46
+ name="tts", # Server command is still "tts"
47
47
  display_name="Kokoro TTS",
48
- description="Text-to-speech server (ports 10200/10201)",
48
+ description="Text-to-speech with Kokoro (GPU, ports 10200/10201)",
49
49
  extra="server,kokoro,wyoming",
50
50
  command_args=["--backend", "kokoro"],
51
51
  python_version="3.12", # curated-tokenizers (via kokoro→misaki→spacy) lacks py3.13 wheels
52
52
  ),
53
+ "tts-piper": ServiceConfig(
54
+ name="tts", # Server command is still "tts"
55
+ display_name="Piper TTS",
56
+ description="Text-to-speech with Piper (CPU, ports 10200/10201)",
57
+ extra="server,piper,wyoming",
58
+ command_args=["--backend", "piper"],
59
+ ),
53
60
  "transcription-proxy": ServiceConfig(
54
61
  name="transcription-proxy",
55
62
  display_name="Transcription Proxy",
@@ -171,6 +178,7 @@ class ServiceManager(NamedTuple):
171
178
  uninstall_service: Callable[[str], UninstallResult]
172
179
  get_service_status: Callable[[str], ServiceStatus]
173
180
  get_log_command: Callable[[str], str]
181
+ get_recent_logs: Callable[[str, int], list[str]]
174
182
 
175
183
 
176
184
  def get_service_manager() -> ServiceManager:
@@ -36,6 +36,31 @@ def _get_log_command(service_name: str) -> str:
36
36
  return f"journalctl --user -u agent-cli-{service_name} -f"
37
37
 
38
38
 
39
+ def _get_recent_logs(service_name: str, num_lines: int = 10) -> list[str]:
40
+ """Get recent log lines for a service using journalctl."""
41
+ result = subprocess.run(
42
+ [ # noqa: S607
43
+ "journalctl",
44
+ "--user",
45
+ "-u",
46
+ f"agent-cli-{service_name}",
47
+ "-n",
48
+ str(num_lines),
49
+ "--no-pager",
50
+ "-o",
51
+ "cat", # Output only the message, no metadata
52
+ ],
53
+ capture_output=True,
54
+ text=True,
55
+ check=False,
56
+ )
57
+
58
+ if result.returncode != 0:
59
+ return []
60
+
61
+ return [line.rstrip() for line in result.stdout.splitlines() if line.strip()]
62
+
63
+
39
64
  def _generate_unit_file(
40
65
  service: ServiceConfig,
41
66
  uv_path: Path,
@@ -252,4 +277,5 @@ manager = ServiceManager(
252
277
  uninstall_service=_uninstall_service,
253
278
  get_service_status=_get_service_status,
254
279
  get_log_command=_get_log_command,
280
+ get_recent_logs=_get_recent_logs,
255
281
  )
@@ -803,6 +803,18 @@ def tts_cmd( # noqa: PLR0915
803
803
  'input="Hello")[/cyan]',
804
804
  )
805
805
  console.print()
806
+ voice = "af_heart" if resolved_backend == "kokoro" else "alloy"
807
+ console.print("[dim]Usage with agent-cli:[/dim]")
808
+ console.print(
809
+ f' [cyan]ag speak "Hello" --tts-provider openai '
810
+ f"--tts-openai-base-url http://localhost:{port}/v1 --tts-openai-voice {voice}[/cyan]",
811
+ )
812
+ if not no_wyoming:
813
+ console.print(
814
+ f' [cyan]ag speak "Hello" --tts-provider wyoming --tts-wyoming-ip {host} '
815
+ f"--tts-wyoming-port {wyoming_port}[/cyan]",
816
+ )
817
+ console.print()
806
818
 
807
819
  # Create and run the app
808
820
  from agent_cli.server.tts.api import create_app # noqa: PLC0415
@@ -220,10 +220,13 @@ async def _synthesize_speech_kokoro(
220
220
  **_kwargs: object,
221
221
  ) -> bytes | None:
222
222
  """Synthesize speech from text using Kokoro TTS server via OpenAI client."""
223
+ host = kokoro_tts_cfg.tts_kokoro_host
224
+ if not host.startswith(("http://", "https://")):
225
+ host = f"http://{host}"
223
226
  openai_tts_cfg = config.OpenAITTS(
224
227
  tts_openai_model=kokoro_tts_cfg.tts_kokoro_model,
225
228
  tts_openai_voice=kokoro_tts_cfg.tts_kokoro_voice,
226
- tts_openai_base_url=kokoro_tts_cfg.tts_kokoro_host,
229
+ tts_openai_base_url=host,
227
230
  )
228
231
  try:
229
232
  return await synthesize_speech_openai(
@@ -0,0 +1,174 @@
1
+ ---
2
+ icon: lucide/settings
3
+ ---
4
+
5
+ # daemon
6
+
7
+ Manage agent-cli servers as background daemons.
8
+
9
+ ## Usage
10
+
11
+ ```bash
12
+ agent-cli daemon [COMMAND] [OPTIONS]
13
+ ```
14
+
15
+ ## Description
16
+
17
+ Install, uninstall, and monitor agent-cli servers running as system daemons:
18
+
19
+ - **macOS**: launchd services (`~/Library/LaunchAgents/`)
20
+ - **Linux**: systemd user services (`~/.config/systemd/user/`)
21
+
22
+ Daemons run via `uv tool run` and start automatically at login.
23
+
24
+ ## Available Daemons
25
+
26
+ | Daemon | Description | Ports |
27
+ |--------|-------------|-------|
28
+ | `whisper` | Speech-to-text ASR server | 10300/10301 |
29
+ | `tts-kokoro` | Text-to-speech with Kokoro (GPU) | 10200/10201 |
30
+ | `tts-piper` | Text-to-speech with Piper (CPU) | 10200/10201 |
31
+ | `transcription-proxy` | ASR provider proxy | 61337 |
32
+
33
+ ## Commands
34
+
35
+ ### `status`
36
+
37
+ Check status of installed daemons.
38
+
39
+ ```bash
40
+ # Check all daemons
41
+ agent-cli daemon status
42
+
43
+ # Check specific daemon
44
+ agent-cli daemon status whisper
45
+ ```
46
+
47
+ ### `install`
48
+
49
+ Install server daemons as background processes.
50
+
51
+ ```bash
52
+ # Install specific daemons
53
+ agent-cli daemon install whisper tts-kokoro
54
+
55
+ # Install all daemons
56
+ agent-cli daemon install --all
57
+
58
+ # Skip confirmation prompts
59
+ agent-cli daemon install whisper -y
60
+ ```
61
+
62
+ **Options:**
63
+
64
+ | Option | Description |
65
+ |--------|-------------|
66
+ | `--all, -a` | Install all available services |
67
+ | `--skip-deps` | Skip uv dependency check |
68
+ | `--no-confirm, -y` | Skip confirmation prompts |
69
+
70
+ ### `uninstall`
71
+
72
+ Uninstall server daemons.
73
+
74
+ ```bash
75
+ # Uninstall specific daemons
76
+ agent-cli daemon uninstall whisper tts-kokoro
77
+
78
+ # Uninstall all daemons
79
+ agent-cli daemon uninstall --all
80
+ ```
81
+
82
+ **Options:**
83
+
84
+ | Option | Description |
85
+ |--------|-------------|
86
+ | `--all, -a` | Uninstall all installed services |
87
+ | `--no-confirm, -y` | Skip confirmation prompts |
88
+
89
+ ## Examples
90
+
91
+ ```bash
92
+ # Install whisper as a background daemon
93
+ agent-cli daemon install whisper
94
+
95
+ # Check status of all daemons
96
+ agent-cli daemon status
97
+
98
+ # Uninstall a daemon
99
+ agent-cli daemon uninstall whisper
100
+ ```
101
+
102
+ ## Logs
103
+
104
+ - **macOS**: `~/Library/Logs/agent-cli-<service>/`
105
+ - **Linux**: `journalctl --user -u agent-cli-<service> -f`
106
+
107
+ ## Full Help
108
+
109
+ <details>
110
+ <summary>See the output of <code>agent-cli daemon --help</code></summary>
111
+
112
+ <!-- CODE:BASH:START -->
113
+ <!-- echo '```yaml' -->
114
+ <!-- export NO_COLOR=1 -->
115
+ <!-- export TERM=dumb -->
116
+ <!-- export COLUMNS=90 -->
117
+ <!-- export TERMINAL_WIDTH=90 -->
118
+ <!-- agent-cli daemon --help -->
119
+ <!-- echo '```' -->
120
+ <!-- CODE:END -->
121
+ <!-- OUTPUT:START -->
122
+ <!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
123
+ ```yaml
124
+
125
+ Usage: agent-cli daemon [OPTIONS] COMMAND [ARGS]...
126
+
127
+ Manage agent-cli servers as background daemons.
128
+
129
+ Install, uninstall, and monitor agent-cli servers running as system daemons (launchd on
130
+ macOS, systemd on Linux).
131
+
132
+ Available daemons:
133
+
134
+
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
141
+
142
+
143
+ Examples:
144
+
145
+
146
+ # Install whisper as a background daemon
147
+ agent-cli daemon install whisper
148
+
149
+ # Install GPU-accelerated TTS
150
+ agent-cli daemon install tts-kokoro
151
+
152
+ # Check status of all daemons
153
+ agent-cli daemon status
154
+
155
+ # Uninstall a daemon
156
+ agent-cli daemon uninstall whisper
157
+
158
+
159
+ Daemons run via uv tool run and start automatically at login.
160
+
161
+ ╭─ Options ──────────────────────────────────────────────────────────────────────────────╮
162
+ │ --help -h Show this message and exit. │
163
+ ╰────────────────────────────────────────────────────────────────────────────────────────╯
164
+ ╭─ Commands ─────────────────────────────────────────────────────────────────────────────╮
165
+ │ status Check status of installed daemons. │
166
+ │ install Install server daemons as background processes. │
167
+ │ uninstall Uninstall server daemons. │
168
+ ╰────────────────────────────────────────────────────────────────────────────────────────╯
169
+
170
+ ```
171
+
172
+ <!-- OUTPUT:END -->
173
+
174
+ </details>
@@ -30,6 +30,7 @@ Agent CLI provides multiple commands, each designed for a specific purpose.
30
30
  | [`rag-proxy`](rag-proxy.md) | RAG server | Chat with your documents |
31
31
  | [`memory`](memory.md) | Long-term memory | Persistent conversation memory |
32
32
  | [`server`](server/index.md) | ASR & TTS servers | Local Whisper and Kokoro/Piper with TTL-based memory management |
33
+ | [`daemon`](daemon.md) | Service manager | Install/manage servers as system daemons |
33
34
 
34
35
  The [`server`](server/index.md) command provides local ASR (speech-to-text) and TTS (text-to-speech) servers with unique advantages over standalone alternatives:
35
36
 
@@ -46,7 +46,8 @@ class TestServiceConfig:
46
46
  def test_services_defined(self) -> None:
47
47
  """Test that expected services are defined."""
48
48
  assert "whisper" in SERVICES
49
- assert "tts" in SERVICES
49
+ assert "tts-kokoro" in SERVICES
50
+ assert "tts-piper" in SERVICES
50
51
  assert "transcription-proxy" in SERVICES
51
52
 
52
53
  def test_service_config_fields(self) -> None:
@@ -46,6 +46,7 @@ nav = [
46
46
  { "tts" = "commands/server/tts.md" },
47
47
  { "transcribe-proxy" = "commands/server/transcribe-proxy.md" },
48
48
  ] },
49
+ { "daemon" = "commands/daemon.md" },
49
50
  ] },
50
51
  { "Setup" = [
51
52
  { "config" = "commands/config.md" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes