agent-cli 0.97.2__tar.gz → 0.98.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_cli-0.97.2 → agent_cli-0.98.0}/PKG-INFO +1 -1
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/service_config.py +54 -1
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/nemo.py +1 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/install-extras.md +13 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/server/index.md +1 -1
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/server/whisper.md +64 -5
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/configuration.md +32 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +13 -2
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +7 -1
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +11 -2
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +44 -0
- agent_cli-0.98.0/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +94 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +217 -3
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/appcast.xml +15 -16
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_daemon.py +15 -0
- agent_cli-0.97.2/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -9
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude-plugin/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.cursorrules +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.dockerignore +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.env.example +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/logo.svg +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/release-drafter.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/renovate.json +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/release.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.gitignore +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.jscpd.json +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.prompts/docs-review.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/.prompts/pr-review.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/CLAUDE.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/LICENSE +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/__main__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_extras.json +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_overrides/nemo-whisper.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/nemo-whisper.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/_tools.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/config.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/constants.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/process.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/common.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/services.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/opts.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/py.typed +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/common.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/docker-compose.yml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/CNAME +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/architecture/index.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/architecture/memory.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/architecture/rag.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/assistant.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/chat.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/config.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/daemon.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/dev.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/index.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/install-services.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/memory.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/speak.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/speakers.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/start-services.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/getting-started.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/index.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/docker.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/index.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/linux.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/macos.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/nixos.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/installation/windows.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/logo-clean.svg +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/docs/system-integration.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/justfile +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/README.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/pyproject.toml +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/reddit.md +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/shell.nix +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/conftest.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_audio.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_sse.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_vad.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/core/test_watch.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_project.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/install/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/install/test_extras.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_client.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_files.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_store.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/mocks/audio.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/mocks/llm.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/__init__.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_history.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_store.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_alignment.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_api.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_api_integration.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_asr.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_cli.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_config.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_diarization.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_env_vars.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_json_output.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_llm.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_macos_app.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_nemo_backend.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_process_manager.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_server_tts.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_services.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_tools.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_tts.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_wake_word.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/uv.lock +0 -0
- {agent_cli-0.97.2 → agent_cli-0.98.0}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.98.0
|
|
4
4
|
Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
|
|
5
5
|
Project-URL: Homepage, https://github.com/basnijholt/agent-cli
|
|
6
6
|
Author-email: Bas Nijholt <bas@nijho.lt>
|
|
@@ -10,6 +10,8 @@ from dataclasses import dataclass
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import TYPE_CHECKING, NamedTuple
|
|
12
12
|
|
|
13
|
+
from agent_cli.core.deps import _uv_tool_extra_args
|
|
14
|
+
|
|
13
15
|
if TYPE_CHECKING:
|
|
14
16
|
from collections.abc import Callable
|
|
15
17
|
|
|
@@ -35,6 +37,12 @@ class ServiceConfig:
|
|
|
35
37
|
|
|
36
38
|
# TTS services that are mutually exclusive (same ports)
|
|
37
39
|
TTS_SERVICES = ("tts-kokoro", "tts-piper")
|
|
40
|
+
_WHISPER_BACKEND_EXTRAS = {
|
|
41
|
+
"faster-whisper",
|
|
42
|
+
"mlx-whisper",
|
|
43
|
+
"whisper-transformers",
|
|
44
|
+
"nemo-whisper",
|
|
45
|
+
}
|
|
38
46
|
|
|
39
47
|
|
|
40
48
|
def detect_preferred_tts() -> str:
|
|
@@ -127,14 +135,20 @@ def build_service_command(
|
|
|
127
135
|
) -> list[str]:
|
|
128
136
|
"""Build the command args for running a service via uv tool run."""
|
|
129
137
|
extra = (service.macos_extra or service.extra) if use_macos_extra else service.extra
|
|
138
|
+
extra = _service_extra_for_command(service, extra, extra_command_args)
|
|
139
|
+
extras = _split_extras(extra)
|
|
130
140
|
package_source = os.environ.get("AGENTCLI_PACKAGE_SOURCE", "agent-cli")
|
|
131
141
|
|
|
132
142
|
args = [str(uv_path), "tool", "run"]
|
|
133
143
|
|
|
134
144
|
# Add python version constraint (skip on macOS when using macos_extra,
|
|
135
145
|
# since macos_extra typically avoids deps that lack py3.14 wheels)
|
|
136
|
-
|
|
146
|
+
uses_macos_extra_without_python_pin = (
|
|
147
|
+
use_macos_extra and service.macos_extra and "nemo-whisper" not in extras
|
|
148
|
+
)
|
|
149
|
+
if service.python_version and not uses_macos_extra_without_python_pin:
|
|
137
150
|
args.extend(["--python", service.python_version])
|
|
151
|
+
args.extend(_uv_tool_extra_args(extras))
|
|
138
152
|
|
|
139
153
|
# Build the command: either custom command path or default "server <name>"
|
|
140
154
|
cmd_path = service.command or ["server", service.name]
|
|
@@ -152,6 +166,45 @@ def build_service_command(
|
|
|
152
166
|
return args
|
|
153
167
|
|
|
154
168
|
|
|
169
|
+
def _service_extra_for_command(
|
|
170
|
+
service: ServiceConfig,
|
|
171
|
+
extra: str,
|
|
172
|
+
extra_command_args: list[str] | None,
|
|
173
|
+
) -> str:
|
|
174
|
+
"""Adjust service extras when custom daemon args select a specific backend."""
|
|
175
|
+
if service.name != "whisper" or not _uses_nemo_backend(extra_command_args):
|
|
176
|
+
return extra
|
|
177
|
+
|
|
178
|
+
parts = _split_extras(extra)
|
|
179
|
+
result: list[str] = []
|
|
180
|
+
inserted = False
|
|
181
|
+
for part in parts:
|
|
182
|
+
if part in _WHISPER_BACKEND_EXTRAS:
|
|
183
|
+
if not inserted:
|
|
184
|
+
result.append("nemo-whisper")
|
|
185
|
+
inserted = True
|
|
186
|
+
continue
|
|
187
|
+
result.append(part)
|
|
188
|
+
|
|
189
|
+
if not inserted:
|
|
190
|
+
result.append("nemo-whisper")
|
|
191
|
+
return ",".join(result)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def _split_extras(extra: str) -> list[str]:
|
|
195
|
+
return [part.strip() for part in extra.split(",") if part.strip()]
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def _uses_nemo_backend(extra_command_args: list[str] | None) -> bool:
|
|
199
|
+
args = extra_command_args or []
|
|
200
|
+
for index, arg in enumerate(args):
|
|
201
|
+
if arg in {"--backend", "-b"} and index + 1 < len(args):
|
|
202
|
+
return args[index + 1] == "nemo"
|
|
203
|
+
if arg in {"--backend=nemo", "-b=nemo"}:
|
|
204
|
+
return True
|
|
205
|
+
return False
|
|
206
|
+
|
|
207
|
+
|
|
155
208
|
def find_uv(extra_paths: list[Path] | None = None) -> Path | None:
|
|
156
209
|
"""Find uv executable, preferring system paths over virtualenv."""
|
|
157
210
|
explicit_uv = os.environ.get("AGENTCLI_UV_PATH")
|
|
@@ -83,3 +83,16 @@ agent-cli install-extras rag memory vad
|
|
|
83
83
|
# Install all extras
|
|
84
84
|
agent-cli install-extras --all
|
|
85
85
|
```
|
|
86
|
+
|
|
87
|
+
## NeMo / Parakeet
|
|
88
|
+
|
|
89
|
+
Use the runtime installer for NVIDIA NeMo support:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
agent-cli install-extras nemo-whisper wyoming
|
|
93
|
+
agent-cli server whisper --backend nemo
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
This matters on Python 3.14. Plain `pip install "agent-cli[nemo-whisper]"` uses
|
|
97
|
+
the published extra metadata, while `agent-cli install-extras nemo-whisper` can
|
|
98
|
+
apply agent-cli's temporary uv override for the pinned NeMo Git build.
|
|
@@ -57,7 +57,7 @@ While Faster Whisper, Piper, and Kokoro are all available as standalone servers,
|
|
|
57
57
|
|
|
58
58
|
2. **TTL-based memory management** - Like [LlamaSwap](https://github.com/mostlygeek/llama-swap), models load on-demand and automatically unload after idle periods. Run voice services 24/7 without permanently consuming RAM/VRAM - memory is freed when you're not actively using speech features.
|
|
59
59
|
|
|
60
|
-
3. **Multi-platform acceleration** - Whisper automatically uses the optimal backend: [MLX Whisper](https://github.com/ml-explore/mlx-examples/tree/main/whisper) on Apple Silicon for native Metal acceleration, [Faster Whisper](https://github.com/SYSTRAN/faster-whisper) on Linux/CUDA for GPU acceleration.
|
|
60
|
+
3. **Multi-platform acceleration** - Whisper automatically uses the optimal backend: [MLX Whisper](https://github.com/ml-explore/mlx-examples/tree/main/whisper) on Apple Silicon for native Metal acceleration, [Faster Whisper](https://github.com/SYSTRAN/faster-whisper) on Linux/CUDA for GPU acceleration, and [NVIDIA NeMo](https://github.com/NVIDIA/NeMo) for Parakeet models.
|
|
61
61
|
|
|
62
62
|
4. **Unified configuration** - Consistent CLI interface, environment variables, and Docker setup across all services.
|
|
63
63
|
|
|
@@ -34,6 +34,12 @@ Run a local ASR server with automatic backend selection based on your platform:
|
|
|
34
34
|
> --default-language en
|
|
35
35
|
> ```
|
|
36
36
|
>
|
|
37
|
+
> NVIDIA Parakeet via NeMo:
|
|
38
|
+
> ```bash
|
|
39
|
+
> agent-cli install-extras nemo-whisper wyoming
|
|
40
|
+
> agent-cli server whisper --backend nemo
|
|
41
|
+
> ```
|
|
42
|
+
>
|
|
37
43
|
> Use it with any OpenAI-compatible client, or configure agent-cli to use it - see [Configuration](../../configuration.md#using-local-whisper-server).
|
|
38
44
|
|
|
39
45
|
## Features
|
|
@@ -74,6 +80,12 @@ agent-cli server whisper --device cpu
|
|
|
74
80
|
agent-cli server whisper --model large-v3 --download-only
|
|
75
81
|
|
|
76
82
|
# Run NVIDIA Parakeet via NeMo
|
|
83
|
+
agent-cli server whisper --backend nemo
|
|
84
|
+
|
|
85
|
+
# Keep Parakeet loaded after first request (avoids repeated load cost)
|
|
86
|
+
agent-cli server whisper --backend nemo --ttl 0
|
|
87
|
+
|
|
88
|
+
# Run a specific Parakeet model instead of the NeMo default
|
|
77
89
|
agent-cli server whisper --backend nemo --model parakeet-tdt-0.6b-v3
|
|
78
90
|
|
|
79
91
|
# Preload model at startup and wait until ready
|
|
@@ -287,15 +299,62 @@ Notes for Cohere Transcribe:
|
|
|
287
299
|
|
|
288
300
|
### NVIDIA NeMo (Parakeet)
|
|
289
301
|
|
|
290
|
-
|
|
302
|
+
The NeMo backend runs NVIDIA Parakeet models behind the same OpenAI-compatible
|
|
303
|
+
HTTP API and Wyoming protocol as the other Whisper backends. With `--backend
|
|
304
|
+
nemo`, the default model is `parakeet-unified-en-0.6b`.
|
|
305
|
+
|
|
306
|
+
Install the runtime dependencies:
|
|
291
307
|
|
|
292
308
|
```bash
|
|
293
|
-
|
|
294
|
-
|
|
309
|
+
agent-cli install-extras nemo-whisper wyoming
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Start the server:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
agent-cli server whisper --backend nemo
|
|
295
316
|
```
|
|
296
317
|
|
|
297
|
-
|
|
298
|
-
|
|
318
|
+
Use it from agent-cli through either protocol:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# OpenAI-compatible HTTP API
|
|
322
|
+
ag transcribe \
|
|
323
|
+
--asr-provider openai \
|
|
324
|
+
--asr-openai-base-url http://localhost:10301/v1
|
|
325
|
+
|
|
326
|
+
# Wyoming protocol
|
|
327
|
+
ag transcribe \
|
|
328
|
+
--asr-provider wyoming \
|
|
329
|
+
--asr-wyoming-ip localhost \
|
|
330
|
+
--asr-wyoming-port 10300
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Run it as a daemon with persistent arguments:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
agent-cli daemon install whisper -y -- \
|
|
337
|
+
--backend nemo \
|
|
338
|
+
--model parakeet-unified-en-0.6b \
|
|
339
|
+
--ttl 0
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Notes for NeMo/Parakeet:
|
|
343
|
+
|
|
344
|
+
- `--backend nemo` defaults to `parakeet-unified-en-0.6b`.
|
|
345
|
+
- `--backend auto` switches to NeMo when any requested model name is a Parakeet model.
|
|
346
|
+
- NeMo uses CUDA when available and CPU otherwise; it does not use MLX/MPS on Apple Silicon.
|
|
347
|
+
- First request can be slow because the model loads lazily. Use `--preload` to load at startup, or `--ttl 0` to keep it loaded after the first request.
|
|
348
|
+
- REST uploads can be WAV, MP3, M4A, FLAC, OGG, AAC, or WebM when `ffmpeg` is available.
|
|
349
|
+
- NeMo models are currently transcription-only in this server. Requests to `/v1/audio/translations` return `400`.
|
|
350
|
+
- Segment formats (`verbose_json`, `srt`, `vtt`) require timestamp output from the selected NeMo model.
|
|
351
|
+
|
|
352
|
+
Python 3.14 note:
|
|
353
|
+
|
|
354
|
+
On Python 3.14, the plain published extra path does not apply agent-cli's NeMo
|
|
355
|
+
override. The `agent-cli install-extras nemo-whisper` path is uv-aware and can
|
|
356
|
+
apply agent-cli's temporary pinned NeMo Git install plus override file. Prefer it
|
|
357
|
+
over plain `pip install "agent-cli[nemo-whisper]"` on Python 3.14.
|
|
299
358
|
|
|
300
359
|
### Docker
|
|
301
360
|
|
|
@@ -241,6 +241,7 @@ Add to your config file so all commands use your local server:
|
|
|
241
241
|
```toml
|
|
242
242
|
[defaults]
|
|
243
243
|
asr_provider = "wyoming"
|
|
244
|
+
asr_wyoming_ip = "localhost"
|
|
244
245
|
asr_wyoming_port = 10300
|
|
245
246
|
```
|
|
246
247
|
|
|
@@ -260,6 +261,37 @@ Now just run `agent-cli transcribe` - it automatically uses your local server.
|
|
|
260
261
|
> **OpenAI SDK users:** The server also exposes an OpenAI-compatible API on port 10301.
|
|
261
262
|
> See [server whisper docs](commands/server/whisper.md) for all options.
|
|
262
263
|
|
|
264
|
+
### NVIDIA Parakeet via NeMo
|
|
265
|
+
|
|
266
|
+
Start a Parakeet server:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
agent-cli install-extras nemo-whisper wyoming
|
|
270
|
+
agent-cli server whisper --backend nemo --ttl 0
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
`--backend nemo` defaults to `parakeet-unified-en-0.6b`. `--ttl 0` keeps the
|
|
274
|
+
model loaded after the first request, which is useful because NeMo model loading
|
|
275
|
+
is expensive.
|
|
276
|
+
|
|
277
|
+
Use it from agent-cli through Wyoming:
|
|
278
|
+
|
|
279
|
+
```toml
|
|
280
|
+
[defaults]
|
|
281
|
+
asr_provider = "wyoming"
|
|
282
|
+
asr_wyoming_ip = "localhost"
|
|
283
|
+
asr_wyoming_port = 10300
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Or through the OpenAI-compatible HTTP API:
|
|
287
|
+
|
|
288
|
+
```toml
|
|
289
|
+
[defaults]
|
|
290
|
+
asr_provider = "openai"
|
|
291
|
+
asr_openai_base_url = "http://localhost:10301/v1"
|
|
292
|
+
asr_openai_model = "whisper-1"
|
|
293
|
+
```
|
|
294
|
+
|
|
263
295
|
## Audio Device Configuration
|
|
264
296
|
|
|
265
297
|
```toml
|
|
@@ -15,6 +15,7 @@ struct AgentCommand {
|
|
|
15
15
|
let title: String
|
|
16
16
|
let arguments: [String]
|
|
17
17
|
let appliesTranscriptionExtraInstructions: Bool
|
|
18
|
+
let appliesTranscriptionDaemonSettings: Bool
|
|
18
19
|
let forceBootstrap: Bool
|
|
19
20
|
let bootstrapRequirement: AgentBootstrapRequirement
|
|
20
21
|
let showsRecordingIndicator: Bool
|
|
@@ -27,6 +28,7 @@ struct AgentCommand {
|
|
|
27
28
|
title: String,
|
|
28
29
|
arguments: [String],
|
|
29
30
|
appliesTranscriptionExtraInstructions: Bool = false,
|
|
31
|
+
appliesTranscriptionDaemonSettings: Bool = false,
|
|
30
32
|
forceBootstrap: Bool = false,
|
|
31
33
|
bootstrapRequirement: AgentBootstrapRequirement = .cliRuntime,
|
|
32
34
|
showsRecordingIndicator: Bool = false,
|
|
@@ -38,6 +40,7 @@ struct AgentCommand {
|
|
|
38
40
|
self.title = title
|
|
39
41
|
self.arguments = arguments
|
|
40
42
|
self.appliesTranscriptionExtraInstructions = appliesTranscriptionExtraInstructions
|
|
43
|
+
self.appliesTranscriptionDaemonSettings = appliesTranscriptionDaemonSettings
|
|
41
44
|
self.forceBootstrap = forceBootstrap
|
|
42
45
|
self.bootstrapRequirement = bootstrapRequirement
|
|
43
46
|
self.showsRecordingIndicator = showsRecordingIndicator
|
|
@@ -46,7 +49,14 @@ struct AgentCommand {
|
|
|
46
49
|
self.finishNotificationTitle = finishNotificationTitle
|
|
47
50
|
}
|
|
48
51
|
|
|
49
|
-
func resolvedArguments(
|
|
52
|
+
func resolvedArguments(
|
|
53
|
+
extraInstructions: String?,
|
|
54
|
+
transcriptionDaemonArguments: [String]? = nil
|
|
55
|
+
) -> [String] {
|
|
56
|
+
if appliesTranscriptionDaemonSettings {
|
|
57
|
+
return transcriptionDaemonArguments ?? arguments
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
guard appliesTranscriptionExtraInstructions else { return arguments }
|
|
51
61
|
|
|
52
62
|
let trimmedInstructions = extraInstructions?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
@@ -110,7 +120,8 @@ struct AgentCommand {
|
|
|
110
120
|
static let installVoiceService = AgentCommand(
|
|
111
121
|
identifier: "install-voice-service",
|
|
112
122
|
title: "Install Voice Service",
|
|
113
|
-
arguments: ["daemon", "install", "whisper", "-y"]
|
|
123
|
+
arguments: ["daemon", "install", "whisper", "-y"],
|
|
124
|
+
appliesTranscriptionDaemonSettings: true
|
|
114
125
|
)
|
|
115
126
|
|
|
116
127
|
static let installOrUpdateCLI = AgentCommand(
|
{agent_cli-0.97.2 → agent_cli-0.98.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift
RENAMED
|
@@ -207,7 +207,13 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
207
207
|
|
|
208
208
|
let bootstrap = self.bootstrap
|
|
209
209
|
let reportBootstrapPhase = makeBootstrapProgressReporter()
|
|
210
|
-
let
|
|
210
|
+
let transcriptionDaemonArguments = AgentRuntime.shared.usesUserInstalledAgentCLI
|
|
211
|
+
? nil
|
|
212
|
+
: TranscriptionSettings.whisperDaemonInstallArguments()
|
|
213
|
+
let commandArguments = command.resolvedArguments(
|
|
214
|
+
extraInstructions: TranscriptionSettings.extraInstructions,
|
|
215
|
+
transcriptionDaemonArguments: transcriptionDaemonArguments
|
|
216
|
+
)
|
|
211
217
|
DispatchQueue.global(qos: .userInitiated).async {
|
|
212
218
|
let bootstrapResult = bootstrap(command.bootstrapRequirement, command.forceBootstrap, reportBootstrapPhase)
|
|
213
219
|
guard bootstrapResult.exitCode == 0 else {
|
|
@@ -338,7 +338,10 @@ struct AgentRuntime {
|
|
|
338
338
|
|
|
339
339
|
private func installWhisperDaemon(progress: AgentBootstrapProgress) -> CommandResult {
|
|
340
340
|
progress(.installingVoiceService)
|
|
341
|
-
let
|
|
341
|
+
let arguments = runtimeMode == .bundled
|
|
342
|
+
? TranscriptionSettings.whisperDaemonInstallArguments(userDefaults: userDefaults)
|
|
343
|
+
: ["daemon", "ensure", "whisper", "--quiet"]
|
|
344
|
+
let result = runAgentCLI(arguments: arguments)
|
|
342
345
|
guard result.exitCode == 0 else {
|
|
343
346
|
return result
|
|
344
347
|
}
|
|
@@ -354,7 +357,13 @@ struct AgentRuntime {
|
|
|
354
357
|
|
|
355
358
|
private var whisperDaemonMarkerContents: String {
|
|
356
359
|
let modeName = runtimeMode == .userInstalled ? "user-installed" : "bundled"
|
|
357
|
-
|
|
360
|
+
var contents = "runtimeMode=\(modeName)\npackageSource=\(agentCLIPackageSource)\n"
|
|
361
|
+
if runtimeMode == .bundled {
|
|
362
|
+
let backend = TranscriptionSettings.selectedBackend(userDefaults: userDefaults)
|
|
363
|
+
contents += "transcriptionBackend=\(backend.rawValue)\n"
|
|
364
|
+
contents += "transcriptionModel=\(TranscriptionSettings.selectedModelName(userDefaults: userDefaults))\n"
|
|
365
|
+
}
|
|
366
|
+
return contents
|
|
358
367
|
}
|
|
359
368
|
|
|
360
369
|
private func warmUpWhisperModel() -> CommandResult {
|
|
@@ -281,10 +281,18 @@ struct SettingsView: View {
|
|
|
281
281
|
private var useUserInstalledAgentCLI = false
|
|
282
282
|
@AppStorage(RecordingSoundSettings.enabledKey)
|
|
283
283
|
private var recordingSoundsEnabled = false
|
|
284
|
+
@AppStorage(TranscriptionSettings.transcriptionBackendKey)
|
|
285
|
+
private var transcriptionBackend = TranscriptionBackend.whisper.rawValue
|
|
286
|
+
@AppStorage(TranscriptionSettings.transcriptionModelKey)
|
|
287
|
+
private var transcriptionModel = TranscriptionBackend.whisper.defaultModelName
|
|
284
288
|
@AppStorage(TranscriptionSettings.transcriptionExtraInstructionsKey)
|
|
285
289
|
private var transcriptionExtraInstructions = ""
|
|
286
290
|
@State private var shortcutRevision = 0
|
|
287
291
|
|
|
292
|
+
private var selectedTranscriptionBackend: TranscriptionBackend {
|
|
293
|
+
TranscriptionBackend(rawValue: transcriptionBackend) ?? .whisper
|
|
294
|
+
}
|
|
295
|
+
|
|
288
296
|
var body: some View {
|
|
289
297
|
Form {
|
|
290
298
|
Section {
|
|
@@ -311,6 +319,32 @@ struct SettingsView: View {
|
|
|
311
319
|
Text("Runs the agent-cli found on PATH with your normal config instead of the app's private bundled-uv runtime. Recording sounds use Frog when recording starts and Purr when recording ends.")
|
|
312
320
|
}
|
|
313
321
|
|
|
322
|
+
Section {
|
|
323
|
+
Picker("Backend", selection: $transcriptionBackend) {
|
|
324
|
+
ForEach(TranscriptionBackend.allCases) { backend in
|
|
325
|
+
Text(backend.title).tag(backend.rawValue)
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
.pickerStyle(.menu)
|
|
329
|
+
.disabled(useUserInstalledAgentCLI)
|
|
330
|
+
|
|
331
|
+
Picker("Model", selection: $transcriptionModel) {
|
|
332
|
+
ForEach(selectedTranscriptionBackend.modelOptions) { model in
|
|
333
|
+
Text(model.title).tag(model.id)
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
.pickerStyle(.menu)
|
|
337
|
+
.disabled(useUserInstalledAgentCLI)
|
|
338
|
+
} header: {
|
|
339
|
+
Text("Voice Service")
|
|
340
|
+
} footer: {
|
|
341
|
+
Text(
|
|
342
|
+
useUserInstalledAgentCLI
|
|
343
|
+
? "Disabled while User-Installed agent-cli is active."
|
|
344
|
+
: "Changing these settings restarts the bundled voice service on next transcription."
|
|
345
|
+
)
|
|
346
|
+
}
|
|
347
|
+
|
|
314
348
|
Section {
|
|
315
349
|
TextEditor(text: $transcriptionExtraInstructions)
|
|
316
350
|
.font(.body)
|
|
@@ -378,10 +412,20 @@ struct SettingsView: View {
|
|
|
378
412
|
}
|
|
379
413
|
.formStyle(.grouped)
|
|
380
414
|
.padding()
|
|
415
|
+
.onChange(of: transcriptionBackend) { _ in
|
|
416
|
+
normalizeTranscriptionModel()
|
|
417
|
+
}
|
|
381
418
|
.onAppear {
|
|
382
419
|
loginItemController.refresh()
|
|
420
|
+
normalizeTranscriptionModel()
|
|
383
421
|
}
|
|
384
422
|
}
|
|
423
|
+
|
|
424
|
+
private func normalizeTranscriptionModel() {
|
|
425
|
+
let backend = selectedTranscriptionBackend
|
|
426
|
+
guard backend.modelOption(named: transcriptionModel) == nil else { return }
|
|
427
|
+
transcriptionModel = backend.defaultModelName
|
|
428
|
+
}
|
|
385
429
|
}
|
|
386
430
|
|
|
387
431
|
struct ShortcutRecorderRow: View {
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
struct TranscriptionModelOption: Identifiable, Equatable {
|
|
4
|
+
let id: String
|
|
5
|
+
let title: String
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
enum TranscriptionBackend: String, CaseIterable, Identifiable {
|
|
9
|
+
case whisper
|
|
10
|
+
case nemo
|
|
11
|
+
|
|
12
|
+
var id: String {
|
|
13
|
+
rawValue
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var title: String {
|
|
17
|
+
switch self {
|
|
18
|
+
case .whisper:
|
|
19
|
+
return "Whisper"
|
|
20
|
+
case .nemo:
|
|
21
|
+
return "NeMo"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var cliBackend: String {
|
|
26
|
+
switch self {
|
|
27
|
+
case .whisper:
|
|
28
|
+
return "auto"
|
|
29
|
+
case .nemo:
|
|
30
|
+
return "nemo"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var defaultModelName: String {
|
|
35
|
+
modelOptions[0].id
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var modelOptions: [TranscriptionModelOption] {
|
|
39
|
+
switch self {
|
|
40
|
+
case .whisper:
|
|
41
|
+
return [
|
|
42
|
+
TranscriptionModelOption(id: "large-v3", title: "Large v3"),
|
|
43
|
+
TranscriptionModelOption(id: "large-v3-turbo", title: "Turbo"),
|
|
44
|
+
TranscriptionModelOption(id: "small", title: "Small"),
|
|
45
|
+
]
|
|
46
|
+
case .nemo:
|
|
47
|
+
return [
|
|
48
|
+
TranscriptionModelOption(id: "parakeet-unified-en-0.6b", title: "Parakeet Unified 0.6B"),
|
|
49
|
+
TranscriptionModelOption(id: "parakeet-tdt-0.6b-v3", title: "Parakeet TDT 0.6B v3"),
|
|
50
|
+
TranscriptionModelOption(id: "parakeet-tdt_ctc-110m", title: "Parakeet TDT CTC 110M"),
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
func modelOption(named modelName: String) -> TranscriptionModelOption? {
|
|
56
|
+
modelOptions.first { $0.id == modelName }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
enum TranscriptionSettings {
|
|
61
|
+
static let transcriptionExtraInstructionsKey = "transcriptionExtraInstructions"
|
|
62
|
+
static let transcriptionBackendKey = "transcriptionBackend"
|
|
63
|
+
static let transcriptionModelKey = "transcriptionModel"
|
|
64
|
+
|
|
65
|
+
static var extraInstructions: String {
|
|
66
|
+
UserDefaults.standard.string(forKey: transcriptionExtraInstructionsKey) ?? ""
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static func selectedBackend(userDefaults: UserDefaults = .standard) -> TranscriptionBackend {
|
|
70
|
+
let rawValue = userDefaults.string(forKey: transcriptionBackendKey) ?? TranscriptionBackend.whisper.rawValue
|
|
71
|
+
return TranscriptionBackend(rawValue: rawValue) ?? .whisper
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static func selectedModelName(userDefaults: UserDefaults = .standard) -> String {
|
|
75
|
+
let backend = selectedBackend(userDefaults: userDefaults)
|
|
76
|
+
let storedModelName = userDefaults.string(forKey: transcriptionModelKey) ?? ""
|
|
77
|
+
return backend.modelOption(named: storedModelName)?.id ?? backend.defaultModelName
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static func whisperDaemonInstallArguments(userDefaults: UserDefaults = .standard) -> [String] {
|
|
81
|
+
let backend = selectedBackend(userDefaults: userDefaults)
|
|
82
|
+
return [
|
|
83
|
+
"daemon",
|
|
84
|
+
"install",
|
|
85
|
+
"whisper",
|
|
86
|
+
"-y",
|
|
87
|
+
"--",
|
|
88
|
+
"--backend",
|
|
89
|
+
backend.cliBackend,
|
|
90
|
+
"--model",
|
|
91
|
+
selectedModelName(userDefaults: userDefaults),
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|