agent-cli 0.102.0__tar.gz → 0.102.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.102.0 → agent_cli-0.102.2}/.github/workflows/docker.yml +4 -4
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/docs.yml +1 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/markdown-code-runner.yml +1 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/pytest.yml +1 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/release-drafter.yml +1 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/release.yml +2 -16
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.pre-commit-config.yaml +6 -3
- {agent_cli-0.102.0 → agent_cli-0.102.2}/PKG-INFO +2 -1
- agent_cli-0.102.2/agent_cli/__init__.py +16 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/diarization.txt +8 -8
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/mlx-whisper.txt +3 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/nemo-whisper.txt +8 -8
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/cli.py +2 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/mlx.py +14 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/README.md +5 -2
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +36 -8
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +82 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/appcast.xml +60 -32
- {agent_cli-0.102.0 → agent_cli-0.102.2}/pyproject.toml +4 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/conftest.py +24 -4
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_macos_app.py +5 -6
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_mlx_backend.py +67 -1
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_utils.py +42 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/uv.lock +2 -0
- agent_cli-0.102.0/agent_cli/__init__.py +0 -5
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude-plugin/README.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.cursorrules +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.dockerignore +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.env.example +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/logo.svg +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/release-drafter.yml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/renovate.json +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.gitignore +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.jscpd.json +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.prompts/docs-review.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/.prompts/pr-review.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/CLAUDE.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/LICENSE +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/README.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/__main__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_extras.json +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_overrides/nemo-whisper.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/_tools.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/config.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/constants.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/process.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/cmux.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/common.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/services.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/opts.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/py.typed +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/common.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/nemo.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/docker-compose.yml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/CNAME +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/architecture/index.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/architecture/memory.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/architecture/rag.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/assistant.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/chat.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/config.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/daemon.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/dev.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/index.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/install-services.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/memory.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/server/index.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/speak.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/speakers.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/start-services.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/configuration.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/getting-started.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/index.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/docker.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/index.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/linux.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/macos.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/nixos.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/installation/windows.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/logo-clean.svg +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/docs/system-integration.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/justfile +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/LiveTranscriptionPreview.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/LivePreviewSwiftTestingTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/LiveTranscriptionPreviewTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/reddit.md +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/shell.nix +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_audio.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_audio_levels.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_sse.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_vad.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/core/test_watch.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_project.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/install/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/install/test_extras.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_client.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_files.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_store.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/mocks/audio.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/mocks/llm.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/__init__.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_history.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_store.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_alignment.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_api.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_api_integration.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_asr.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_cli.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_config.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_daemon.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_diarization.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_env_vars.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_json_output.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_llm.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_nemo_backend.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_process_manager.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_server_tts.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_server_tts_wyoming.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_services.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_tools.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_tts.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_wake_word.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.102.0 → agent_cli-0.102.2}/zensical.toml +0 -0
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
df -h
|
|
47
47
|
|
|
48
48
|
- name: Checkout repository
|
|
49
|
-
uses: actions/checkout@v7.0.
|
|
49
|
+
uses: actions/checkout@v7.0.1
|
|
50
50
|
with:
|
|
51
51
|
fetch-depth: 0 # Full history for version detection
|
|
52
52
|
|
|
@@ -54,7 +54,7 @@ jobs:
|
|
|
54
54
|
uses: docker/setup-buildx-action@v4.2.0
|
|
55
55
|
|
|
56
56
|
- name: Log in to Container Registry
|
|
57
|
-
uses: docker/login-action@v4.
|
|
57
|
+
uses: docker/login-action@v4.5.1
|
|
58
58
|
with:
|
|
59
59
|
registry: ${{ env.REGISTRY }}
|
|
60
60
|
username: ${{ github.actor }}
|
|
@@ -111,7 +111,7 @@ jobs:
|
|
|
111
111
|
|
|
112
112
|
steps:
|
|
113
113
|
- name: Checkout repository
|
|
114
|
-
uses: actions/checkout@v7.0.
|
|
114
|
+
uses: actions/checkout@v7.0.1
|
|
115
115
|
with:
|
|
116
116
|
fetch-depth: 0 # Full history for version detection
|
|
117
117
|
|
|
@@ -119,7 +119,7 @@ jobs:
|
|
|
119
119
|
uses: docker/setup-buildx-action@v4.2.0
|
|
120
120
|
|
|
121
121
|
- name: Log in to Container Registry
|
|
122
|
-
uses: docker/login-action@v4.
|
|
122
|
+
uses: docker/login-action@v4.5.1
|
|
123
123
|
with:
|
|
124
124
|
registry: ${{ env.REGISTRY }}
|
|
125
125
|
username: ${{ github.actor }}
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
permissions:
|
|
15
15
|
id-token: write
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@v7.0.
|
|
17
|
+
- uses: actions/checkout@v7.0.1
|
|
18
18
|
- name: Install uv
|
|
19
19
|
uses: astral-sh/setup-uv@v8.3.2
|
|
20
20
|
- name: Build
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
permissions:
|
|
30
30
|
contents: write
|
|
31
31
|
steps:
|
|
32
|
-
- uses: actions/checkout@v7.0.
|
|
32
|
+
- uses: actions/checkout@v7.0.1
|
|
33
33
|
- name: Install uv
|
|
34
34
|
uses: astral-sh/setup-uv@v8.3.2
|
|
35
35
|
- name: Import Developer ID certificate
|
|
@@ -126,17 +126,3 @@ jobs:
|
|
|
126
126
|
git commit -m "Update AgentCLI release metadata to ${TAG_NAME}"
|
|
127
127
|
git pull --rebase origin main
|
|
128
128
|
git push origin HEAD:main
|
|
129
|
-
- name: Trigger Homebrew tap update
|
|
130
|
-
env:
|
|
131
|
-
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_DISPATCH_TOKEN }}
|
|
132
|
-
TAG_NAME: ${{ github.event.release.tag_name }}
|
|
133
|
-
run: |
|
|
134
|
-
if [[ -z "$GH_TOKEN" ]]; then
|
|
135
|
-
echo "HOMEBREW_TAP_DISPATCH_TOKEN is required to update basnijholt/homebrew-tap." >&2
|
|
136
|
-
exit 1
|
|
137
|
-
fi
|
|
138
|
-
|
|
139
|
-
gh api repos/basnijholt/homebrew-tap/dispatches \
|
|
140
|
-
-f event_type=agent-cli-release \
|
|
141
|
-
-F "client_payload[tag_name]=$TAG_NAME" \
|
|
142
|
-
-F "client_payload[asset_url]=https://github.com/basnijholt/agent-cli/releases/download/${TAG_NAME}/AgentCLI.dmg"
|
|
@@ -11,7 +11,7 @@ repos:
|
|
|
11
11
|
- id: end-of-file-fixer
|
|
12
12
|
- id: mixed-line-ending
|
|
13
13
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
14
|
-
rev: "v0.15.
|
|
14
|
+
rev: "v0.15.22"
|
|
15
15
|
hooks:
|
|
16
16
|
- id: ruff
|
|
17
17
|
args: ["--fix"]
|
|
@@ -48,14 +48,17 @@ repos:
|
|
|
48
48
|
name: uv lock
|
|
49
49
|
entry: uv lock
|
|
50
50
|
language: python
|
|
51
|
-
|
|
51
|
+
# Pinned: uv export's marker output differs between releases, so an
|
|
52
|
+
# unpinned uv makes agent_cli/_requirements/*.txt depend on whoever's
|
|
53
|
+
# hook cache is freshest.
|
|
54
|
+
additional_dependencies: ["uv==0.11.32"]
|
|
52
55
|
pass_filenames: false
|
|
53
56
|
files: pyproject\.toml
|
|
54
57
|
- id: sync-requirements
|
|
55
58
|
name: sync extra requirements
|
|
56
59
|
entry: python .github/scripts/sync_requirements.py
|
|
57
60
|
language: python
|
|
58
|
-
additional_dependencies: ["uv"]
|
|
61
|
+
additional_dependencies: ["uv==0.11.32"]
|
|
59
62
|
pass_filenames: false
|
|
60
63
|
files: (pyproject\.toml|uv\.lock)
|
|
61
64
|
- id: check-extras-sync
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.102.
|
|
3
|
+
Version: 0.102.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>
|
|
@@ -61,6 +61,7 @@ Requires-Dist: watchfiles>=0.21.0; extra == 'memory'
|
|
|
61
61
|
Provides-Extra: mlx-whisper
|
|
62
62
|
Requires-Dist: fastapi[standard]; extra == 'mlx-whisper'
|
|
63
63
|
Requires-Dist: mlx-whisper>=0.4.0; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
|
|
64
|
+
Requires-Dist: mlx>=0.24; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
|
|
64
65
|
Provides-Extra: nemo-whisper
|
|
65
66
|
Requires-Dist: fastapi[standard]; extra == 'nemo-whisper'
|
|
66
67
|
Requires-Dist: nemo-toolkit[asr]>=2.2.0; (python_version < '3.14') and extra == 'nemo-whisper'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
__version__: str
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def __getattr__(name: str) -> str:
|
|
10
|
+
"""Resolve `__version__` lazily; reading distribution metadata costs ~29ms."""
|
|
11
|
+
if name == "__version__":
|
|
12
|
+
from importlib.metadata import version # noqa: PLC0415
|
|
13
|
+
|
|
14
|
+
return version("agent-cli")
|
|
15
|
+
msg = f"module {__name__!r} has no attribute {name!r}"
|
|
16
|
+
raise AttributeError(msg)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# This file was autogenerated by uv via the following command:
|
|
2
2
|
# uv export --extra diarization --no-dev --no-emit-project --no-hashes
|
|
3
|
-
aiohappyeyeballs==2.6.2
|
|
3
|
+
aiohappyeyeballs==2.6.2 ; python_full_version < '3.13'
|
|
4
4
|
# via aiohttp
|
|
5
|
-
aiohttp==3.13.5
|
|
5
|
+
aiohttp==3.13.5 ; python_full_version < '3.13'
|
|
6
6
|
# via fsspec
|
|
7
|
-
aiosignal==1.4.0
|
|
7
|
+
aiosignal==1.4.0 ; python_full_version < '3.13'
|
|
8
8
|
# via aiohttp
|
|
9
9
|
alembic==1.18.4
|
|
10
10
|
# via optuna
|
|
@@ -18,7 +18,7 @@ anyio==4.13.0
|
|
|
18
18
|
# via httpx
|
|
19
19
|
asteroid-filterbanks==0.4.0
|
|
20
20
|
# via pyannote-audio
|
|
21
|
-
attrs==26.1.0
|
|
21
|
+
attrs==26.1.0 ; python_full_version < '3.13'
|
|
22
22
|
# via aiohttp
|
|
23
23
|
certifi==2026.5.20
|
|
24
24
|
# via
|
|
@@ -61,7 +61,7 @@ filelock==3.29.0
|
|
|
61
61
|
# torch
|
|
62
62
|
fonttools==4.63.0
|
|
63
63
|
# via matplotlib
|
|
64
|
-
frozenlist==1.8.0
|
|
64
|
+
frozenlist==1.8.0 ; python_full_version < '3.13'
|
|
65
65
|
# via
|
|
66
66
|
# aiohttp
|
|
67
67
|
# aiosignal
|
|
@@ -136,7 +136,7 @@ mdurl==0.1.2
|
|
|
136
136
|
# via markdown-it-py
|
|
137
137
|
mpmath==1.3.0
|
|
138
138
|
# via sympy
|
|
139
|
-
multidict==6.7.1
|
|
139
|
+
multidict==6.7.1 ; python_full_version < '3.13'
|
|
140
140
|
# via
|
|
141
141
|
# aiohttp
|
|
142
142
|
# yarl
|
|
@@ -267,7 +267,7 @@ pillow==12.2.0
|
|
|
267
267
|
# via matplotlib
|
|
268
268
|
primepy==1.3
|
|
269
269
|
# via torch-pitch-shift
|
|
270
|
-
propcache==0.5.2
|
|
270
|
+
propcache==0.5.2 ; python_full_version < '3.13'
|
|
271
271
|
# via
|
|
272
272
|
# aiohttp
|
|
273
273
|
# yarl
|
|
@@ -480,5 +480,5 @@ tzdata==2026.2 ; sys_platform == 'emscripten' or sys_platform == 'win32'
|
|
|
480
480
|
# via pandas
|
|
481
481
|
urllib3==2.7.0
|
|
482
482
|
# via requests
|
|
483
|
-
yarl==1.24.2
|
|
483
|
+
yarl==1.24.2 ; python_full_version < '3.13'
|
|
484
484
|
# via aiohttp
|
|
@@ -98,7 +98,9 @@ markupsafe==3.0.3
|
|
|
98
98
|
mdurl==0.1.2
|
|
99
99
|
# via markdown-it-py
|
|
100
100
|
mlx==0.31.2 ; platform_machine == 'arm64' and sys_platform == 'darwin'
|
|
101
|
-
# via
|
|
101
|
+
# via
|
|
102
|
+
# agent-cli
|
|
103
|
+
# mlx-whisper
|
|
102
104
|
mlx-metal==0.31.2 ; platform_machine == 'arm64' and sys_platform == 'darwin'
|
|
103
105
|
# via mlx
|
|
104
106
|
mlx-whisper==0.4.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
|
|
@@ -6,11 +6,11 @@ absl-py==2.4.0 ; python_full_version < '3.14'
|
|
|
6
6
|
# tensorboard
|
|
7
7
|
accelerate==1.13.0 ; python_full_version < '3.14'
|
|
8
8
|
# via peft
|
|
9
|
-
aiohappyeyeballs==2.6.2 ; python_full_version < '3.
|
|
9
|
+
aiohappyeyeballs==2.6.2 ; python_full_version < '3.13'
|
|
10
10
|
# via aiohttp
|
|
11
|
-
aiohttp==3.13.5 ; python_full_version < '3.
|
|
11
|
+
aiohttp==3.13.5 ; python_full_version < '3.13'
|
|
12
12
|
# via fsspec
|
|
13
|
-
aiosignal==1.4.0 ; python_full_version < '3.
|
|
13
|
+
aiosignal==1.4.0 ; python_full_version < '3.13'
|
|
14
14
|
# via aiohttp
|
|
15
15
|
alembic==1.18.4 ; python_full_version < '3.14'
|
|
16
16
|
# via optuna
|
|
@@ -31,7 +31,7 @@ anyio==4.13.0
|
|
|
31
31
|
# watchfiles
|
|
32
32
|
asttokens==3.0.1 ; python_full_version < '3.14'
|
|
33
33
|
# via stack-data
|
|
34
|
-
attrs==26.1.0 ; python_full_version < '3.
|
|
34
|
+
attrs==26.1.0 ; python_full_version < '3.13'
|
|
35
35
|
# via aiohttp
|
|
36
36
|
audioop-lts==0.2.2 ; python_full_version == '3.13.*'
|
|
37
37
|
# via
|
|
@@ -146,7 +146,7 @@ filelock==3.29.0 ; python_full_version < '3.14'
|
|
|
146
146
|
# transformers
|
|
147
147
|
fonttools==4.63.0 ; python_full_version < '3.14'
|
|
148
148
|
# via matplotlib
|
|
149
|
-
frozenlist==1.8.0 ; python_full_version < '3.
|
|
149
|
+
frozenlist==1.8.0 ; python_full_version < '3.13'
|
|
150
150
|
# via
|
|
151
151
|
# aiohttp
|
|
152
152
|
# aiosignal
|
|
@@ -308,7 +308,7 @@ mpmath==1.3.0 ; python_full_version < '3.14'
|
|
|
308
308
|
# via sympy
|
|
309
309
|
msgpack==1.1.2 ; python_full_version < '3.14'
|
|
310
310
|
# via librosa
|
|
311
|
-
multidict==6.7.1 ; python_full_version < '3.
|
|
311
|
+
multidict==6.7.1 ; python_full_version < '3.13'
|
|
312
312
|
# via
|
|
313
313
|
# aiohttp
|
|
314
314
|
# yarl
|
|
@@ -515,7 +515,7 @@ portalocker==3.2.0 ; python_full_version == '3.13.*'
|
|
|
515
515
|
# via sacrebleu
|
|
516
516
|
prompt-toolkit==3.0.52 ; python_full_version < '3.14'
|
|
517
517
|
# via ipython
|
|
518
|
-
propcache==0.5.2 ; python_full_version < '3.
|
|
518
|
+
propcache==0.5.2 ; python_full_version < '3.13'
|
|
519
519
|
# via
|
|
520
520
|
# aiohttp
|
|
521
521
|
# yarl
|
|
@@ -888,5 +888,5 @@ wrapt==2.2.1 ; python_full_version < '3.14'
|
|
|
888
888
|
# via nemo-toolkit
|
|
889
889
|
xxhash==3.7.0 ; python_full_version < '3.14'
|
|
890
890
|
# via datasets
|
|
891
|
-
yarl==1.24.2 ; python_full_version < '3.
|
|
891
|
+
yarl==1.24.2 ; python_full_version < '3.13'
|
|
892
892
|
# via aiohttp
|
|
@@ -9,7 +9,6 @@ from typing import Annotated, Any
|
|
|
9
9
|
import typer
|
|
10
10
|
from rich.table import Table
|
|
11
11
|
|
|
12
|
-
from . import __version__
|
|
13
12
|
from .config import load_config, normalize_provider_defaults
|
|
14
13
|
from .core.process import set_process_title
|
|
15
14
|
from .core.utils import console
|
|
@@ -49,6 +48,8 @@ app = typer.Typer(
|
|
|
49
48
|
|
|
50
49
|
def _version_callback(value: bool) -> None:
|
|
51
50
|
if value:
|
|
51
|
+
from . import __version__ # noqa: PLC0415
|
|
52
|
+
|
|
52
53
|
path = Path(__file__).parent
|
|
53
54
|
data = [
|
|
54
55
|
("agent-cli version", __version__),
|
|
@@ -135,11 +135,24 @@ def _transcribe_in_subprocess(
|
|
|
135
135
|
kwargs: dict[str, Any],
|
|
136
136
|
) -> dict[str, Any]:
|
|
137
137
|
"""Run transcription in subprocess. Model stays loaded between calls."""
|
|
138
|
+
import mlx.core as mx # noqa: PLC0415
|
|
138
139
|
import mlx_whisper # noqa: PLC0415
|
|
139
140
|
import numpy as np # noqa: PLC0415
|
|
140
141
|
|
|
141
142
|
audio_array = np.frombuffer(audio_bytes, dtype=audio_dtype).reshape(audio_shape)
|
|
142
|
-
|
|
143
|
+
try:
|
|
144
|
+
result = mlx_whisper.transcribe(audio_array, path_or_hf_repo=model_name, **kwargs)
|
|
145
|
+
finally:
|
|
146
|
+
# Release MLX's reusable Metal buffer cache after each request. With --ttl 0
|
|
147
|
+
# the subprocess is never recycled, so without this the cache grows to the
|
|
148
|
+
# largest working set ever seen and gets pushed to swap, degrading latency.
|
|
149
|
+
# clear_cache() frees only the cache, NOT live arrays, so the loaded model
|
|
150
|
+
# weights stay resident and inference stays hot (no cold reload).
|
|
151
|
+
# In finally so a failed transcription also releases the buffers it
|
|
152
|
+
# allocated; otherwise the long-lived worker would retain them.
|
|
153
|
+
# Top-level clear_cache() needs mlx>=0.24 (pinned in the mlx-whisper
|
|
154
|
+
# extra); older releases only expose mx.metal.clear_cache().
|
|
155
|
+
mx.clear_cache()
|
|
143
156
|
|
|
144
157
|
return {
|
|
145
158
|
"text": result.get("text", ""),
|
|
@@ -111,8 +111,11 @@ workflow expects these repository secrets:
|
|
|
111
111
|
- `APPLE_APP_SPECIFIC_PASSWORD`: app-specific password for `notarytool`
|
|
112
112
|
- `APPLE_TEAM_ID`: Apple Developer Team ID
|
|
113
113
|
- `SPARKLE_PRIVATE_ED_KEY`: private Sparkle EdDSA key for signing updates
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
|
|
115
|
+
The Homebrew cask is not published from here. `basnijholt/homebrew-tap` runs a
|
|
116
|
+
daily cron that reads the latest release and bumps `Casks/agent-cli.rb` itself;
|
|
117
|
+
run it on demand with
|
|
118
|
+
`gh workflow run update-agent-cli-cask.yml --repo basnijholt/homebrew-tap`.
|
|
116
119
|
|
|
117
120
|
The workflow also expects the repository variable `SPARKLE_PUBLIC_ED_KEY`.
|
|
118
121
|
Generate the key pair with Sparkle's `generate_keys` tool and store only the
|
|
@@ -27,6 +27,29 @@ private final class UserInstalledCLICheckCache {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/// Caches the login shell PATH lookup, which costs a full `zsh -lic` startup
|
|
31
|
+
/// (~1s with a typical dotfiles setup) and would otherwise run on every command.
|
|
32
|
+
/// Only successful lookups are cached, so a shell that fails once does not
|
|
33
|
+
/// degrade PATH for the rest of the session.
|
|
34
|
+
private final class LoginShellPATHCache {
|
|
35
|
+
private let lock = NSLock()
|
|
36
|
+
private var resolved: String?
|
|
37
|
+
|
|
38
|
+
func value(compute: () -> String?) -> String? {
|
|
39
|
+
lock.lock()
|
|
40
|
+
defer { lock.unlock() }
|
|
41
|
+
if let resolved {
|
|
42
|
+
return resolved
|
|
43
|
+
}
|
|
44
|
+
resolved = compute()
|
|
45
|
+
return resolved
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
func invalidate() {
|
|
49
|
+
lock.withLock { resolved = nil }
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
30
53
|
typealias AgentProcessRunner = (URL, [String], [String: String]) -> CommandResult
|
|
31
54
|
typealias LocalhostConnector = (UInt16) -> Bool
|
|
32
55
|
|
|
@@ -58,6 +81,7 @@ struct AgentRuntime {
|
|
|
58
81
|
private let processRunner: AgentProcessRunner
|
|
59
82
|
private let localhostConnector: LocalhostConnector
|
|
60
83
|
private let userInstalledCLICheckCache: UserInstalledCLICheckCache
|
|
84
|
+
private let loginShellPATHCache: LoginShellPATHCache
|
|
61
85
|
private let whisperReadyTimeout: TimeInterval
|
|
62
86
|
let appSupportURL: URL
|
|
63
87
|
let bundledUVURL: URL
|
|
@@ -90,6 +114,7 @@ struct AgentRuntime {
|
|
|
90
114
|
self.processRunner = processRunner
|
|
91
115
|
self.localhostConnector = localhostConnector
|
|
92
116
|
self.userInstalledCLICheckCache = UserInstalledCLICheckCache()
|
|
117
|
+
self.loginShellPATHCache = LoginShellPATHCache()
|
|
93
118
|
self.whisperReadyTimeout = whisperReadyTimeout
|
|
94
119
|
|
|
95
120
|
if let override = environment["AGENTCLI_APP_SUPPORT_DIR"], !override.isEmpty {
|
|
@@ -343,6 +368,9 @@ struct AgentRuntime {
|
|
|
343
368
|
progress: AgentBootstrapProgress = { _ in }
|
|
344
369
|
) -> CommandResult {
|
|
345
370
|
let mode = runtimeMode
|
|
371
|
+
if force {
|
|
372
|
+
loginShellPATHCache.invalidate()
|
|
373
|
+
}
|
|
346
374
|
do {
|
|
347
375
|
try prepareDirectories(for: mode)
|
|
348
376
|
} catch {
|
|
@@ -647,7 +675,7 @@ struct AgentRuntime {
|
|
|
647
675
|
let existingPATH = environment["PATH"] ?? "/usr/bin:/bin:/usr/sbin:/sbin"
|
|
648
676
|
environment["PATH"] = userInstalledCLIPath(
|
|
649
677
|
existingPATH: existingPATH,
|
|
650
|
-
loginShellPATH:
|
|
678
|
+
loginShellPATH: loginShellPATHCache.value { loginShellPATH() }
|
|
651
679
|
)
|
|
652
680
|
return environment
|
|
653
681
|
}
|
|
@@ -708,14 +736,14 @@ struct AgentRuntime {
|
|
|
708
736
|
.joined(separator: ":")
|
|
709
737
|
}
|
|
710
738
|
|
|
711
|
-
private
|
|
712
|
-
let shellPath =
|
|
713
|
-
guard
|
|
739
|
+
private func loginShellPATH() -> String? {
|
|
740
|
+
let shellPath = baseEnvironment["SHELL"].flatMap { $0.isEmpty ? nil : $0 } ?? "/bin/zsh"
|
|
741
|
+
guard fileManager.isExecutableFile(atPath: shellPath) else { return nil }
|
|
714
742
|
|
|
715
|
-
let result =
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
743
|
+
let result = processRunner(
|
|
744
|
+
URL(fileURLWithPath: shellPath),
|
|
745
|
+
["-lic", "printf '%s\\n' \"$PATH\""],
|
|
746
|
+
baseEnvironment
|
|
719
747
|
)
|
|
720
748
|
guard result.exitCode == 0 else { return nil }
|
|
721
749
|
|
{agent_cli-0.102.0 → agent_cli-0.102.2}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift
RENAMED
|
@@ -242,6 +242,88 @@ final class AgentCommandTests: XCTestCase {
|
|
|
242
242
|
XCTAssertEqual(components.filter { $0 == "/usr/bin" }.count, 1)
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
/// Builds a user-installed runtime whose process runner intercepts `zsh -lic` PATH probes.
|
|
246
|
+
private func makeShellPATHProbingRuntime(
|
|
247
|
+
suiteName: String,
|
|
248
|
+
onShellProbe: @escaping () -> CommandResult
|
|
249
|
+
) -> AgentRuntime {
|
|
250
|
+
let defaults = UserDefaults(suiteName: suiteName)!
|
|
251
|
+
defaults.removePersistentDomain(forName: suiteName)
|
|
252
|
+
defaults.set(true, forKey: RuntimeSettings.useUserInstalledAgentCLIKey)
|
|
253
|
+
return AgentRuntime(
|
|
254
|
+
environment: [
|
|
255
|
+
"AGENTCLI_APP_SUPPORT_DIR": "/tmp/agentcli-test-support",
|
|
256
|
+
"PATH": "/custom/bin",
|
|
257
|
+
"SHELL": "/bin/zsh",
|
|
258
|
+
],
|
|
259
|
+
userDefaults: defaults,
|
|
260
|
+
processRunner: { _, arguments, _ in
|
|
261
|
+
guard arguments.first == "-lic" else {
|
|
262
|
+
return CommandResult(exitCode: 0, output: "")
|
|
263
|
+
}
|
|
264
|
+
return onShellProbe()
|
|
265
|
+
}
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private static let shellPATHProbeSuccess = CommandResult(exitCode: 0, output: "/shell/bin\n")
|
|
270
|
+
|
|
271
|
+
/// `zsh -lic` costs roughly a second with a real dotfiles setup, so the login shell
|
|
272
|
+
/// PATH must be resolved once per runtime instead of once per spawned command.
|
|
273
|
+
func testUserInstalledRuntimeCachesLoginShellPATHLookup() {
|
|
274
|
+
var shellProbes = 0
|
|
275
|
+
let runtime = makeShellPATHProbingRuntime(
|
|
276
|
+
suiteName: "AgentCLITests.user-runtime-shell-path-cache"
|
|
277
|
+
) {
|
|
278
|
+
shellProbes += 1
|
|
279
|
+
return Self.shellPATHProbeSuccess
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
_ = runtime.commandEnvironment()
|
|
283
|
+
let environment = runtime.commandEnvironment()
|
|
284
|
+
_ = runtime.runAgentCLI(arguments: ["--version"])
|
|
285
|
+
|
|
286
|
+
XCTAssertEqual(shellProbes, 1)
|
|
287
|
+
XCTAssertEqual(environment["PATH"]?.split(separator: ":").first.map(String.init), "/shell/bin")
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
func testForcedInstallRefreshesLoginShellPATHLookup() {
|
|
291
|
+
var shellProbes = 0
|
|
292
|
+
let runtime = makeShellPATHProbingRuntime(
|
|
293
|
+
suiteName: "AgentCLITests.user-runtime-shell-path-refresh"
|
|
294
|
+
) {
|
|
295
|
+
shellProbes += 1
|
|
296
|
+
return Self.shellPATHProbeSuccess
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
_ = runtime.commandEnvironment()
|
|
300
|
+
_ = runtime.ensureInstalled(force: true)
|
|
301
|
+
_ = runtime.commandEnvironment()
|
|
302
|
+
|
|
303
|
+
XCTAssertEqual(shellProbes, 2)
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/// A login shell that fails once must not degrade PATH for the rest of the session,
|
|
307
|
+
/// matching how the CLI availability check only caches successful results.
|
|
308
|
+
func testFailedLoginShellPATHLookupIsRetried() {
|
|
309
|
+
var shellProbes = 0
|
|
310
|
+
let runtime = makeShellPATHProbingRuntime(
|
|
311
|
+
suiteName: "AgentCLITests.user-runtime-shell-path-failure"
|
|
312
|
+
) {
|
|
313
|
+
shellProbes += 1
|
|
314
|
+
return shellProbes == 1
|
|
315
|
+
? CommandResult(exitCode: 1, output: "")
|
|
316
|
+
: Self.shellPATHProbeSuccess
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
let degraded = runtime.commandEnvironment()
|
|
320
|
+
let recovered = runtime.commandEnvironment()
|
|
321
|
+
|
|
322
|
+
XCTAssertEqual(shellProbes, 2)
|
|
323
|
+
XCTAssertNotEqual(degraded["PATH"]?.split(separator: ":").first.map(String.init), "/shell/bin")
|
|
324
|
+
XCTAssertEqual(recovered["PATH"]?.split(separator: ":").first.map(String.init), "/shell/bin")
|
|
325
|
+
}
|
|
326
|
+
|
|
245
327
|
func testTranscriptionBootstrapRepairsStaleWhisperDaemonMarker() throws {
|
|
246
328
|
let tempURL = FileManager.default.temporaryDirectory
|
|
247
329
|
.appendingPathComponent("AgentCLITests-\(UUID().uuidString)", isDirectory: true)
|
|
@@ -4,6 +4,66 @@
|
|
|
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.102.1</title>
|
|
9
|
+
<pubDate>Sat, 25 Jul 2026 18:58:28 +0000</pubDate>
|
|
10
|
+
<link>https://github.com/basnijholt/agent-cli</link>
|
|
11
|
+
<sparkle:version>198</sparkle:version>
|
|
12
|
+
<sparkle:shortVersionString>0.102.1</sparkle:shortVersionString>
|
|
13
|
+
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
14
|
+
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
15
|
+
<description sparkle:format="markdown"><![CDATA[## Bug fixes
|
|
16
|
+
|
|
17
|
+
* **Transcription now starts ~1.3s sooner after pressing the hotkey.** The macOS app spawned a login + interactive shell (`zsh -lic`) to discover `PATH` on *every* command it ran, costing 1.1–1.4s with a typical dotfiles setup. The recording pill appeared immediately but the microphone did not open until that shell finished, so speaking right away lost the first words. The login shell `PATH` is now resolved once per app launch, during the existing startup warm-up. Measured hotkey to first audio chunk: ~1.8s → ~0.4–0.6s. (#622)
|
|
18
|
+
* Only successful lookups are cached, so a login shell that fails once does not leave the app on a degraded `PATH` for the rest of the session.
|
|
19
|
+
* *Install or Update CLI* still re-probes, so a relocated `agent-cli` binary is picked up without restarting the app.
|
|
20
|
+
|
|
21
|
+
## Performance
|
|
22
|
+
|
|
23
|
+
* `agent-cli` no longer reads its own distribution metadata on startup. `__version__` resolves lazily, saving ~29ms on every command. (#622)
|
|
24
|
+
|
|
25
|
+
## Maintenance
|
|
26
|
+
|
|
27
|
+
* ⬆️ Update docker/login-action to v4.5.1 (#621, #619)
|
|
28
|
+
* ⬆️ Update actions/checkout to v7.0.1 (#617)
|
|
29
|
+
* ⬆️ Update release-drafter/release-drafter to v7.6.0 (#614)
|
|
30
|
+
* [pre-commit.ci] pre-commit autoupdate (#616)
|
|
31
|
+
]]></description>
|
|
32
|
+
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.102.1/AgentCLI.zip" length="24329452" type="application/octet-stream" sparkle:edSignature="MQizz/9FfhxJGKQc6I/XXtIUBLVPh20yWi/kvfE7xBpoQGPF4yE4C0T1Ex1WpU3im/vRLrMIbZMv0+yHYTifBQ=="/>
|
|
33
|
+
</item>
|
|
34
|
+
<item>
|
|
35
|
+
<title>0.102.0</title>
|
|
36
|
+
<pubDate>Tue, 14 Jul 2026 05:57:01 +0000</pubDate>
|
|
37
|
+
<link>https://github.com/basnijholt/agent-cli</link>
|
|
38
|
+
<sparkle:version>197</sparkle:version>
|
|
39
|
+
<sparkle:shortVersionString>0.102.0</sparkle:shortVersionString>
|
|
40
|
+
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
41
|
+
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
42
|
+
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
43
|
+
|
|
44
|
+
* Fix Wyoming TTS voice selection and metadata (#613) @basnijholt
|
|
45
|
+
* ⬆️ Update actions/checkout action to v7 (#598) @[renovate[bot]](https://github.com/apps/renovate)
|
|
46
|
+
* ⬆️ Update sparkle-project/Sparkle to v2.9.4 (#607) @[renovate[bot]](https://github.com/apps/renovate)
|
|
47
|
+
* [pre-commit.ci] pre-commit autoupdate (#612) @[pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci)
|
|
48
|
+
* ⬆️ Update astral-sh/setup-uv action to v8.3.2 (#611) @[renovate[bot]](https://github.com/apps/renovate)
|
|
49
|
+
* ⬆️ Update astral-sh/setup-uv action to v8.3.1 (#610) @[renovate[bot]](https://github.com/apps/renovate)
|
|
50
|
+
* ⬆️ Update astral-sh/setup-uv action to v8.3.0 (#609) @[renovate[bot]](https://github.com/apps/renovate)
|
|
51
|
+
* ⬆️ Update docker/login-action action to v4.4.0 (#608) @[renovate[bot]](https://github.com/apps/renovate)
|
|
52
|
+
* ⬆️ Update docker/setup-buildx-action action to v4.2.0 (#606) @[renovate[bot]](https://github.com/apps/renovate)
|
|
53
|
+
* ⬆️ Update docker/metadata-action action to v6.2.0 (#605) @[renovate[bot]](https://github.com/apps/renovate)
|
|
54
|
+
* ⬆️ Update docker/login-action action to v4.3.0 (#604) @[renovate[bot]](https://github.com/apps/renovate)
|
|
55
|
+
* ⬆️ Update docker/build-push-action action to v7.3.0 (#603) @[renovate[bot]](https://github.com/apps/renovate)
|
|
56
|
+
* [pre-commit.ci] pre-commit autoupdate (#602) @[pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci)
|
|
57
|
+
* ⬆️ Update release-drafter/release-drafter action to v7.5.1 (#601) @[renovate[bot]](https://github.com/apps/renovate)
|
|
58
|
+
* ⬆️ Update actions/setup-python action to v6.3.0 (#600) @[renovate[bot]](https://github.com/apps/renovate)
|
|
59
|
+
* [pre-commit.ci] pre-commit autoupdate (#599) @[pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci)
|
|
60
|
+
* ⬆️ Update release-drafter/release-drafter action to v7.4.0 (#596) @[renovate[bot]](https://github.com/apps/renovate)
|
|
61
|
+
* [pre-commit.ci] pre-commit autoupdate (#595) @[pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci)
|
|
62
|
+
* Pick best available installer for generic Python project setup (#591) @basnijholt
|
|
63
|
+
|
|
64
|
+
]]></description>
|
|
65
|
+
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.102.0/AgentCLI.zip" length="24388215" type="application/octet-stream" sparkle:edSignature="1b3tpgDf/VolJ9MLr0R5N9gPmOkYG7Uf6ZyXQTNLPTfiMeo2malwMj5kzTFcCp7xQr/jijUB7/nRNoSzZiBnCg=="/>
|
|
66
|
+
</item>
|
|
7
67
|
<item>
|
|
8
68
|
<title>0.101.0</title>
|
|
9
69
|
<pubDate>Wed, 10 Jun 2026 18:21:45 +0000</pubDate>
|
|
@@ -130,37 +190,5 @@
|
|
|
130
190
|
]]></description>
|
|
131
191
|
<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=="/>
|
|
132
192
|
</item>
|
|
133
|
-
<item>
|
|
134
|
-
<title>0.98.0</title>
|
|
135
|
-
<pubDate>Thu, 04 Jun 2026 16:25:34 +0000</pubDate>
|
|
136
|
-
<link>https://github.com/basnijholt/agent-cli</link>
|
|
137
|
-
<sparkle:version>188</sparkle:version>
|
|
138
|
-
<sparkle:shortVersionString>0.98.0</sparkle:shortVersionString>
|
|
139
|
-
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
140
|
-
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
141
|
-
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
142
|
-
|
|
143
|
-
* Document NeMo Parakeet setup (#573) @basnijholt
|
|
144
|
-
* Add macOS transcription backend picker (#574) @basnijholt
|
|
145
|
-
* Reference upstream NeMo validation_ds fix (#577) @basnijholt
|
|
146
|
-
|
|
147
|
-
]]></description>
|
|
148
|
-
<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=="/>
|
|
149
|
-
</item>
|
|
150
|
-
<item>
|
|
151
|
-
<title>0.97.2</title>
|
|
152
|
-
<pubDate>Thu, 04 Jun 2026 07:34:52 +0000</pubDate>
|
|
153
|
-
<link>https://github.com/basnijholt/agent-cli</link>
|
|
154
|
-
<sparkle:version>187</sparkle:version>
|
|
155
|
-
<sparkle:shortVersionString>0.97.2</sparkle:shortVersionString>
|
|
156
|
-
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
157
|
-
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
158
|
-
<description sparkle:format="markdown"><![CDATA[Patch release for NeMo daemon runtime support and parakeet-unified-en-0.6b live transcription.
|
|
159
|
-
|
|
160
|
-
- Propagate daemon uv path to child agent-cli process so NeMo runtime re-exec can find uv under launchd/systemd.
|
|
161
|
-
- Normalize NeMo models with cfg.validation_ds=None before transcribe; fixes parakeet-unified-en-0.6b crash in NeMo RNNT transcribe.
|
|
162
|
-
]]></description>
|
|
163
|
-
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.97.2/AgentCLI.zip" length="22876496" type="application/octet-stream" sparkle:edSignature="72nAmUfSh/gUt4O4phVrYV+RvfsrhxzQzMlx67Q8dAwD3LXzRNwUyeop6KKaUqasT2QXVHnh8k1grjGDoOTyAA=="/>
|
|
164
|
-
</item>
|
|
165
193
|
</channel>
|
|
166
194
|
</rss>
|
|
@@ -60,6 +60,10 @@ faster-whisper = ["agent-cli[server]", "faster-whisper>=1.0.0", "ctranslate2>=4.
|
|
|
60
60
|
mlx-whisper = [
|
|
61
61
|
"agent-cli[server]; sys_platform == 'darwin' and platform_machine == 'arm64'",
|
|
62
62
|
"mlx-whisper>=0.4.0; sys_platform == 'darwin' and platform_machine == 'arm64'",
|
|
63
|
+
# mlx-whisper only requires mlx>=0.11, but the MLX backend calls the
|
|
64
|
+
# top-level mx.clear_cache(), which does not exist before mlx 0.24
|
|
65
|
+
# (0.23.2 and older only expose the deprecated mx.metal.clear_cache).
|
|
66
|
+
"mlx>=0.24; sys_platform == 'darwin' and platform_machine == 'arm64'",
|
|
63
67
|
]
|
|
64
68
|
whisper-transformers = ["agent-cli[server]", "transformers>=4.30.0", "torch>=2.0.0"]
|
|
65
69
|
nemo-whisper = [
|