agent-cli 0.98.1__tar.gz → 0.98.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.98.1 → agent_cli-0.98.3}/PKG-INFO +1 -1
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/cli.py +1 -1
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/nemo.py +20 -1
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/server/whisper.md +8 -1
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +125 -42
- agent_cli-0.98.3/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +36 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/appcast.xml +15 -18
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_nemo_backend.py +38 -4
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude-plugin/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.cursorrules +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.dockerignore +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.env.example +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/logo.svg +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/release-drafter.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/renovate.json +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/release.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.gitignore +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.jscpd.json +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.prompts/docs-review.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/.prompts/pr-review.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/CLAUDE.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/LICENSE +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/__main__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_extras.json +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_overrides/nemo-whisper.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/nemo-whisper.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/_tools.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/cli.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/config.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/constants.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/process.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/common.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/services.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/opts.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/py.typed +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/common.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/docker-compose.yml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/CNAME +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/architecture/index.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/architecture/memory.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/architecture/rag.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/assistant.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/chat.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/config.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/daemon.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/dev.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/index.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/install-services.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/memory.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/server/index.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/speak.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/speakers.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/start-services.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/configuration.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/getting-started.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/index.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/docker.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/index.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/linux.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/macos.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/nixos.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/installation/windows.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/logo-clean.svg +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/docs/system-integration.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/justfile +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/README.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/pyproject.toml +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/reddit.md +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/shell.nix +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/conftest.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_audio.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_sse.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_vad.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/core/test_watch.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_project.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/install/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/install/test_extras.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_client.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_files.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_store.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/mocks/audio.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/mocks/llm.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/__init__.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_history.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_store.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_alignment.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_api.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_api_integration.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_asr.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_cli.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_config.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_daemon.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_diarization.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_env_vars.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_json_output.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_llm.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_macos_app.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_process_manager.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_server_tts.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_services.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_tools.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_tts.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_wake_word.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/uv.lock +0 -0
- {agent_cli-0.98.1 → agent_cli-0.98.3}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.98.
|
|
3
|
+
Version: 0.98.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>
|
|
@@ -351,7 +351,7 @@ def whisper_cmd( # noqa: C901, PLR0912, PLR0915
|
|
|
351
351
|
"--device",
|
|
352
352
|
"-d",
|
|
353
353
|
help=(
|
|
354
|
-
"Compute device: `auto` (detect GPU), `cuda`, `cuda:0`, `cpu`. "
|
|
354
|
+
"Compute device: `auto` (detect GPU), `cuda`, `cuda:0`, `mps`, `cpu`. "
|
|
355
355
|
"MLX backend always uses Apple Silicon"
|
|
356
356
|
),
|
|
357
357
|
),
|
|
@@ -6,6 +6,8 @@ import asyncio
|
|
|
6
6
|
import inspect
|
|
7
7
|
import io
|
|
8
8
|
import logging
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
9
11
|
import tempfile
|
|
10
12
|
import time
|
|
11
13
|
import wave
|
|
@@ -89,18 +91,35 @@ _state = _SubprocessState()
|
|
|
89
91
|
|
|
90
92
|
def _resolve_device(device: str) -> str:
|
|
91
93
|
"""Resolve the runtime device for NeMo inference."""
|
|
94
|
+
if device in {"auto", "mps"} and sys.platform == "darwin":
|
|
95
|
+
os.environ.setdefault("PYTORCH_ENABLE_MPS_FALLBACK", "1")
|
|
96
|
+
|
|
92
97
|
import torch # noqa: PLC0415
|
|
93
98
|
|
|
94
99
|
if device == "auto":
|
|
95
|
-
|
|
100
|
+
if torch.cuda.is_available():
|
|
101
|
+
return "cuda"
|
|
102
|
+
if _mps_available(torch):
|
|
103
|
+
return "mps"
|
|
104
|
+
return "cpu"
|
|
96
105
|
|
|
97
106
|
if device.startswith("cuda") and not torch.cuda.is_available():
|
|
98
107
|
msg = f"CUDA device requested ({device}) but CUDA is not available"
|
|
99
108
|
raise RuntimeError(msg)
|
|
100
109
|
|
|
110
|
+
if device == "mps" and not _mps_available(torch):
|
|
111
|
+
msg = "MPS device requested (mps) but MPS is not available"
|
|
112
|
+
raise RuntimeError(msg)
|
|
113
|
+
|
|
101
114
|
return device
|
|
102
115
|
|
|
103
116
|
|
|
117
|
+
def _mps_available(torch: Any) -> bool:
|
|
118
|
+
"""Return True when PyTorch exposes an available MPS backend."""
|
|
119
|
+
mps = getattr(getattr(torch, "backends", None), "mps", None)
|
|
120
|
+
return bool(mps is not None and mps.is_available())
|
|
121
|
+
|
|
122
|
+
|
|
104
123
|
def _extract_text(hypothesis: Any) -> str:
|
|
105
124
|
"""Extract a transcript string from a NeMo hypothesis-like object."""
|
|
106
125
|
if isinstance(hypothesis, str):
|
|
@@ -112,7 +112,7 @@ agent-cli server whisper \
|
|
|
112
112
|
|--------|---------|-------------|
|
|
113
113
|
| `--model, -m` | - | Whisper model(s) to load. Common models: `tiny`, `base`, `small`, `medium`, `large-v3`, `distil-large-v3`, `parakeet-tdt-0.6b-v3`, `parakeet-unified-en-0.6b` (NeMo backend). Can specify multiple for different accuracy/speed tradeoffs. Default: `large-v3` (`parakeet-unified-en-0.6b` with `--backend nemo`) |
|
|
114
114
|
| `--default-model` | - | Model to use when client doesn't specify one. Must be in the `--model` list |
|
|
115
|
-
| `--device, -d` | `auto` | Compute device: `auto` (detect GPU), `cuda`, `cuda:0`, `cpu`. MLX backend always uses Apple Silicon |
|
|
115
|
+
| `--device, -d` | `auto` | Compute device: `auto` (detect GPU), `cuda`, `cuda:0`, `mps`, `cpu`. MLX backend always uses Apple Silicon |
|
|
116
116
|
| `--compute-type` | `auto` | Precision for faster-whisper: `auto`, `float16`, `int8`, `int8_float16`. Lower precision = faster + less VRAM |
|
|
117
117
|
| `--cache-dir` | - | Custom directory for downloaded models (default: HuggingFace cache) |
|
|
118
118
|
| `--default-language` | - | Fallback language code for requests that omit `language`. Required for models that do not support language auto-detection (for example Cohere Transcribe). |
|
|
@@ -269,6 +269,13 @@ pip install "agent-cli[mlx-whisper]"
|
|
|
269
269
|
|
|
270
270
|
The server will automatically detect and use the MLX backend when available.
|
|
271
271
|
|
|
272
|
+
For NeMo/Parakeet models on Apple Silicon, `--device auto` uses PyTorch MPS when
|
|
273
|
+
available. You can also request it explicitly:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
agent-cli server whisper --backend nemo --model parakeet-unified-en-0.6b --device mps
|
|
277
|
+
```
|
|
278
|
+
|
|
272
279
|
### HuggingFace Transformers
|
|
273
280
|
|
|
274
281
|
For loading models in safetensors format (instead of CTranslate2 `.bin` files):
|
|
@@ -3,6 +3,70 @@ import Carbon.HIToolbox
|
|
|
3
3
|
import Foundation
|
|
4
4
|
import KeyboardShortcuts
|
|
5
5
|
|
|
6
|
+
enum HoldToTranscribeStopDecision: Equatable {
|
|
7
|
+
case none
|
|
8
|
+
case deferUntilStartCompletes
|
|
9
|
+
case stopNow
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
struct HoldToTranscribeKeyState {
|
|
13
|
+
private enum State {
|
|
14
|
+
case idle
|
|
15
|
+
case startPending(releaseRequested: Bool)
|
|
16
|
+
case recording
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private var state: State = .idle
|
|
20
|
+
|
|
21
|
+
var isStartPendingOrRecording: Bool {
|
|
22
|
+
switch state {
|
|
23
|
+
case .idle:
|
|
24
|
+
return false
|
|
25
|
+
case .startPending, .recording:
|
|
26
|
+
return true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
mutating func requestStart() -> Bool {
|
|
31
|
+
guard case .idle = state else { return false }
|
|
32
|
+
state = .startPending(releaseRequested: false)
|
|
33
|
+
return true
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
mutating func releaseKey() -> HoldToTranscribeStopDecision {
|
|
37
|
+
switch state {
|
|
38
|
+
case .idle:
|
|
39
|
+
return .none
|
|
40
|
+
case .startPending:
|
|
41
|
+
state = .startPending(releaseRequested: true)
|
|
42
|
+
return .deferUntilStartCompletes
|
|
43
|
+
case .recording:
|
|
44
|
+
state = .idle
|
|
45
|
+
return .stopNow
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
mutating func completeStart(started: Bool) -> HoldToTranscribeStopDecision {
|
|
50
|
+
guard case let .startPending(releaseRequested) = state else { return .none }
|
|
51
|
+
guard started else {
|
|
52
|
+
state = .idle
|
|
53
|
+
return .none
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if releaseRequested {
|
|
57
|
+
state = .idle
|
|
58
|
+
return .stopNow
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
state = .recording
|
|
62
|
+
return .none
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
mutating func reset() {
|
|
66
|
+
state = .idle
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
6
70
|
final class ConfigurableHotkeyController {
|
|
7
71
|
static let shared = ConfigurableHotkeyController()
|
|
8
72
|
|
|
@@ -12,7 +76,7 @@ final class ConfigurableHotkeyController {
|
|
|
12
76
|
private var runLoopSource: CFRunLoopSource?
|
|
13
77
|
private var functionKeyIsDown = false
|
|
14
78
|
private var suppressNextFunctionKeyRelease = false
|
|
15
|
-
private var
|
|
79
|
+
private var holdToTranscribeKeyState = HoldToTranscribeKeyState()
|
|
16
80
|
private var pendingHoldToTranscribeWorkItem: DispatchWorkItem?
|
|
17
81
|
private let holdToTranscribeDelay: TimeInterval = 0.16
|
|
18
82
|
|
|
@@ -52,9 +116,7 @@ final class ConfigurableHotkeyController {
|
|
|
52
116
|
!self.usesFunctionShortcut(shortcut) else {
|
|
53
117
|
return
|
|
54
118
|
}
|
|
55
|
-
|
|
56
|
-
_ = runner.beginHoldToTranscribe()
|
|
57
|
-
}
|
|
119
|
+
self.requestHoldToTranscribeStart(preferredRunner: runner)
|
|
58
120
|
}
|
|
59
121
|
KeyboardShortcuts.onKeyUp(for: .holdToTranscribe) {
|
|
60
122
|
guard !ShortcutRecordingState.shared.isRecording,
|
|
@@ -62,7 +124,7 @@ final class ConfigurableHotkeyController {
|
|
|
62
124
|
!self.usesFunctionShortcut(shortcut) else {
|
|
63
125
|
return
|
|
64
126
|
}
|
|
65
|
-
|
|
127
|
+
self.releaseHoldToTranscribeKey()
|
|
66
128
|
}
|
|
67
129
|
}
|
|
68
130
|
|
|
@@ -120,7 +182,7 @@ final class ConfigurableHotkeyController {
|
|
|
120
182
|
runLoopSource = nil
|
|
121
183
|
functionKeyIsDown = false
|
|
122
184
|
suppressNextFunctionKeyRelease = false
|
|
123
|
-
|
|
185
|
+
holdToTranscribeKeyState.reset()
|
|
124
186
|
}
|
|
125
187
|
|
|
126
188
|
func resumeFunctionAwareHotkeysAfterAccessibilityReset(runner: AgentCommandRunner) {
|
|
@@ -169,7 +231,7 @@ final class ConfigurableHotkeyController {
|
|
|
169
231
|
cancelPendingHoldToTranscribe()
|
|
170
232
|
suppressNextFunctionKeyRelease = usesFunctionShortcut(shortcut)
|
|
171
233
|
|
|
172
|
-
if !isAutorepeat(event) && !
|
|
234
|
+
if !isAutorepeat(event) && !holdToTranscribeKeyState.isStartPendingOrRecording {
|
|
173
235
|
Task { @MainActor in
|
|
174
236
|
self.runner?.run(.toggleTranscription)
|
|
175
237
|
}
|
|
@@ -190,25 +252,14 @@ final class ConfigurableHotkeyController {
|
|
|
190
252
|
}
|
|
191
253
|
|
|
192
254
|
if type == .keyDown {
|
|
193
|
-
if !isAutorepeat(event)
|
|
194
|
-
|
|
195
|
-
guard let runner = self.runner else { return }
|
|
196
|
-
if runner.beginHoldToTranscribe() {
|
|
197
|
-
self.holdToTranscribeIsRecording = true
|
|
198
|
-
}
|
|
199
|
-
}
|
|
255
|
+
if !isAutorepeat(event) {
|
|
256
|
+
requestHoldToTranscribeStart()
|
|
200
257
|
}
|
|
201
258
|
return true
|
|
202
259
|
}
|
|
203
260
|
|
|
204
261
|
if type == .keyUp {
|
|
205
|
-
|
|
206
|
-
holdToTranscribeIsRecording = false
|
|
207
|
-
Task { @MainActor in
|
|
208
|
-
guard let runner = self.runner else { return }
|
|
209
|
-
runner.endHoldToTranscribe()
|
|
210
|
-
}
|
|
211
|
-
}
|
|
262
|
+
releaseHoldToTranscribeKey()
|
|
212
263
|
return true
|
|
213
264
|
}
|
|
214
265
|
|
|
@@ -238,17 +289,7 @@ final class ConfigurableHotkeyController {
|
|
|
238
289
|
return true
|
|
239
290
|
}
|
|
240
291
|
|
|
241
|
-
|
|
242
|
-
holdToTranscribeIsRecording = false
|
|
243
|
-
Task { @MainActor in
|
|
244
|
-
guard let runner = self.runner else { return }
|
|
245
|
-
runner.endHoldToTranscribe()
|
|
246
|
-
}
|
|
247
|
-
} else {
|
|
248
|
-
Task { @MainActor in
|
|
249
|
-
_ = self.runner?.stopTranscriptionFromFunctionKeyIfNeeded()
|
|
250
|
-
}
|
|
251
|
-
}
|
|
292
|
+
releaseHoldToTranscribeKey(stopExistingFunctionRecordingIfIdle: true)
|
|
252
293
|
|
|
253
294
|
return true
|
|
254
295
|
}
|
|
@@ -264,16 +305,7 @@ final class ConfigurableHotkeyController {
|
|
|
264
305
|
}
|
|
265
306
|
|
|
266
307
|
self.pendingHoldToTranscribeWorkItem = nil
|
|
267
|
-
|
|
268
|
-
if self.runner?.stopTranscriptionFromFunctionKeyIfNeeded() == true {
|
|
269
|
-
return
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
guard let runner = self.runner else { return }
|
|
273
|
-
if runner.beginHoldToTranscribe() {
|
|
274
|
-
self.holdToTranscribeIsRecording = true
|
|
275
|
-
}
|
|
276
|
-
}
|
|
308
|
+
self.requestHoldToTranscribeStart(stopExistingFunctionRecordingFirst: true)
|
|
277
309
|
}
|
|
278
310
|
|
|
279
311
|
pendingHoldToTranscribeWorkItem = workItem
|
|
@@ -287,6 +319,57 @@ final class ConfigurableHotkeyController {
|
|
|
287
319
|
pendingHoldToTranscribeWorkItem = nil
|
|
288
320
|
}
|
|
289
321
|
|
|
322
|
+
private func requestHoldToTranscribeStart(
|
|
323
|
+
preferredRunner: AgentCommandRunner? = nil,
|
|
324
|
+
stopExistingFunctionRecordingFirst: Bool = false
|
|
325
|
+
) {
|
|
326
|
+
guard holdToTranscribeKeyState.requestStart() else { return }
|
|
327
|
+
Task { @MainActor in
|
|
328
|
+
if stopExistingFunctionRecordingFirst,
|
|
329
|
+
self.runner?.stopTranscriptionFromFunctionKeyIfNeeded() == true {
|
|
330
|
+
_ = self.holdToTranscribeKeyState.completeStart(started: false)
|
|
331
|
+
return
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
guard let runner = preferredRunner ?? self.runner else {
|
|
335
|
+
_ = self.holdToTranscribeKeyState.completeStart(started: false)
|
|
336
|
+
return
|
|
337
|
+
}
|
|
338
|
+
self.finishHoldToTranscribeStart(runner: runner)
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
@MainActor
|
|
343
|
+
private func finishHoldToTranscribeStart(runner: AgentCommandRunner) {
|
|
344
|
+
let started = runner.beginHoldToTranscribe()
|
|
345
|
+
let action = holdToTranscribeKeyState.completeStart(started: started)
|
|
346
|
+
if action == .stopNow {
|
|
347
|
+
runner.endHoldToTranscribe()
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
private func releaseHoldToTranscribeKey(stopExistingFunctionRecordingIfIdle: Bool = false) {
|
|
352
|
+
switch holdToTranscribeKeyState.releaseKey() {
|
|
353
|
+
case .stopNow:
|
|
354
|
+
stopHoldToTranscribe()
|
|
355
|
+
case .none:
|
|
356
|
+
if stopExistingFunctionRecordingIfIdle {
|
|
357
|
+
Task { @MainActor in
|
|
358
|
+
_ = self.runner?.stopTranscriptionFromFunctionKeyIfNeeded()
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
case .deferUntilStartCompletes:
|
|
362
|
+
break
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
private func stopHoldToTranscribe() {
|
|
367
|
+
Task { @MainActor in
|
|
368
|
+
guard let runner = self.runner else { return }
|
|
369
|
+
runner.endHoldToTranscribe()
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
290
373
|
private func shortcutMatches(type: CGEventType, event: CGEvent, shortcut: KeyboardShortcuts.Shortcut) -> Bool {
|
|
291
374
|
guard type == .keyDown || type == .keyUp else {
|
|
292
375
|
return false
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#if canImport(XCTest)
|
|
2
|
+
import XCTest
|
|
3
|
+
@testable import AgentCLI
|
|
4
|
+
|
|
5
|
+
final class ConfigurableHotkeyControllerTests: XCTestCase {
|
|
6
|
+
func testReleaseBeforeHoldStartCompletesStopsAfterSuccessfulStart() {
|
|
7
|
+
var state = HoldToTranscribeKeyState()
|
|
8
|
+
|
|
9
|
+
XCTAssertTrue(state.requestStart())
|
|
10
|
+
XCTAssertEqual(state.releaseKey(), .deferUntilStartCompletes)
|
|
11
|
+
|
|
12
|
+
XCTAssertEqual(state.completeStart(started: true), .stopNow)
|
|
13
|
+
XCTAssertFalse(state.isStartPendingOrRecording)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
func testReleaseAfterHoldStartStopsImmediately() {
|
|
17
|
+
var state = HoldToTranscribeKeyState()
|
|
18
|
+
|
|
19
|
+
XCTAssertTrue(state.requestStart())
|
|
20
|
+
XCTAssertEqual(state.completeStart(started: true), .none)
|
|
21
|
+
|
|
22
|
+
XCTAssertEqual(state.releaseKey(), .stopNow)
|
|
23
|
+
XCTAssertFalse(state.isStartPendingOrRecording)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
func testFailedHoldStartAfterReleaseClearsPendingStateWithoutStop() {
|
|
27
|
+
var state = HoldToTranscribeKeyState()
|
|
28
|
+
|
|
29
|
+
XCTAssertTrue(state.requestStart())
|
|
30
|
+
XCTAssertEqual(state.releaseKey(), .deferUntilStartCompletes)
|
|
31
|
+
|
|
32
|
+
XCTAssertEqual(state.completeStart(started: false), .none)
|
|
33
|
+
XCTAssertFalse(state.isStartPendingOrRecording)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
#endif
|
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
<title>Agent CLI Updates</title>
|
|
5
5
|
<link>https://github.com/basnijholt/agent-cli</link>
|
|
6
6
|
<description>Signed Agent CLI macOS app updates.</description>
|
|
7
|
+
<item>
|
|
8
|
+
<title>0.98.1</title>
|
|
9
|
+
<pubDate>Thu, 04 Jun 2026 16:50:48 +0000</pubDate>
|
|
10
|
+
<link>https://github.com/basnijholt/agent-cli</link>
|
|
11
|
+
<sparkle:version>189</sparkle:version>
|
|
12
|
+
<sparkle:shortVersionString>0.98.1</sparkle:shortVersionString>
|
|
13
|
+
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
14
|
+
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
15
|
+
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
16
|
+
|
|
17
|
+
* Add macOS transcription TTL setting (#578) @basnijholt
|
|
18
|
+
|
|
19
|
+
]]></description>
|
|
20
|
+
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.1/AgentCLI.zip" length="22896191" type="application/octet-stream" sparkle:edSignature="4g9PD/is1i4Htq5eM2TfAUjxEaXSb7xJJDjnliSfX5TQfqeLLsItUcaCLbhpXaOKqzq0YByVg5SLSpqHK08vAw=="/>
|
|
21
|
+
</item>
|
|
7
22
|
<item>
|
|
8
23
|
<title>0.98.0</title>
|
|
9
24
|
<pubDate>Thu, 04 Jun 2026 16:25:34 +0000</pubDate>
|
|
@@ -154,23 +169,5 @@
|
|
|
154
169
|
]]></description>
|
|
155
170
|
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.96.6/AgentCLI.zip" length="22742441" type="application/octet-stream" sparkle:edSignature="DriNk09uSrq9l20Pu7S+y34r4LvO+rfTHGOm1gsPDOd94FQZXqgDZxbVYYfTGgJ6eWSb0l3ljQokW6VQhJ97DQ=="/>
|
|
156
171
|
</item>
|
|
157
|
-
<item>
|
|
158
|
-
<title>0.96.5</title>
|
|
159
|
-
<pubDate>Fri, 29 May 2026 16:40:33 +0000</pubDate>
|
|
160
|
-
<link>https://github.com/basnijholt/agent-cli</link>
|
|
161
|
-
<sparkle:version>179</sparkle:version>
|
|
162
|
-
<sparkle:shortVersionString>0.96.5</sparkle:shortVersionString>
|
|
163
|
-
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
164
|
-
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
165
|
-
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
166
|
-
|
|
167
|
-
* Fix bare Fn shortcut detection on macOS (#554) @marcellaholm
|
|
168
|
-
* Fix macOS setup menu bar icon (#555) @marcellaholm
|
|
169
|
-
* Use purr for recording release sound (#556) @basnijholt
|
|
170
|
-
* Boost quiet waveform levels (#553) @basnijholt
|
|
171
|
-
|
|
172
|
-
]]></description>
|
|
173
|
-
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.96.5/AgentCLI.zip" length="22738995" type="application/octet-stream" sparkle:edSignature="Jf0aoWxUGvOR6idZhELnlGf61IHrf8Kw92tcH5Xk4wC8chn3mO3OgeE+8+P2orbHC0VhszHgjMNzsGN3bZPwCg=="/>
|
|
174
|
-
</item>
|
|
175
172
|
</channel>
|
|
176
173
|
</rss>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import io
|
|
6
|
+
import os
|
|
6
7
|
import sys
|
|
7
8
|
import wave
|
|
8
9
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -47,16 +48,27 @@ def _install_mock_nemo(
|
|
|
47
48
|
monkeypatch.setitem(sys.modules, "nemo.collections.asr", asr_module)
|
|
48
49
|
|
|
49
50
|
|
|
50
|
-
def _install_mock_torch(
|
|
51
|
-
|
|
51
|
+
def _install_mock_torch(
|
|
52
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
53
|
+
*,
|
|
54
|
+
cuda_available: bool,
|
|
55
|
+
mps_available: bool = False,
|
|
56
|
+
) -> None:
|
|
57
|
+
"""Install a minimal mock torch module exposing device availability."""
|
|
52
58
|
|
|
53
59
|
class _Cuda:
|
|
54
60
|
@staticmethod
|
|
55
61
|
def is_available() -> bool:
|
|
56
62
|
return cuda_available
|
|
57
63
|
|
|
64
|
+
class _Mps:
|
|
65
|
+
@staticmethod
|
|
66
|
+
def is_available() -> bool:
|
|
67
|
+
return mps_available
|
|
68
|
+
|
|
58
69
|
torch_module: Any = ModuleType("torch")
|
|
59
70
|
torch_module.cuda = _Cuda()
|
|
71
|
+
torch_module.backends = SimpleNamespace(mps=_Mps())
|
|
60
72
|
monkeypatch.setitem(sys.modules, "torch", torch_module)
|
|
61
73
|
|
|
62
74
|
|
|
@@ -207,15 +219,27 @@ def test_resolve_device_auto_uses_cuda_when_available(
|
|
|
207
219
|
monkeypatch: pytest.MonkeyPatch,
|
|
208
220
|
) -> None:
|
|
209
221
|
"""Ensure auto device selection prefers CUDA when available."""
|
|
210
|
-
_install_mock_torch(monkeypatch, cuda_available=True)
|
|
222
|
+
_install_mock_torch(monkeypatch, cuda_available=True, mps_available=True)
|
|
211
223
|
assert backend._resolve_device("auto") == "cuda"
|
|
212
224
|
|
|
213
225
|
|
|
226
|
+
def test_resolve_device_auto_uses_mps_when_cuda_unavailable(
|
|
227
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
228
|
+
) -> None:
|
|
229
|
+
"""Ensure auto device selection uses Apple GPU when CUDA is unavailable."""
|
|
230
|
+
monkeypatch.delenv("PYTORCH_ENABLE_MPS_FALLBACK", raising=False)
|
|
231
|
+
monkeypatch.setattr(backend.sys, "platform", "darwin")
|
|
232
|
+
_install_mock_torch(monkeypatch, cuda_available=False, mps_available=True)
|
|
233
|
+
|
|
234
|
+
assert backend._resolve_device("auto") == "mps"
|
|
235
|
+
assert os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] == "1"
|
|
236
|
+
|
|
237
|
+
|
|
214
238
|
def test_resolve_device_auto_falls_back_to_cpu(
|
|
215
239
|
monkeypatch: pytest.MonkeyPatch,
|
|
216
240
|
) -> None:
|
|
217
241
|
"""Ensure auto device selection falls back to CPU."""
|
|
218
|
-
_install_mock_torch(monkeypatch, cuda_available=False)
|
|
242
|
+
_install_mock_torch(monkeypatch, cuda_available=False, mps_available=False)
|
|
219
243
|
assert backend._resolve_device("auto") == "cpu"
|
|
220
244
|
|
|
221
245
|
|
|
@@ -229,6 +253,16 @@ def test_resolve_device_explicit_cuda_requires_available_cuda(
|
|
|
229
253
|
backend._resolve_device("cuda:0")
|
|
230
254
|
|
|
231
255
|
|
|
256
|
+
def test_resolve_device_explicit_mps_requires_available_mps(
|
|
257
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
258
|
+
) -> None:
|
|
259
|
+
"""Ensure explicit MPS requests fail fast when MPS is unavailable."""
|
|
260
|
+
_install_mock_torch(monkeypatch, cuda_available=False, mps_available=False)
|
|
261
|
+
|
|
262
|
+
with pytest.raises(RuntimeError, match="MPS device requested"):
|
|
263
|
+
backend._resolve_device("mps")
|
|
264
|
+
|
|
265
|
+
|
|
232
266
|
def test_resolve_device_preserves_explicit_cpu(
|
|
233
267
|
monkeypatch: pytest.MonkeyPatch,
|
|
234
268
|
) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|