agent-cli 0.82.1__tar.gz → 0.82.2__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.2}/.pre-commit-config.yaml +1 -1
- {agent_cli-0.82.1 → agent_cli-0.82.2}/PKG-INFO +2 -2
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/audio.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/faster-whisper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/kokoro.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/llm.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/memory.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/mlx-whisper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/piper.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/rag.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/server.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/speed.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/vad.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/vectordb.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/whisper-transformers.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/wyoming.txt +1 -4
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/audio.py +53 -2
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/process.py +26 -12
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +13 -3
- {agent_cli-0.82.1 → agent_cli-0.82.2}/pyproject.toml +1 -1
- agent_cli-0.82.2/tests/core/test_audio.py +102 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_vad.py +3 -1
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_process_manager.py +65 -8
- {agent_cli-0.82.1 → agent_cli-0.82.2}/uv.lock +2 -8
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.cursorrules +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.dockerignore +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.env.example +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/logo.svg +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/release-drafter.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/renovate.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/release.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.gitignore +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.jscpd.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.prompts/docs-review.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/.prompts/pr-review.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/CLAUDE.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/LICENSE +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/__main__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_extras.json +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/constants.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/services.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/opts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/py.typed +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/docker-compose.yml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/CNAME +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/memory.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/architecture/rag.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/assistant.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/chat.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/config.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/daemon.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/dev.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/install-services.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/memory.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/speak.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/start-services.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/configuration.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/getting-started.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/docker.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/index.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/linux.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/macos.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/nixos.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/installation/windows.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/logo-clean.svg +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/docs/system-integration.md +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/justfile +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/shell.nix +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/conftest.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_sse.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/core/test_watch.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_project.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/install/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/install/test_extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_files.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/audio.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/__init__.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_history.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_store.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_api.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_api_integration.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_asr.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_cli.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_config.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_daemon.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_env_vars.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_json_output.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_llm.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_services.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_tools.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_tts.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_wake_word.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.82.1 → agent_cli-0.82.2}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.82.
|
|
3
|
+
Version: 0.82.2
|
|
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
|
|
@@ -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(
|
|
@@ -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)
|
{agent_cli-0.82.1 → agent_cli-0.82.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh
RENAMED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
# Toggle script for agent-cli transcription on macOS
|
|
4
4
|
|
|
5
5
|
NOTIFIER=${NOTIFIER:-/opt/homebrew/bin/terminal-notifier}
|
|
6
|
+
AGENT_CLI=${AGENT_CLI:-"$HOME/.local/bin/agent-cli"}
|
|
7
|
+
PID_FILE=${PID_FILE:-"$HOME/.cache/agent-cli/transcribe.pid"}
|
|
6
8
|
RECORDING_GROUP="agent-cli-transcribe-recording"
|
|
7
9
|
TEMP_PREFIX="agent-cli-transcribe-temp"
|
|
8
10
|
|
|
@@ -19,14 +21,22 @@ notify_temp() {
|
|
|
19
21
|
) &
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
is_transcribe_running() {
|
|
25
|
+
[ -f "$PID_FILE" ] || return 1
|
|
26
|
+
local pid
|
|
27
|
+
pid=$(cat "$PID_FILE" 2>/dev/null || true)
|
|
28
|
+
[ -n "$pid" ] && kill -0 "$pid" >/dev/null 2>&1
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if is_transcribe_running; then
|
|
32
|
+
"$AGENT_CLI" transcribe --toggle --quiet >/dev/null 2>&1 || true
|
|
33
|
+
|
|
24
34
|
"$NOTIFIER" -remove "$RECORDING_GROUP" >/dev/null 2>&1 || true
|
|
25
35
|
notify_temp "🛑 Stopped" "Processing results..."
|
|
26
36
|
else
|
|
27
37
|
"$NOTIFIER" -title "🎙️ Started" -message "Listening..." -group "$RECORDING_GROUP"
|
|
28
38
|
(
|
|
29
|
-
OUTPUT=$("$
|
|
39
|
+
OUTPUT=$("$AGENT_CLI" transcribe --toggle --llm --quiet 2>/dev/null)
|
|
30
40
|
"$NOTIFIER" -remove "$RECORDING_GROUP" >/dev/null 2>&1 || true
|
|
31
41
|
if [ -n "$OUTPUT" ]; then
|
|
32
42
|
notify_temp "📄 Result" "$OUTPUT"
|
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
|
12
12
|
"pydantic", # Required for config.py models
|
|
13
13
|
"rich",
|
|
14
14
|
"pyperclip",
|
|
15
|
-
"typer-slim
|
|
15
|
+
"typer-slim", # Depend on both typer and typer-slim to prevent
|
|
16
16
|
"typer", # uv namespace corruption (astral-sh/uv#17645)
|
|
17
17
|
"dotenv",
|
|
18
18
|
"httpx",
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""Tests for core audio stream lifecycle helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import time
|
|
7
|
+
from typing import Any
|
|
8
|
+
from unittest.mock import MagicMock
|
|
9
|
+
|
|
10
|
+
from agent_cli.core import audio
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class _FakeStream:
|
|
14
|
+
def __init__(self) -> None:
|
|
15
|
+
self.calls: list[str] = []
|
|
16
|
+
|
|
17
|
+
def start(self) -> None:
|
|
18
|
+
self.calls.append("start")
|
|
19
|
+
|
|
20
|
+
def stop(self, ignore_errors: bool = True) -> None: # noqa: ARG002
|
|
21
|
+
self.calls.append("stop")
|
|
22
|
+
|
|
23
|
+
def abort(self, ignore_errors: bool = True) -> None: # noqa: ARG002
|
|
24
|
+
self.calls.append("abort")
|
|
25
|
+
|
|
26
|
+
def close(self, ignore_errors: bool = True) -> None: # noqa: ARG002
|
|
27
|
+
self.calls.append("close")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_open_audio_stream_stops_and_closes() -> None:
|
|
31
|
+
"""open_audio_stream should start, then abort and close the stream."""
|
|
32
|
+
stream = _FakeStream()
|
|
33
|
+
config = MagicMock()
|
|
34
|
+
config.to_stream.return_value = stream
|
|
35
|
+
|
|
36
|
+
with audio.open_audio_stream(config):
|
|
37
|
+
assert stream.calls == ["start"]
|
|
38
|
+
|
|
39
|
+
assert stream.calls == ["start", "abort", "close"]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_open_audio_stream_runs_abort_then_close(
|
|
43
|
+
monkeypatch: Any,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""open_audio_stream should invoke abort before close."""
|
|
46
|
+
stream = _FakeStream()
|
|
47
|
+
config = MagicMock()
|
|
48
|
+
config.to_stream.return_value = stream
|
|
49
|
+
actions: list[str] = []
|
|
50
|
+
|
|
51
|
+
def fake_call(
|
|
52
|
+
operation: Any,
|
|
53
|
+
*,
|
|
54
|
+
action: str,
|
|
55
|
+
timeout_seconds: float = audio._AUDIO_SHUTDOWN_TIMEOUT_SECONDS,
|
|
56
|
+
) -> bool:
|
|
57
|
+
_ = operation
|
|
58
|
+
_ = timeout_seconds
|
|
59
|
+
actions.append(action)
|
|
60
|
+
return True
|
|
61
|
+
|
|
62
|
+
monkeypatch.setattr(audio, "_run_with_timeout", fake_call)
|
|
63
|
+
|
|
64
|
+
with audio.open_audio_stream(config):
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
assert actions == ["audio stream.abort()", "audio stream.close()"]
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_run_with_timeout_timeout_logs_warning(
|
|
71
|
+
caplog: Any,
|
|
72
|
+
) -> None:
|
|
73
|
+
"""Timeout path should log a warning and return False."""
|
|
74
|
+
|
|
75
|
+
def hang() -> None:
|
|
76
|
+
time.sleep(0.2)
|
|
77
|
+
|
|
78
|
+
with caplog.at_level(logging.WARNING):
|
|
79
|
+
result = audio._run_with_timeout(
|
|
80
|
+
hang,
|
|
81
|
+
action="audio stream.close()",
|
|
82
|
+
timeout_seconds=0.01,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
assert result is False
|
|
86
|
+
assert "Timed out after" in caplog.text
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_run_with_timeout_exception_logs_warning(
|
|
90
|
+
caplog: Any,
|
|
91
|
+
) -> None:
|
|
92
|
+
"""Exceptions from stream methods should be logged and reported as failure."""
|
|
93
|
+
|
|
94
|
+
def explode() -> None:
|
|
95
|
+
msg = "boom"
|
|
96
|
+
raise RuntimeError(msg)
|
|
97
|
+
|
|
98
|
+
with caplog.at_level(logging.WARNING):
|
|
99
|
+
result = audio._run_with_timeout(explode, action="audio stream.close()")
|
|
100
|
+
|
|
101
|
+
assert result is False
|
|
102
|
+
assert "audio stream.close() failed" in caplog.text
|
|
@@ -26,7 +26,9 @@ def ensure_model_cached() -> None:
|
|
|
26
26
|
SILERO_VAD_CACHE.parent.mkdir(parents=True, exist_ok=True)
|
|
27
27
|
try:
|
|
28
28
|
with (
|
|
29
|
-
|
|
29
|
+
# Keep this below the global pytest-timeout (10s) so transient
|
|
30
|
+
# network slowness results in a clean skip instead of a timeout failure.
|
|
31
|
+
urllib.request.urlopen(SILERO_VAD_URL, timeout=5) as response, # noqa: S310
|
|
30
32
|
SILERO_VAD_CACHE.open("wb") as f,
|
|
31
33
|
):
|
|
32
34
|
shutil.copyfileobj(response, f)
|