agent-cli 0.82.1__tar.gz → 0.82.3__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.82.1 → agent_cli-0.82.3}/.github/workflows/docker.yml +8 -8
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.pre-commit-config.yaml +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/PKG-INFO +2 -2
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/audio.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/faster-whisper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/kokoro.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/llm.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/memory.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/mlx-whisper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/piper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/rag.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/server.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/speed.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/vad.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/vectordb.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/whisper-transformers.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/wyoming.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/assistant.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/chat.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/speak.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/transcribe.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/transcribe_live.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/voice_edit.py +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/audio.py +53 -2
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/deps.py +29 -3
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/process.py +26 -12
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/hotkeys.py +17 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +14 -4
- {agent_cli-0.82.1 → agent_cli-0.82.3}/pyproject.toml +1 -1
- agent_cli-0.82.3/tests/core/test_audio.py +102 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_vad.py +3 -1
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_process_manager.py +65 -8
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_requires_extras.py +73 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/uv.lock +2 -8
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.cursorrules +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.dockerignore +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.env.example +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/logo.svg +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/release-drafter.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/renovate.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/release.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.gitignore +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.jscpd.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.prompts/docs-review.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/.prompts/pr-review.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/CLAUDE.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/LICENSE +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/__main__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_extras.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/constants.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/services.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/opts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/py.typed +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/docker-compose.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/CNAME +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/memory.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/architecture/rag.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/assistant.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/chat.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/config.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/daemon.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/dev.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/install-services.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/memory.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/speak.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/start-services.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/configuration.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/getting-started.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/docker.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/linux.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/macos.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/nixos.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/installation/windows.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/logo-clean.svg +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/docs/system-integration.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/justfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/shell.nix +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/conftest.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_sse.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/core/test_watch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_project.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/install/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/install/test_extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_files.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/audio.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_history.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_api_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_asr.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_daemon.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_env_vars.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_json_output.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_services.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_wake_word.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.3}/zensical.toml +0 -0
|
@@ -51,10 +51,10 @@ jobs:
|
|
|
51
51
|
fetch-depth: 0 # Full history for version detection
|
|
52
52
|
|
|
53
53
|
- name: Set up Docker Buildx
|
|
54
|
-
uses: docker/setup-buildx-action@
|
|
54
|
+
uses: docker/setup-buildx-action@v4
|
|
55
55
|
|
|
56
56
|
- name: Log in to Container Registry
|
|
57
|
-
uses: docker/login-action@
|
|
57
|
+
uses: docker/login-action@v4
|
|
58
58
|
with:
|
|
59
59
|
registry: ${{ env.REGISTRY }}
|
|
60
60
|
username: ${{ github.actor }}
|
|
@@ -71,7 +71,7 @@ jobs:
|
|
|
71
71
|
|
|
72
72
|
- name: Extract metadata
|
|
73
73
|
id: meta
|
|
74
|
-
uses: docker/metadata-action@
|
|
74
|
+
uses: docker/metadata-action@v6
|
|
75
75
|
with:
|
|
76
76
|
images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
|
|
77
77
|
tags: |
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
type=sha,suffix=-${{ matrix.suffix }}
|
|
81
81
|
|
|
82
82
|
- name: Build and push
|
|
83
|
-
uses: docker/build-push-action@
|
|
83
|
+
uses: docker/build-push-action@v7
|
|
84
84
|
with:
|
|
85
85
|
context: .
|
|
86
86
|
file: ${{ matrix.dockerfile }}
|
|
@@ -116,10 +116,10 @@ jobs:
|
|
|
116
116
|
fetch-depth: 0 # Full history for version detection
|
|
117
117
|
|
|
118
118
|
- name: Set up Docker Buildx
|
|
119
|
-
uses: docker/setup-buildx-action@
|
|
119
|
+
uses: docker/setup-buildx-action@v4
|
|
120
120
|
|
|
121
121
|
- name: Log in to Container Registry
|
|
122
|
-
uses: docker/login-action@
|
|
122
|
+
uses: docker/login-action@v4
|
|
123
123
|
with:
|
|
124
124
|
registry: ${{ env.REGISTRY }}
|
|
125
125
|
username: ${{ github.actor }}
|
|
@@ -136,7 +136,7 @@ jobs:
|
|
|
136
136
|
|
|
137
137
|
- name: Extract metadata
|
|
138
138
|
id: meta
|
|
139
|
-
uses: docker/metadata-action@
|
|
139
|
+
uses: docker/metadata-action@v6
|
|
140
140
|
with:
|
|
141
141
|
images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
|
|
142
142
|
tags: |
|
|
@@ -145,7 +145,7 @@ jobs:
|
|
|
145
145
|
type=sha
|
|
146
146
|
|
|
147
147
|
- name: Build and push
|
|
148
|
-
uses: docker/build-push-action@
|
|
148
|
+
uses: docker/build-push-action@v7
|
|
149
149
|
with:
|
|
150
150
|
context: .
|
|
151
151
|
file: ${{ matrix.dockerfile }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.82.
|
|
3
|
+
Version: 0.82.3
|
|
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>
|
|
@@ -14,7 +14,7 @@ Requires-Dist: pyperclip
|
|
|
14
14
|
Requires-Dist: rich
|
|
15
15
|
Requires-Dist: setproctitle
|
|
16
16
|
Requires-Dist: typer
|
|
17
|
-
Requires-Dist: typer-slim
|
|
17
|
+
Requires-Dist: typer-slim
|
|
18
18
|
Provides-Extra: audio
|
|
19
19
|
Requires-Dist: numpy; extra == 'audio'
|
|
20
20
|
Requires-Dist: sounddevice>=0.4.6; extra == 'audio'
|
|
@@ -147,7 +147,6 @@ rich==14.2.0
|
|
|
147
147
|
# agent-cli
|
|
148
148
|
# rich-toolkit
|
|
149
149
|
# typer
|
|
150
|
-
# typer-slim
|
|
151
150
|
rich-toolkit==0.17.1
|
|
152
151
|
# via
|
|
153
152
|
# fastapi-cli
|
|
@@ -161,9 +160,7 @@ setproctitle==1.3.7
|
|
|
161
160
|
setuptools==80.9.0
|
|
162
161
|
# via ctranslate2
|
|
163
162
|
shellingham==1.5.4
|
|
164
|
-
# via
|
|
165
|
-
# typer
|
|
166
|
-
# typer-slim
|
|
163
|
+
# via typer
|
|
167
164
|
starlette==0.50.0
|
|
168
165
|
# via fastapi
|
|
169
166
|
sympy==1.14.0
|
|
@@ -291,7 +291,6 @@ rich==14.2.0
|
|
|
291
291
|
# agent-cli
|
|
292
292
|
# rich-toolkit
|
|
293
293
|
# typer
|
|
294
|
-
# typer-slim
|
|
295
294
|
rich-toolkit==0.17.1
|
|
296
295
|
# via
|
|
297
296
|
# fastapi-cli
|
|
@@ -316,9 +315,7 @@ setuptools==80.9.0
|
|
|
316
315
|
# thinc
|
|
317
316
|
# torch
|
|
318
317
|
shellingham==1.5.4
|
|
319
|
-
# via
|
|
320
|
-
# typer
|
|
321
|
-
# typer-slim
|
|
318
|
+
# via typer
|
|
322
319
|
six==1.17.0
|
|
323
320
|
# via python-dateutil
|
|
324
321
|
smart-open==7.5.0
|
|
@@ -134,15 +134,12 @@ rich==14.2.0
|
|
|
134
134
|
# via
|
|
135
135
|
# agent-cli
|
|
136
136
|
# typer
|
|
137
|
-
# typer-slim
|
|
138
137
|
rsa==4.9.1
|
|
139
138
|
# via google-auth
|
|
140
139
|
setproctitle==1.3.7
|
|
141
140
|
# via agent-cli
|
|
142
141
|
shellingham==1.5.4
|
|
143
|
-
# via
|
|
144
|
-
# typer
|
|
145
|
-
# typer-slim
|
|
142
|
+
# via typer
|
|
146
143
|
sniffio==1.3.1
|
|
147
144
|
# via
|
|
148
145
|
# google-genai
|
|
@@ -295,7 +295,6 @@ rich==14.2.0
|
|
|
295
295
|
# chromadb
|
|
296
296
|
# rich-toolkit
|
|
297
297
|
# typer
|
|
298
|
-
# typer-slim
|
|
299
298
|
rich-toolkit==0.17.1
|
|
300
299
|
# via
|
|
301
300
|
# fastapi-cli
|
|
@@ -315,9 +314,7 @@ sentry-sdk==2.49.0
|
|
|
315
314
|
setproctitle==1.3.7
|
|
316
315
|
# via agent-cli
|
|
317
316
|
shellingham==1.5.4
|
|
318
|
-
# via
|
|
319
|
-
# typer
|
|
320
|
-
# typer-slim
|
|
317
|
+
# via typer
|
|
321
318
|
six==1.17.0
|
|
322
319
|
# via
|
|
323
320
|
# kubernetes
|
|
@@ -149,7 +149,6 @@ rich==14.2.0
|
|
|
149
149
|
# agent-cli
|
|
150
150
|
# rich-toolkit
|
|
151
151
|
# typer
|
|
152
|
-
# typer-slim
|
|
153
152
|
rich-toolkit==0.17.1
|
|
154
153
|
# via
|
|
155
154
|
# fastapi-cli
|
|
@@ -165,9 +164,7 @@ setproctitle==1.3.7
|
|
|
165
164
|
setuptools==80.9.0 ; python_full_version >= '3.12' and platform_machine == 'arm64' and sys_platform == 'darwin'
|
|
166
165
|
# via torch
|
|
167
166
|
shellingham==1.5.4
|
|
168
|
-
# via
|
|
169
|
-
# typer
|
|
170
|
-
# typer-slim
|
|
167
|
+
# via typer
|
|
171
168
|
starlette==0.50.0
|
|
172
169
|
# via fastapi
|
|
173
170
|
sympy==1.14.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
|
|
@@ -119,7 +119,6 @@ rich==14.2.0
|
|
|
119
119
|
# agent-cli
|
|
120
120
|
# rich-toolkit
|
|
121
121
|
# typer
|
|
122
|
-
# typer-slim
|
|
123
122
|
rich-toolkit==0.17.1
|
|
124
123
|
# via
|
|
125
124
|
# fastapi-cli
|
|
@@ -131,9 +130,7 @@ sentry-sdk==2.49.0
|
|
|
131
130
|
setproctitle==1.3.7
|
|
132
131
|
# via agent-cli
|
|
133
132
|
shellingham==1.5.4
|
|
134
|
-
# via
|
|
135
|
-
# typer
|
|
136
|
-
# typer-slim
|
|
133
|
+
# via typer
|
|
137
134
|
starlette==0.50.0
|
|
138
135
|
# via fastapi
|
|
139
136
|
sympy==1.14.0
|
|
@@ -335,7 +335,6 @@ rich==14.2.0
|
|
|
335
335
|
# chromadb
|
|
336
336
|
# rich-toolkit
|
|
337
337
|
# typer
|
|
338
|
-
# typer-slim
|
|
339
338
|
rich-toolkit==0.17.1
|
|
340
339
|
# via
|
|
341
340
|
# fastapi-cli
|
|
@@ -355,9 +354,7 @@ sentry-sdk==2.49.0
|
|
|
355
354
|
setproctitle==1.3.7
|
|
356
355
|
# via agent-cli
|
|
357
356
|
shellingham==1.5.4
|
|
358
|
-
# via
|
|
359
|
-
# typer
|
|
360
|
-
# typer-slim
|
|
357
|
+
# via typer
|
|
361
358
|
six==1.17.0
|
|
362
359
|
# via
|
|
363
360
|
# kubernetes
|
|
@@ -99,7 +99,6 @@ rich==14.2.0
|
|
|
99
99
|
# agent-cli
|
|
100
100
|
# rich-toolkit
|
|
101
101
|
# typer
|
|
102
|
-
# typer-slim
|
|
103
102
|
rich-toolkit==0.17.1
|
|
104
103
|
# via
|
|
105
104
|
# fastapi-cli
|
|
@@ -111,9 +110,7 @@ sentry-sdk==2.49.0
|
|
|
111
110
|
setproctitle==1.3.7
|
|
112
111
|
# via agent-cli
|
|
113
112
|
shellingham==1.5.4
|
|
114
|
-
# via
|
|
115
|
-
# typer
|
|
116
|
-
# typer-slim
|
|
113
|
+
# via typer
|
|
117
114
|
starlette==0.50.0
|
|
118
115
|
# via fastapi
|
|
119
116
|
typer==0.21.1
|
|
@@ -294,7 +294,6 @@ rich==14.2.0
|
|
|
294
294
|
# chromadb
|
|
295
295
|
# rich-toolkit
|
|
296
296
|
# typer
|
|
297
|
-
# typer-slim
|
|
298
297
|
rich-toolkit==0.17.1
|
|
299
298
|
# via
|
|
300
299
|
# fastapi-cli
|
|
@@ -314,9 +313,7 @@ sentry-sdk==2.49.0
|
|
|
314
313
|
setproctitle==1.3.7
|
|
315
314
|
# via agent-cli
|
|
316
315
|
shellingham==1.5.4
|
|
317
|
-
# via
|
|
318
|
-
# typer
|
|
319
|
-
# typer-slim
|
|
316
|
+
# via typer
|
|
320
317
|
six==1.17.0
|
|
321
318
|
# via
|
|
322
319
|
# kubernetes
|
|
@@ -179,7 +179,6 @@ rich==14.2.0
|
|
|
179
179
|
# agent-cli
|
|
180
180
|
# rich-toolkit
|
|
181
181
|
# typer
|
|
182
|
-
# typer-slim
|
|
183
182
|
rich-toolkit==0.17.1
|
|
184
183
|
# via
|
|
185
184
|
# fastapi-cli
|
|
@@ -195,9 +194,7 @@ setproctitle==1.3.7
|
|
|
195
194
|
setuptools==80.9.0 ; python_full_version >= '3.12'
|
|
196
195
|
# via torch
|
|
197
196
|
shellingham==1.5.4
|
|
198
|
-
# via
|
|
199
|
-
# typer
|
|
200
|
-
# typer-slim
|
|
197
|
+
# via typer
|
|
201
198
|
starlette==0.50.0
|
|
202
199
|
# via fastapi
|
|
203
200
|
sympy==1.14.0
|
|
@@ -230,7 +230,7 @@ async def _async_main(
|
|
|
230
230
|
|
|
231
231
|
|
|
232
232
|
@app.command("assistant", rich_help_panel="Voice Commands")
|
|
233
|
-
@requires_extras("audio", "llm")
|
|
233
|
+
@requires_extras("audio", "llm", process_name="assistant")
|
|
234
234
|
def assistant(
|
|
235
235
|
*,
|
|
236
236
|
# --- Provider Selection ---
|
|
@@ -465,7 +465,7 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
|
|
|
465
465
|
|
|
466
466
|
|
|
467
467
|
@app.command("transcribe", rich_help_panel="Voice Commands")
|
|
468
|
-
@requires_extras("audio", "llm")
|
|
468
|
+
@requires_extras("audio", "llm", process_name="transcribe")
|
|
469
469
|
def transcribe( # noqa: PLR0912
|
|
470
470
|
*,
|
|
471
471
|
extra_instructions: str | None = typer.Option(
|
|
@@ -288,7 +288,7 @@ async def _daemon_loop(cfg: DaemonConfig) -> None: # noqa: PLR0912, PLR0915
|
|
|
288
288
|
|
|
289
289
|
|
|
290
290
|
@app.command("transcribe-live", rich_help_panel="Voice Commands")
|
|
291
|
-
@requires_extras("audio", "vad", "llm")
|
|
291
|
+
@requires_extras("audio", "vad", "llm", process_name="transcribe-live")
|
|
292
292
|
def transcribe_live( # noqa: PLR0912
|
|
293
293
|
*,
|
|
294
294
|
# Daemon-specific options
|
|
@@ -174,7 +174,7 @@ async def _async_main(
|
|
|
174
174
|
|
|
175
175
|
|
|
176
176
|
@app.command("voice-edit", rich_help_panel="Voice Commands")
|
|
177
|
-
@requires_extras("audio", "llm")
|
|
177
|
+
@requires_extras("audio", "llm", process_name="voice-edit")
|
|
178
178
|
def voice_edit(
|
|
179
179
|
*,
|
|
180
180
|
# --- Provider Selection ---
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import functools
|
|
7
7
|
import logging
|
|
8
|
+
import threading
|
|
8
9
|
from contextlib import asynccontextmanager, contextmanager
|
|
9
10
|
from dataclasses import dataclass
|
|
10
11
|
from typing import TYPE_CHECKING, Literal
|
|
@@ -27,6 +28,9 @@ if TYPE_CHECKING:
|
|
|
27
28
|
|
|
28
29
|
from agent_cli import config
|
|
29
30
|
|
|
31
|
+
LOGGER = logging.getLogger(__name__)
|
|
32
|
+
_AUDIO_SHUTDOWN_TIMEOUT_SECONDS = 0.5
|
|
33
|
+
|
|
30
34
|
|
|
31
35
|
@dataclass
|
|
32
36
|
class StreamConfig:
|
|
@@ -178,8 +182,55 @@ def open_audio_stream(
|
|
|
178
182
|
try:
|
|
179
183
|
yield stream
|
|
180
184
|
finally:
|
|
181
|
-
|
|
182
|
-
|
|
185
|
+
# Use abort for teardown to avoid PortAudio/CoreAudio stop deadlocks.
|
|
186
|
+
_run_with_timeout(
|
|
187
|
+
lambda: stream.abort(ignore_errors=True),
|
|
188
|
+
action="audio stream.abort()",
|
|
189
|
+
)
|
|
190
|
+
_run_with_timeout(
|
|
191
|
+
lambda: stream.close(ignore_errors=True),
|
|
192
|
+
action="audio stream.close()",
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _run_with_timeout(
|
|
197
|
+
operation: Callable[[], None],
|
|
198
|
+
*,
|
|
199
|
+
action: str,
|
|
200
|
+
timeout_seconds: float = _AUDIO_SHUTDOWN_TIMEOUT_SECONDS,
|
|
201
|
+
) -> bool:
|
|
202
|
+
"""Run a blocking operation in a daemon thread with a timeout guard."""
|
|
203
|
+
done = threading.Event()
|
|
204
|
+
errors: list[Exception] = []
|
|
205
|
+
|
|
206
|
+
def _invoke() -> None:
|
|
207
|
+
try:
|
|
208
|
+
operation()
|
|
209
|
+
except Exception as exc: # pragma: no cover - defensive logging path
|
|
210
|
+
errors.append(exc)
|
|
211
|
+
finally:
|
|
212
|
+
done.set()
|
|
213
|
+
|
|
214
|
+
thread = threading.Thread(
|
|
215
|
+
target=_invoke,
|
|
216
|
+
name="agent-cli-audio-shutdown",
|
|
217
|
+
daemon=True,
|
|
218
|
+
)
|
|
219
|
+
thread.start()
|
|
220
|
+
|
|
221
|
+
if not done.wait(timeout_seconds):
|
|
222
|
+
LOGGER.warning(
|
|
223
|
+
"Timed out after %.2fs waiting for %s; continuing.",
|
|
224
|
+
timeout_seconds,
|
|
225
|
+
action,
|
|
226
|
+
)
|
|
227
|
+
return False
|
|
228
|
+
|
|
229
|
+
if errors:
|
|
230
|
+
LOGGER.warning("%s failed: %s", action, errors[0])
|
|
231
|
+
return False
|
|
232
|
+
|
|
233
|
+
return True
|
|
183
234
|
|
|
184
235
|
|
|
185
236
|
async def read_audio_stream(
|
|
@@ -311,8 +311,12 @@ def _try_auto_install(missing_display: list[str], extras_to_install: list[str])
|
|
|
311
311
|
|
|
312
312
|
def _maybe_reexec_after_install() -> None:
|
|
313
313
|
"""Re-execute after auto-install so new packages are visible."""
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
argv0 = sys.argv[0] if sys.argv else ""
|
|
315
|
+
if argv0:
|
|
316
|
+
cmd = [argv0, *sys.argv[1:]]
|
|
317
|
+
else:
|
|
318
|
+
cmd = [sys.executable, "-m", "agent_cli.cli", *sys.argv[1:]]
|
|
319
|
+
_maybe_exec_with_marker(cmd, "Re-running with installed extras...")
|
|
316
320
|
|
|
317
321
|
|
|
318
322
|
# -- Main Orchestration --
|
|
@@ -362,7 +366,26 @@ def _check_and_install_extras(extras: tuple[str, ...]) -> list[str]:
|
|
|
362
366
|
# -- Decorator --
|
|
363
367
|
|
|
364
368
|
|
|
365
|
-
def
|
|
369
|
+
def _should_skip_extra_check_for_process_control(
|
|
370
|
+
kwargs: dict[str, object],
|
|
371
|
+
process_name: str | None,
|
|
372
|
+
) -> bool:
|
|
373
|
+
"""Skip dependency checks when the command only needs process control."""
|
|
374
|
+
if not process_name:
|
|
375
|
+
return False
|
|
376
|
+
|
|
377
|
+
if bool(kwargs.get("stop")) or bool(kwargs.get("status")):
|
|
378
|
+
return True
|
|
379
|
+
|
|
380
|
+
if not bool(kwargs.get("toggle")):
|
|
381
|
+
return False
|
|
382
|
+
|
|
383
|
+
from agent_cli.core import process # noqa: PLC0415
|
|
384
|
+
|
|
385
|
+
return process.is_process_running(process_name)
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def requires_extras(*extras: str, process_name: str | None = None) -> Callable[[F], F]:
|
|
366
389
|
"""Decorator to declare required extras for a command.
|
|
367
390
|
|
|
368
391
|
Auto-installs missing extras by default. Disable via AGENT_CLI_NO_AUTO_INSTALL=1
|
|
@@ -374,11 +397,14 @@ def requires_extras(*extras: str) -> Callable[[F], F]:
|
|
|
374
397
|
|
|
375
398
|
@functools.wraps(func)
|
|
376
399
|
def wrapper(*args: object, **kwargs: object) -> object:
|
|
400
|
+
if _should_skip_extra_check_for_process_control(kwargs, process_name):
|
|
401
|
+
return func(*args, **kwargs)
|
|
377
402
|
if _check_and_install_extras(extras):
|
|
378
403
|
raise typer.Exit(1)
|
|
379
404
|
return func(*args, **kwargs)
|
|
380
405
|
|
|
381
406
|
wrapper._required_extras = extras # type: ignore[attr-defined]
|
|
407
|
+
wrapper._required_process_name = process_name # type: ignore[attr-defined]
|
|
382
408
|
return wrapper # type: ignore[return-value]
|
|
383
409
|
|
|
384
410
|
return decorator
|
|
@@ -110,6 +110,7 @@ def _get_running_pid(process_name: str) -> int | None:
|
|
|
110
110
|
# Clean up stale/invalid PID file
|
|
111
111
|
if pid_file.exists():
|
|
112
112
|
pid_file.unlink()
|
|
113
|
+
clear_stop_file(process_name)
|
|
113
114
|
return None
|
|
114
115
|
|
|
115
116
|
|
|
@@ -133,6 +134,7 @@ def kill_process(process_name: str) -> bool:
|
|
|
133
134
|
|
|
134
135
|
# If no PID file exists at all, nothing to do
|
|
135
136
|
if not pid_file.exists():
|
|
137
|
+
clear_stop_file(process_name)
|
|
136
138
|
return False
|
|
137
139
|
|
|
138
140
|
# Check if we have a running process
|
|
@@ -140,28 +142,42 @@ def kill_process(process_name: str) -> bool:
|
|
|
140
142
|
|
|
141
143
|
# If _get_running_pid returned None but file existed, it cleaned up a stale file
|
|
142
144
|
if pid is None:
|
|
145
|
+
clear_stop_file(process_name)
|
|
143
146
|
return True
|
|
144
147
|
|
|
148
|
+
stop_file = _get_stop_file(process_name)
|
|
149
|
+
should_force_kill = sys.platform != "win32" and stop_file.exists()
|
|
150
|
+
|
|
145
151
|
# On Windows, create stop file to signal graceful shutdown
|
|
146
152
|
if sys.platform == "win32":
|
|
147
|
-
|
|
153
|
+
stop_file.touch()
|
|
148
154
|
|
|
149
|
-
# Send SIGINT
|
|
155
|
+
# Send SIGINT first; escalate to SIGKILL only when the same PID survives
|
|
156
|
+
# repeated stop attempts beyond the configured timeout.
|
|
157
|
+
stop_signal = signal.SIGKILL if should_force_kill else signal.SIGINT
|
|
158
|
+
process_stopped = False
|
|
150
159
|
try:
|
|
151
|
-
os.kill(pid,
|
|
160
|
+
os.kill(pid, stop_signal)
|
|
152
161
|
# Wait for process to terminate
|
|
153
162
|
for _ in range(10): # 1 second max
|
|
154
|
-
if not
|
|
163
|
+
if not _is_pid_running(pid):
|
|
164
|
+
process_stopped = True
|
|
155
165
|
break
|
|
156
166
|
time.sleep(0.1)
|
|
157
167
|
except (ProcessLookupError, PermissionError):
|
|
158
|
-
|
|
168
|
+
process_stopped = not _is_pid_running(pid)
|
|
159
169
|
|
|
160
170
|
# Clean up
|
|
161
171
|
if sys.platform == "win32":
|
|
162
172
|
clear_stop_file(process_name)
|
|
163
|
-
if
|
|
164
|
-
|
|
173
|
+
# Keep PID file if process is still alive so subsequent --status/--toggle
|
|
174
|
+
# calls continue targeting the same process.
|
|
175
|
+
if process_stopped:
|
|
176
|
+
clear_stop_file(process_name)
|
|
177
|
+
if pid_file.exists():
|
|
178
|
+
pid_file.unlink()
|
|
179
|
+
elif not should_force_kill:
|
|
180
|
+
stop_file.touch()
|
|
165
181
|
|
|
166
182
|
return True
|
|
167
183
|
|
|
@@ -178,9 +194,8 @@ def pid_file_context(process_name: str) -> Generator[Path, None, None]:
|
|
|
178
194
|
print(f"Process {process_name} is already running (PID: {existing_pid})")
|
|
179
195
|
sys.exit(1)
|
|
180
196
|
|
|
181
|
-
# Clear
|
|
182
|
-
|
|
183
|
-
clear_stop_file(process_name)
|
|
197
|
+
# Clear stale stop markers from previous runs.
|
|
198
|
+
clear_stop_file(process_name)
|
|
184
199
|
|
|
185
200
|
pid_file = _get_pid_file(process_name)
|
|
186
201
|
with pid_file.open("w") as f:
|
|
@@ -191,5 +206,4 @@ def pid_file_context(process_name: str) -> Generator[Path, None, None]:
|
|
|
191
206
|
finally:
|
|
192
207
|
if pid_file.exists():
|
|
193
208
|
pid_file.unlink()
|
|
194
|
-
|
|
195
|
-
clear_stop_file(process_name)
|
|
209
|
+
clear_stop_file(process_name)
|
|
@@ -4,8 +4,11 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import platform
|
|
6
6
|
|
|
7
|
+
import typer
|
|
8
|
+
|
|
7
9
|
from agent_cli.cli import app
|
|
8
|
-
from agent_cli.core.
|
|
10
|
+
from agent_cli.core.deps import _check_extra_installed, install_extras_impl
|
|
11
|
+
from agent_cli.core.utils import print_error_message, print_with_style
|
|
9
12
|
from agent_cli.install.common import execute_installation_script, get_platform_script
|
|
10
13
|
|
|
11
14
|
|
|
@@ -39,6 +42,19 @@ def install_hotkeys() -> None:
|
|
|
39
42
|
**Customizing hotkeys** (macOS): Edit `~/.config/skhd/skhdrc` and restart skhd:
|
|
40
43
|
`skhd --restart-service`
|
|
41
44
|
"""
|
|
45
|
+
required_extras = ["audio", "llm"]
|
|
46
|
+
missing_extras = [extra for extra in required_extras if not _check_extra_installed(extra)]
|
|
47
|
+
if missing_extras:
|
|
48
|
+
print_with_style(
|
|
49
|
+
f"Installing required extras for hotkeys: {', '.join(missing_extras)}",
|
|
50
|
+
"cyan",
|
|
51
|
+
)
|
|
52
|
+
if not install_extras_impl(missing_extras):
|
|
53
|
+
print_error_message(
|
|
54
|
+
"Failed to install required extras for hotkeys: " + ", ".join(missing_extras),
|
|
55
|
+
)
|
|
56
|
+
raise typer.Exit(1)
|
|
57
|
+
|
|
42
58
|
script_name = get_platform_script("setup-macos-hotkeys.sh", "setup-linux-hotkeys.sh")
|
|
43
59
|
system = platform.system().lower()
|
|
44
60
|
|