agent-cli 0.96.3__tar.gz → 0.96.4__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.96.3 → agent_cli-0.96.4}/Casks/agent-cli.rb +2 -2
- {agent_cli-0.96.3 → agent_cli-0.96.4}/PKG-INFO +1 -1
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +17 -49
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +23 -1
- agent_cli-0.96.4/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +26 -0
- agent_cli-0.96.4/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +64 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +10 -34
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +89 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/appcast.xml +16 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_macos_app.py +2 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude-plugin/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.cursorrules +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.dockerignore +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.env.example +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/logo.svg +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/release-drafter.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/renovate.json +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/scripts/update_cask.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/release.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.gitignore +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.jscpd.json +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.prompts/docs-review.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/.prompts/pr-review.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/CLAUDE.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/LICENSE +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/__main__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_extras.json +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/_tools.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/config.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/constants.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/process.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/common.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/services.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/opts.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/py.typed +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/common.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/docker-compose.yml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/CNAME +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/architecture/index.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/architecture/memory.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/architecture/rag.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/assistant.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/chat.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/config.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/daemon.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/dev.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/index.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/install-services.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/memory.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/server/index.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/speak.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/speakers.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/start-services.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/configuration.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/getting-started.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/index.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/docker.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/index.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/linux.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/macos.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/nixos.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/installation/windows.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/logo-clean.svg +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/docs/system-integration.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/justfile +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/README.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/pyproject.toml +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/reddit.md +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/shell.nix +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/conftest.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_audio.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_sse.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_vad.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/core/test_watch.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_project.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/install/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/install/test_extras.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_client.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_files.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_store.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/mocks/audio.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/mocks/llm.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/__init__.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_history.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_store.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_alignment.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_api.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_api_integration.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_asr.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_cli.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_config.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_daemon.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_diarization.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_env_vars.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_json_output.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_llm.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_process_manager.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_server_tts.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_services.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_tools.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_tts.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_update_cask.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_wake_word.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/uv.lock +0 -0
- {agent_cli-0.96.3 → agent_cli-0.96.4}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
cask "agent-cli" do
|
|
2
|
-
version "0.96.
|
|
3
|
-
sha256 "
|
|
2
|
+
version "0.96.3"
|
|
3
|
+
sha256 "6346b0f335005094152ceb987b5e7d44fb08d817a07ca3433a05fba3fa85ec2f"
|
|
4
4
|
|
|
5
5
|
url "https://github.com/basnijholt/agent-cli/releases/download/v#{version}/AgentCLI.dmg"
|
|
6
6
|
name "Agent CLI"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.96.
|
|
3
|
+
Version: 0.96.4
|
|
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>
|
{agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift
RENAMED
|
@@ -18,11 +18,6 @@ private enum HoldTranscriptionState {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
private struct ActiveCommandActivity {
|
|
22
|
-
let title: String
|
|
23
|
-
let startedAt: Date
|
|
24
|
-
}
|
|
25
|
-
|
|
26
21
|
@MainActor
|
|
27
22
|
final class AgentCommandRunner: ObservableObject {
|
|
28
23
|
static let shared = AgentCommandRunner()
|
|
@@ -36,11 +31,7 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
36
31
|
private var recordingIndicator = RecordingIndicatorController()
|
|
37
32
|
private let pasteController: TranscriptPasteController
|
|
38
33
|
private let bootstrap: AgentBootstrap
|
|
39
|
-
private var
|
|
40
|
-
private var recordingStartedAt: Date?
|
|
41
|
-
private var transcribingStartedAt: Date?
|
|
42
|
-
private var activeCommandActivities: [String: ActiveCommandActivity] = [:]
|
|
43
|
-
private var activeCommandActivityOrder: [String] = []
|
|
34
|
+
private var activityTracker = MenuActivityTracker()
|
|
44
35
|
private var pendingStopRecordingCommands: Set<String> = []
|
|
45
36
|
private var holdTranscriptionState: HoldTranscriptionState = .idle
|
|
46
37
|
private var holdToTranscribePasteTarget: FocusedTextTarget?
|
|
@@ -60,26 +51,16 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
60
51
|
}
|
|
61
52
|
|
|
62
53
|
func menuActivityStatus(now: Date) -> MenuActivityStatus {
|
|
63
|
-
if bootstrapPhase.isPreparing {
|
|
64
|
-
return MenuActivityStatus.active(
|
|
65
|
-
title: bootstrapPhase.activityTitle,
|
|
66
|
-
startedAt: bootstrapPhaseStartedAt ?? now,
|
|
67
|
-
now: now
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
if let transcribingStartedAt {
|
|
71
|
-
return MenuActivityStatus.active(title: "Transcribing", startedAt: transcribingStartedAt, now: now)
|
|
72
|
-
}
|
|
73
|
-
if isRecording {
|
|
74
|
-
return MenuActivityStatus.active(title: "Recording", startedAt: recordingStartedAt ?? now, now: now)
|
|
75
|
-
}
|
|
76
|
-
if let activity = currentCommandActivity {
|
|
77
|
-
return MenuActivityStatus.active(title: activity.title, startedAt: activity.startedAt, now: now)
|
|
78
|
-
}
|
|
79
54
|
if hasLastError && statusMessage.localizedCaseInsensitiveContains("failed") {
|
|
80
|
-
return
|
|
55
|
+
return activityTracker.status(
|
|
56
|
+
now: now,
|
|
57
|
+
fallback: MenuActivityStatus.inactive(message: "Last command failed")
|
|
58
|
+
)
|
|
81
59
|
}
|
|
82
|
-
return
|
|
60
|
+
return activityTracker.status(
|
|
61
|
+
now: now,
|
|
62
|
+
fallback: MenuActivityStatus.completed(title: Self.compactMenuStatus(statusMessage))
|
|
63
|
+
)
|
|
83
64
|
}
|
|
84
65
|
|
|
85
66
|
var menuBarIconState: MenuBarIconState {
|
|
@@ -146,10 +127,10 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
146
127
|
bootstrapPhase = phase
|
|
147
128
|
if phase.isPreparing {
|
|
148
129
|
if !wasPreparing || phaseChanged {
|
|
149
|
-
|
|
130
|
+
activityTracker.beginBootstrap(title: phase.activityTitle)
|
|
150
131
|
}
|
|
151
132
|
} else {
|
|
152
|
-
|
|
133
|
+
activityTracker.finishBootstrap()
|
|
153
134
|
}
|
|
154
135
|
}
|
|
155
136
|
|
|
@@ -390,34 +371,21 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
390
371
|
pendingStopRecordingCommands.remove(command.identifier)
|
|
391
372
|
}
|
|
392
373
|
|
|
393
|
-
private var currentCommandActivity: ActiveCommandActivity? {
|
|
394
|
-
activeCommandActivityOrder.reversed().compactMap { activeCommandActivities[$0] }.first
|
|
395
|
-
}
|
|
396
|
-
|
|
397
374
|
private func beginCommandActivity(for command: AgentCommand) {
|
|
398
|
-
|
|
399
|
-
activeCommandActivityOrder.append(command.identifier)
|
|
400
|
-
}
|
|
401
|
-
activeCommandActivities[command.identifier] = ActiveCommandActivity(
|
|
402
|
-
title: command.menuActivityTitle,
|
|
403
|
-
startedAt: Date()
|
|
404
|
-
)
|
|
375
|
+
activityTracker.beginCommand(identifier: command.identifier, title: command.menuActivityTitle)
|
|
405
376
|
}
|
|
406
377
|
|
|
407
378
|
private func finishCommandActivity(for command: AgentCommand) {
|
|
408
|
-
|
|
409
|
-
activeCommandActivityOrder.removeAll { $0 == command.identifier }
|
|
379
|
+
activityTracker.finishCommand(identifier: command.identifier)
|
|
410
380
|
}
|
|
411
381
|
|
|
412
382
|
private func beginTranscribingActivity() {
|
|
413
|
-
|
|
414
|
-
transcribingStartedAt = Date()
|
|
415
|
-
}
|
|
383
|
+
activityTracker.beginTranscribing()
|
|
416
384
|
}
|
|
417
385
|
|
|
418
386
|
private func clearTranscribingActivityIfFinished() {
|
|
419
387
|
if pendingStopRecordingCommands.isEmpty && !holdTranscriptionState.isFinishing {
|
|
420
|
-
|
|
388
|
+
activityTracker.finishTranscribing()
|
|
421
389
|
}
|
|
422
390
|
}
|
|
423
391
|
|
|
@@ -447,7 +415,7 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
447
415
|
recordingIndicator.begin(for: command)
|
|
448
416
|
isRecording = recordingIndicator.isRecording
|
|
449
417
|
if !wasRecording && isRecording {
|
|
450
|
-
|
|
418
|
+
activityTracker.beginRecording()
|
|
451
419
|
}
|
|
452
420
|
return true
|
|
453
421
|
}
|
|
@@ -456,7 +424,7 @@ final class AgentCommandRunner: ObservableObject {
|
|
|
456
424
|
recordingIndicator.end(for: command)
|
|
457
425
|
isRecording = recordingIndicator.isRecording
|
|
458
426
|
if !isRecording {
|
|
459
|
-
|
|
427
|
+
activityTracker.finishRecording()
|
|
460
428
|
}
|
|
461
429
|
}
|
|
462
430
|
|
|
@@ -12,6 +12,21 @@ private enum AgentCLIRuntimeMode: Equatable {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
private final class UserInstalledCLICheckCache {
|
|
16
|
+
private let lock = NSLock()
|
|
17
|
+
private var isAvailable = false
|
|
18
|
+
|
|
19
|
+
func hasSuccessfulCheck() -> Bool {
|
|
20
|
+
lock.withLock { isAvailable }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
func update(with result: CommandResult) {
|
|
24
|
+
lock.withLock {
|
|
25
|
+
isAvailable = result.exitCode == 0
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
typealias AgentProcessRunner = (URL, [String], [String: String]) -> CommandResult
|
|
16
31
|
typealias LocalhostConnector = (UInt16) -> Bool
|
|
17
32
|
|
|
@@ -42,6 +57,7 @@ struct AgentRuntime {
|
|
|
42
57
|
private let userDefaults: UserDefaults
|
|
43
58
|
private let processRunner: AgentProcessRunner
|
|
44
59
|
private let localhostConnector: LocalhostConnector
|
|
60
|
+
private let userInstalledCLICheckCache: UserInstalledCLICheckCache
|
|
45
61
|
private let whisperReadyTimeout: TimeInterval
|
|
46
62
|
let appSupportURL: URL
|
|
47
63
|
let bundledUVURL: URL
|
|
@@ -73,6 +89,7 @@ struct AgentRuntime {
|
|
|
73
89
|
self.userDefaults = userDefaults
|
|
74
90
|
self.processRunner = processRunner
|
|
75
91
|
self.localhostConnector = localhostConnector
|
|
92
|
+
self.userInstalledCLICheckCache = UserInstalledCLICheckCache()
|
|
76
93
|
self.whisperReadyTimeout = whisperReadyTimeout
|
|
77
94
|
|
|
78
95
|
if let override = environment["AGENTCLI_APP_SUPPORT_DIR"], !override.isEmpty {
|
|
@@ -196,8 +213,13 @@ struct AgentRuntime {
|
|
|
196
213
|
}
|
|
197
214
|
|
|
198
215
|
if mode == .userInstalled {
|
|
216
|
+
if !force, userInstalledCLICheckCache.hasSuccessfulCheck() {
|
|
217
|
+
return CommandResult(exitCode: 0, output: "")
|
|
218
|
+
}
|
|
199
219
|
progress(.checkingRuntime)
|
|
200
|
-
|
|
220
|
+
let result = ensureUserInstalledCLIAvailable()
|
|
221
|
+
userInstalledCLICheckCache.update(with: result)
|
|
222
|
+
return result
|
|
201
223
|
}
|
|
202
224
|
|
|
203
225
|
if !force,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import AppKit
|
|
2
|
+
|
|
3
|
+
@MainActor
|
|
4
|
+
final class MenuActivityStatusRow {
|
|
5
|
+
private let prefix: String
|
|
6
|
+
private let item: NSMenuItem
|
|
7
|
+
private let separator: NSMenuItem
|
|
8
|
+
|
|
9
|
+
init(prefix: String) {
|
|
10
|
+
self.prefix = prefix
|
|
11
|
+
item = NSMenuItem(title: "", action: nil, keyEquivalent: "")
|
|
12
|
+
item.isEnabled = false
|
|
13
|
+
separator = .separator()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
func add(to menu: NSMenu) {
|
|
17
|
+
menu.addItem(item)
|
|
18
|
+
menu.addItem(separator)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
func update(_ activityStatus: MenuActivityStatus) {
|
|
22
|
+
item.title = "\(prefix)\(activityStatus.message)"
|
|
23
|
+
item.isHidden = !activityStatus.isActive
|
|
24
|
+
separator.isHidden = !activityStatus.isActive
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
struct MenuActivityTracker {
|
|
4
|
+
private struct Activity {
|
|
5
|
+
let title: String
|
|
6
|
+
let startedAt: Date
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
private var bootstrapActivity: Activity?
|
|
10
|
+
private var recordingActivity: Activity?
|
|
11
|
+
private var transcribingActivity: Activity?
|
|
12
|
+
private var commandActivities: [String: Activity] = [:]
|
|
13
|
+
private var commandActivityOrder: [String] = []
|
|
14
|
+
|
|
15
|
+
mutating func beginBootstrap(title: String, at startedAt: Date = Date()) {
|
|
16
|
+
bootstrapActivity = Activity(title: title, startedAt: startedAt)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
mutating func finishBootstrap() {
|
|
20
|
+
bootstrapActivity = nil
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
mutating func beginRecording(at startedAt: Date = Date()) {
|
|
24
|
+
guard recordingActivity == nil else { return }
|
|
25
|
+
recordingActivity = Activity(title: "Recording", startedAt: startedAt)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
mutating func finishRecording() {
|
|
29
|
+
recordingActivity = nil
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
mutating func beginTranscribing(at startedAt: Date = Date()) {
|
|
33
|
+
guard transcribingActivity == nil else { return }
|
|
34
|
+
transcribingActivity = Activity(title: "Transcribing", startedAt: startedAt)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
mutating func finishTranscribing() {
|
|
38
|
+
transcribingActivity = nil
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
mutating func beginCommand(identifier: String, title: String, at startedAt: Date = Date()) {
|
|
42
|
+
if commandActivities[identifier] == nil {
|
|
43
|
+
commandActivityOrder.append(identifier)
|
|
44
|
+
}
|
|
45
|
+
commandActivities[identifier] = Activity(title: title, startedAt: startedAt)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
mutating func finishCommand(identifier: String) {
|
|
49
|
+
commandActivities.removeValue(forKey: identifier)
|
|
50
|
+
commandActivityOrder.removeAll { $0 == identifier }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
func status(now: Date = Date(), fallback: MenuActivityStatus) -> MenuActivityStatus {
|
|
54
|
+
guard let activity = currentActivity else { return fallback }
|
|
55
|
+
return MenuActivityStatus.active(title: activity.title, startedAt: activity.startedAt, now: now)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private var currentActivity: Activity? {
|
|
59
|
+
bootstrapActivity
|
|
60
|
+
?? transcribingActivity
|
|
61
|
+
?? recordingActivity
|
|
62
|
+
?? commandActivityOrder.reversed().compactMap { commandActivities[$0] }.first
|
|
63
|
+
}
|
|
64
|
+
}
|
{agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift
RENAMED
|
@@ -20,10 +20,8 @@ final class StatusMenuController: NSObject, NSMenuDelegate {
|
|
|
20
20
|
private let recentRecordingsMenu = NSMenu()
|
|
21
21
|
private let troubleshootingMenu = NSMenu()
|
|
22
22
|
private var voiceStatusItem: NSMenuItem?
|
|
23
|
-
private var
|
|
24
|
-
private var
|
|
25
|
-
private var troubleshootingActivityStatusItem: NSMenuItem?
|
|
26
|
-
private var troubleshootingActivityStatusSeparator: NSMenuItem?
|
|
23
|
+
private var recentActivityStatusRow: MenuActivityStatusRow?
|
|
24
|
+
private var troubleshootingActivityStatusRow: MenuActivityStatusRow?
|
|
27
25
|
private var statusRefreshTimer: Timer?
|
|
28
26
|
|
|
29
27
|
private override init() {
|
|
@@ -113,12 +111,7 @@ final class StatusMenuController: NSObject, NSMenuDelegate {
|
|
|
113
111
|
|
|
114
112
|
private func rebuildRecentRecordingsMenu() {
|
|
115
113
|
recentRecordingsMenu.removeAllItems()
|
|
116
|
-
|
|
117
|
-
let activitySeparator = NSMenuItem.separator()
|
|
118
|
-
recentRecordingsMenu.addItem(activityItem)
|
|
119
|
-
recentRecordingsMenu.addItem(activitySeparator)
|
|
120
|
-
recentActivityStatusItem = activityItem
|
|
121
|
-
recentActivityStatusSeparator = activitySeparator
|
|
114
|
+
recentActivityStatusRow = activityStatusRow(in: recentRecordingsMenu)
|
|
122
115
|
|
|
123
116
|
let recentTranscriptions = RecentTranscriptionReader.recentTranscriptions()
|
|
124
117
|
if recentTranscriptions.isEmpty {
|
|
@@ -141,12 +134,7 @@ final class StatusMenuController: NSObject, NSMenuDelegate {
|
|
|
141
134
|
|
|
142
135
|
private func rebuildTroubleshootingMenu() {
|
|
143
136
|
troubleshootingMenu.removeAllItems()
|
|
144
|
-
|
|
145
|
-
let activitySeparator = NSMenuItem.separator()
|
|
146
|
-
troubleshootingMenu.addItem(activityItem)
|
|
147
|
-
troubleshootingMenu.addItem(activitySeparator)
|
|
148
|
-
troubleshootingActivityStatusItem = activityItem
|
|
149
|
-
troubleshootingActivityStatusSeparator = activitySeparator
|
|
137
|
+
troubleshootingActivityStatusRow = activityStatusRow(in: troubleshootingMenu)
|
|
150
138
|
|
|
151
139
|
troubleshootingMenu.addItem(actionItem(
|
|
152
140
|
"Voice Service Status",
|
|
@@ -240,26 +228,14 @@ final class StatusMenuController: NSObject, NSMenuDelegate {
|
|
|
240
228
|
}
|
|
241
229
|
|
|
242
230
|
private func updateSubmenuActivityStatus(_ activityStatus: MenuActivityStatus) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
separator: recentActivityStatusSeparator,
|
|
246
|
-
activityStatus: activityStatus
|
|
247
|
-
)
|
|
248
|
-
updateSubmenuActivityStatus(
|
|
249
|
-
item: troubleshootingActivityStatusItem,
|
|
250
|
-
separator: troubleshootingActivityStatusSeparator,
|
|
251
|
-
activityStatus: activityStatus
|
|
252
|
-
)
|
|
231
|
+
recentActivityStatusRow?.update(activityStatus)
|
|
232
|
+
troubleshootingActivityStatusRow?.update(activityStatus)
|
|
253
233
|
}
|
|
254
234
|
|
|
255
|
-
private func
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
) {
|
|
260
|
-
item?.title = "\(Self.activityStatusTitlePrefix)\(activityStatus.message)"
|
|
261
|
-
item?.isHidden = !activityStatus.isActive
|
|
262
|
-
separator?.isHidden = !activityStatus.isActive
|
|
235
|
+
private func activityStatusRow(in menu: NSMenu) -> MenuActivityStatusRow {
|
|
236
|
+
let row = MenuActivityStatusRow(prefix: Self.activityStatusTitlePrefix)
|
|
237
|
+
row.add(to: menu)
|
|
238
|
+
return row
|
|
263
239
|
}
|
|
264
240
|
|
|
265
241
|
private var usesUserInstalledAgentCLI: Bool {
|
{agent_cli-0.96.3 → agent_cli-0.96.4}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift
RENAMED
|
@@ -108,6 +108,33 @@ final class AgentCommandTests: XCTestCase {
|
|
|
108
108
|
XCTAssertTrue(runtime.commandEnvironment()["PATH"]?.contains("/custom/bin") == true)
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
+
func testUserInstalledRuntimeCachesSuccessfulCLIAvailabilityCheck() {
|
|
112
|
+
let defaults = UserDefaults(suiteName: "AgentCLITests.user-runtime-cache")!
|
|
113
|
+
defaults.removePersistentDomain(forName: "AgentCLITests.user-runtime-cache")
|
|
114
|
+
defaults.set(true, forKey: RuntimeSettings.useUserInstalledAgentCLIKey)
|
|
115
|
+
var processArguments: [[String]] = []
|
|
116
|
+
let runtime = AgentRuntime(
|
|
117
|
+
environment: [
|
|
118
|
+
"AGENTCLI_APP_SUPPORT_DIR": "/tmp/agentcli-test-support",
|
|
119
|
+
"PATH": "/custom/bin",
|
|
120
|
+
"SHELL": "/no/such/shell",
|
|
121
|
+
],
|
|
122
|
+
userDefaults: defaults,
|
|
123
|
+
processRunner: { _, arguments, _ in
|
|
124
|
+
processArguments.append(arguments)
|
|
125
|
+
return CommandResult(exitCode: 0, output: "agent-cli 1.2.3")
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
var phases: [BootstrapPhase] = []
|
|
130
|
+
XCTAssertEqual(runtime.ensureReady(for: .cliRuntime) { phases.append($0) }.exitCode, 0)
|
|
131
|
+
XCTAssertEqual(runtime.ensureReady(for: .cliRuntime) { phases.append($0) }.exitCode, 0)
|
|
132
|
+
XCTAssertEqual(runtime.ensureReady(for: .cliRuntime, force: true) { phases.append($0) }.exitCode, 0)
|
|
133
|
+
|
|
134
|
+
XCTAssertEqual(processArguments, [["agent-cli", "--version"], ["agent-cli", "--version"]])
|
|
135
|
+
XCTAssertEqual(phases, [.checkingRuntime, .checkingRuntime])
|
|
136
|
+
}
|
|
137
|
+
|
|
111
138
|
func testUserInstalledCLIPathUsesLoginShellPathAndCommonUvBins() {
|
|
112
139
|
let defaults = UserDefaults(suiteName: "AgentCLITests.user-runtime-path")!
|
|
113
140
|
defaults.removePersistentDomain(forName: "AgentCLITests.user-runtime-path")
|
|
@@ -297,6 +324,68 @@ final class AgentCommandTests: XCTestCase {
|
|
|
297
324
|
XCTAssertFalse(MenuActivityStatus.completed(title: "Ready").isActive)
|
|
298
325
|
}
|
|
299
326
|
|
|
327
|
+
func testMenuActivityTrackerPrioritizesAndRestoresActivities() {
|
|
328
|
+
var tracker = MenuActivityTracker()
|
|
329
|
+
let startedAt = Date(timeIntervalSinceReferenceDate: 1_000)
|
|
330
|
+
let now = Date(timeIntervalSinceReferenceDate: 1_065)
|
|
331
|
+
let fallback = MenuActivityStatus.completed(title: "Ready")
|
|
332
|
+
|
|
333
|
+
tracker.beginCommand(identifier: "autocorrect", title: "Autocorrect Clipboard", at: startedAt)
|
|
334
|
+
XCTAssertEqual(
|
|
335
|
+
tracker.status(now: now, fallback: fallback),
|
|
336
|
+
MenuActivityStatus.active(title: "Autocorrect Clipboard", startedAt: startedAt, now: now)
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
tracker.beginRecording(at: startedAt.addingTimeInterval(10))
|
|
340
|
+
XCTAssertEqual(
|
|
341
|
+
tracker.status(now: now, fallback: fallback),
|
|
342
|
+
MenuActivityStatus.active(title: "Recording", startedAt: startedAt.addingTimeInterval(10), now: now)
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
tracker.beginTranscribing(at: startedAt.addingTimeInterval(20))
|
|
346
|
+
XCTAssertEqual(
|
|
347
|
+
tracker.status(now: now, fallback: fallback),
|
|
348
|
+
MenuActivityStatus.active(title: "Transcribing", startedAt: startedAt.addingTimeInterval(20), now: now)
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
tracker.beginBootstrap(title: "Installing CLI runtime", at: startedAt.addingTimeInterval(30))
|
|
352
|
+
XCTAssertEqual(
|
|
353
|
+
tracker.status(now: now, fallback: fallback),
|
|
354
|
+
MenuActivityStatus.active(
|
|
355
|
+
title: "Installing CLI runtime",
|
|
356
|
+
startedAt: startedAt.addingTimeInterval(30),
|
|
357
|
+
now: now
|
|
358
|
+
)
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
tracker.finishBootstrap()
|
|
362
|
+
XCTAssertEqual(
|
|
363
|
+
tracker.status(now: now, fallback: fallback),
|
|
364
|
+
MenuActivityStatus.active(title: "Transcribing", startedAt: startedAt.addingTimeInterval(20), now: now)
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
tracker.finishTranscribing()
|
|
368
|
+
tracker.finishRecording()
|
|
369
|
+
tracker.finishCommand(identifier: "autocorrect")
|
|
370
|
+
|
|
371
|
+
XCTAssertEqual(tracker.status(now: now, fallback: fallback), fallback)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
func testMenuActivityTrackerRestoresPreviousCommandWhenLatestFinishes() {
|
|
375
|
+
var tracker = MenuActivityTracker()
|
|
376
|
+
let startedAt = Date(timeIntervalSinceReferenceDate: 2_000)
|
|
377
|
+
let fallback = MenuActivityStatus.completed(title: "Ready")
|
|
378
|
+
|
|
379
|
+
tracker.beginCommand(identifier: "first", title: "First Command", at: startedAt)
|
|
380
|
+
tracker.beginCommand(identifier: "second", title: "Second Command", at: startedAt.addingTimeInterval(4))
|
|
381
|
+
tracker.finishCommand(identifier: "second")
|
|
382
|
+
|
|
383
|
+
XCTAssertEqual(
|
|
384
|
+
tracker.status(now: startedAt.addingTimeInterval(12), fallback: fallback),
|
|
385
|
+
MenuActivityStatus.active(title: "First Command", startedAt: startedAt, now: startedAt.addingTimeInterval(12))
|
|
386
|
+
)
|
|
387
|
+
}
|
|
388
|
+
|
|
300
389
|
@MainActor
|
|
301
390
|
func testIdleMenuStatusUsesCompletedCheckmark() {
|
|
302
391
|
let runner = AgentCommandRunner { _, _, _ in
|
|
@@ -4,6 +4,22 @@
|
|
|
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.96.3</title>
|
|
9
|
+
<pubDate>Fri, 29 May 2026 06:09:58 +0000</pubDate>
|
|
10
|
+
<link>https://github.com/basnijholt/agent-cli</link>
|
|
11
|
+
<sparkle:version>177</sparkle:version>
|
|
12
|
+
<sparkle:shortVersionString>0.96.3</sparkle:shortVersionString>
|
|
13
|
+
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
|
|
14
|
+
<sparkle:hardwareRequirements>arm64</sparkle:hardwareRequirements>
|
|
15
|
+
<description sparkle:format="markdown"><![CDATA[## What’s Changed
|
|
16
|
+
|
|
17
|
+
* Restore volume-based wave overlay (#550) @basnijholt
|
|
18
|
+
* Add live menu activity timers (#549) @basnijholt
|
|
19
|
+
|
|
20
|
+
]]></description>
|
|
21
|
+
<enclosure url="https://github.com/basnijholt/agent-cli/releases/download/v0.96.3/AgentCLI.zip" length="22735617" type="application/octet-stream" sparkle:edSignature="GIH6s55wnjpesAtPrHdk5btvtZfxkFrqr1v0tX69WWlHdA9w+qTQFszuw8/K21wsmqnp3ynacGP7aa4YqrB7Bg=="/>
|
|
22
|
+
</item>
|
|
7
23
|
<item>
|
|
8
24
|
<title>0.96.2</title>
|
|
9
25
|
<pubDate>Fri, 29 May 2026 05:56:37 +0000</pubDate>
|
|
@@ -51,6 +51,8 @@ def test_macos_app_package_files_exist() -> None:
|
|
|
51
51
|
"FocusedTextTarget.swift",
|
|
52
52
|
"MenuBarIcon.swift",
|
|
53
53
|
"MenuActivityStatus.swift",
|
|
54
|
+
"MenuActivityStatusRow.swift",
|
|
55
|
+
"MenuActivityTracker.swift",
|
|
54
56
|
"RecordingIndicatorController.swift",
|
|
55
57
|
"SettingsWindowController.swift",
|
|
56
58
|
"Shortcuts.swift",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|