agent-cli 0.76.5__tar.gz → 0.77.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 (373) hide show
  1. {agent_cli-0.76.5 → agent_cli-0.77.0}/PKG-INFO +21 -21
  2. {agent_cli-0.76.5 → agent_cli-0.77.0}/README.md +20 -20
  3. agent_cli-0.76.5/agent_cli/agents/transcribe_daemon.py → agent_cli-0.77.0/agent_cli/agents/transcribe_live.py +12 -12
  4. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/cli.py +2 -1
  5. agent_cli-0.77.0/agent_cli/daemon/__init__.py +1 -0
  6. agent_cli-0.77.0/agent_cli/daemon/cli.py +383 -0
  7. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/cli.py +14 -30
  8. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/worktree.py +17 -0
  9. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/docs_gen.py +1 -1
  10. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/example-config.toml +1 -1
  11. agent_cli-0.77.0/agent_cli/install/launchd.py +220 -0
  12. agent_cli-0.77.0/agent_cli/install/service_config.py +200 -0
  13. agent_cli-0.77.0/agent_cli/install/systemd.py +255 -0
  14. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/cli.py +1 -1
  15. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/architecture/index.md +2 -2
  16. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/index.md +1 -1
  17. agent_cli-0.76.5/docs/commands/transcribe-daemon.md → agent_cli-0.77.0/docs/commands/transcribe-live.md +13 -13
  18. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/configuration.md +1 -1
  19. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/index.md +1 -1
  20. agent_cli-0.76.5/tests/agents/test_transcribe_daemon.py → agent_cli-0.77.0/tests/agents/test_transcribe_live.py +17 -17
  21. agent_cli-0.77.0/tests/test_daemon.py +487 -0
  22. {agent_cli-0.76.5 → agent_cli-0.77.0}/zensical.toml +1 -1
  23. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  24. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  25. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude-plugin/README.md +0 -0
  26. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude-plugin/marketplace.json +0 -0
  27. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude-plugin/plugin.json +0 -0
  28. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  29. {agent_cli-0.76.5 → agent_cli-0.77.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  30. {agent_cli-0.76.5 → agent_cli-0.77.0}/.cursorrules +0 -0
  31. {agent_cli-0.76.5 → agent_cli-0.77.0}/.dockerignore +0 -0
  32. {agent_cli-0.76.5 → agent_cli-0.77.0}/.env.example +0 -0
  33. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/logo.svg +0 -0
  34. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/release-drafter.yml +0 -0
  35. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/renovate.json +0 -0
  36. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/scripts/check_extras_sync.py +0 -0
  37. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/scripts/sync_requirements.py +0 -0
  38. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/automerge.yml +0 -0
  39. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/docker.yml +0 -0
  40. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/docs.yml +0 -0
  41. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/markdown-code-runner.yml +0 -0
  42. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/pytest.yml +0 -0
  43. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/release-drafter.yml +0 -0
  44. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/release.yml +0 -0
  45. {agent_cli-0.76.5 → agent_cli-0.77.0}/.github/workflows/toc.yaml +0 -0
  46. {agent_cli-0.76.5 → agent_cli-0.77.0}/.gitignore +0 -0
  47. {agent_cli-0.76.5 → agent_cli-0.77.0}/.jscpd.json +0 -0
  48. {agent_cli-0.76.5 → agent_cli-0.77.0}/.pre-commit-config.yaml +0 -0
  49. {agent_cli-0.76.5 → agent_cli-0.77.0}/.prompts/docs-review.md +0 -0
  50. {agent_cli-0.76.5 → agent_cli-0.77.0}/.prompts/pr-review.md +0 -0
  51. {agent_cli-0.76.5 → agent_cli-0.77.0}/CLAUDE.md +0 -0
  52. {agent_cli-0.76.5 → agent_cli-0.77.0}/LICENSE +0 -0
  53. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/__init__.py +0 -0
  54. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/__main__.py +0 -0
  55. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_extras.json +0 -0
  56. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/.gitkeep +0 -0
  57. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/audio.txt +0 -0
  58. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
  59. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/kokoro.txt +0 -0
  60. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/llm.txt +0 -0
  61. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/memory.txt +0 -0
  62. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  63. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/piper.txt +0 -0
  64. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/rag.txt +0 -0
  65. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/server.txt +0 -0
  66. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/speed.txt +0 -0
  67. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/vad.txt +0 -0
  68. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  69. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_requirements/wyoming.txt +0 -0
  70. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/_tools.py +0 -0
  71. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/__init__.py +0 -0
  72. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  73. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/assistant.py +0 -0
  74. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/autocorrect.py +0 -0
  75. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/chat.py +0 -0
  76. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/memory/__init__.py +0 -0
  77. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/memory/add.py +0 -0
  78. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/memory/proxy.py +0 -0
  79. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/rag_proxy.py +0 -0
  80. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/speak.py +0 -0
  81. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/transcribe.py +0 -0
  82. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/agents/voice_edit.py +0 -0
  83. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/api.py +0 -0
  84. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/config.py +0 -0
  85. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/config_cmd.py +0 -0
  86. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/constants.py +0 -0
  87. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/__init__.py +0 -0
  88. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/audio.py +0 -0
  89. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/audio_format.py +0 -0
  90. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/chroma.py +0 -0
  91. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/deps.py +0 -0
  92. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/openai_proxy.py +0 -0
  93. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/process.py +0 -0
  94. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/reranker.py +0 -0
  95. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/sse.py +0 -0
  96. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/transcription_logger.py +0 -0
  97. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/utils.py +0 -0
  98. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/vad.py +0 -0
  99. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/core/watch.py +0 -0
  100. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/__init__.py +0 -0
  101. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  102. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  103. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/base.py +0 -0
  104. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  105. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  106. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  107. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  108. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  109. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  110. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  111. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  112. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/__init__.py +0 -0
  113. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/base.py +0 -0
  114. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/cursor.py +0 -0
  115. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/emacs.py +0 -0
  116. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  117. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/nano.py +0 -0
  118. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/neovim.py +0 -0
  119. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/registry.py +0 -0
  120. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/sublime.py +0 -0
  121. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/vim.py +0 -0
  122. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/vscode.py +0 -0
  123. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/editors/zed.py +0 -0
  124. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/project.py +0 -0
  125. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/registry.py +0 -0
  126. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/skill/SKILL.md +0 -0
  127. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/skill/examples.md +0 -0
  128. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/__init__.py +0 -0
  129. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  130. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/base.py +0 -0
  131. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/gnome.py +0 -0
  132. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  133. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/kitty.py +0 -0
  134. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/registry.py +0 -0
  135. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/tmux.py +0 -0
  136. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/warp.py +0 -0
  137. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/dev/terminals/zellij.py +0 -0
  138. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/install/__init__.py +0 -0
  139. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/install/common.py +0 -0
  140. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/install/extras.py +0 -0
  141. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/install/hotkeys.py +0 -0
  142. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/install/services.py +0 -0
  143. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/__init__.py +0 -0
  144. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_files.py +0 -0
  145. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_filters.py +0 -0
  146. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_git.py +0 -0
  147. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_indexer.py +0 -0
  148. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_ingest.py +0 -0
  149. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_persistence.py +0 -0
  150. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_prompt.py +0 -0
  151. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_retrieval.py +0 -0
  152. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_store.py +0 -0
  153. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_streaming.py +0 -0
  154. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/_tasks.py +0 -0
  155. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/api.py +0 -0
  156. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/client.py +0 -0
  157. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/engine.py +0 -0
  158. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/entities.py +0 -0
  159. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/memory/models.py +0 -0
  160. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/opts.py +0 -0
  161. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/py.typed +0 -0
  162. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/__init__.py +0 -0
  163. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_indexer.py +0 -0
  164. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_indexing.py +0 -0
  165. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_prompt.py +0 -0
  166. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_retriever.py +0 -0
  167. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_store.py +0 -0
  168. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/_utils.py +0 -0
  169. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/api.py +0 -0
  170. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/client.py +0 -0
  171. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/engine.py +0 -0
  172. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/rag/models.py +0 -0
  173. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  174. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/__init__.py +0 -0
  175. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/check_plugin_skill_sync.py +0 -0
  176. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  177. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  178. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  179. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  180. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  181. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  182. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  183. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  184. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  185. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  186. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  187. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  188. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  189. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  190. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
  191. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
  192. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-piper.sh +0 -0
  193. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-whisper-linux.sh +0 -0
  194. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-whisper-macos.sh +0 -0
  195. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
  196. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run-whisper.sh +0 -0
  197. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
  198. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  199. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/setup-linux.sh +0 -0
  200. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  201. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/setup-macos.sh +0 -0
  202. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
  203. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  204. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/start-all-services.sh +0 -0
  205. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/scripts/sync_extras.py +0 -0
  206. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/__init__.py +0 -0
  207. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/common.py +0 -0
  208. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/model_manager.py +0 -0
  209. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/model_registry.py +0 -0
  210. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/proxy/__init__.py +0 -0
  211. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/proxy/api.py +0 -0
  212. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/streaming.py +0 -0
  213. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/__init__.py +0 -0
  214. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/api.py +0 -0
  215. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  216. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/backends/base.py +0 -0
  217. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  218. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/backends/piper.py +0 -0
  219. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/model_manager.py +0 -0
  220. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/model_registry.py +0 -0
  221. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  222. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/__init__.py +0 -0
  223. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/api.py +0 -0
  224. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  225. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/backends/base.py +0 -0
  226. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  227. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  228. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
  229. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/languages.py +0 -0
  230. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/model_manager.py +0 -0
  231. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/model_registry.py +0 -0
  232. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  233. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/__init__.py +0 -0
  234. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/_wyoming_utils.py +0 -0
  235. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/asr.py +0 -0
  236. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/llm.py +0 -0
  237. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/tts.py +0 -0
  238. {agent_cli-0.76.5 → agent_cli-0.77.0}/agent_cli/services/wake_word.py +0 -0
  239. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/docker-compose.yml +0 -0
  240. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/memory-proxy.Dockerfile +0 -0
  241. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/rag-proxy.Dockerfile +0 -0
  242. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/transcribe-proxy.Dockerfile +0 -0
  243. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/tts.Dockerfile +0 -0
  244. {agent_cli-0.76.5 → agent_cli-0.77.0}/docker/whisper.Dockerfile +0 -0
  245. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/CNAME +0 -0
  246. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/architecture/memory.md +0 -0
  247. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/architecture/rag.md +0 -0
  248. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/assistant.md +0 -0
  249. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/autocorrect.md +0 -0
  250. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/chat.md +0 -0
  251. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/config.md +0 -0
  252. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/dev.md +0 -0
  253. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/install-extras.md +0 -0
  254. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/install-hotkeys.md +0 -0
  255. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/install-services.md +0 -0
  256. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/memory.md +0 -0
  257. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/rag-proxy.md +0 -0
  258. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/server/index.md +0 -0
  259. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/server/transcribe-proxy.md +0 -0
  260. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/server/tts.md +0 -0
  261. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/server/whisper.md +0 -0
  262. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/speak.md +0 -0
  263. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/start-services.md +0 -0
  264. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/transcribe.md +0 -0
  265. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/commands/voice-edit.md +0 -0
  266. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/getting-started.md +0 -0
  267. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/iOS_Shortcut_Guide.md +0 -0
  268. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/docker.md +0 -0
  269. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/index.md +0 -0
  270. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/linux.md +0 -0
  271. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/macos.md +0 -0
  272. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/nixos.md +0 -0
  273. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/installation/windows.md +0 -0
  274. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/logo-clean.svg +0 -0
  275. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  276. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/run_markdown_code_runner.py +0 -0
  277. {agent_cli-0.76.5 → agent_cli-0.77.0}/docs/system-integration.md +0 -0
  278. {agent_cli-0.76.5 → agent_cli-0.77.0}/example.agent-cli-config.toml +0 -0
  279. {agent_cli-0.76.5 → agent_cli-0.77.0}/justfile +0 -0
  280. {agent_cli-0.76.5 → agent_cli-0.77.0}/pyproject.toml +0 -0
  281. {agent_cli-0.76.5 → agent_cli-0.77.0}/shell.nix +0 -0
  282. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/__init__.py +0 -0
  283. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/__init__.py +0 -0
  284. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_fix_my_text.py +0 -0
  285. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_interactive.py +0 -0
  286. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_interactive_extra.py +0 -0
  287. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_memory_add.py +0 -0
  288. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_speak.py +0 -0
  289. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_speak_e2e.py +0 -0
  290. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_transcribe.py +0 -0
  291. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_transcribe_agent.py +0 -0
  292. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_transcribe_e2e.py +0 -0
  293. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_transcribe_recovery.py +0 -0
  294. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_tts_common.py +0 -0
  295. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_tts_common_extra.py +0 -0
  296. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_voice_agent_common.py +0 -0
  297. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_voice_edit.py +0 -0
  298. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  299. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/agents/test_wake_word_assistant.py +0 -0
  300. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/conftest.py +0 -0
  301. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/__init__.py +0 -0
  302. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/test_audio_format.py +0 -0
  303. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/test_chroma.py +0 -0
  304. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/test_sse.py +0 -0
  305. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/test_vad.py +0 -0
  306. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/core/test_watch.py +0 -0
  307. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/__init__.py +0 -0
  308. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_cli.py +0 -0
  309. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_coding_agents.py +0 -0
  310. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_editors.py +0 -0
  311. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_project.py +0 -0
  312. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_terminals.py +0 -0
  313. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_verification.py +0 -0
  314. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/dev/test_worktree.py +0 -0
  315. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/install/__init__.py +0 -0
  316. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/install/test_extras.py +0 -0
  317. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/__init__.py +0 -0
  318. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_api_health.py +0 -0
  319. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_api_integration_liveish.py +0 -0
  320. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_client.py +0 -0
  321. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_engine.py +0 -0
  322. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_files.py +0 -0
  323. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_filters.py +0 -0
  324. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_git_integration.py +0 -0
  325. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_indexer.py +0 -0
  326. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_memory_integration.py +0 -0
  327. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_proxy_passthrough.py +0 -0
  328. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_store.py +0 -0
  329. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/memory/test_utils.py +0 -0
  330. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/mocks/__init__.py +0 -0
  331. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/mocks/audio.py +0 -0
  332. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/mocks/llm.py +0 -0
  333. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/mocks/wyoming.py +0 -0
  334. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/__init__.py +0 -0
  335. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_api.py +0 -0
  336. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_engine.py +0 -0
  337. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_history.py +0 -0
  338. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_indexer.py +0 -0
  339. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_indexing.py +0 -0
  340. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_rag_client.py +0 -0
  341. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  342. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  343. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_retriever.py +0 -0
  344. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_store.py +0 -0
  345. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/rag/test_utils.py +0 -0
  346. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_api.py +0 -0
  347. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_api_integration.py +0 -0
  348. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_asr.py +0 -0
  349. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_asr_recovery.py +0 -0
  350. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_audio_e2e.py +0 -0
  351. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_cli.py +0 -0
  352. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_config.py +0 -0
  353. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_config_cmd.py +0 -0
  354. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_docs_gen.py +0 -0
  355. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_env_vars.py +0 -0
  356. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_json_output.py +0 -0
  357. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_llm.py +0 -0
  358. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_llm_gemini.py +0 -0
  359. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_memory_tools.py +0 -0
  360. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_mlx_backend.py +0 -0
  361. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_process_manager.py +0 -0
  362. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_requires_extras.py +0 -0
  363. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_server_streaming.py +0 -0
  364. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_server_tts.py +0 -0
  365. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_server_whisper.py +0 -0
  366. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_services.py +0 -0
  367. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_tools.py +0 -0
  368. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_transformers_backend.py +0 -0
  369. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_tts.py +0 -0
  370. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_utils.py +0 -0
  371. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_wake_word.py +0 -0
  372. {agent_cli-0.76.5 → agent_cli-0.77.0}/tests/test_wyoming_utils.py +0 -0
  373. {agent_cli-0.76.5 → agent_cli-0.77.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.76.5
3
+ Version: 0.77.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>
@@ -143,7 +143,7 @@ Since then I have expanded the tool with many more features, all focused on loca
143
143
  - **[`rag-proxy`](docs/commands/rag-proxy.md)**: RAG proxy server for chatting with your documents.
144
144
  - **[`dev`](docs/commands/dev.md)**: Parallel development with git worktrees and AI coding agents.
145
145
  - **[`server`](docs/commands/server/index.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI-compatible APIs), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
146
- - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]" -p 3.13`.
146
+ - **[`transcribe-live`](docs/commands/transcribe-live.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]" -p 3.13`.
147
147
 
148
148
  ## Quick Start
149
149
 
@@ -254,7 +254,7 @@ The setup scripts automatically install:
254
254
  - [Provider Defaults](#provider-defaults)
255
255
  - [`autocorrect`](#autocorrect)
256
256
  - [`transcribe`](#transcribe)
257
- - [`transcribe-daemon`](#transcribe-daemon)
257
+ - [`transcribe-live`](#transcribe-live)
258
258
  - [`speak`](#speak)
259
259
  - [`voice-edit`](#voice-edit)
260
260
  - [`assistant`](#assistant)
@@ -953,7 +953,7 @@ the `[defaults]` section of your configuration file.
953
953
 
954
954
  </details>
955
955
 
956
- ### `transcribe-daemon`
956
+ ### `transcribe-live`
957
957
 
958
958
  **Purpose:** A continuous background transcription service that automatically detects and transcribes speech.
959
959
 
@@ -972,10 +972,10 @@ uv tool install "agent-cli[vad]" -p 3.13
972
972
 
973
973
  **How to Use It:**
974
974
 
975
- - **Basic Daemon**: `agent-cli transcribe-daemon`
976
- - **With Custom Role**: `agent-cli transcribe-daemon --role meeting`
977
- - **With LLM Cleanup**: `agent-cli transcribe-daemon --llm`
978
- - **Custom Silence Threshold**: `agent-cli transcribe-daemon --silence-threshold 1.5`
975
+ - **Basic Daemon**: `agent-cli transcribe-live`
976
+ - **With Custom Role**: `agent-cli transcribe-live --role meeting`
977
+ - **With LLM Cleanup**: `agent-cli transcribe-live --llm`
978
+ - **Custom Silence Threshold**: `agent-cli transcribe-live --silence-threshold 1.5`
979
979
 
980
980
  **Output Files:**
981
981
 
@@ -983,7 +983,7 @@ uv tool install "agent-cli[vad]" -p 3.13
983
983
  - **Audio Files**: `~/.config/agent-cli/audio/YYYY/MM/DD/*.mp3`
984
984
 
985
985
  <details>
986
- <summary>See the output of <code>agent-cli transcribe-daemon --help</code></summary>
986
+ <summary>See the output of <code>agent-cli transcribe-live --help</code></summary>
987
987
 
988
988
  <!-- CODE:BASH:START -->
989
989
  <!-- echo '```yaml' -->
@@ -991,20 +991,20 @@ uv tool install "agent-cli[vad]" -p 3.13
991
991
  <!-- export TERM=dumb -->
992
992
  <!-- export COLUMNS=90 -->
993
993
  <!-- export TERMINAL_WIDTH=90 -->
994
- <!-- agent-cli transcribe-daemon --help -->
994
+ <!-- agent-cli transcribe-live --help -->
995
995
  <!-- echo '```' -->
996
996
  <!-- CODE:END -->
997
997
  <!-- OUTPUT:START -->
998
998
  <!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
999
999
  ```yaml
1000
1000
 
1001
- Usage: agent-cli transcribe-daemon [OPTIONS]
1001
+ Usage: agent-cli transcribe-live [OPTIONS]
1002
1002
 
1003
- Continuous transcription daemon using Silero VAD for speech detection.
1003
+ Continuous live transcription using Silero VAD for speech detection.
1004
1004
 
1005
- Unlike transcribe (single recording session), this daemon runs indefinitely and
1006
- automatically detects speech segments using Voice Activity Detection (VAD). Each
1007
- detected segment is transcribed and logged with timestamps.
1005
+ Unlike transcribe (single recording session), this runs indefinitely and automatically
1006
+ detects speech segments using Voice Activity Detection (VAD). Each detected segment is
1007
+ transcribed and logged with timestamps.
1008
1008
 
1009
1009
  How it works:
1010
1010
 
@@ -1020,11 +1020,11 @@ uv tool install "agent-cli[vad]" -p 3.13
1020
1020
  Examples:
1021
1021
 
1022
1022
 
1023
- agent-cli transcribe-daemon
1024
- agent-cli transcribe-daemon --role meeting --silence-threshold 1.5
1025
- agent-cli transcribe-daemon --llm --clipboard --role notes
1026
- agent-cli transcribe-daemon --transcription-log ~/meeting.jsonl --no-save-audio
1027
- agent-cli transcribe-daemon --asr-provider openai --llm-provider gemini --llm
1023
+ agent-cli transcribe-live
1024
+ agent-cli transcribe-live --role meeting --silence-threshold 1.5
1025
+ agent-cli transcribe-live --llm --clipboard --role notes
1026
+ agent-cli transcribe-live --transcription-log ~/meeting.jsonl --no-save-audio
1027
+ agent-cli transcribe-live --asr-provider openai --llm-provider gemini --llm
1028
1028
 
1029
1029
 
1030
1030
  Tips:
@@ -1032,7 +1032,7 @@ uv tool install "agent-cli[vad]" -p 3.13
1032
1032
  • Use --role to tag entries (e.g., speaker1, meeting, personal)
1033
1033
  • Adjust --vad-threshold if detection is too sensitive (increase) or missing speech
1034
1034
  (decrease)
1035
- • Use --stop to cleanly terminate a running daemon
1035
+ • Use --stop to cleanly terminate a running process
1036
1036
  • With --llm, transcripts are cleaned up (punctuation, filler words removed)
1037
1037
 
1038
1038
  ╭─ Options ──────────────────────────────────────────────────────────────────────────────╮
@@ -49,7 +49,7 @@ Since then I have expanded the tool with many more features, all focused on loca
49
49
  - **[`rag-proxy`](docs/commands/rag-proxy.md)**: RAG proxy server for chatting with your documents.
50
50
  - **[`dev`](docs/commands/dev.md)**: Parallel development with git worktrees and AI coding agents.
51
51
  - **[`server`](docs/commands/server/index.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI-compatible APIs), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
52
- - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]" -p 3.13`.
52
+ - **[`transcribe-live`](docs/commands/transcribe-live.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]" -p 3.13`.
53
53
 
54
54
  ## Quick Start
55
55
 
@@ -160,7 +160,7 @@ The setup scripts automatically install:
160
160
  - [Provider Defaults](#provider-defaults)
161
161
  - [`autocorrect`](#autocorrect)
162
162
  - [`transcribe`](#transcribe)
163
- - [`transcribe-daemon`](#transcribe-daemon)
163
+ - [`transcribe-live`](#transcribe-live)
164
164
  - [`speak`](#speak)
165
165
  - [`voice-edit`](#voice-edit)
166
166
  - [`assistant`](#assistant)
@@ -859,7 +859,7 @@ the `[defaults]` section of your configuration file.
859
859
 
860
860
  </details>
861
861
 
862
- ### `transcribe-daemon`
862
+ ### `transcribe-live`
863
863
 
864
864
  **Purpose:** A continuous background transcription service that automatically detects and transcribes speech.
865
865
 
@@ -878,10 +878,10 @@ uv tool install "agent-cli[vad]" -p 3.13
878
878
 
879
879
  **How to Use It:**
880
880
 
881
- - **Basic Daemon**: `agent-cli transcribe-daemon`
882
- - **With Custom Role**: `agent-cli transcribe-daemon --role meeting`
883
- - **With LLM Cleanup**: `agent-cli transcribe-daemon --llm`
884
- - **Custom Silence Threshold**: `agent-cli transcribe-daemon --silence-threshold 1.5`
881
+ - **Basic Daemon**: `agent-cli transcribe-live`
882
+ - **With Custom Role**: `agent-cli transcribe-live --role meeting`
883
+ - **With LLM Cleanup**: `agent-cli transcribe-live --llm`
884
+ - **Custom Silence Threshold**: `agent-cli transcribe-live --silence-threshold 1.5`
885
885
 
886
886
  **Output Files:**
887
887
 
@@ -889,7 +889,7 @@ uv tool install "agent-cli[vad]" -p 3.13
889
889
  - **Audio Files**: `~/.config/agent-cli/audio/YYYY/MM/DD/*.mp3`
890
890
 
891
891
  <details>
892
- <summary>See the output of <code>agent-cli transcribe-daemon --help</code></summary>
892
+ <summary>See the output of <code>agent-cli transcribe-live --help</code></summary>
893
893
 
894
894
  <!-- CODE:BASH:START -->
895
895
  <!-- echo '```yaml' -->
@@ -897,20 +897,20 @@ uv tool install "agent-cli[vad]" -p 3.13
897
897
  <!-- export TERM=dumb -->
898
898
  <!-- export COLUMNS=90 -->
899
899
  <!-- export TERMINAL_WIDTH=90 -->
900
- <!-- agent-cli transcribe-daemon --help -->
900
+ <!-- agent-cli transcribe-live --help -->
901
901
  <!-- echo '```' -->
902
902
  <!-- CODE:END -->
903
903
  <!-- OUTPUT:START -->
904
904
  <!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
905
905
  ```yaml
906
906
 
907
- Usage: agent-cli transcribe-daemon [OPTIONS]
907
+ Usage: agent-cli transcribe-live [OPTIONS]
908
908
 
909
- Continuous transcription daemon using Silero VAD for speech detection.
909
+ Continuous live transcription using Silero VAD for speech detection.
910
910
 
911
- Unlike transcribe (single recording session), this daemon runs indefinitely and
912
- automatically detects speech segments using Voice Activity Detection (VAD). Each
913
- detected segment is transcribed and logged with timestamps.
911
+ Unlike transcribe (single recording session), this runs indefinitely and automatically
912
+ detects speech segments using Voice Activity Detection (VAD). Each detected segment is
913
+ transcribed and logged with timestamps.
914
914
 
915
915
  How it works:
916
916
 
@@ -926,11 +926,11 @@ uv tool install "agent-cli[vad]" -p 3.13
926
926
  Examples:
927
927
 
928
928
 
929
- agent-cli transcribe-daemon
930
- agent-cli transcribe-daemon --role meeting --silence-threshold 1.5
931
- agent-cli transcribe-daemon --llm --clipboard --role notes
932
- agent-cli transcribe-daemon --transcription-log ~/meeting.jsonl --no-save-audio
933
- agent-cli transcribe-daemon --asr-provider openai --llm-provider gemini --llm
929
+ agent-cli transcribe-live
930
+ agent-cli transcribe-live --role meeting --silence-threshold 1.5
931
+ agent-cli transcribe-live --llm --clipboard --role notes
932
+ agent-cli transcribe-live --transcription-log ~/meeting.jsonl --no-save-audio
933
+ agent-cli transcribe-live --asr-provider openai --llm-provider gemini --llm
934
934
 
935
935
 
936
936
  Tips:
@@ -938,7 +938,7 @@ uv tool install "agent-cli[vad]" -p 3.13
938
938
  • Use --role to tag entries (e.g., speaker1, meeting, personal)
939
939
  • Adjust --vad-threshold if detection is too sensitive (increase) or missing speech
940
940
  (decrease)
941
- • Use --stop to cleanly terminate a running daemon
941
+ • Use --stop to cleanly terminate a running process
942
942
  • With --llm, transcripts are cleaned up (punctuation, filler words removed)
943
943
 
944
944
  ╭─ Options ──────────────────────────────────────────────────────────────────────────────╮
@@ -1,4 +1,4 @@
1
- """Continuous transcription daemon with voice activity detection."""
1
+ """Continuous live transcription with voice activity detection."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -287,9 +287,9 @@ async def _daemon_loop(cfg: DaemonConfig) -> None: # noqa: PLR0912, PLR0915
287
287
  await asyncio.wait(background_tasks, timeout=2.0)
288
288
 
289
289
 
290
- @app.command("transcribe-daemon", rich_help_panel="Voice Commands")
290
+ @app.command("transcribe-live", rich_help_panel="Voice Commands")
291
291
  @requires_extras("audio", "vad", "llm")
292
- def transcribe_daemon( # noqa: PLR0912
292
+ def transcribe_live( # noqa: PLR0912
293
293
  *,
294
294
  # Daemon-specific options
295
295
  role: str = typer.Option(
@@ -368,9 +368,9 @@ def transcribe_daemon( # noqa: PLR0912
368
368
  config_file: str | None = opts.CONFIG_FILE,
369
369
  print_args: bool = opts.PRINT_ARGS,
370
370
  ) -> None:
371
- """Continuous transcription daemon using Silero VAD for speech detection.
371
+ """Continuous live transcription using Silero VAD for speech detection.
372
372
 
373
- Unlike `transcribe` (single recording session), this daemon runs indefinitely
373
+ Unlike `transcribe` (single recording session), this runs indefinitely
374
374
  and automatically detects speech segments using Voice Activity Detection (VAD).
375
375
  Each detected segment is transcribed and logged with timestamps.
376
376
 
@@ -387,24 +387,24 @@ def transcribe_daemon( # noqa: PLR0912
387
387
 
388
388
  **Examples:**
389
389
 
390
- agent-cli transcribe-daemon
391
- agent-cli transcribe-daemon --role meeting --silence-threshold 1.5
392
- agent-cli transcribe-daemon --llm --clipboard --role notes
393
- agent-cli transcribe-daemon --transcription-log ~/meeting.jsonl --no-save-audio
394
- agent-cli transcribe-daemon --asr-provider openai --llm-provider gemini --llm
390
+ agent-cli transcribe-live
391
+ agent-cli transcribe-live --role meeting --silence-threshold 1.5
392
+ agent-cli transcribe-live --llm --clipboard --role notes
393
+ agent-cli transcribe-live --transcription-log ~/meeting.jsonl --no-save-audio
394
+ agent-cli transcribe-live --asr-provider openai --llm-provider gemini --llm
395
395
 
396
396
  **Tips:**
397
397
 
398
398
  - Use `--role` to tag entries (e.g., `speaker1`, `meeting`, `personal`)
399
399
  - Adjust `--vad-threshold` if detection is too sensitive (increase) or missing speech (decrease)
400
- - Use `--stop` to cleanly terminate a running daemon
400
+ - Use `--stop` to cleanly terminate a running process
401
401
  - With `--llm`, transcripts are cleaned up (punctuation, filler words removed)
402
402
  """
403
403
  if print_args:
404
404
  print_command_line_args(locals())
405
405
  setup_logging(log_level, log_file_logging, quiet=quiet)
406
406
 
407
- process_name = "transcribe-daemon"
407
+ process_name = "transcribe-live"
408
408
 
409
409
  # Handle stop/status commands
410
410
  if stop:
@@ -121,9 +121,10 @@ from .agents import ( # noqa: E402, F401
121
121
  rag_proxy,
122
122
  speak,
123
123
  transcribe,
124
- transcribe_daemon,
124
+ transcribe_live,
125
125
  voice_edit,
126
126
  )
127
+ from .daemon import cli as daemon_cli # noqa: E402, F401
127
128
  from .dev import cli as dev_cli # noqa: E402, F401
128
129
  from .install import extras, hotkeys, services # noqa: E402, F401
129
130
  from .server import cli as server_cli # noqa: E402, F401
@@ -0,0 +1 @@
1
+ """Daemon management for agent-cli background services."""
@@ -0,0 +1,383 @@
1
+ """CLI commands for daemon installation and management.
2
+
3
+ Manage agent-cli servers as background daemons:
4
+ - macOS: launchd services (~/Library/LaunchAgents/)
5
+ - Linux: systemd user services (~/.config/systemd/user/)
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import platform
11
+ from typing import Annotated
12
+
13
+ import typer
14
+ from rich.panel import Panel
15
+
16
+ from agent_cli.cli import app as main_app
17
+ from agent_cli.core.utils import console, err_console
18
+ from agent_cli.install.service_config import SERVICES, get_service_manager
19
+
20
+ app = typer.Typer(
21
+ name="daemon",
22
+ help="""Manage agent-cli servers as background daemons.
23
+
24
+ Install, uninstall, and monitor agent-cli servers running as system daemons
25
+ (launchd on macOS, systemd on Linux).
26
+
27
+ **Available daemons:**
28
+
29
+ | Daemon | Description | Ports |
30
+ |--------|-------------|-------|
31
+ | `whisper` | Speech-to-text ASR | 10300/10301 |
32
+ | `tts` | Text-to-speech (Kokoro) | 10200/10201 |
33
+ | `transcription-proxy` | ASR provider proxy | 61337 |
34
+
35
+ **Examples:**
36
+
37
+ ```bash
38
+ # Install whisper as a background daemon
39
+ agent-cli daemon install whisper
40
+
41
+ # Check status of all daemons
42
+ agent-cli daemon status
43
+
44
+ # Uninstall a daemon
45
+ agent-cli daemon uninstall whisper
46
+ ```
47
+
48
+ Daemons run via `uv tool run` and start automatically at login.
49
+ """,
50
+ add_completion=True,
51
+ rich_markup_mode="markdown",
52
+ no_args_is_help=True,
53
+ )
54
+ main_app.add_typer(app, name="daemon", rich_help_panel="Servers")
55
+
56
+
57
+ @app.command("status")
58
+ def status_cmd(
59
+ service: Annotated[
60
+ str | None,
61
+ typer.Argument(
62
+ help="Service to check, or omit for all services",
63
+ ),
64
+ ] = None,
65
+ ) -> None:
66
+ """Check status of installed daemons.
67
+
68
+ Shows whether each daemon is installed and running.
69
+
70
+ Examples:
71
+ # Check all daemons
72
+ agent-cli daemon status
73
+
74
+ # Check specific daemon
75
+ agent-cli daemon status whisper
76
+
77
+ """
78
+ try:
79
+ manager = get_service_manager()
80
+ except RuntimeError as e:
81
+ err_console.print(f"[bold red]Error:[/bold red] {e}")
82
+ raise typer.Exit(1) from None
83
+
84
+ services_to_check = [service] if service else list(SERVICES.keys())
85
+
86
+ if service and service not in SERVICES:
87
+ err_console.print(
88
+ f"[bold red]Error:[/bold red] Unknown service '{service}'. "
89
+ f"Available: {', '.join(SERVICES.keys())}",
90
+ )
91
+ raise typer.Exit(1)
92
+
93
+ console.print("[bold]Service Status[/bold]")
94
+ console.print()
95
+
96
+ for svc_name in services_to_check:
97
+ status = manager.get_service_status(svc_name)
98
+ if not status.installed:
99
+ console.print(f" {svc_name}: [dim]not installed[/dim]")
100
+ elif status.running:
101
+ console.print(f" {svc_name}: [green]running[/green] (pid {status.pid})")
102
+ else:
103
+ console.print(f" {svc_name}: [yellow]installed but not running[/yellow]")
104
+
105
+ console.print()
106
+ system = platform.system()
107
+ if system == "Darwin":
108
+ console.print("[dim]Log locations: ~/Library/Logs/agent-cli-<service>/[/dim]")
109
+ else:
110
+ console.print("[dim]Log locations: journalctl --user -u agent-cli-<service>[/dim]")
111
+
112
+
113
+ def _confirm_action(message: str) -> bool:
114
+ """Ask user for confirmation. Returns True if confirmed."""
115
+ try:
116
+ confirm = console.input(f"[bold]{message} [Y/n]: [/bold]").strip().lower()
117
+ return not confirm or confirm == "y"
118
+ except (KeyboardInterrupt, EOFError):
119
+ console.print("\n[dim]Cancelled.[/dim]")
120
+ raise typer.Exit(0) from None
121
+
122
+
123
+ def _ensure_uv_installed(no_confirm: bool) -> None:
124
+ """Ensure uv is installed, prompting user if needed."""
125
+ try:
126
+ manager = get_service_manager()
127
+ except RuntimeError as e:
128
+ err_console.print(f"[bold red]Error:[/bold red] {e}")
129
+ raise typer.Exit(1) from None
130
+
131
+ uv_installed, uv_path = manager.check_uv_installed()
132
+ if uv_installed:
133
+ console.print(f" [green]✓[/green] uv installed at {uv_path}")
134
+ return
135
+
136
+ console.print()
137
+ console.print("[yellow]uv is not installed. It's required for running services.[/yellow]")
138
+
139
+ if not no_confirm and not _confirm_action("Install uv now?"):
140
+ console.print("[dim]Skipping uv installation.[/dim]")
141
+ console.print(
142
+ "[yellow]Services may not work without uv. "
143
+ "Install from https://docs.astral.sh/uv/[/yellow]",
144
+ )
145
+ return
146
+
147
+ console.print("Installing uv...")
148
+ success, msg = manager.install_uv()
149
+ if success:
150
+ console.print(f" [green]✓[/green] {msg}")
151
+ else:
152
+ console.print(f" [red]✗[/red] {msg}")
153
+ raise typer.Exit(1)
154
+
155
+
156
+ @app.command("install")
157
+ def install_cmd( # noqa: PLR0912, PLR0915
158
+ services: Annotated[
159
+ list[str] | None,
160
+ typer.Argument(
161
+ help="Services to install (whisper, tts, transcription-proxy).",
162
+ ),
163
+ ] = None,
164
+ all_services: Annotated[
165
+ bool,
166
+ typer.Option("--all", "-a", help="Install all available services"),
167
+ ] = False,
168
+ skip_deps: Annotated[
169
+ bool,
170
+ typer.Option("--skip-deps", help="Skip uv dependency check"),
171
+ ] = False,
172
+ no_confirm: Annotated[
173
+ bool,
174
+ typer.Option("--no-confirm", "-y", help="Skip confirmation prompts"),
175
+ ] = False,
176
+ ) -> None:
177
+ """Install server daemons as background processes.
178
+
179
+ Installs agent-cli's built-in servers to run automatically
180
+ at login and restart on failure.
181
+
182
+ **Supported platforms:**
183
+ - **macOS**: launchd services (~/Library/LaunchAgents/)
184
+ - **Linux**: systemd user services (~/.config/systemd/user/)
185
+
186
+ **Available daemons:**
187
+ - **whisper**: Speech-to-text ASR server (ports 10300/10301)
188
+ - **tts**: Text-to-speech with Kokoro (ports 10200/10201)
189
+ - **transcription-proxy**: Proxy for ASR providers (port 61337)
190
+
191
+ Daemons run via `uv tool run` and don't require a virtual environment.
192
+
193
+ **Examples:**
194
+
195
+ # Install specific daemons
196
+ agent-cli daemon install whisper tts
197
+
198
+ # Install all daemons
199
+ agent-cli daemon install --all
200
+
201
+ # Skip confirmation prompts
202
+ agent-cli daemon install whisper -y
203
+
204
+ After installation, check status with:
205
+ agent-cli daemon status
206
+ """
207
+ if not services and not all_services:
208
+ err_console.print(
209
+ f"[bold red]Error:[/bold red] Specify services to install or use --all. "
210
+ f"Available: {', '.join(SERVICES.keys())}",
211
+ )
212
+ raise typer.Exit(1)
213
+
214
+ try:
215
+ manager = get_service_manager()
216
+ except RuntimeError as e:
217
+ err_console.print(f"[bold red]Error:[/bold red] {e}")
218
+ raise typer.Exit(1) from None
219
+
220
+ # Determine which services to install
221
+ if all_services:
222
+ selected_services = list(SERVICES.keys())
223
+ else:
224
+ assert services is not None # Already checked above
225
+ invalid = [s for s in services if s not in SERVICES]
226
+ if invalid:
227
+ err_console.print(
228
+ f"[bold red]Error:[/bold red] Unknown service(s): {', '.join(invalid)}. "
229
+ f"Available: {', '.join(SERVICES.keys())}",
230
+ )
231
+ raise typer.Exit(1)
232
+ selected_services = services
233
+
234
+ # Check uv dependency
235
+ if not skip_deps:
236
+ _ensure_uv_installed(no_confirm)
237
+
238
+ # Confirm installation
239
+ if not no_confirm:
240
+ console.print()
241
+ console.print(f"[bold]Will install:[/bold] {', '.join(selected_services)}")
242
+ if not _confirm_action("Continue?"):
243
+ console.print("[dim]Cancelled.[/dim]")
244
+ raise typer.Exit(0)
245
+
246
+ # Install services
247
+ console.print()
248
+ console.print("[bold]Installing services...[/bold]")
249
+
250
+ success_count = 0
251
+ failed = []
252
+
253
+ for svc_name in selected_services:
254
+ result = manager.install_service(svc_name)
255
+ if result.success:
256
+ if result.log_dir:
257
+ console.print(
258
+ f" [green]✓[/green] {svc_name}: {result.message}. Logs: {result.log_dir}/",
259
+ )
260
+ else:
261
+ log_cmd = manager.get_log_command(svc_name)
262
+ console.print(
263
+ f" [green]✓[/green] {svc_name}: {result.message}. Logs: [cyan]{log_cmd}[/cyan]",
264
+ )
265
+ success_count += 1
266
+ else:
267
+ console.print(f" [red]✗[/red] {svc_name}: {result.message}")
268
+ failed.append(svc_name)
269
+
270
+ # Summary
271
+ console.print()
272
+ system = platform.system()
273
+ if system == "Darwin":
274
+ log_hint = "View logs: [cyan]~/Library/Logs/agent-cli-<service>/[/cyan]"
275
+ else:
276
+ log_hint = "View logs: [cyan]journalctl --user -u agent-cli-<service> -f[/cyan]"
277
+
278
+ if success_count == len(selected_services):
279
+ panel = Panel(
280
+ f"[green]Successfully installed {success_count} daemon(s)![/green]\n\n"
281
+ f"Check status: [cyan]agent-cli daemon status[/cyan]\n{log_hint}",
282
+ title="Installation Complete",
283
+ border_style="green",
284
+ )
285
+ console.print(panel)
286
+ elif success_count > 0:
287
+ panel = Panel(
288
+ f"[yellow]Installed {success_count} daemon(s), "
289
+ f"{len(failed)} failed: {', '.join(failed)}[/yellow]\n\n"
290
+ "Check status: [cyan]agent-cli daemon status[/cyan]",
291
+ title="Partial Installation",
292
+ border_style="yellow",
293
+ )
294
+ console.print(panel)
295
+ else:
296
+ err_console.print(
297
+ f"[bold red]Error:[/bold red] All installations failed: {', '.join(failed)}",
298
+ )
299
+ raise typer.Exit(1)
300
+
301
+
302
+ @app.command("uninstall")
303
+ def uninstall_cmd(
304
+ services: Annotated[
305
+ list[str] | None,
306
+ typer.Argument(
307
+ help="Services to uninstall (whisper, tts, transcription-proxy).",
308
+ ),
309
+ ] = None,
310
+ all_services: Annotated[
311
+ bool,
312
+ typer.Option("--all", "-a", help="Uninstall all installed services"),
313
+ ] = False,
314
+ no_confirm: Annotated[
315
+ bool,
316
+ typer.Option("--no-confirm", "-y", help="Skip confirmation prompts"),
317
+ ] = False,
318
+ ) -> None:
319
+ """Uninstall server daemons.
320
+
321
+ Stops daemons and removes their configuration.
322
+ Log files are preserved for debugging (macOS only).
323
+
324
+ **Examples:**
325
+
326
+ # Uninstall specific daemons
327
+ agent-cli daemon uninstall whisper tts
328
+
329
+ # Uninstall all daemons
330
+ agent-cli daemon uninstall --all
331
+
332
+ """
333
+ if not services and not all_services:
334
+ err_console.print(
335
+ f"[bold red]Error:[/bold red] Specify services to uninstall or use --all. "
336
+ f"Available: {', '.join(SERVICES.keys())}",
337
+ )
338
+ raise typer.Exit(1)
339
+
340
+ try:
341
+ manager = get_service_manager()
342
+ except RuntimeError as e:
343
+ err_console.print(f"[bold red]Error:[/bold red] {e}")
344
+ raise typer.Exit(1) from None
345
+
346
+ # Determine which services to uninstall
347
+ if all_services:
348
+ selected_services = [n for n in SERVICES if manager.get_service_status(n).installed]
349
+ if not selected_services:
350
+ console.print("[dim]No services are currently installed.[/dim]")
351
+ return
352
+ else:
353
+ assert services is not None # Already checked above
354
+ invalid = [s for s in services if s not in SERVICES]
355
+ if invalid:
356
+ err_console.print(
357
+ f"[bold red]Error:[/bold red] Unknown service(s): {', '.join(invalid)}. "
358
+ f"Available: {', '.join(SERVICES.keys())}",
359
+ )
360
+ raise typer.Exit(1)
361
+ selected_services = services
362
+
363
+ # Confirm uninstallation
364
+ if not no_confirm:
365
+ console.print()
366
+ console.print(f"[bold]Will uninstall:[/bold] {', '.join(selected_services)}")
367
+ if not _confirm_action("Continue?"):
368
+ console.print("[dim]Cancelled.[/dim]")
369
+ raise typer.Exit(0)
370
+
371
+ # Uninstall services
372
+ console.print()
373
+ console.print("[bold]Uninstalling services...[/bold]")
374
+
375
+ for svc_name in selected_services:
376
+ result = manager.uninstall_service(svc_name)
377
+ console.print(f" [green]✓[/green] {svc_name}: {result.message}")
378
+
379
+ console.print()
380
+ if platform.system() == "Darwin":
381
+ console.print(
382
+ "[dim]Note: Log files are preserved at ~/Library/Logs/agent-cli-<service>/[/dim]",
383
+ )