agent-cli 0.95.3__tar.gz → 0.95.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.95.3 → agent_cli-0.95.4}/PKG-INFO +1 -1
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/README.md +5 -3
- agent_cli-0.95.4/macos/AgentCLI/Resources/dmg-background.svg +8 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +12 -1
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +1 -0
- agent_cli-0.95.4/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +173 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +23 -0
- agent_cli-0.95.4/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +25 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/build-macos-app.sh +94 -7
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/test-macos-app-e2e.sh +9 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_macos_app.py +32 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude-plugin/README.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.cursorrules +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.dockerignore +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.env.example +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/logo.svg +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/release-drafter.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/renovate.json +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/release.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.gitignore +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.jscpd.json +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.prompts/docs-review.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/.prompts/pr-review.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/CLAUDE.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/LICENSE +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/README.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/__main__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_extras.json +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/_tools.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/config.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/constants.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/process.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/tmux.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/common.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/services.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/opts.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/py.typed +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/common.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/docker-compose.yml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/CNAME +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/architecture/index.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/architecture/memory.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/architecture/rag.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/assistant.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/chat.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/config.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/daemon.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/dev.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/index.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/install-services.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/memory.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/server/index.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/speak.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/speakers.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/start-services.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/configuration.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/getting-started.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/index.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/docker.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/index.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/linux.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/macos.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/nixos.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/installation/windows.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/logo-clean.svg +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/docs/system-integration.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/justfile +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Package.resolved +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Package.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/pyproject.toml +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/reddit.md +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/shell.nix +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/conftest.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_audio.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_sse.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_vad.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/core/test_watch.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_cleanup.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_project.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_terminals.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/install/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/install/test_extras.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_client.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_files.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_store.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/mocks/audio.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/mocks/llm.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/__init__.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_history.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_store.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_alignment.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_api.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_api_integration.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_asr.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_cli.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_config.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_daemon.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_diarization.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_env_vars.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_json_output.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_llm.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_process_manager.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_server_tts.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_services.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_tools.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_tts.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_wake_word.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/uv.lock +0 -0
- {agent_cli-0.95.3 → agent_cli-0.95.4}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.95.
|
|
3
|
+
Version: 0.95.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>
|
|
@@ -18,9 +18,11 @@ The packaged app registers native macOS global hotkeys itself:
|
|
|
18
18
|
- `Cmd+Shift+A` autocorrects clipboard text
|
|
19
19
|
- `Cmd+Shift+V` starts voice edit
|
|
20
20
|
|
|
21
|
-
Choose **
|
|
22
|
-
|
|
23
|
-
shortcut parsing, `UserDefaults` storage, and global key-up handlers.
|
|
21
|
+
Choose **Settings...** from the menu bar app to change these shortcuts or enable
|
|
22
|
+
**Start at Login**. The settings UI uses the `KeyboardShortcuts` Swift package
|
|
23
|
+
for shortcut parsing, `UserDefaults` storage, and global key-up handlers. The
|
|
24
|
+
login option uses Apple's login item API for the main app bundle, so macOS may
|
|
25
|
+
require approval in System Settings → General → Login Items.
|
|
24
26
|
|
|
25
27
|
## Build
|
|
26
28
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="360" viewBox="0 0 600 360">
|
|
2
|
+
<rect width="600" height="360" fill="#f6f7f9"/>
|
|
3
|
+
<rect x="28" y="28" width="544" height="304" rx="24" fill="#ffffff" stroke="#d7dbe2"/>
|
|
4
|
+
<path d="M255 180h110" fill="none" stroke="#7b8494" stroke-width="10" stroke-linecap="round"/>
|
|
5
|
+
<path d="M335 140l40 40-40 40" fill="none" stroke="#7b8494" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
|
+
<text x="300" y="78" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif" font-size="24" font-weight="600" fill="#242933">Install Agent CLI</text>
|
|
7
|
+
<text x="300" y="112" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif" font-size="15" fill="#596171">Drag AgentCLI.app to Applications</text>
|
|
8
|
+
</svg>
|
|
@@ -6,6 +6,7 @@ struct AgentCLIApp: App {
|
|
|
6
6
|
@NSApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
|
|
7
7
|
@Environment(\.openWindow) private var openWindow
|
|
8
8
|
@StateObject private var runner = AgentCommandRunner.shared
|
|
9
|
+
@StateObject private var loginItemController = LoginItemController.shared
|
|
9
10
|
@StateObject private var shortcutSummary = ShortcutSummaryState.shared
|
|
10
11
|
|
|
11
12
|
var body: some Scene {
|
|
@@ -38,11 +39,21 @@ struct AgentCLIApp: App {
|
|
|
38
39
|
|
|
39
40
|
Divider()
|
|
40
41
|
|
|
42
|
+
Button {
|
|
43
|
+
loginItemController.toggle()
|
|
44
|
+
} label: {
|
|
45
|
+
Label(
|
|
46
|
+
loginItemController.presentation.menuTitle,
|
|
47
|
+
systemImage: loginItemController.presentation.isEnabled ? "checkmark.circle" : "circle"
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
.disabled(!loginItemController.presentation.canToggle)
|
|
51
|
+
|
|
41
52
|
Button {
|
|
42
53
|
openWindow(id: "settings")
|
|
43
54
|
NSApp.activate(ignoringOtherApps: true)
|
|
44
55
|
} label: {
|
|
45
|
-
Label("
|
|
56
|
+
Label("Settings...", systemImage: "gearshape")
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
Menu {
|
|
@@ -14,6 +14,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent
|
|
|
14
14
|
UNUserNotificationCenter.current().delegate = self
|
|
15
15
|
configureNotifications()
|
|
16
16
|
ShortcutDefaultsMigrator.migrate()
|
|
17
|
+
LoginItemController.shared.refresh()
|
|
17
18
|
ConfigurableHotkeyController.shared.registerDefaultHotkeys(runner: AgentCommandRunner.shared)
|
|
18
19
|
ShortcutSummaryState.shared.refresh()
|
|
19
20
|
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
#if canImport(ServiceManagement)
|
|
3
|
+
import ServiceManagement
|
|
4
|
+
#endif
|
|
5
|
+
import SwiftUI
|
|
6
|
+
|
|
7
|
+
enum LoginItemStatus: Equatable {
|
|
8
|
+
case notRegistered
|
|
9
|
+
case enabled
|
|
10
|
+
case requiresApproval
|
|
11
|
+
case notFound
|
|
12
|
+
case unavailable
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
struct LoginItemPresentation: Equatable {
|
|
16
|
+
let status: LoginItemStatus
|
|
17
|
+
|
|
18
|
+
var isEnabled: Bool {
|
|
19
|
+
status == .enabled
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var canToggle: Bool {
|
|
23
|
+
switch status {
|
|
24
|
+
case .notFound, .unavailable:
|
|
25
|
+
return false
|
|
26
|
+
case .notRegistered, .enabled, .requiresApproval:
|
|
27
|
+
return true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var menuTitle: String {
|
|
32
|
+
"Start at Login: \(statusTitle)"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var helpText: String {
|
|
36
|
+
switch status {
|
|
37
|
+
case .requiresApproval:
|
|
38
|
+
return "Approve Agent CLI in System Settings > General > Login Items."
|
|
39
|
+
case .notFound:
|
|
40
|
+
return "Start at login is only available when Agent CLI is running from an app bundle."
|
|
41
|
+
case .unavailable:
|
|
42
|
+
return "Start at login is unavailable on this macOS version."
|
|
43
|
+
case .notRegistered, .enabled:
|
|
44
|
+
return ""
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private var statusTitle: String {
|
|
49
|
+
switch status {
|
|
50
|
+
case .notRegistered:
|
|
51
|
+
return "Off"
|
|
52
|
+
case .enabled:
|
|
53
|
+
return "On"
|
|
54
|
+
case .requiresApproval:
|
|
55
|
+
return "Needs Approval"
|
|
56
|
+
case .notFound, .unavailable:
|
|
57
|
+
return "Unavailable"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protocol LoginItemServicing {
|
|
63
|
+
var status: LoginItemStatus { get }
|
|
64
|
+
func register() throws
|
|
65
|
+
func unregister() throws
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@MainActor
|
|
69
|
+
final class LoginItemController: ObservableObject {
|
|
70
|
+
static let shared = LoginItemController(service: MainAppLoginItemService())
|
|
71
|
+
|
|
72
|
+
@Published private(set) var status: LoginItemStatus
|
|
73
|
+
@Published private(set) var errorMessage = ""
|
|
74
|
+
|
|
75
|
+
private let service: LoginItemServicing
|
|
76
|
+
|
|
77
|
+
var presentation: LoginItemPresentation {
|
|
78
|
+
LoginItemPresentation(status: status)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var detailText: String {
|
|
82
|
+
if !errorMessage.isEmpty {
|
|
83
|
+
return errorMessage
|
|
84
|
+
}
|
|
85
|
+
return presentation.helpText
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
init(service: LoginItemServicing) {
|
|
89
|
+
self.service = service
|
|
90
|
+
self.status = service.status
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
func refresh() {
|
|
94
|
+
status = service.status
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
func toggle() {
|
|
98
|
+
setEnabled(!presentation.isEnabled)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
func setEnabled(_ enabled: Bool) {
|
|
102
|
+
do {
|
|
103
|
+
if enabled {
|
|
104
|
+
try service.register()
|
|
105
|
+
} else {
|
|
106
|
+
try service.unregister()
|
|
107
|
+
}
|
|
108
|
+
errorMessage = ""
|
|
109
|
+
} catch {
|
|
110
|
+
errorMessage = error.localizedDescription
|
|
111
|
+
}
|
|
112
|
+
refresh()
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
struct MainAppLoginItemService: LoginItemServicing {
|
|
117
|
+
var status: LoginItemStatus {
|
|
118
|
+
#if canImport(ServiceManagement)
|
|
119
|
+
if #available(macOS 13.0, *) {
|
|
120
|
+
return LoginItemStatus(SMAppService.mainApp.status)
|
|
121
|
+
}
|
|
122
|
+
#endif
|
|
123
|
+
return .unavailable
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
func register() throws {
|
|
127
|
+
#if canImport(ServiceManagement)
|
|
128
|
+
if #available(macOS 13.0, *) {
|
|
129
|
+
try SMAppService.mainApp.register()
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
#endif
|
|
133
|
+
throw LoginItemServiceError.unavailable
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func unregister() throws {
|
|
137
|
+
#if canImport(ServiceManagement)
|
|
138
|
+
if #available(macOS 13.0, *) {
|
|
139
|
+
try SMAppService.mainApp.unregister()
|
|
140
|
+
return
|
|
141
|
+
}
|
|
142
|
+
#endif
|
|
143
|
+
throw LoginItemServiceError.unavailable
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private enum LoginItemServiceError: LocalizedError {
|
|
148
|
+
case unavailable
|
|
149
|
+
|
|
150
|
+
var errorDescription: String? {
|
|
151
|
+
"Start at login is unavailable on this macOS version."
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
#if canImport(ServiceManagement)
|
|
156
|
+
@available(macOS 13.0, *)
|
|
157
|
+
private extension LoginItemStatus {
|
|
158
|
+
init(_ status: SMAppService.Status) {
|
|
159
|
+
switch status {
|
|
160
|
+
case .notRegistered:
|
|
161
|
+
self = .notRegistered
|
|
162
|
+
case .enabled:
|
|
163
|
+
self = .enabled
|
|
164
|
+
case .requiresApproval:
|
|
165
|
+
self = .requiresApproval
|
|
166
|
+
case .notFound:
|
|
167
|
+
self = .notFound
|
|
168
|
+
@unknown default:
|
|
169
|
+
self = .unavailable
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
#endif
|
|
@@ -149,10 +149,30 @@ enum ShortcutDefaultsMigrator {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
struct SettingsView: View {
|
|
152
|
+
@ObservedObject private var loginItemController = LoginItemController.shared
|
|
152
153
|
@State private var shortcutRevision = 0
|
|
153
154
|
|
|
154
155
|
var body: some View {
|
|
155
156
|
Form {
|
|
157
|
+
Section {
|
|
158
|
+
Toggle(
|
|
159
|
+
"Start at Login",
|
|
160
|
+
isOn: Binding(
|
|
161
|
+
get: { loginItemController.presentation.isEnabled },
|
|
162
|
+
set: { loginItemController.setEnabled($0) }
|
|
163
|
+
)
|
|
164
|
+
)
|
|
165
|
+
.disabled(!loginItemController.presentation.canToggle)
|
|
166
|
+
|
|
167
|
+
if !loginItemController.detailText.isEmpty {
|
|
168
|
+
Text(loginItemController.detailText)
|
|
169
|
+
.font(.footnote)
|
|
170
|
+
.foregroundStyle(.secondary)
|
|
171
|
+
}
|
|
172
|
+
} header: {
|
|
173
|
+
Text("General")
|
|
174
|
+
}
|
|
175
|
+
|
|
156
176
|
Section {
|
|
157
177
|
ShortcutRecorderRow(
|
|
158
178
|
title: "Toggle Transcription",
|
|
@@ -187,6 +207,9 @@ struct SettingsView: View {
|
|
|
187
207
|
}
|
|
188
208
|
.formStyle(.grouped)
|
|
189
209
|
.padding()
|
|
210
|
+
.onAppear {
|
|
211
|
+
loginItemController.refresh()
|
|
212
|
+
}
|
|
190
213
|
}
|
|
191
214
|
}
|
|
192
215
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#if canImport(XCTest)
|
|
2
|
+
import XCTest
|
|
3
|
+
@testable import AgentCLI
|
|
4
|
+
|
|
5
|
+
final class LoginItemControllerTests: XCTestCase {
|
|
6
|
+
func testEnabledStatusIsPresentedAsOn() {
|
|
7
|
+
let presentation = LoginItemPresentation(status: .enabled)
|
|
8
|
+
|
|
9
|
+
XCTAssertTrue(presentation.isEnabled)
|
|
10
|
+
XCTAssertEqual(presentation.menuTitle, "Start at Login: On")
|
|
11
|
+
XCTAssertEqual(presentation.helpText, "")
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
func testRequiresApprovalIsNotPresentedAsOn() {
|
|
15
|
+
let presentation = LoginItemPresentation(status: .requiresApproval)
|
|
16
|
+
|
|
17
|
+
XCTAssertFalse(presentation.isEnabled)
|
|
18
|
+
XCTAssertEqual(presentation.menuTitle, "Start at Login: Needs Approval")
|
|
19
|
+
XCTAssertEqual(
|
|
20
|
+
presentation.helpText,
|
|
21
|
+
"Approve Agent CLI in System Settings > General > Login Items."
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
#endif
|
|
@@ -62,9 +62,13 @@ PACKAGE_DIR="$ROOT_DIR/macos/$APP_NAME"
|
|
|
62
62
|
DIST_DIR="$ROOT_DIR/dist/macos"
|
|
63
63
|
APP_DIR="$DIST_DIR/$APP_NAME.app"
|
|
64
64
|
WHEEL_BUILD_DIR="$DIST_DIR/wheels-build"
|
|
65
|
+
DMG_STAGING_DIR="$DIST_DIR/dmg-staging"
|
|
66
|
+
DMG_RW_PATH="$DIST_DIR/$APP_NAME-rw.dmg"
|
|
65
67
|
INFO_PLIST="$PACKAGE_DIR/Resources/Info.plist"
|
|
66
68
|
ENTITLEMENTS_PLIST="$PACKAGE_DIR/Resources/AgentCLI.entitlements"
|
|
67
69
|
MENU_BAR_LOGO_SVG="$ROOT_DIR/docs/logo-avatar.svg"
|
|
70
|
+
DMG_BACKGROUND_SVG="$PACKAGE_DIR/Resources/dmg-background.svg"
|
|
71
|
+
DMG_BACKGROUND_PNG="$DIST_DIR/dmg-background.png"
|
|
68
72
|
ICONSET_DIR="$DIST_DIR/AgentCLI.iconset"
|
|
69
73
|
ICON_SOURCE_PNG="$DIST_DIR/logo-avatar-source.png"
|
|
70
74
|
NOTIFICATION_LOGO_PNG="$DIST_DIR/logo-avatar.png"
|
|
@@ -108,6 +112,11 @@ if [[ ! -f "$ENTITLEMENTS_PLIST" ]]; then
|
|
|
108
112
|
exit 1
|
|
109
113
|
fi
|
|
110
114
|
|
|
115
|
+
if [[ "$CREATE_DMG" == true && ! -f "$DMG_BACKGROUND_SVG" ]]; then
|
|
116
|
+
echo "AgentCLI DMG background SVG is missing: $DMG_BACKGROUND_SVG" >&2
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
|
|
111
120
|
if [[ "$NOTARIZE" == "1" && "$CREATE_DMG" != true ]]; then
|
|
112
121
|
echo "NOTARIZE=1 requires --dmg so there is a distributable artifact to notarize." >&2
|
|
113
122
|
exit 1
|
|
@@ -293,6 +302,90 @@ build_app_icon() {
|
|
|
293
302
|
rm -rf "$ICONSET_DIR"
|
|
294
303
|
}
|
|
295
304
|
|
|
305
|
+
render_dmg_background() {
|
|
306
|
+
local render_dir="$DIST_DIR/dmg-background-render"
|
|
307
|
+
local rendered="$render_dir/$(basename "$DMG_BACKGROUND_SVG").png"
|
|
308
|
+
|
|
309
|
+
rm -rf "$render_dir" "$DMG_BACKGROUND_PNG"
|
|
310
|
+
mkdir -p "$render_dir"
|
|
311
|
+
qlmanage -t -s 600 -o "$render_dir" "$DMG_BACKGROUND_SVG" >/dev/null 2>&1
|
|
312
|
+
if [[ ! -f "$rendered" ]]; then
|
|
313
|
+
echo "Failed to render AgentCLI DMG background PNG: $rendered" >&2
|
|
314
|
+
exit 1
|
|
315
|
+
fi
|
|
316
|
+
cp "$rendered" "$DMG_BACKGROUND_PNG"
|
|
317
|
+
rm -rf "$render_dir"
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
set_dmg_finder_layout() {
|
|
321
|
+
local volume_path="$1"
|
|
322
|
+
|
|
323
|
+
osascript <<APPLESCRIPT
|
|
324
|
+
tell application "Finder"
|
|
325
|
+
tell disk "$DISPLAY_NAME"
|
|
326
|
+
open
|
|
327
|
+
set current view of container window to icon view
|
|
328
|
+
set toolbar visible of container window to false
|
|
329
|
+
set statusbar visible of container window to false
|
|
330
|
+
set bounds of container window to {100, 100, 700, 460}
|
|
331
|
+
set theViewOptions to icon view options of container window
|
|
332
|
+
set arrangement of theViewOptions to not arranged
|
|
333
|
+
set icon size of theViewOptions to 96
|
|
334
|
+
set background picture of theViewOptions to file ".background:dmg-background.png"
|
|
335
|
+
set position of item "AgentCLI.app" of container window to {150, 180}
|
|
336
|
+
set position of item "Applications" of container window to {450, 180}
|
|
337
|
+
close
|
|
338
|
+
open
|
|
339
|
+
update without registering applications
|
|
340
|
+
delay 1
|
|
341
|
+
end tell
|
|
342
|
+
end tell
|
|
343
|
+
APPLESCRIPT
|
|
344
|
+
|
|
345
|
+
sync
|
|
346
|
+
touch "$volume_path/.metadata_never_index"
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
create_drag_install_dmg() {
|
|
350
|
+
local dmg_path="$1"
|
|
351
|
+
local attach_output
|
|
352
|
+
local volume_path
|
|
353
|
+
|
|
354
|
+
hdiutil detach "/Volumes/$DISPLAY_NAME" >/dev/null 2>&1 || true
|
|
355
|
+
rm -rf "$DMG_STAGING_DIR" "$DMG_RW_PATH" "$dmg_path" || return
|
|
356
|
+
mkdir -p "$DMG_STAGING_DIR/.background" || return
|
|
357
|
+
|
|
358
|
+
ditto "$APP_DIR" "$DMG_STAGING_DIR/$APP_NAME.app" || return
|
|
359
|
+
ln -s /Applications "$DMG_STAGING_DIR/Applications" || return
|
|
360
|
+
render_dmg_background || return
|
|
361
|
+
cp "$DMG_BACKGROUND_PNG" "$DMG_STAGING_DIR/.background/dmg-background.png" || return
|
|
362
|
+
|
|
363
|
+
hdiutil create "$DMG_RW_PATH" \
|
|
364
|
+
-volname "$DISPLAY_NAME" \
|
|
365
|
+
-srcfolder "$DMG_STAGING_DIR" \
|
|
366
|
+
-ov \
|
|
367
|
+
-format UDRW || return
|
|
368
|
+
attach_output=$(hdiutil attach "$DMG_RW_PATH" \
|
|
369
|
+
-nobrowse \
|
|
370
|
+
-noautoopen) || return
|
|
371
|
+
volume_path=$(printf '%s\n' "$attach_output" | awk -F '\t' '/\/Volumes\// { mount=$NF } END { if (mount) print mount; else exit 1 }')
|
|
372
|
+
if [[ -z "$volume_path" ]]; then
|
|
373
|
+
echo "Failed to resolve mounted DMG volume from hdiutil attach output." >&2
|
|
374
|
+
printf '%s\n' "$attach_output" >&2
|
|
375
|
+
return 1
|
|
376
|
+
fi
|
|
377
|
+
if ! set_dmg_finder_layout "$volume_path"; then
|
|
378
|
+
hdiutil detach "$volume_path" >/dev/null 2>&1 || true
|
|
379
|
+
return 1
|
|
380
|
+
fi
|
|
381
|
+
hdiutil detach "$volume_path" >/dev/null || return
|
|
382
|
+
hdiutil convert "$DMG_RW_PATH" \
|
|
383
|
+
-format UDZO \
|
|
384
|
+
-imagekey zlib-level=9 \
|
|
385
|
+
-o "$dmg_path" || return
|
|
386
|
+
rm -rf "$DMG_STAGING_DIR" "$DMG_RW_PATH" || return
|
|
387
|
+
}
|
|
388
|
+
|
|
296
389
|
quit_running_app() {
|
|
297
390
|
if ! pgrep -x "$APP_NAME" >/dev/null 2>&1; then
|
|
298
391
|
return
|
|
@@ -390,13 +483,7 @@ echo "Built $APP_DIR"
|
|
|
390
483
|
if [[ "$CREATE_DMG" == true ]]; then
|
|
391
484
|
DMG_PATH="$DIST_DIR/$APP_NAME.dmg"
|
|
392
485
|
for attempt in 1 2 3; do
|
|
393
|
-
|
|
394
|
-
if hdiutil create \
|
|
395
|
-
-volname "$DISPLAY_NAME" \
|
|
396
|
-
-srcfolder "$APP_DIR" \
|
|
397
|
-
-ov \
|
|
398
|
-
-format UDZO \
|
|
399
|
-
"$DMG_PATH"; then
|
|
486
|
+
if create_drag_install_dmg "$DMG_PATH"; then
|
|
400
487
|
break
|
|
401
488
|
fi
|
|
402
489
|
if [[ "$attempt" == 3 ]]; then
|
|
@@ -121,6 +121,15 @@ test -f "$APP/Contents/Resources/wheels/agent_cli-0.0.0-py3-none-any.whl"
|
|
|
121
121
|
codesign --verify --verbose=2 "$APP"
|
|
122
122
|
hdiutil verify "$DMG"
|
|
123
123
|
|
|
124
|
+
DMG_MOUNT="$TMP_DIR/dmg-mount"
|
|
125
|
+
mkdir -p "$DMG_MOUNT"
|
|
126
|
+
hdiutil attach "$DMG" -mountpoint "$DMG_MOUNT" -nobrowse -noautoopen >/dev/null
|
|
127
|
+
test -d "$DMG_MOUNT/AgentCLI.app"
|
|
128
|
+
test -L "$DMG_MOUNT/Applications"
|
|
129
|
+
test "$(readlink "$DMG_MOUNT/Applications")" = "/Applications"
|
|
130
|
+
test -f "$DMG_MOUNT/.background/dmg-background.png"
|
|
131
|
+
hdiutil detach "$DMG_MOUNT" >/dev/null
|
|
132
|
+
|
|
124
133
|
SUPPORT_DIR="$TMP_DIR/Application Support/AgentCLI"
|
|
125
134
|
SELF_TEST_OUTPUT=$(
|
|
126
135
|
AGENTCLI_APP_SUPPORT_DIR="$SUPPORT_DIR" \
|
|
@@ -791,6 +791,34 @@ def test_macos_build_script_signs_bundled_executables_before_notarization() -> N
|
|
|
791
791
|
)
|
|
792
792
|
|
|
793
793
|
|
|
794
|
+
def test_macos_build_script_creates_drag_install_dmg() -> None:
|
|
795
|
+
"""The release DMG should open as a drag-to-Applications installer window."""
|
|
796
|
+
script = BUILD_SCRIPT.read_text()
|
|
797
|
+
|
|
798
|
+
assert 'DMG_STAGING_DIR="$DIST_DIR/dmg-staging"' in script
|
|
799
|
+
assert 'DMG_RW_PATH="$DIST_DIR/$APP_NAME-rw.dmg"' in script
|
|
800
|
+
assert 'DMG_BACKGROUND_SVG="$PACKAGE_DIR/Resources/dmg-background.svg"' in script
|
|
801
|
+
assert 'DMG_BACKGROUND_PNG="$DIST_DIR/dmg-background.png"' in script
|
|
802
|
+
assert 'ln -s /Applications "$DMG_STAGING_DIR/Applications"' in script
|
|
803
|
+
assert '"$DMG_STAGING_DIR/$APP_NAME.app"' in script
|
|
804
|
+
assert 'hdiutil create "$DMG_RW_PATH"' in script
|
|
805
|
+
assert "-format UDRW" in script
|
|
806
|
+
assert "hdiutil attach" in script
|
|
807
|
+
assert "-mountpoint" not in script
|
|
808
|
+
assert "volume_path=$(printf" in script
|
|
809
|
+
assert (
|
|
810
|
+
'set background picture of theViewOptions to file ".background:dmg-background.png"'
|
|
811
|
+
in script
|
|
812
|
+
)
|
|
813
|
+
assert 'set position of item "AgentCLI.app" of container window to {150, 180}' in script
|
|
814
|
+
assert 'set position of item "Applications" of container window to {450, 180}' in script
|
|
815
|
+
assert 'if ! set_dmg_finder_layout "$volume_path"; then' in script
|
|
816
|
+
assert "hdiutil convert" in script
|
|
817
|
+
assert "-format UDZO" in script
|
|
818
|
+
assert "sign_dmg_if_needed" in script
|
|
819
|
+
assert (MACOS_APP / "Resources" / "dmg-background.svg").is_file()
|
|
820
|
+
|
|
821
|
+
|
|
794
822
|
def test_release_workflow_publishes_macos_app_asset() -> None:
|
|
795
823
|
"""Publishing a GitHub release should attach the notarized macOS DMG."""
|
|
796
824
|
workflow = RELEASE_WORKFLOW.read_text()
|
|
@@ -893,6 +921,10 @@ def test_macos_app_has_end_to_end_packaging_test() -> None:
|
|
|
893
921
|
assert "AGENTCLI_INSTANCE_LOCK_PATH" in script
|
|
894
922
|
assert "UV_BINARY=" in script
|
|
895
923
|
assert "uv build --wheel" in script
|
|
924
|
+
assert 'test -d "$DMG_MOUNT/AgentCLI.app"' in script
|
|
925
|
+
assert 'test -L "$DMG_MOUNT/Applications"' in script
|
|
926
|
+
assert 'readlink "$DMG_MOUNT/Applications"' in script
|
|
927
|
+
assert 'test -f "$DMG_MOUNT/.background/dmg-background.png"' in script
|
|
896
928
|
assert "--agentcli-bootstrap-self-test" in script
|
|
897
929
|
assert "daemon install whisper -y" in script
|
|
898
930
|
assert "transcribe --toggle --quiet" in script
|
|
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
|