agent-cli 0.78.0__tar.gz → 0.79.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/scripts/check_extras_sync.py +1 -1
- {agent_cli-0.78.0/agent_cli → agent_cli-0.79.0/.github}/scripts/check_plugin_skill_sync.py +1 -1
- {agent_cli-0.78.0/agent_cli → agent_cli-0.79.0/.github}/scripts/sync_extras.py +3 -3
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.pre-commit-config.yaml +1 -1
- {agent_cli-0.78.0 → agent_cli-0.79.0}/PKG-INFO +1 -1
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/utils.py +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/daemon/cli.py +22 -6
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/service_config.py +56 -3
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/run-openwakeword.sh +3 -3
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/setup-linux.sh +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/setup-macos.sh +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/setup-windows.ps1 +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/start-all-services-windows.ps1 +4 -4
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/start-all-services.sh +39 -19
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/daemon.md +10 -6
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/linux.md +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/macos.md +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/windows.md +2 -2
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_daemon.py +45 -2
- agent_cli-0.78.0/agent_cli/scripts/run-piper-windows.ps1 +0 -30
- agent_cli-0.78.0/agent_cli/scripts/run-piper.sh +0 -24
- agent_cli-0.78.0/agent_cli/scripts/run-whisper-linux.sh +0 -40
- agent_cli-0.78.0/agent_cli/scripts/run-whisper-macos.sh +0 -6
- agent_cli-0.78.0/agent_cli/scripts/run-whisper-windows.ps1 +0 -51
- agent_cli-0.78.0/agent_cli/scripts/run-whisper.sh +0 -9
- agent_cli-0.78.0/agent_cli/scripts/run_faster_whisper_server.py +0 -136
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude-plugin/README.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.cursorrules +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.dockerignore +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.env.example +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/logo.svg +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/release-drafter.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/renovate.json +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/release.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.gitignore +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.jscpd.json +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.prompts/docs-review.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/.prompts/pr-review.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/CLAUDE.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/LICENSE +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/README.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/__main__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_extras.json +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/_tools.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/cli.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/config.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/constants.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/process.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/common.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/services.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/opts.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/py.typed +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/common.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/docker-compose.yml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/CNAME +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/architecture/index.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/architecture/memory.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/architecture/rag.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/assistant.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/chat.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/config.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/dev.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/index.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/install-services.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/memory.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/server/index.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/speak.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/start-services.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/configuration.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/getting-started.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/index.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/docker.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/index.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/installation/nixos.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/logo-clean.svg +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/docs/system-integration.md +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/justfile +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/pyproject.toml +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/shell.nix +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/conftest.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/test_sse.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/test_vad.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/core/test_watch.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_project.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/install/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/install/test_extras.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_client.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_files.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_store.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/mocks/audio.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/mocks/llm.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/__init__.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_history.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_store.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_api.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_api_integration.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_asr.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_cli.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_config.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_env_vars.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_json_output.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_llm.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_process_manager.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_server_tts.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_services.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_tools.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_tts.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_wake_word.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/uv.lock +0 -0
- {agent_cli-0.78.0 → agent_cli-0.79.0}/zensical.toml +0 -0
|
@@ -64,7 +64,7 @@ def main() -> int:
|
|
|
64
64
|
print("ERROR: _extras.json is out of sync with pyproject.toml")
|
|
65
65
|
for error in errors:
|
|
66
66
|
print(f" - {error}")
|
|
67
|
-
print("\nRun 'python scripts/sync_extras.py' to regenerate _extras.json")
|
|
67
|
+
print("\nRun 'python .github/scripts/sync_extras.py' to regenerate _extras.json")
|
|
68
68
|
return 1
|
|
69
69
|
|
|
70
70
|
print("OK: _extras.json is in sync with pyproject.toml")
|
|
@@ -5,7 +5,7 @@ This script parses the optional-dependencies in pyproject.toml and generates
|
|
|
5
5
|
the agent_cli/_extras.json file with package-to-import mappings.
|
|
6
6
|
|
|
7
7
|
Usage:
|
|
8
|
-
python scripts/sync_extras.py
|
|
8
|
+
python .github/scripts/sync_extras.py
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
@@ -16,7 +16,7 @@ import sys
|
|
|
16
16
|
import tomllib
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
|
|
19
|
-
REPO_ROOT = Path(__file__).parent.parent
|
|
19
|
+
REPO_ROOT = Path(__file__).parent.parent.parent
|
|
20
20
|
PYPROJECT = REPO_ROOT / "pyproject.toml"
|
|
21
21
|
EXTRAS_FILE = REPO_ROOT / "agent_cli" / "_extras.json"
|
|
22
22
|
|
|
@@ -134,7 +134,7 @@ def main() -> int:
|
|
|
134
134
|
missing = check_missing_metadata(extras)
|
|
135
135
|
if missing:
|
|
136
136
|
print(f"ERROR: The following extras need metadata in EXTRA_METADATA: {missing}")
|
|
137
|
-
print("Please update EXTRA_METADATA in scripts/sync_extras.py")
|
|
137
|
+
print("Please update EXTRA_METADATA in .github/scripts/sync_extras.py")
|
|
138
138
|
return 1
|
|
139
139
|
|
|
140
140
|
# Generate the file
|
|
@@ -37,7 +37,7 @@ repos:
|
|
|
37
37
|
always_run: true
|
|
38
38
|
- id: check-plugin-skill-sync
|
|
39
39
|
name: check plugin skill files in sync
|
|
40
|
-
entry: python scripts/check_plugin_skill_sync.py
|
|
40
|
+
entry: python .github/scripts/check_plugin_skill_sync.py
|
|
41
41
|
language: python
|
|
42
42
|
pass_filenames: false
|
|
43
43
|
files: (agent_cli/dev/skill/|\.claude-plugin/skills/|\.claude/skills/)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.79.0
|
|
4
4
|
Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
|
|
5
5
|
Project-URL: Homepage, https://github.com/basnijholt/agent-cli
|
|
6
6
|
Author-email: Bas Nijholt <bas@nijho.lt>
|
|
@@ -38,8 +38,8 @@ if TYPE_CHECKING:
|
|
|
38
38
|
from logging import Handler
|
|
39
39
|
from pathlib import Path
|
|
40
40
|
|
|
41
|
-
console = Console()
|
|
42
|
-
err_console = Console(stderr=True)
|
|
41
|
+
console = Console(soft_wrap=True)
|
|
42
|
+
err_console = Console(stderr=True, soft_wrap=True)
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
def enable_json_mode() -> None:
|
|
@@ -15,7 +15,11 @@ from rich.panel import Panel
|
|
|
15
15
|
|
|
16
16
|
from agent_cli.cli import app as main_app
|
|
17
17
|
from agent_cli.core.utils import console, err_console
|
|
18
|
-
from agent_cli.install.service_config import
|
|
18
|
+
from agent_cli.install.service_config import (
|
|
19
|
+
SERVICES,
|
|
20
|
+
get_default_services,
|
|
21
|
+
get_service_manager,
|
|
22
|
+
)
|
|
19
23
|
|
|
20
24
|
app = typer.Typer(
|
|
21
25
|
name="daemon",
|
|
@@ -32,6 +36,8 @@ Install, uninstall, and monitor agent-cli servers running as system daemons
|
|
|
32
36
|
| `tts-kokoro` | Text-to-speech (GPU) | 10200/10201 |
|
|
33
37
|
| `tts-piper` | Text-to-speech (CPU) | 10200/10201 |
|
|
34
38
|
| `transcription-proxy` | ASR provider proxy | 61337 |
|
|
39
|
+
| `memory` | Long-term memory proxy | 8100 |
|
|
40
|
+
| `rag` | Document retrieval proxy | 8000 |
|
|
35
41
|
|
|
36
42
|
**Examples:**
|
|
37
43
|
|
|
@@ -193,12 +199,16 @@ def install_cmd( # noqa: PLR0912, PLR0915
|
|
|
193
199
|
services: Annotated[
|
|
194
200
|
list[str] | None,
|
|
195
201
|
typer.Argument(
|
|
196
|
-
help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy).",
|
|
202
|
+
help="Services to install (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
|
|
197
203
|
),
|
|
198
204
|
] = None,
|
|
199
205
|
all_services: Annotated[
|
|
200
206
|
bool,
|
|
201
|
-
typer.Option(
|
|
207
|
+
typer.Option(
|
|
208
|
+
"--all",
|
|
209
|
+
"-a",
|
|
210
|
+
help="Install all services (auto-selects tts-kokoro on GPU, tts-piper on CPU)",
|
|
211
|
+
),
|
|
202
212
|
] = False,
|
|
203
213
|
skip_deps: Annotated[
|
|
204
214
|
bool,
|
|
@@ -223,6 +233,11 @@ def install_cmd( # noqa: PLR0912, PLR0915
|
|
|
223
233
|
- **tts-kokoro**: Text-to-speech with Kokoro/GPU (ports 10200/10201)
|
|
224
234
|
- **tts-piper**: Text-to-speech with Piper/CPU (ports 10200/10201)
|
|
225
235
|
- **transcription-proxy**: Proxy for ASR providers (port 61337)
|
|
236
|
+
- **memory**: Long-term memory proxy for LLMs (port 8100)
|
|
237
|
+
- **rag**: Document retrieval proxy for LLMs (port 8000)
|
|
238
|
+
|
|
239
|
+
Note: tts-kokoro and tts-piper use the same ports and are mutually exclusive.
|
|
240
|
+
Use `--all` to auto-select based on your platform (kokoro on GPU, piper on CPU).
|
|
226
241
|
|
|
227
242
|
Daemons run via `uv tool run` and don't require a virtual environment.
|
|
228
243
|
|
|
@@ -231,7 +246,7 @@ def install_cmd( # noqa: PLR0912, PLR0915
|
|
|
231
246
|
# Install specific daemons
|
|
232
247
|
agent-cli daemon install whisper tts-kokoro
|
|
233
248
|
|
|
234
|
-
# Install all daemons
|
|
249
|
+
# Install all daemons (auto-selects TTS backend)
|
|
235
250
|
agent-cli daemon install --all
|
|
236
251
|
|
|
237
252
|
# Skip confirmation prompts
|
|
@@ -255,7 +270,8 @@ def install_cmd( # noqa: PLR0912, PLR0915
|
|
|
255
270
|
|
|
256
271
|
# Determine which services to install
|
|
257
272
|
if all_services:
|
|
258
|
-
|
|
273
|
+
# Get default services (auto-selects one TTS backend based on platform)
|
|
274
|
+
selected_services = get_default_services()
|
|
259
275
|
else:
|
|
260
276
|
assert services is not None # Already checked above
|
|
261
277
|
invalid = [s for s in services if s not in SERVICES]
|
|
@@ -340,7 +356,7 @@ def uninstall_cmd(
|
|
|
340
356
|
services: Annotated[
|
|
341
357
|
list[str] | None,
|
|
342
358
|
typer.Argument(
|
|
343
|
-
help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy).",
|
|
359
|
+
help="Services to uninstall (whisper, tts-kokoro, tts-piper, transcription-proxy, memory, rag).",
|
|
344
360
|
),
|
|
345
361
|
] = None,
|
|
346
362
|
all_services: Annotated[
|
|
@@ -26,9 +26,44 @@ class ServiceConfig:
|
|
|
26
26
|
display_name: str
|
|
27
27
|
description: str
|
|
28
28
|
extra: str # uv extras to install (e.g., "server,kokoro,wyoming"), empty for external
|
|
29
|
-
command_args: list[str] # Additional args after
|
|
29
|
+
command_args: list[str] # Additional args after the base command
|
|
30
30
|
python_version: str | None = None # Pin Python version for dependencies without py3.14 wheels
|
|
31
31
|
macos_extra: str | None = None # Override extra on macOS (e.g., whisper-mlx)
|
|
32
|
+
# Custom command path (default: ["server", name]). For non-server commands like "memory proxy"
|
|
33
|
+
command: list[str] | None = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# TTS services that are mutually exclusive (same ports)
|
|
37
|
+
TTS_SERVICES = ("tts-kokoro", "tts-piper")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def detect_preferred_tts() -> str:
|
|
41
|
+
"""Detect the preferred TTS backend based on platform.
|
|
42
|
+
|
|
43
|
+
Returns tts-kokoro on macOS (MPS) or Linux with CUDA hints,
|
|
44
|
+
otherwise tts-piper for CPU-only systems.
|
|
45
|
+
"""
|
|
46
|
+
system = platform.system()
|
|
47
|
+
if system == "Darwin":
|
|
48
|
+
# macOS has MPS on Apple Silicon
|
|
49
|
+
return "tts-kokoro"
|
|
50
|
+
if system == "Linux":
|
|
51
|
+
# Check for CUDA availability hints
|
|
52
|
+
cuda_hints = [
|
|
53
|
+
Path("/usr/local/cuda").exists(),
|
|
54
|
+
shutil.which("nvidia-smi") is not None,
|
|
55
|
+
os.environ.get("CUDA_HOME") is not None,
|
|
56
|
+
]
|
|
57
|
+
if any(cuda_hints):
|
|
58
|
+
return "tts-kokoro"
|
|
59
|
+
return "tts-piper"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def get_default_services() -> list[str]:
|
|
63
|
+
"""Get default services for --all, picking one TTS backend automatically."""
|
|
64
|
+
preferred_tts = detect_preferred_tts()
|
|
65
|
+
excluded_tts = "tts-piper" if preferred_tts == "tts-kokoro" else "tts-kokoro"
|
|
66
|
+
return [name for name in SERVICES if name != excluded_tts]
|
|
32
67
|
|
|
33
68
|
|
|
34
69
|
# Available services for installation
|
|
@@ -64,6 +99,22 @@ SERVICES: dict[str, ServiceConfig] = {
|
|
|
64
99
|
extra="server",
|
|
65
100
|
command_args=[],
|
|
66
101
|
),
|
|
102
|
+
"memory": ServiceConfig(
|
|
103
|
+
name="memory",
|
|
104
|
+
display_name="Memory Proxy",
|
|
105
|
+
description="Long-term memory proxy for LLMs (port 8100)",
|
|
106
|
+
extra="memory",
|
|
107
|
+
command_args=[],
|
|
108
|
+
command=["memory", "proxy"],
|
|
109
|
+
),
|
|
110
|
+
"rag": ServiceConfig(
|
|
111
|
+
name="rag",
|
|
112
|
+
display_name="RAG Proxy",
|
|
113
|
+
description="Document retrieval proxy for LLMs (port 8000)",
|
|
114
|
+
extra="rag",
|
|
115
|
+
command_args=[],
|
|
116
|
+
command=["rag-proxy"],
|
|
117
|
+
),
|
|
67
118
|
}
|
|
68
119
|
|
|
69
120
|
|
|
@@ -83,13 +134,15 @@ def build_service_command(
|
|
|
83
134
|
if service.python_version and not (use_macos_extra and service.macos_extra):
|
|
84
135
|
args.extend(["--python", service.python_version])
|
|
85
136
|
|
|
137
|
+
# Build the command: either custom command path or default "server <name>"
|
|
138
|
+
cmd_path = service.command if service.command else ["server", service.name]
|
|
139
|
+
|
|
86
140
|
args.extend(
|
|
87
141
|
[
|
|
88
142
|
"--from",
|
|
89
143
|
f"agent-cli[{extra}]",
|
|
90
144
|
"agent-cli",
|
|
91
|
-
|
|
92
|
-
service.name,
|
|
145
|
+
*cmd_path,
|
|
93
146
|
*service.command_args,
|
|
94
147
|
],
|
|
95
148
|
)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
echo "👂 Starting Wyoming OpenWakeWord on port 10400..."
|
|
3
3
|
|
|
4
|
-
# Use the LiteRT fork
|
|
5
|
-
#
|
|
6
|
-
#
|
|
4
|
+
# Use the LiteRT fork because upstream depends on tflite-runtime-nightly
|
|
5
|
+
# which lacks Python 3.12+ wheels. This fork uses ai-edge-litert instead.
|
|
6
|
+
# See: https://github.com/rhasspy/wyoming-openwakeword/pull/43
|
|
7
7
|
|
|
8
8
|
uvx --python 3.12 --from git+https://github.com/basnijholt/wyoming-openwakeword.git@litert \
|
|
9
9
|
wyoming-openwakeword \
|
|
@@ -99,8 +99,8 @@ echo " scripts/start-all-services.sh"
|
|
|
99
99
|
echo ""
|
|
100
100
|
echo "Option 2 - Run services individually:"
|
|
101
101
|
echo " 1. Ollama: ollama serve"
|
|
102
|
-
echo " 2. Whisper:
|
|
103
|
-
echo " 3. Piper:
|
|
102
|
+
echo " 2. Whisper: agent-cli server whisper"
|
|
103
|
+
echo " 3. Piper: agent-cli server tts --backend piper"
|
|
104
104
|
echo " 4. OpenWakeWord: scripts/run-openwakeword.sh"
|
|
105
105
|
echo ""
|
|
106
106
|
echo "📝 Note: Services use uvx to run without needing virtual environments."
|
|
@@ -68,9 +68,9 @@ echo " 1. Ollama: running as brew service (brew services start ollama)"
|
|
|
68
68
|
if [ "$(uname -m)" = "arm64" ]; then
|
|
69
69
|
echo " 2. Whisper: running as launchd service (wyoming-mlx-whisper)"
|
|
70
70
|
else
|
|
71
|
-
echo " 2. Whisper:
|
|
71
|
+
echo " 2. Whisper: agent-cli server whisper"
|
|
72
72
|
fi
|
|
73
|
-
echo " 3. Piper:
|
|
73
|
+
echo " 3. Piper: agent-cli server tts --backend piper"
|
|
74
74
|
echo " 4. OpenWakeWord: ./run-openwakeword.sh"
|
|
75
75
|
echo ""
|
|
76
76
|
echo "🎉 agent-cli has been installed and is ready to use!"
|
|
@@ -55,8 +55,8 @@ Write-Host " .\scripts\start-all-services-windows.ps1" -ForegroundColor Gray
|
|
|
55
55
|
Write-Host ""
|
|
56
56
|
Write-Host "Option 2 - Run services individually:" -ForegroundColor White
|
|
57
57
|
Write-Host " 1. Ollama: ollama serve (or it runs automatically as a service)" -ForegroundColor Gray
|
|
58
|
-
Write-Host " 2. Whisper:
|
|
59
|
-
Write-Host " 3. Piper:
|
|
58
|
+
Write-Host " 2. Whisper: agent-cli server whisper" -ForegroundColor Gray
|
|
59
|
+
Write-Host " 3. Piper: agent-cli server tts --backend piper" -ForegroundColor Gray
|
|
60
60
|
Write-Host ""
|
|
61
61
|
Write-Host "📝 Note: Scripts use uvx to run without needing virtual environments." -ForegroundColor Yellow
|
|
62
62
|
Write-Host "For GPU acceleration, make sure NVIDIA drivers and CUDA 12 are installed." -ForegroundColor Yellow
|
|
@@ -19,8 +19,8 @@ if ($UseWindowsTerminal) {
|
|
|
19
19
|
# Start Windows Terminal with multiple tabs
|
|
20
20
|
wt --title "agent-cli services" `
|
|
21
21
|
new-tab --title "Ollama" powershell -NoExit -Command "ollama serve" `; `
|
|
22
|
-
new-tab --title "Whisper" powershell -NoExit -
|
|
23
|
-
new-tab --title "Piper" powershell -NoExit -
|
|
22
|
+
new-tab --title "Whisper" powershell -NoExit -Command "agent-cli server whisper" `; `
|
|
23
|
+
new-tab --title "Piper" powershell -NoExit -Command "agent-cli server tts --backend piper"
|
|
24
24
|
|
|
25
25
|
Write-Host ""
|
|
26
26
|
Write-Host "✅ Services started in Windows Terminal tabs!" -ForegroundColor Green
|
|
@@ -33,8 +33,8 @@ if ($UseWindowsTerminal) {
|
|
|
33
33
|
|
|
34
34
|
# Start each service in a new PowerShell window
|
|
35
35
|
Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Ollama' -ForegroundColor Cyan; ollama serve"
|
|
36
|
-
Start-Process powershell -ArgumentList "-NoExit", "-
|
|
37
|
-
Start-Process powershell -ArgumentList "-NoExit", "-
|
|
36
|
+
Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Whisper' -ForegroundColor Cyan; agent-cli server whisper"
|
|
37
|
+
Start-Process powershell -ArgumentList "-NoExit", "-Command", "Write-Host 'Piper' -ForegroundColor Cyan; agent-cli server tts --backend piper"
|
|
38
38
|
|
|
39
39
|
Write-Host ""
|
|
40
40
|
Write-Host "✅ Services started in separate windows!" -ForegroundColor Green
|
|
@@ -36,19 +36,28 @@ HELP_TEXT='╔══════════════════════
|
|
|
36
36
|
║ ║
|
|
37
37
|
╚═══════════════════════════════════════════════════════════════════╝'
|
|
38
38
|
|
|
39
|
-
#
|
|
39
|
+
# Check if services are running via system service managers
|
|
40
40
|
OLLAMA_BREW_SERVICE=false
|
|
41
|
-
|
|
41
|
+
WHISPER_DAEMON=false
|
|
42
|
+
TTS_DAEMON=false
|
|
42
43
|
if [ "$(uname -s)" = "Darwin" ]; then
|
|
43
|
-
# Check
|
|
44
|
+
# macOS: Check launchd services
|
|
44
45
|
if launchctl list homebrew.mxcl.ollama &>/dev/null; then
|
|
45
46
|
OLLAMA_BREW_SERVICE=true
|
|
46
47
|
fi
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
if launchctl list com.agent_cli.whisper &>/dev/null; then
|
|
49
|
+
WHISPER_DAEMON=true
|
|
50
|
+
fi
|
|
51
|
+
if launchctl list com.agent_cli.tts &>/dev/null; then
|
|
52
|
+
TTS_DAEMON=true
|
|
53
|
+
fi
|
|
54
|
+
elif [ "$(uname -s)" = "Linux" ]; then
|
|
55
|
+
# Linux: Check systemd user services
|
|
56
|
+
if systemctl --user is-active --quiet agent-cli-whisper.service 2>/dev/null; then
|
|
57
|
+
WHISPER_DAEMON=true
|
|
58
|
+
fi
|
|
59
|
+
if systemctl --user is-active --quiet agent-cli-tts.service 2>/dev/null; then
|
|
60
|
+
TTS_DAEMON=true
|
|
52
61
|
fi
|
|
53
62
|
fi
|
|
54
63
|
|
|
@@ -70,29 +79,40 @@ else
|
|
|
70
79
|
}"
|
|
71
80
|
fi
|
|
72
81
|
|
|
73
|
-
# Generate Whisper pane command based on whether
|
|
74
|
-
if [ "$
|
|
82
|
+
# Generate Whisper pane command based on whether daemon is running
|
|
83
|
+
if [ "$WHISPER_DAEMON" = true ]; then
|
|
75
84
|
WHISPER_PANE=" pane {
|
|
76
|
-
name \"Whisper (
|
|
85
|
+
name \"Whisper (daemon)\"
|
|
77
86
|
command \"sh\"
|
|
78
|
-
args \"-c\" \"echo '🎤 Whisper
|
|
87
|
+
args \"-c\" \"echo '🎤 Whisper running via daemon'; echo ''; echo 'Check status: agent-cli daemon status whisper'; echo ''; read -r\"
|
|
79
88
|
}"
|
|
80
89
|
else
|
|
81
90
|
WHISPER_PANE=" pane {
|
|
82
91
|
name \"Whisper\"
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
command \"agent-cli\"
|
|
93
|
+
args \"server\" \"whisper\"
|
|
85
94
|
}"
|
|
86
95
|
fi
|
|
87
96
|
|
|
97
|
+
# Generate TTS pane based on whether daemon is running
|
|
98
|
+
if [ "$TTS_DAEMON" = true ]; then
|
|
99
|
+
TTS_PANE=" pane {
|
|
100
|
+
name \"TTS (daemon)\"
|
|
101
|
+
command \"sh\"
|
|
102
|
+
args \"-c\" \"echo '🔊 TTS running via daemon'; echo ''; echo 'Check status: agent-cli daemon status'; echo ''; read -r\"
|
|
103
|
+
}"
|
|
104
|
+
else
|
|
105
|
+
TTS_PANE=" pane {
|
|
106
|
+
name \"TTS\"
|
|
107
|
+
command \"agent-cli\"
|
|
108
|
+
args \"server\" \"tts\" \"--backend\" \"piper\"
|
|
109
|
+
}"
|
|
110
|
+
fi
|
|
111
|
+
|
|
88
112
|
BOTTOM_PANES=" pane split_direction=\"horizontal\" {
|
|
89
113
|
$WHISPER_PANE
|
|
90
114
|
pane split_direction=\"horizontal\" {
|
|
91
|
-
|
|
92
|
-
name \"Piper\"
|
|
93
|
-
cwd \"$SCRIPTS_DIR\"
|
|
94
|
-
command \"./run-piper.sh\"
|
|
95
|
-
}
|
|
115
|
+
$TTS_PANE
|
|
96
116
|
pane {
|
|
97
117
|
name \"OpenWakeWord\"
|
|
98
118
|
cwd \"$SCRIPTS_DIR\"
|
|
@@ -29,6 +29,8 @@ Daemons run via `uv tool run` and start automatically at login.
|
|
|
29
29
|
| `tts-kokoro` | Text-to-speech with Kokoro (GPU) | 10200/10201 |
|
|
30
30
|
| `tts-piper` | Text-to-speech with Piper (CPU) | 10200/10201 |
|
|
31
31
|
| `transcription-proxy` | ASR provider proxy | 61337 |
|
|
32
|
+
| `memory` | Long-term memory proxy for LLMs | 8100 |
|
|
33
|
+
| `rag` | Document retrieval proxy for LLMs | 8000 |
|
|
32
34
|
|
|
33
35
|
## Commands
|
|
34
36
|
|
|
@@ -132,12 +134,14 @@ agent-cli daemon uninstall whisper
|
|
|
132
134
|
Available daemons:
|
|
133
135
|
|
|
134
136
|
|
|
135
|
-
Daemon Description
|
|
136
|
-
|
|
137
|
-
whisper Speech-to-text ASR
|
|
138
|
-
tts-kokoro Text-to-speech (GPU)
|
|
139
|
-
tts-piper Text-to-speech (CPU)
|
|
140
|
-
transcription-proxy ASR provider proxy
|
|
137
|
+
Daemon Description Ports
|
|
138
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
139
|
+
whisper Speech-to-text ASR 10300/10301
|
|
140
|
+
tts-kokoro Text-to-speech (GPU) 10200/10201
|
|
141
|
+
tts-piper Text-to-speech (CPU) 10200/10201
|
|
142
|
+
transcription-proxy ASR provider proxy 61337
|
|
143
|
+
memory Long-term memory proxy 8100
|
|
144
|
+
rag Document retrieval proxy 8000
|
|
141
145
|
|
|
142
146
|
|
|
143
147
|
Examples:
|
|
@@ -72,10 +72,10 @@ curl -fsSL https://ollama.ai/install.sh | sh
|
|
|
72
72
|
ollama serve
|
|
73
73
|
|
|
74
74
|
# Terminal 2: Whisper (with GPU)
|
|
75
|
-
|
|
75
|
+
agent-cli server whisper
|
|
76
76
|
|
|
77
77
|
# Terminal 3: Piper
|
|
78
|
-
|
|
78
|
+
agent-cli server tts --backend piper
|
|
79
79
|
|
|
80
80
|
# Terminal 4: OpenWakeWord
|
|
81
81
|
scripts/run-openwakeword.sh
|
|
@@ -98,10 +98,10 @@ ollama serve
|
|
|
98
98
|
# Whisper (Apple Silicon: launchd service or manual)
|
|
99
99
|
launchctl list com.wyoming_mlx_whisper
|
|
100
100
|
# Or run in foreground:
|
|
101
|
-
|
|
101
|
+
agent-cli server whisper
|
|
102
102
|
|
|
103
103
|
# Piper
|
|
104
|
-
|
|
104
|
+
agent-cli server tts --backend piper
|
|
105
105
|
|
|
106
106
|
# OpenWakeWord
|
|
107
107
|
scripts/run-openwakeword.sh
|
|
@@ -103,10 +103,10 @@ If you prefer manual setup:
|
|
|
103
103
|
ollama serve
|
|
104
104
|
|
|
105
105
|
# Terminal 2: Whisper
|
|
106
|
-
|
|
106
|
+
agent-cli server whisper
|
|
107
107
|
|
|
108
108
|
# Terminal 3: Piper
|
|
109
|
-
|
|
109
|
+
agent-cli server tts --backend piper
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
---
|
|
@@ -23,6 +23,7 @@ from agent_cli.install.service_config import (
|
|
|
23
23
|
UninstallResult,
|
|
24
24
|
build_service_command,
|
|
25
25
|
find_uv,
|
|
26
|
+
get_default_services,
|
|
26
27
|
get_service_manager,
|
|
27
28
|
install_uv,
|
|
28
29
|
)
|
|
@@ -49,6 +50,8 @@ class TestServiceConfig:
|
|
|
49
50
|
assert "tts-kokoro" in SERVICES
|
|
50
51
|
assert "tts-piper" in SERVICES
|
|
51
52
|
assert "transcription-proxy" in SERVICES
|
|
53
|
+
assert "memory" in SERVICES
|
|
54
|
+
assert "rag" in SERVICES
|
|
52
55
|
|
|
53
56
|
def test_service_config_fields(self) -> None:
|
|
54
57
|
"""Test ServiceConfig has required fields."""
|
|
@@ -111,6 +114,46 @@ class TestServiceConfig:
|
|
|
111
114
|
cmd = build_service_command(service, uv_path, use_macos_extra=True)
|
|
112
115
|
assert "agent-cli[server,macos-dep]" in cmd
|
|
113
116
|
|
|
117
|
+
def test_build_service_command_custom_command(self, tmp_path: Path) -> None:
|
|
118
|
+
"""Test building service command with custom command path."""
|
|
119
|
+
uv_path = tmp_path / "uv"
|
|
120
|
+
uv_path.touch()
|
|
121
|
+
# Test custom command like "memory proxy"
|
|
122
|
+
service = ServiceConfig(
|
|
123
|
+
name="memory",
|
|
124
|
+
display_name="Memory Proxy",
|
|
125
|
+
description="Memory proxy",
|
|
126
|
+
extra="memory",
|
|
127
|
+
command_args=["--port", "8100"],
|
|
128
|
+
command=["memory", "proxy"],
|
|
129
|
+
)
|
|
130
|
+
cmd = build_service_command(service, uv_path)
|
|
131
|
+
assert "agent-cli[memory]" in cmd
|
|
132
|
+
assert "memory" in cmd
|
|
133
|
+
assert "proxy" in cmd
|
|
134
|
+
assert "--port" in cmd
|
|
135
|
+
assert "8100" in cmd
|
|
136
|
+
# Should NOT have "server" in the command
|
|
137
|
+
assert cmd.count("server") == 0
|
|
138
|
+
|
|
139
|
+
def test_memory_and_rag_services(self, tmp_path: Path) -> None:
|
|
140
|
+
"""Test that memory and rag services have correct custom commands."""
|
|
141
|
+
uv_path = tmp_path / "uv"
|
|
142
|
+
uv_path.touch()
|
|
143
|
+
|
|
144
|
+
memory = SERVICES["memory"]
|
|
145
|
+
assert memory.command == ["memory", "proxy"]
|
|
146
|
+
cmd = build_service_command(memory, uv_path)
|
|
147
|
+
assert "agent-cli[memory]" in cmd
|
|
148
|
+
assert "memory" in cmd
|
|
149
|
+
assert "proxy" in cmd
|
|
150
|
+
|
|
151
|
+
rag = SERVICES["rag"]
|
|
152
|
+
assert rag.command == ["rag-proxy"]
|
|
153
|
+
cmd = build_service_command(rag, uv_path)
|
|
154
|
+
assert "agent-cli[rag]" in cmd
|
|
155
|
+
assert "rag-proxy" in cmd
|
|
156
|
+
|
|
114
157
|
def test_find_uv_in_path(self, tmp_path: Path) -> None:
|
|
115
158
|
"""Test finding uv when it exists in extra_paths."""
|
|
116
159
|
uv_path = tmp_path / "uv"
|
|
@@ -307,8 +350,8 @@ class TestDaemonCLI:
|
|
|
307
350
|
|
|
308
351
|
result = runner.invoke(app, ["daemon", "install", "--all", "-y"])
|
|
309
352
|
assert result.exit_code == 0
|
|
310
|
-
# Should install
|
|
311
|
-
assert mock_manager.install_service.call_count == len(
|
|
353
|
+
# Should install default services (one TTS backend auto-selected)
|
|
354
|
+
assert mock_manager.install_service.call_count == len(get_default_services())
|
|
312
355
|
|
|
313
356
|
@patch("agent_cli.daemon.cli.get_service_manager")
|
|
314
357
|
def test_daemon_uninstall_no_args(self, mock_get_manager: MagicMock) -> None:
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# PowerShell script to run Wyoming Piper TTS on Windows
|
|
2
|
-
# Run with: powershell -ExecutionPolicy Bypass -File scripts/run-piper-windows.ps1
|
|
3
|
-
|
|
4
|
-
Write-Host "🔊 Starting Wyoming Piper on port 10200..." -ForegroundColor Cyan
|
|
5
|
-
|
|
6
|
-
# Create .runtime directory
|
|
7
|
-
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
8
|
-
$RuntimeDir = Join-Path $ScriptDir ".runtime"
|
|
9
|
-
$PiperDataDir = Join-Path $RuntimeDir "piper-data"
|
|
10
|
-
if (-not (Test-Path $PiperDataDir)) {
|
|
11
|
-
New-Item -ItemType Directory -Path $PiperDataDir -Force | Out-Null
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
# Download voice if not present
|
|
15
|
-
$VoiceDir = Join-Path $PiperDataDir "en_US-lessac-medium"
|
|
16
|
-
if (-not (Test-Path $VoiceDir)) {
|
|
17
|
-
Write-Host "⬇️ Downloading voice model..." -ForegroundColor Yellow
|
|
18
|
-
Push-Location $PiperDataDir
|
|
19
|
-
uvx --python 3.12 --from piper-tts python -m piper.download_voices en_US-lessac-medium
|
|
20
|
-
Pop-Location
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
# Run Wyoming Piper using uvx
|
|
24
|
-
uvx --python 3.12 `
|
|
25
|
-
--from "git+https://github.com/rhasspy/wyoming-piper.git@v2.1.1" `
|
|
26
|
-
wyoming-piper `
|
|
27
|
-
--voice en_US-lessac-medium `
|
|
28
|
-
--uri "tcp://0.0.0.0:10200" `
|
|
29
|
-
--data-dir $PiperDataDir `
|
|
30
|
-
--download-dir $PiperDataDir
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
echo "🔊 Starting Wyoming Piper on port 10200..."
|
|
3
|
-
|
|
4
|
-
# Create .runtime directory for local assets
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
-
mkdir -p "$SCRIPT_DIR/.runtime"
|
|
7
|
-
|
|
8
|
-
# Download voice if not present using uvx
|
|
9
|
-
if [ ! -d "$SCRIPT_DIR/.runtime/piper-data/en_US-lessac-medium" ]; then
|
|
10
|
-
echo "⬇️ Downloading voice model..."
|
|
11
|
-
mkdir -p "$SCRIPT_DIR/.runtime/piper-data"
|
|
12
|
-
cd "$SCRIPT_DIR/.runtime/piper-data"
|
|
13
|
-
uvx --python 3.12 --from piper-tts python -m piper.download_voices en_US-lessac-medium
|
|
14
|
-
cd "$SCRIPT_DIR"
|
|
15
|
-
fi
|
|
16
|
-
|
|
17
|
-
# Run Wyoming Piper using uvx wrapper
|
|
18
|
-
uvx --python 3.12 \
|
|
19
|
-
--from git+https://github.com/rhasspy/wyoming-piper.git@v2.1.1 \
|
|
20
|
-
wyoming-piper \
|
|
21
|
-
--voice en_US-lessac-medium \
|
|
22
|
-
--uri 'tcp://0.0.0.0:10200' \
|
|
23
|
-
--data-dir "$SCRIPT_DIR/.runtime/piper-data" \
|
|
24
|
-
--download-dir "$SCRIPT_DIR/.runtime/piper-data"
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Linux: faster-whisper with CUDA/CPU detection
|
|
3
|
-
echo "🎤 Starting Wyoming Faster Whisper on port 10300..."
|
|
4
|
-
|
|
5
|
-
# Detect if CUDA is available
|
|
6
|
-
if command -v nvidia-smi &> /dev/null && nvidia-smi &> /dev/null; then
|
|
7
|
-
echo "⚡ NVIDIA GPU detected"
|
|
8
|
-
DETECTED_DEVICE="cuda"
|
|
9
|
-
else
|
|
10
|
-
echo "💻 No GPU detected or CUDA unavailable"
|
|
11
|
-
DETECTED_DEVICE="cpu"
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
# Allow device override via environment variable
|
|
15
|
-
DEVICE="${WHISPER_DEVICE:-$DETECTED_DEVICE}"
|
|
16
|
-
|
|
17
|
-
# Set default model based on final device choice
|
|
18
|
-
if [ "$DEVICE" = "cuda" ]; then
|
|
19
|
-
DEFAULT_MODEL="large-v3"
|
|
20
|
-
else
|
|
21
|
-
DEFAULT_MODEL="tiny"
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# Allow model override via environment variable
|
|
25
|
-
MODEL="${WHISPER_MODEL:-$DEFAULT_MODEL}"
|
|
26
|
-
echo "📦 Using model: $MODEL on device: $DEVICE"
|
|
27
|
-
|
|
28
|
-
# Create .runtime directory for whisper data
|
|
29
|
-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
30
|
-
mkdir -p "$SCRIPT_DIR/.runtime"
|
|
31
|
-
|
|
32
|
-
uvx --python 3.12 \
|
|
33
|
-
--from git+https://github.com/rhasspy/wyoming-faster-whisper.git@v3.0.1 \
|
|
34
|
-
wyoming-faster-whisper \
|
|
35
|
-
--model "$MODEL" \
|
|
36
|
-
--language en \
|
|
37
|
-
--device "$DEVICE" \
|
|
38
|
-
--uri 'tcp://0.0.0.0:10300' \
|
|
39
|
-
--data-dir "$SCRIPT_DIR/.runtime/whisper-data" \
|
|
40
|
-
--download-dir "$SCRIPT_DIR/.runtime/whisper-data"
|