agent-cli 0.98.0__tar.gz → 0.98.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.98.0 → agent_cli-0.98.2}/PKG-INFO +1 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/deps.py +35 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/launchd.py +6 -4
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/cli.py +1 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/nemo.py +20 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/server/whisper.md +8 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +2 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +1 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +41 -1
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +11 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +48 -4
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/appcast.xml +32 -34
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_daemon.py +45 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_nemo_backend.py +38 -4
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude-plugin/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.cursorrules +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.dockerignore +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.env.example +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/logo.svg +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/release-drafter.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/renovate.json +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/release.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.gitignore +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.jscpd.json +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.prompts/docs-review.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/.prompts/pr-review.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/CLAUDE.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/LICENSE +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/__main__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_extras.json +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_overrides/nemo-whisper.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/nemo-whisper.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/_tools.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/cli.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/config.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/constants.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/process.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/common.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/services.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/opts.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/py.typed +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/common.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/docker-compose.yml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/CNAME +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/architecture/index.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/architecture/memory.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/architecture/rag.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/assistant.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/chat.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/config.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/daemon.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/dev.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/index.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/install-services.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/memory.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/server/index.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/speak.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/speakers.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/start-services.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/configuration.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/getting-started.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/index.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/docker.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/index.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/linux.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/macos.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/nixos.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/installation/windows.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/logo-clean.svg +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/docs/system-integration.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/justfile +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/README.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/pyproject.toml +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/reddit.md +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/shell.nix +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/conftest.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_audio.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_sse.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_vad.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/core/test_watch.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_project.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/install/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/install/test_extras.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_client.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_files.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_store.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/mocks/audio.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/mocks/llm.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/__init__.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_history.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_store.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_alignment.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_api.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_api_integration.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_asr.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_cli.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_config.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_diarization.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_env_vars.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_json_output.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_llm.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_macos_app.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_process_manager.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_server_tts.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_services.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_tools.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_tts.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_wake_word.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/uv.lock +0 -0
- {agent_cli-0.98.0 → agent_cli-0.98.2}/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.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>
|
|
@@ -283,7 +283,41 @@ def _is_uv_cmd(cmd: list[str]) -> bool:
|
|
|
283
283
|
|
|
284
284
|
def _uv_override_path(extra: str) -> Path:
|
|
285
285
|
"""Return the override file path for an extra."""
|
|
286
|
-
|
|
286
|
+
source = _OVERRIDES_DIR / f"{extra}.txt"
|
|
287
|
+
if not _path_contains_whitespace(source):
|
|
288
|
+
return source
|
|
289
|
+
# uv mishandles --overrides paths with spaces (for example, app bundles
|
|
290
|
+
# installed under "Application Support"), so hand it a copied no-space path.
|
|
291
|
+
return _materialize_uv_override(source)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def _path_contains_whitespace(path: Path) -> bool:
|
|
295
|
+
return any(character.isspace() for character in str(path))
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def _materialized_uv_overrides_dir() -> Path:
|
|
299
|
+
configured_dir = os.environ.get("AGENTCLI_UV_OVERRIDES_DIR")
|
|
300
|
+
if configured_dir:
|
|
301
|
+
configured_path = Path(configured_dir).expanduser()
|
|
302
|
+
if not _path_contains_whitespace(configured_path):
|
|
303
|
+
return configured_path
|
|
304
|
+
|
|
305
|
+
# Keep this outside AGENTCLI_APP_SUPPORT_DIR; that path usually contains a
|
|
306
|
+
# space on macOS and would reintroduce the launchd/uv parse failure.
|
|
307
|
+
return Path.home() / ".cache" / "agent-cli" / "uv-overrides"
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def _materialize_uv_override(source: Path) -> Path:
|
|
311
|
+
"""Copy a bundled override to a no-space path that uv can parse."""
|
|
312
|
+
target = _materialized_uv_overrides_dir() / source.name
|
|
313
|
+
try:
|
|
314
|
+
source_bytes = source.read_bytes()
|
|
315
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
316
|
+
if not target.exists() or target.read_bytes() != source_bytes:
|
|
317
|
+
target.write_bytes(source_bytes)
|
|
318
|
+
except OSError:
|
|
319
|
+
return source
|
|
320
|
+
return target
|
|
287
321
|
|
|
288
322
|
|
|
289
323
|
def _supports_uv_runtime_override(
|
|
@@ -88,16 +88,18 @@ def _get_recent_logs(service_name: str, num_lines: int = 10) -> list[str]:
|
|
|
88
88
|
|
|
89
89
|
lines: list[str] = []
|
|
90
90
|
|
|
91
|
-
# Prefer stdout as it has structured output (startup message, usage examples)
|
|
92
|
-
# stderr often has noisy warnings from libraries like PyTorch/Kokoro
|
|
93
91
|
for log_file in [stdout_log, stderr_log]:
|
|
94
92
|
if log_file.exists():
|
|
95
93
|
try:
|
|
96
94
|
with log_file.open() as f:
|
|
97
95
|
all_lines = f.readlines()
|
|
98
|
-
|
|
96
|
+
recent_lines = [line.rstrip() for line in all_lines[-num_lines:]]
|
|
97
|
+
if not recent_lines:
|
|
98
|
+
continue
|
|
99
99
|
if lines:
|
|
100
|
-
|
|
100
|
+
lines.append("")
|
|
101
|
+
lines.append(f"==> {log_file.name} <==")
|
|
102
|
+
lines.extend(recent_lines)
|
|
101
103
|
except OSError:
|
|
102
104
|
continue
|
|
103
105
|
|
|
@@ -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):
|
|
@@ -360,8 +360,10 @@ struct AgentRuntime {
|
|
|
360
360
|
var contents = "runtimeMode=\(modeName)\npackageSource=\(agentCLIPackageSource)\n"
|
|
361
361
|
if runtimeMode == .bundled {
|
|
362
362
|
let backend = TranscriptionSettings.selectedBackend(userDefaults: userDefaults)
|
|
363
|
+
let ttlSeconds = TranscriptionSettings.selectedModelTTLSeconds(userDefaults: userDefaults)
|
|
363
364
|
contents += "transcriptionBackend=\(backend.rawValue)\n"
|
|
364
365
|
contents += "transcriptionModel=\(TranscriptionSettings.selectedModelName(userDefaults: userDefaults))\n"
|
|
366
|
+
contents += "transcriptionModelTTLSeconds=\(ttlSeconds)\n"
|
|
365
367
|
}
|
|
366
368
|
return contents
|
|
367
369
|
}
|
{agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift
RENAMED
|
@@ -5,7 +5,7 @@ import SwiftUI
|
|
|
5
5
|
final class SettingsWindowController {
|
|
6
6
|
static let shared = SettingsWindowController()
|
|
7
7
|
|
|
8
|
-
private static let contentSize = NSSize(width: 460, height:
|
|
8
|
+
private static let contentSize = NSSize(width: 460, height: 680)
|
|
9
9
|
|
|
10
10
|
private var window: NSWindow?
|
|
11
11
|
|
|
@@ -285,6 +285,8 @@ struct SettingsView: View {
|
|
|
285
285
|
private var transcriptionBackend = TranscriptionBackend.whisper.rawValue
|
|
286
286
|
@AppStorage(TranscriptionSettings.transcriptionModelKey)
|
|
287
287
|
private var transcriptionModel = TranscriptionBackend.whisper.defaultModelName
|
|
288
|
+
@AppStorage(TranscriptionSettings.transcriptionModelTTLSecondsKey)
|
|
289
|
+
private var transcriptionModelTTLSeconds = TranscriptionSettings.defaultModelTTLSeconds
|
|
288
290
|
@AppStorage(TranscriptionSettings.transcriptionExtraInstructionsKey)
|
|
289
291
|
private var transcriptionExtraInstructions = ""
|
|
290
292
|
@State private var shortcutRevision = 0
|
|
@@ -335,13 +337,31 @@ struct SettingsView: View {
|
|
|
335
337
|
}
|
|
336
338
|
.pickerStyle(.menu)
|
|
337
339
|
.disabled(useUserInstalledAgentCLI)
|
|
340
|
+
|
|
341
|
+
Stepper(
|
|
342
|
+
value: Binding(
|
|
343
|
+
get: { max(0, transcriptionModelTTLSeconds) },
|
|
344
|
+
set: { transcriptionModelTTLSeconds = max(0, $0) }
|
|
345
|
+
),
|
|
346
|
+
in: 0...86_400,
|
|
347
|
+
step: 60
|
|
348
|
+
) {
|
|
349
|
+
HStack {
|
|
350
|
+
Text("Model TTL")
|
|
351
|
+
Spacer()
|
|
352
|
+
Text(Self.formatTTLSeconds(transcriptionModelTTLSeconds))
|
|
353
|
+
.foregroundStyle(.secondary)
|
|
354
|
+
.monospacedDigit()
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
.disabled(useUserInstalledAgentCLI)
|
|
338
358
|
} header: {
|
|
339
359
|
Text("Voice Service")
|
|
340
360
|
} footer: {
|
|
341
361
|
Text(
|
|
342
362
|
useUserInstalledAgentCLI
|
|
343
363
|
? "Disabled while User-Installed agent-cli is active."
|
|
344
|
-
: "
|
|
364
|
+
: "TTL is how long the selected model lives in memory after the last transcription. Set to 0 to keep it loaded until the voice service restarts."
|
|
345
365
|
)
|
|
346
366
|
}
|
|
347
367
|
|
|
@@ -426,6 +446,26 @@ struct SettingsView: View {
|
|
|
426
446
|
guard backend.modelOption(named: transcriptionModel) == nil else { return }
|
|
427
447
|
transcriptionModel = backend.defaultModelName
|
|
428
448
|
}
|
|
449
|
+
|
|
450
|
+
private static func formatTTLSeconds(_ seconds: Int) -> String {
|
|
451
|
+
let clampedSeconds = max(0, seconds)
|
|
452
|
+
if clampedSeconds == 0 {
|
|
453
|
+
return "Never"
|
|
454
|
+
}
|
|
455
|
+
if clampedSeconds < 60 {
|
|
456
|
+
return "\(clampedSeconds)s"
|
|
457
|
+
}
|
|
458
|
+
if clampedSeconds < 3_600 {
|
|
459
|
+
return "\(clampedSeconds / 60)m"
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
let hours = clampedSeconds / 3_600
|
|
463
|
+
let minutes = (clampedSeconds % 3_600) / 60
|
|
464
|
+
if minutes == 0 {
|
|
465
|
+
return "\(hours)h"
|
|
466
|
+
}
|
|
467
|
+
return "\(hours)h \(minutes)m"
|
|
468
|
+
}
|
|
429
469
|
}
|
|
430
470
|
|
|
431
471
|
struct ShortcutRecorderRow: View {
|
{agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift
RENAMED
|
@@ -61,6 +61,8 @@ enum TranscriptionSettings {
|
|
|
61
61
|
static let transcriptionExtraInstructionsKey = "transcriptionExtraInstructions"
|
|
62
62
|
static let transcriptionBackendKey = "transcriptionBackend"
|
|
63
63
|
static let transcriptionModelKey = "transcriptionModel"
|
|
64
|
+
static let transcriptionModelTTLSecondsKey = "transcriptionModelTTLSeconds"
|
|
65
|
+
static let defaultModelTTLSeconds = 300
|
|
64
66
|
|
|
65
67
|
static var extraInstructions: String {
|
|
66
68
|
UserDefaults.standard.string(forKey: transcriptionExtraInstructionsKey) ?? ""
|
|
@@ -77,6 +79,13 @@ enum TranscriptionSettings {
|
|
|
77
79
|
return backend.modelOption(named: storedModelName)?.id ?? backend.defaultModelName
|
|
78
80
|
}
|
|
79
81
|
|
|
82
|
+
static func selectedModelTTLSeconds(userDefaults: UserDefaults = .standard) -> Int {
|
|
83
|
+
guard let storedValue = userDefaults.object(forKey: transcriptionModelTTLSecondsKey) as? NSNumber else {
|
|
84
|
+
return defaultModelTTLSeconds
|
|
85
|
+
}
|
|
86
|
+
return max(0, storedValue.intValue)
|
|
87
|
+
}
|
|
88
|
+
|
|
80
89
|
static func whisperDaemonInstallArguments(userDefaults: UserDefaults = .standard) -> [String] {
|
|
81
90
|
let backend = selectedBackend(userDefaults: userDefaults)
|
|
82
91
|
return [
|
|
@@ -89,6 +98,8 @@ enum TranscriptionSettings {
|
|
|
89
98
|
backend.cliBackend,
|
|
90
99
|
"--model",
|
|
91
100
|
selectedModelName(userDefaults: userDefaults),
|
|
101
|
+
"--ttl",
|
|
102
|
+
"\(selectedModelTTLSeconds(userDefaults: userDefaults))",
|
|
92
103
|
]
|
|
93
104
|
}
|
|
94
105
|
}
|
{agent_cli-0.98.0 → agent_cli-0.98.2}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift
RENAMED
|
@@ -64,12 +64,32 @@ final class AgentCommandTests: XCTestCase {
|
|
|
64
64
|
"daemon", "install", "whisper", "-y", "--",
|
|
65
65
|
"--backend", "nemo",
|
|
66
66
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
67
|
+
"--ttl", "86400",
|
|
67
68
|
]
|
|
68
69
|
),
|
|
69
70
|
[
|
|
70
71
|
"daemon", "install", "whisper", "-y", "--",
|
|
71
72
|
"--backend", "nemo",
|
|
72
73
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
74
|
+
"--ttl", "86400",
|
|
75
|
+
]
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
func testTranscriptionDaemonArgumentsIncludeConfiguredTTL() {
|
|
80
|
+
let defaults = UserDefaults(suiteName: "AgentCLITests.transcription-ttl")!
|
|
81
|
+
defaults.removePersistentDomain(forName: "AgentCLITests.transcription-ttl")
|
|
82
|
+
defaults.set("nemo", forKey: TranscriptionSettings.transcriptionBackendKey)
|
|
83
|
+
defaults.set("parakeet-unified-en-0.6b", forKey: TranscriptionSettings.transcriptionModelKey)
|
|
84
|
+
defaults.set(86400, forKey: TranscriptionSettings.transcriptionModelTTLSecondsKey)
|
|
85
|
+
|
|
86
|
+
XCTAssertEqual(
|
|
87
|
+
TranscriptionSettings.whisperDaemonInstallArguments(userDefaults: defaults),
|
|
88
|
+
[
|
|
89
|
+
"daemon", "install", "whisper", "-y", "--",
|
|
90
|
+
"--backend", "nemo",
|
|
91
|
+
"--model", "parakeet-unified-en-0.6b",
|
|
92
|
+
"--ttl", "86400",
|
|
73
93
|
]
|
|
74
94
|
)
|
|
75
95
|
}
|
|
@@ -220,7 +240,12 @@ final class AgentCommandTests: XCTestCase {
|
|
|
220
240
|
userDefaults: defaults,
|
|
221
241
|
processRunner: { _, arguments, _ in
|
|
222
242
|
processArguments.append(arguments)
|
|
223
|
-
if arguments == [
|
|
243
|
+
if arguments == [
|
|
244
|
+
"daemon", "install", "whisper", "-y", "--",
|
|
245
|
+
"--backend", "auto",
|
|
246
|
+
"--model", "large-v3",
|
|
247
|
+
"--ttl", "300",
|
|
248
|
+
] {
|
|
224
249
|
installedWhisper = true
|
|
225
250
|
return CommandResult(exitCode: 0, output: "Installed and started")
|
|
226
251
|
}
|
|
@@ -241,7 +266,12 @@ final class AgentCommandTests: XCTestCase {
|
|
|
241
266
|
XCTAssertEqual(
|
|
242
267
|
processArguments,
|
|
243
268
|
[
|
|
244
|
-
[
|
|
269
|
+
[
|
|
270
|
+
"daemon", "install", "whisper", "-y", "--",
|
|
271
|
+
"--backend", "auto",
|
|
272
|
+
"--model", "large-v3",
|
|
273
|
+
"--ttl", "300",
|
|
274
|
+
],
|
|
245
275
|
]
|
|
246
276
|
)
|
|
247
277
|
XCTAssertEqual(phases, [.installingVoiceService, .waitingForVoiceService])
|
|
@@ -277,7 +307,12 @@ final class AgentCommandTests: XCTestCase {
|
|
|
277
307
|
userDefaults: defaults,
|
|
278
308
|
processRunner: { _, arguments, _ in
|
|
279
309
|
processArguments.append(arguments)
|
|
280
|
-
if arguments == [
|
|
310
|
+
if arguments == [
|
|
311
|
+
"daemon", "install", "whisper", "-y", "--",
|
|
312
|
+
"--backend", "auto",
|
|
313
|
+
"--model", "large-v3",
|
|
314
|
+
"--ttl", "300",
|
|
315
|
+
] {
|
|
281
316
|
installedWhisper = true
|
|
282
317
|
return CommandResult(exitCode: 0, output: "Installed and started")
|
|
283
318
|
}
|
|
@@ -297,7 +332,12 @@ final class AgentCommandTests: XCTestCase {
|
|
|
297
332
|
XCTAssertEqual(
|
|
298
333
|
processArguments,
|
|
299
334
|
[
|
|
300
|
-
[
|
|
335
|
+
[
|
|
336
|
+
"daemon", "install", "whisper", "-y", "--",
|
|
337
|
+
"--backend", "auto",
|
|
338
|
+
"--model", "large-v3",
|
|
339
|
+
"--ttl", "300",
|
|
340
|
+
],
|
|
301
341
|
]
|
|
302
342
|
)
|
|
303
343
|
}
|
|
@@ -339,6 +379,7 @@ final class AgentCommandTests: XCTestCase {
|
|
|
339
379
|
"daemon", "install", "whisper", "-y", "--",
|
|
340
380
|
"--backend", "nemo",
|
|
341
381
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
382
|
+
"--ttl", "300",
|
|
342
383
|
] {
|
|
343
384
|
installedWhisper = true
|
|
344
385
|
return CommandResult(exitCode: 0, output: "Installed and started")
|
|
@@ -363,6 +404,7 @@ final class AgentCommandTests: XCTestCase {
|
|
|
363
404
|
"daemon", "install", "whisper", "-y", "--",
|
|
364
405
|
"--backend", "nemo",
|
|
365
406
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
407
|
+
"--ttl", "300",
|
|
366
408
|
],
|
|
367
409
|
]
|
|
368
410
|
)
|
|
@@ -413,6 +455,7 @@ final class AgentCommandTests: XCTestCase {
|
|
|
413
455
|
"daemon", "install", "whisper", "-y", "--",
|
|
414
456
|
"--backend", "nemo",
|
|
415
457
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
458
|
+
"--ttl", "300",
|
|
416
459
|
] {
|
|
417
460
|
installedWhisper = true
|
|
418
461
|
return CommandResult(exitCode: 0, output: "Installed and started")
|
|
@@ -438,6 +481,7 @@ final class AgentCommandTests: XCTestCase {
|
|
|
438
481
|
"daemon", "install", "whisper", "-y", "--",
|
|
439
482
|
"--backend", "nemo",
|
|
440
483
|
"--model", "parakeet-tdt-0.6b-v3",
|
|
484
|
+
"--ttl", "300",
|
|
441
485
|
],
|
|
442
486
|
]
|
|
443
487
|
)
|
|
@@ -4,6 +4,38 @@
|
|
|
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>
|
|
22
|
+
<item>
|
|
23
|
+
<title>0.98.0</title>
|
|
24
|
+
<pubDate>Thu, 04 Jun 2026 16:25:34 +0000</pubDate>
|
|
25
|
+
<link>https://github.com/basnijholt/agent-cli</link>
|
|
26
|
+
<sparkle:version>188</sparkle:version>
|
|
27
|
+
<sparkle:shortVersionString>0.98.0</sparkle:shortVersionString>
|
|
28
|
+
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
29
|
+
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
30
|
+
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
31
|
+
|
|
32
|
+
* Document NeMo Parakeet setup (#573) @basnijholt
|
|
33
|
+
* Add macOS transcription backend picker (#574) @basnijholt
|
|
34
|
+
* Reference upstream NeMo validation_ds fix (#577) @basnijholt
|
|
35
|
+
|
|
36
|
+
]]></description>
|
|
37
|
+
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.98.0/AgentCLI.zip" length="22891739" type="application/octet-stream" sparkle:edSignature="tC7V5Z+r9fyFe5GvISxKB2ExZJoyx8G7Qt/Zqnb1ELJcU6lm+0KSN3tx7d/BBm1Dbl8eKRiCorOATkTKE2HSCw=="/>
|
|
38
|
+
</item>
|
|
7
39
|
<item>
|
|
8
40
|
<title>0.97.2</title>
|
|
9
41
|
<pubDate>Thu, 04 Jun 2026 07:34:52 +0000</pubDate>
|
|
@@ -137,39 +169,5 @@
|
|
|
137
169
|
]]></description>
|
|
138
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=="/>
|
|
139
171
|
</item>
|
|
140
|
-
<item>
|
|
141
|
-
<title>0.96.5</title>
|
|
142
|
-
<pubDate>Fri, 29 May 2026 16:40:33 +0000</pubDate>
|
|
143
|
-
<link>https://github.com/basnijholt/agent-cli</link>
|
|
144
|
-
<sparkle:version>179</sparkle:version>
|
|
145
|
-
<sparkle:shortVersionString>0.96.5</sparkle:shortVersionString>
|
|
146
|
-
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
147
|
-
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
148
|
-
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
149
|
-
|
|
150
|
-
* Fix bare Fn shortcut detection on macOS (#554) @marcellaholm
|
|
151
|
-
* Fix macOS setup menu bar icon (#555) @marcellaholm
|
|
152
|
-
* Use purr for recording release sound (#556) @basnijholt
|
|
153
|
-
* Boost quiet waveform levels (#553) @basnijholt
|
|
154
|
-
|
|
155
|
-
]]></description>
|
|
156
|
-
<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=="/>
|
|
157
|
-
</item>
|
|
158
|
-
<item>
|
|
159
|
-
<title>0.96.4</title>
|
|
160
|
-
<pubDate>Fri, 29 May 2026 14:59:58 +0000</pubDate>
|
|
161
|
-
<link>https://github.com/basnijholt/agent-cli</link>
|
|
162
|
-
<sparkle:version>178</sparkle:version>
|
|
163
|
-
<sparkle:shortVersionString>0.96.4</sparkle:shortVersionString>
|
|
164
|
-
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
165
|
-
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
166
|
-
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
167
|
-
|
|
168
|
-
* Cache user CLI runtime checks (#552) @basnijholt
|
|
169
|
-
* Clean up macOS menu activity abstractions (#551) @basnijholt
|
|
170
|
-
|
|
171
|
-
]]></description>
|
|
172
|
-
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.96.4/AgentCLI.zip" length="22738926" type="application/octet-stream" sparkle:edSignature="Ro8WhN/AVGWxCvG/C6//ISayy5lo5KiOJhvpVQdJKLBsPdZv96HmtZx7G2qeVG87sAmcyIR/84pW4zwzCR7lAA=="/>
|
|
173
|
-
</item>
|
|
174
172
|
</channel>
|
|
175
173
|
</rss>
|
|
@@ -12,6 +12,8 @@ import pytest
|
|
|
12
12
|
from typer.testing import CliRunner
|
|
13
13
|
|
|
14
14
|
from agent_cli.cli import app
|
|
15
|
+
from agent_cli.core import deps
|
|
16
|
+
from agent_cli.install import launchd as launchd_module
|
|
15
17
|
from agent_cli.install.launchd import _generate_plist as launchd_generate_plist
|
|
16
18
|
from agent_cli.install.launchd import _get_log_command as launchd_get_log_command
|
|
17
19
|
from agent_cli.install.launchd import _get_service_status as launchd_get_service_status
|
|
@@ -158,6 +160,34 @@ class TestServiceConfig:
|
|
|
158
160
|
assert "agent-cli[server,nemo-whisper,wyoming]" in cmd
|
|
159
161
|
assert cmd[cmd.index("--python") + 1] == "3.13"
|
|
160
162
|
|
|
163
|
+
def test_build_service_command_materializes_nemo_override_without_spaces(
|
|
164
|
+
self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
165
|
+
) -> None:
|
|
166
|
+
"""UV --overrides receives a copied no-space path for bundled app installs."""
|
|
167
|
+
uv_path = tmp_path / "uv"
|
|
168
|
+
uv_path.touch()
|
|
169
|
+
source_dir = tmp_path / "Application Support" / "AgentCLI" / "_overrides"
|
|
170
|
+
source_dir.mkdir(parents=True)
|
|
171
|
+
source_override = source_dir / "nemo-whisper.txt"
|
|
172
|
+
source_override.write_text("kaldialign==0.9.3\n")
|
|
173
|
+
materialized_dir = tmp_path / "agentcli-overrides"
|
|
174
|
+
monkeypatch.setattr(deps, "_OVERRIDES_DIR", source_dir)
|
|
175
|
+
monkeypatch.setattr(deps, "_find_runtime_uv", lambda: str(uv_path))
|
|
176
|
+
monkeypatch.setenv("AGENTCLI_UV_OVERRIDES_DIR", str(materialized_dir))
|
|
177
|
+
|
|
178
|
+
cmd = build_service_command(
|
|
179
|
+
SERVICES["whisper"],
|
|
180
|
+
uv_path,
|
|
181
|
+
use_macos_extra=True,
|
|
182
|
+
extra_command_args=["--backend", "nemo"],
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
override_path = Path(cmd[cmd.index("--overrides") + 1])
|
|
186
|
+
assert override_path == materialized_dir / "nemo-whisper.txt"
|
|
187
|
+
assert " " not in override_path.as_posix()
|
|
188
|
+
assert override_path.read_text() == source_override.read_text()
|
|
189
|
+
assert "agent-cli[server,nemo-whisper,wyoming]" in cmd
|
|
190
|
+
|
|
161
191
|
def test_build_service_command_uses_app_package_source(
|
|
162
192
|
self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
163
193
|
) -> None:
|
|
@@ -763,6 +793,21 @@ class TestLaunchdModule:
|
|
|
763
793
|
|
|
764
794
|
assert plist["ProgramArguments"][-4:] == ["--model", "small", "--port", "10311"]
|
|
765
795
|
|
|
796
|
+
def test_launchd_recent_logs_include_stdout_and_stderr(
|
|
797
|
+
self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
798
|
+
) -> None:
|
|
799
|
+
"""Status output should include stderr when stdout has stale startup logs."""
|
|
800
|
+
(tmp_path / "stdout.log").write_text("old large-v3 startup\n")
|
|
801
|
+
(tmp_path / "stderr.log").write_text("error: File not found: `Library/Application`\n")
|
|
802
|
+
monkeypatch.setattr(launchd_module, "_get_log_dir", lambda _service_name: tmp_path)
|
|
803
|
+
|
|
804
|
+
lines = launchd_module._get_recent_logs("whisper", 5)
|
|
805
|
+
|
|
806
|
+
assert "==> stdout.log <==" in lines
|
|
807
|
+
assert "old large-v3 startup" in lines
|
|
808
|
+
assert "==> stderr.log <==" in lines
|
|
809
|
+
assert "error: File not found: `Library/Application`" in lines
|
|
810
|
+
|
|
766
811
|
@patch("subprocess.run")
|
|
767
812
|
def test_launchd_get_service_status_not_installed(
|
|
768
813
|
self,
|
|
@@ -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
|