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.
- {agent_cli-0.77.0 → agent_cli-0.78.0}/PKG-INFO +1 -1
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/daemon/cli.py +44 -8
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/launchd.py +25 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/service_config.py +11 -3
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/systemd.py +26 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/cli.py +12 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/tts.py +4 -1
- agent_cli-0.78.0/docs/commands/daemon.md +174 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/index.md +1 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_daemon.py +2 -1
- {agent_cli-0.77.0 → agent_cli-0.78.0}/zensical.toml +1 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/README.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.cursorrules +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.dockerignore +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.env.example +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/logo.svg +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/release-drafter.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/renovate.json +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/release.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.gitignore +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.jscpd.json +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.prompts/docs-review.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/.prompts/pr-review.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/CLAUDE.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/LICENSE +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/README.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/__main__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_extras.json +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/_tools.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/cli.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/config.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/constants.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/process.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/common.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/install/services.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/opts.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/py.typed +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-piper.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-linux.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-macos.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run-whisper.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/scripts/sync_extras.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/common.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/docker-compose.yml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/CNAME +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/index.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/memory.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/architecture/rag.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/assistant.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/chat.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/config.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/dev.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/install-services.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/memory.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/index.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/speak.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/start-services.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/configuration.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/getting-started.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/index.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/docker.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/index.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/linux.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/macos.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/nixos.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/installation/windows.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/logo-clean.svg +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/docs/system-integration.md +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/justfile +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/pyproject.toml +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/shell.nix +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/conftest.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_sse.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_vad.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/core/test_watch.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_project.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/install/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/install/test_extras.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_client.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_files.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_store.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/audio.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/llm.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/__init__.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_history.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_store.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_api.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_api_integration.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_asr.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_cli.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_config.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_env_vars.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_json_output.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_llm.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_process_manager.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_tts.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_services.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_tools.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_tts.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_utils.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_wake_word.py +0 -0
- {agent_cli-0.77.0 → agent_cli-0.78.0}/tests/test_wyoming_utils.py +0 -0
- {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.
|
|
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 (
|
|
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]
|
|
143
|
+
console.print("[dim]Full logs: ~/Library/Logs/agent-cli-<service>/[/dim]")
|
|
109
144
|
else:
|
|
110
|
-
console.print("[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
|
|
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=
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|