agent-cli 0.100.0__tar.gz → 0.102.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/docker.yml +10 -10
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/docs.yml +2 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/markdown-code-runner.yml +3 -3
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/pytest.yml +3 -3
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/release-drafter.yml +1 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/release.yml +4 -4
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.pre-commit-config.yaml +2 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/PKG-INFO +1 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/cleanup.py +6 -4
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/cli.py +76 -33
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/launch.py +31 -39
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/project.py +49 -15
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/__init__.py +2 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/base.py +43 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/tmux.py +8 -18
- agent_cli-0.102.0/agent_cli/dev/terminals/zellij.py +369 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/cli.py +10 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/backends/__init__.py +3 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/model_manager.py +12 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/wyoming_handler.py +59 -13
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/dev.md +4 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Package.resolved +2 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Package.swift +1 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/appcast.xml +34 -32
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_cleanup.py +27 -9
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_cli.py +83 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_launch.py +128 -2
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_project.py +114 -5
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_terminals.py +354 -1
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_verification.py +95 -7
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_api_integration.py +27 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_server_tts.py +22 -0
- agent_cli-0.102.0/tests/test_server_tts_wyoming.py +107 -0
- agent_cli-0.100.0/agent_cli/dev/terminals/zellij.py +0 -78
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude-plugin/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.cursorrules +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.dockerignore +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.env.example +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/logo.svg +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/release-drafter.yml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/renovate.json +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/scripts/normalize_appcast.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.gitignore +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.jscpd.json +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.prompts/docs-review.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/.prompts/pr-review.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/CLAUDE.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/LICENSE +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/LLAMA_SERVER_USAGE.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/__main__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_extras.json +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_overrides/nemo-whisper.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/diarization.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/nemo-whisper.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/_tools.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/diarize_live_session.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/speakers.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/cli.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/config.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/constants.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/alignment.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/diarization.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/process.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/speaker_identity.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/_config.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/hooks.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/cmux.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/common.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/services.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/opts.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/py.typed +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/common.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/nemo.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/docker-compose.yml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/CNAME +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/architecture/index.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/architecture/memory.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/architecture/rag.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/assistant.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/chat.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/config.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/daemon.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/diarize-live-session.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/index.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/install-services.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/memory.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/server/index.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/speak.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/speakers.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/start-services.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/configuration.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/getting-started.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/index.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/docker.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/index.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/linux.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/macos-app.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/macos.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/nixos.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/installation/windows.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/logo-avatar.svg +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/logo-clean.svg +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/docs/system-integration.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/justfile +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/README.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Resources/Info.plist +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/LiveTranscriptionPreview.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/LivePreviewSwiftTestingTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/LiveTranscriptionPreviewTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/build-macos-app.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/macos/test-macos-app-e2e.sh +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/pyproject.toml +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/reddit.md +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/shell.nix +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_speakers.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/conftest.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_audio.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_audio_levels.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_sse.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_vad.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/core/test_watch.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_hooks.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/install/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/install/test_extras.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/install/test_launchd.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_client.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_files.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_store.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/mocks/audio.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/mocks/llm.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/__init__.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_history.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_store.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_alignment.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_api.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_asr.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_cli.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_config.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_daemon.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_diarization.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_diarize_live_session.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_env_vars.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_faster_whisper_backend.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_json_output.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_llm.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_macos_app.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_nemo_backend.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_normalize_appcast.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_process_manager.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_services.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_speaker_identity.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_tools.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_tts.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_wake_word.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/uv.lock +0 -0
- {agent_cli-0.100.0 → agent_cli-0.102.0}/zensical.toml +0 -0
|
@@ -46,15 +46,15 @@ jobs:
|
|
|
46
46
|
df -h
|
|
47
47
|
|
|
48
48
|
- name: Checkout repository
|
|
49
|
-
uses: actions/checkout@
|
|
49
|
+
uses: actions/checkout@v7.0.0
|
|
50
50
|
with:
|
|
51
51
|
fetch-depth: 0 # Full history for version detection
|
|
52
52
|
|
|
53
53
|
- name: Set up Docker Buildx
|
|
54
|
-
uses: docker/setup-buildx-action@v4.
|
|
54
|
+
uses: docker/setup-buildx-action@v4.2.0
|
|
55
55
|
|
|
56
56
|
- name: Log in to Container Registry
|
|
57
|
-
uses: docker/login-action@v4.
|
|
57
|
+
uses: docker/login-action@v4.4.0
|
|
58
58
|
with:
|
|
59
59
|
registry: ${{ env.REGISTRY }}
|
|
60
60
|
username: ${{ github.actor }}
|
|
@@ -71,7 +71,7 @@ jobs:
|
|
|
71
71
|
|
|
72
72
|
- name: Extract metadata
|
|
73
73
|
id: meta
|
|
74
|
-
uses: docker/metadata-action@v6.
|
|
74
|
+
uses: docker/metadata-action@v6.2.0
|
|
75
75
|
with:
|
|
76
76
|
images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
|
|
77
77
|
tags: |
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
type=sha,suffix=-${{ matrix.suffix }}
|
|
81
81
|
|
|
82
82
|
- name: Build and push
|
|
83
|
-
uses: docker/build-push-action@v7.
|
|
83
|
+
uses: docker/build-push-action@v7.3.0
|
|
84
84
|
with:
|
|
85
85
|
context: .
|
|
86
86
|
file: ${{ matrix.dockerfile }}
|
|
@@ -111,15 +111,15 @@ jobs:
|
|
|
111
111
|
|
|
112
112
|
steps:
|
|
113
113
|
- name: Checkout repository
|
|
114
|
-
uses: actions/checkout@
|
|
114
|
+
uses: actions/checkout@v7.0.0
|
|
115
115
|
with:
|
|
116
116
|
fetch-depth: 0 # Full history for version detection
|
|
117
117
|
|
|
118
118
|
- name: Set up Docker Buildx
|
|
119
|
-
uses: docker/setup-buildx-action@v4.
|
|
119
|
+
uses: docker/setup-buildx-action@v4.2.0
|
|
120
120
|
|
|
121
121
|
- name: Log in to Container Registry
|
|
122
|
-
uses: docker/login-action@v4.
|
|
122
|
+
uses: docker/login-action@v4.4.0
|
|
123
123
|
with:
|
|
124
124
|
registry: ${{ env.REGISTRY }}
|
|
125
125
|
username: ${{ github.actor }}
|
|
@@ -136,7 +136,7 @@ jobs:
|
|
|
136
136
|
|
|
137
137
|
- name: Extract metadata
|
|
138
138
|
id: meta
|
|
139
|
-
uses: docker/metadata-action@v6.
|
|
139
|
+
uses: docker/metadata-action@v6.2.0
|
|
140
140
|
with:
|
|
141
141
|
images: ${{ env.REGISTRY }}/${{ github.repository }}-${{ matrix.image }}
|
|
142
142
|
tags: |
|
|
@@ -145,7 +145,7 @@ jobs:
|
|
|
145
145
|
type=sha
|
|
146
146
|
|
|
147
147
|
- name: Build and push
|
|
148
|
-
uses: docker/build-push-action@v7.
|
|
148
|
+
uses: docker/build-push-action@v7.3.0
|
|
149
149
|
with:
|
|
150
150
|
context: .
|
|
151
151
|
file: ${{ matrix.dockerfile }}
|
|
@@ -27,12 +27,12 @@ jobs:
|
|
|
27
27
|
build:
|
|
28
28
|
runs-on: ubuntu-latest
|
|
29
29
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@v7.0.0
|
|
31
31
|
with:
|
|
32
32
|
lfs: true
|
|
33
33
|
|
|
34
34
|
- name: Install uv
|
|
35
|
-
uses: astral-sh/setup-uv@v8.2
|
|
35
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
36
36
|
|
|
37
37
|
- name: Set up Python
|
|
38
38
|
run: uv python install 3.12
|
|
@@ -11,18 +11,18 @@ jobs:
|
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
steps:
|
|
13
13
|
- name: Check out repository
|
|
14
|
-
uses: actions/checkout@
|
|
14
|
+
uses: actions/checkout@v7.0.0
|
|
15
15
|
with:
|
|
16
16
|
persist-credentials: false
|
|
17
17
|
fetch-depth: 0
|
|
18
18
|
|
|
19
19
|
- name: Set up Python
|
|
20
|
-
uses: actions/setup-python@v6.
|
|
20
|
+
uses: actions/setup-python@v6.3.0
|
|
21
21
|
with:
|
|
22
22
|
python-version: "3.13.11"
|
|
23
23
|
|
|
24
24
|
- name: Install uv
|
|
25
|
-
uses: astral-sh/setup-uv@v8.2
|
|
25
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
26
26
|
|
|
27
27
|
- name: Run markdown-code-runner
|
|
28
28
|
env:
|
|
@@ -18,16 +18,16 @@ jobs:
|
|
|
18
18
|
python-version: ["3.11", "3.13"]
|
|
19
19
|
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v7.0.0
|
|
22
22
|
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
-
uses: actions/setup-python@v6.
|
|
23
|
+
uses: actions/setup-python@v6.3.0
|
|
24
24
|
with:
|
|
25
25
|
python-version: ${{ matrix.python-version }}
|
|
26
26
|
- name: Install portaudio (Linux only)
|
|
27
27
|
if: matrix.os == 'ubuntu-latest'
|
|
28
28
|
run: sudo apt-get update && sudo apt-get install -y portaudio19-dev
|
|
29
29
|
- name: Install uv
|
|
30
|
-
uses: astral-sh/setup-uv@v8.2
|
|
30
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
31
31
|
- name: Run macOS app Swift tests
|
|
32
32
|
if: matrix.os == 'macos-latest' && matrix.python-version == '3.13'
|
|
33
33
|
run: swift test --package-path macos/AgentCLI --enable-xctest
|
|
@@ -14,9 +14,9 @@ jobs:
|
|
|
14
14
|
permissions:
|
|
15
15
|
id-token: write
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v7.0.0
|
|
18
18
|
- name: Install uv
|
|
19
|
-
uses: astral-sh/setup-uv@v8.2
|
|
19
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
20
20
|
- name: Build
|
|
21
21
|
run: uv build
|
|
22
22
|
- name: Publish package distributions to PyPI
|
|
@@ -29,9 +29,9 @@ jobs:
|
|
|
29
29
|
permissions:
|
|
30
30
|
contents: write
|
|
31
31
|
steps:
|
|
32
|
-
- uses: actions/checkout@
|
|
32
|
+
- uses: actions/checkout@v7.0.0
|
|
33
33
|
- name: Install uv
|
|
34
|
-
uses: astral-sh/setup-uv@v8.2
|
|
34
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
35
35
|
- name: Import Developer ID certificate
|
|
36
36
|
uses: apple-actions/import-codesign-certs@v7.0.0
|
|
37
37
|
with:
|
|
@@ -11,13 +11,13 @@ repos:
|
|
|
11
11
|
- id: end-of-file-fixer
|
|
12
12
|
- id: mixed-line-ending
|
|
13
13
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
14
|
-
rev: "v0.15.
|
|
14
|
+
rev: "v0.15.21"
|
|
15
15
|
hooks:
|
|
16
16
|
- id: ruff
|
|
17
17
|
args: ["--fix"]
|
|
18
18
|
- id: ruff-format
|
|
19
19
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
20
|
-
rev: "v2.
|
|
20
|
+
rev: "v2.3.0"
|
|
21
21
|
hooks:
|
|
22
22
|
- id: mypy
|
|
23
23
|
additional_dependencies: ["types-PyYAML"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.102.0
|
|
4
4
|
Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
|
|
5
5
|
Project-URL: Homepage, https://github.com/basnijholt/agent-cli
|
|
6
6
|
Author-email: Bas Nijholt <bas@nijho.lt>
|
|
@@ -9,6 +9,7 @@ from typing import TYPE_CHECKING
|
|
|
9
9
|
|
|
10
10
|
from . import worktree
|
|
11
11
|
from .terminals.tmux import Tmux
|
|
12
|
+
from .terminals.zellij import Zellij
|
|
12
13
|
|
|
13
14
|
if TYPE_CHECKING:
|
|
14
15
|
from pathlib import Path
|
|
@@ -16,7 +17,7 @@ if TYPE_CHECKING:
|
|
|
16
17
|
|
|
17
18
|
@dataclass
|
|
18
19
|
class RemoveWorktreeResult:
|
|
19
|
-
"""Outcome of removing a worktree and any
|
|
20
|
+
"""Outcome of removing a worktree and any multiplexer tabs/windows it owned."""
|
|
20
21
|
|
|
21
22
|
name: str
|
|
22
23
|
success: bool
|
|
@@ -130,7 +131,7 @@ def remove_worktree(
|
|
|
130
131
|
force: bool = False,
|
|
131
132
|
delete_branch: bool = False,
|
|
132
133
|
) -> RemoveWorktreeResult:
|
|
133
|
-
"""Remove one worktree and then clean up any
|
|
134
|
+
"""Remove one worktree and then clean up any tmux windows and zellij tabs it owned."""
|
|
134
135
|
removed, error = worktree.remove_worktree(
|
|
135
136
|
wt.path,
|
|
136
137
|
force=force,
|
|
@@ -145,7 +146,8 @@ def remove_worktree(
|
|
|
145
146
|
if not removed:
|
|
146
147
|
return result
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
tmux_cleanup = tmux.kill_windows_for_worktree(wt.path)
|
|
149
|
+
tmux_cleanup = Tmux().kill_windows_for_worktree(wt.path)
|
|
150
150
|
result.warnings.extend(tmux_cleanup.errors)
|
|
151
|
+
zellij_cleanup = Zellij().close_tabs_for_worktree(wt.path)
|
|
152
|
+
result.warnings.extend(zellij_cleanup.errors)
|
|
151
153
|
return result
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
|
-
import shlex
|
|
8
7
|
import shutil
|
|
9
8
|
import subprocess
|
|
10
9
|
from pathlib import Path
|
|
@@ -164,21 +163,44 @@ def _resolve_prompt_text(
|
|
|
164
163
|
return prompt
|
|
165
164
|
|
|
166
165
|
|
|
167
|
-
def
|
|
166
|
+
def _normalize_multiplexer_session(
|
|
168
167
|
tmux_session: str | None,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if not
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
168
|
+
zellij_session: str | None,
|
|
169
|
+
multiplexer: Literal["tmux", "zellij"] | None,
|
|
170
|
+
) -> tuple[str | None, Literal["tmux", "zellij"] | None]:
|
|
171
|
+
"""Normalize `--tmux-session`/`--zellij-session` and make them imply a multiplexer."""
|
|
172
|
+
if tmux_session is not None and zellij_session is not None:
|
|
173
|
+
error("Cannot use --tmux-session and --zellij-session together")
|
|
174
|
+
|
|
175
|
+
if tmux_session is not None:
|
|
176
|
+
if multiplexer == "zellij":
|
|
177
|
+
error("--tmux-session cannot be combined with --multiplexer zellij")
|
|
178
|
+
normalized_session = tmux_session.strip()
|
|
179
|
+
if not normalized_session:
|
|
180
|
+
error("--tmux-session cannot be empty")
|
|
181
|
+
if "." in normalized_session or ":" in normalized_session:
|
|
182
|
+
error("tmux session names cannot contain '.' or ':'")
|
|
183
|
+
return normalized_session, "tmux"
|
|
184
|
+
|
|
185
|
+
if zellij_session is not None:
|
|
186
|
+
if multiplexer == "tmux":
|
|
187
|
+
error("--zellij-session cannot be combined with --multiplexer tmux")
|
|
188
|
+
normalized_session = zellij_session.strip()
|
|
189
|
+
if not normalized_session:
|
|
190
|
+
error("--zellij-session cannot be empty")
|
|
191
|
+
return normalized_session, "zellij"
|
|
192
|
+
|
|
193
|
+
return None, multiplexer
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _attach_hint(handle: terminals.TerminalHandle) -> str | None:
|
|
197
|
+
"""Shell command to attach to the session holding a launched agent, if any."""
|
|
198
|
+
if handle.session_name is None:
|
|
199
|
+
return None
|
|
200
|
+
terminal = terminals.get_terminal(handle.terminal_name)
|
|
201
|
+
if isinstance(terminal, terminals.Multiplexer):
|
|
202
|
+
return terminal.attach_command(handle.session_name)
|
|
203
|
+
return None
|
|
182
204
|
|
|
183
205
|
|
|
184
206
|
def _resolve_dev_new_agent_request(
|
|
@@ -457,12 +479,12 @@ def new(
|
|
|
457
479
|
),
|
|
458
480
|
] = None,
|
|
459
481
|
multiplexer: Annotated[
|
|
460
|
-
Literal["tmux"] | None,
|
|
482
|
+
Literal["tmux", "zellij"] | None,
|
|
461
483
|
typer.Option(
|
|
462
484
|
"--multiplexer",
|
|
463
485
|
"-m",
|
|
464
486
|
case_sensitive=False,
|
|
465
|
-
help="Launch the agent in a specific multiplexer. Currently supported: tmux. When started outside
|
|
487
|
+
help="Launch the agent in a specific multiplexer. Currently supported: tmux, zellij (zellij requires >= 0.44.0). When started outside the multiplexer, creates or reuses a detached session and reports the tab/pane handle",
|
|
466
488
|
),
|
|
467
489
|
] = None,
|
|
468
490
|
tmux_session: Annotated[
|
|
@@ -472,6 +494,13 @@ def new(
|
|
|
472
494
|
help="Reuse or create a specific tmux session for the agent. Implies --multiplexer tmux",
|
|
473
495
|
),
|
|
474
496
|
] = None,
|
|
497
|
+
zellij_session: Annotated[
|
|
498
|
+
str | None,
|
|
499
|
+
typer.Option(
|
|
500
|
+
"--zellij-session",
|
|
501
|
+
help="Reuse or create a specific zellij session for the agent. Implies --multiplexer zellij",
|
|
502
|
+
),
|
|
503
|
+
] = None,
|
|
475
504
|
hooks: Annotated[
|
|
476
505
|
bool,
|
|
477
506
|
typer.Option(
|
|
@@ -521,7 +550,11 @@ def new(
|
|
|
521
550
|
agent_name_deprecated=agent_name_deprecated,
|
|
522
551
|
prompt=prompt,
|
|
523
552
|
)
|
|
524
|
-
|
|
553
|
+
multiplexer_session, multiplexer = _normalize_multiplexer_session(
|
|
554
|
+
tmux_session,
|
|
555
|
+
zellij_session,
|
|
556
|
+
multiplexer,
|
|
557
|
+
)
|
|
525
558
|
|
|
526
559
|
repo_root = _ensure_git_repo()
|
|
527
560
|
runtime_config = _runtime_config_from_ctx(ctx)
|
|
@@ -606,7 +639,7 @@ def new(
|
|
|
606
639
|
task_file,
|
|
607
640
|
agent_env,
|
|
608
641
|
multiplexer_name=multiplexer,
|
|
609
|
-
|
|
642
|
+
multiplexer_session=multiplexer_session,
|
|
610
643
|
)
|
|
611
644
|
|
|
612
645
|
# Print summary
|
|
@@ -618,13 +651,15 @@ def new(
|
|
|
618
651
|
summary_lines.append(
|
|
619
652
|
f"[bold]Agent Handle:[/bold] {agent_handle.handle} ({agent_handle.terminal_name})",
|
|
620
653
|
)
|
|
621
|
-
if agent_handle.session_name and agent_handle.terminal_name == "
|
|
622
|
-
summary_lines.append(f"[bold]
|
|
654
|
+
if agent_handle.session_name and agent_handle.terminal_name == "cmux":
|
|
655
|
+
summary_lines.append(f"[bold]cmux Workspace:[/bold] {agent_handle.session_name}")
|
|
656
|
+
elif agent_handle.session_name:
|
|
623
657
|
summary_lines.append(
|
|
624
|
-
f"[bold]
|
|
658
|
+
f"[bold]{agent_handle.terminal_name} Session:[/bold] {agent_handle.session_name}",
|
|
625
659
|
)
|
|
626
|
-
|
|
627
|
-
|
|
660
|
+
attach = _attach_hint(agent_handle)
|
|
661
|
+
if attach:
|
|
662
|
+
summary_lines.append(f"[bold]Attach:[/bold] {attach}")
|
|
628
663
|
|
|
629
664
|
console.print()
|
|
630
665
|
console.print(
|
|
@@ -1051,12 +1086,12 @@ def start_agent(
|
|
|
1051
1086
|
),
|
|
1052
1087
|
] = None,
|
|
1053
1088
|
multiplexer: Annotated[
|
|
1054
|
-
Literal["tmux"] | None,
|
|
1089
|
+
Literal["tmux", "zellij"] | None,
|
|
1055
1090
|
typer.Option(
|
|
1056
1091
|
"--multiplexer",
|
|
1057
1092
|
"-m",
|
|
1058
1093
|
case_sensitive=False,
|
|
1059
|
-
help="Launch the agent in a specific multiplexer instead of the current terminal. Currently supported: tmux",
|
|
1094
|
+
help="Launch the agent in a specific multiplexer instead of the current terminal. Currently supported: tmux, zellij (zellij requires >= 0.44.0)",
|
|
1060
1095
|
),
|
|
1061
1096
|
] = None,
|
|
1062
1097
|
tmux_session: Annotated[
|
|
@@ -1066,6 +1101,13 @@ def start_agent(
|
|
|
1066
1101
|
help="Reuse or create a specific tmux session for the agent. Implies --multiplexer tmux",
|
|
1067
1102
|
),
|
|
1068
1103
|
] = None,
|
|
1104
|
+
zellij_session: Annotated[
|
|
1105
|
+
str | None,
|
|
1106
|
+
typer.Option(
|
|
1107
|
+
"--zellij-session",
|
|
1108
|
+
help="Reuse or create a specific zellij session for the agent. Implies --multiplexer zellij",
|
|
1109
|
+
),
|
|
1110
|
+
] = None,
|
|
1069
1111
|
hooks: Annotated[
|
|
1070
1112
|
bool,
|
|
1071
1113
|
typer.Option(
|
|
@@ -1091,7 +1133,11 @@ def start_agent(
|
|
|
1091
1133
|
agent_name = agent_name or agent_name_deprecated
|
|
1092
1134
|
|
|
1093
1135
|
prompt = _resolve_prompt_text(prompt, prompt_file=prompt_file)
|
|
1094
|
-
|
|
1136
|
+
multiplexer_session, multiplexer = _normalize_multiplexer_session(
|
|
1137
|
+
tmux_session,
|
|
1138
|
+
zellij_session,
|
|
1139
|
+
multiplexer,
|
|
1140
|
+
)
|
|
1095
1141
|
|
|
1096
1142
|
repo_root = _ensure_git_repo()
|
|
1097
1143
|
runtime_config = _runtime_config_from_ctx(ctx)
|
|
@@ -1141,16 +1187,13 @@ def start_agent(
|
|
|
1141
1187
|
task_file,
|
|
1142
1188
|
agent_env,
|
|
1143
1189
|
multiplexer_name=multiplexer,
|
|
1144
|
-
|
|
1190
|
+
multiplexer_session=multiplexer_session,
|
|
1145
1191
|
)
|
|
1146
1192
|
if handle:
|
|
1193
|
+
attach = _attach_hint(handle)
|
|
1147
1194
|
info(
|
|
1148
1195
|
f"{handle.terminal_name} handle: {handle.handle}"
|
|
1149
|
-
+ (
|
|
1150
|
-
f" (attach with: tmux attach -t {shlex.quote(handle.session_name)})"
|
|
1151
|
-
if handle.session_name and handle.terminal_name == "tmux"
|
|
1152
|
-
else ""
|
|
1153
|
-
),
|
|
1196
|
+
+ (f" (attach with: {attach})" if attach else ""),
|
|
1154
1197
|
)
|
|
1155
1198
|
return
|
|
1156
1199
|
|
|
@@ -280,45 +280,27 @@ def _tab_name_for_path(path: Path) -> tuple[Path | None, str]:
|
|
|
280
280
|
return repo_root, tab_name
|
|
281
281
|
|
|
282
282
|
|
|
283
|
-
def
|
|
283
|
+
def _launch_in_multiplexer(
|
|
284
284
|
path: Path,
|
|
285
|
-
|
|
286
|
-
terminal: terminals.Terminal,
|
|
285
|
+
terminal: terminals.Multiplexer,
|
|
287
286
|
full_cmd: str,
|
|
288
287
|
tab_name: str,
|
|
289
288
|
repo_root: Path | None,
|
|
290
|
-
|
|
291
|
-
|
|
289
|
+
*,
|
|
290
|
+
requested: bool,
|
|
291
|
+
session_override: str | None,
|
|
292
292
|
) -> TerminalHandle | None:
|
|
293
|
-
"""Launch an agent
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
if not isinstance(terminal, Tmux):
|
|
297
|
-
warn("Could not open new tab in tmux")
|
|
298
|
-
return None
|
|
299
|
-
|
|
300
|
-
requested_tmux = multiplexer_name == "tmux"
|
|
301
|
-
session_name = tmux_session
|
|
302
|
-
if session_name is None and requested_tmux and not terminal.detect():
|
|
293
|
+
"""Launch an agent in a multiplexer and return its tab/pane handle."""
|
|
294
|
+
session_name = session_override
|
|
295
|
+
if session_name is None and requested and not terminal.detect():
|
|
303
296
|
session_name = terminal.session_name_for_repo(repo_root or path)
|
|
304
297
|
|
|
305
|
-
|
|
298
|
+
return terminal.open_in_session(
|
|
306
299
|
path,
|
|
307
300
|
full_cmd,
|
|
308
301
|
tab_name=tab_name,
|
|
309
302
|
session_name=session_name,
|
|
310
303
|
)
|
|
311
|
-
if handle is None:
|
|
312
|
-
warn("Could not open new tab in tmux")
|
|
313
|
-
return None
|
|
314
|
-
|
|
315
|
-
session_label = (
|
|
316
|
-
f" in tmux session {handle.session_name}"
|
|
317
|
-
if (requested_tmux or tmux_session is not None) and handle.session_name
|
|
318
|
-
else " in new tmux tab"
|
|
319
|
-
)
|
|
320
|
-
success(f"Started {agent.name}{session_label}")
|
|
321
|
-
return handle
|
|
322
304
|
|
|
323
305
|
|
|
324
306
|
def _launch_in_cmux(
|
|
@@ -359,25 +341,36 @@ def _launch_in_terminal(
|
|
|
359
341
|
tab_name: str,
|
|
360
342
|
repo_root: Path | None,
|
|
361
343
|
multiplexer_name: str | None,
|
|
362
|
-
|
|
344
|
+
multiplexer_session: str | None,
|
|
363
345
|
) -> tuple[bool, TerminalHandle | None]:
|
|
364
346
|
"""Launch an agent in the resolved terminal."""
|
|
365
347
|
if terminal.name == "cmux":
|
|
366
348
|
handle = _launch_in_cmux(path, agent, terminal, full_cmd, tab_name, repo_root)
|
|
367
349
|
return handle is not None, handle
|
|
368
350
|
|
|
369
|
-
if terminal.
|
|
370
|
-
|
|
351
|
+
if isinstance(terminal, terminals.Multiplexer):
|
|
352
|
+
requested = multiplexer_name == terminal.name or multiplexer_session is not None
|
|
353
|
+
handle = _launch_in_multiplexer(
|
|
371
354
|
path,
|
|
372
|
-
agent,
|
|
373
355
|
terminal,
|
|
374
356
|
full_cmd,
|
|
375
357
|
tab_name,
|
|
376
358
|
repo_root,
|
|
377
|
-
|
|
378
|
-
|
|
359
|
+
requested=requested,
|
|
360
|
+
session_override=multiplexer_session,
|
|
379
361
|
)
|
|
380
|
-
|
|
362
|
+
if handle is not None:
|
|
363
|
+
session_label = (
|
|
364
|
+
f" in {terminal.name} session {handle.session_name}"
|
|
365
|
+
if requested and handle.session_name
|
|
366
|
+
else f" in new {terminal.name} tab"
|
|
367
|
+
)
|
|
368
|
+
success(f"Started {agent.name}{session_label}")
|
|
369
|
+
return True, handle
|
|
370
|
+
if requested:
|
|
371
|
+
warn(f"Could not open new tab in {terminal.name}")
|
|
372
|
+
return False, None
|
|
373
|
+
# Fall through to plain tab opening (e.g. zellij < 0.44 inside a session)
|
|
381
374
|
|
|
382
375
|
if terminal.open_new_tab(path, full_cmd, tab_name=tab_name):
|
|
383
376
|
success(f"Started {agent.name} in new {terminal.name} tab")
|
|
@@ -395,15 +388,14 @@ def launch_agent(
|
|
|
395
388
|
task_file: Path | None = None,
|
|
396
389
|
env: dict[str, str] | None = None,
|
|
397
390
|
multiplexer_name: str | None = None,
|
|
398
|
-
|
|
391
|
+
multiplexer_session: str | None = None,
|
|
399
392
|
) -> TerminalHandle | None:
|
|
400
393
|
"""Launch agent in a new terminal tab.
|
|
401
394
|
|
|
402
395
|
Agents are interactive TUIs that need a proper terminal.
|
|
403
396
|
Priority: tmux/zellij tab > terminal tab > print instructions.
|
|
404
397
|
"""
|
|
405
|
-
|
|
406
|
-
terminal = _resolve_launch_terminal(effective_multiplexer_name)
|
|
398
|
+
terminal = _resolve_launch_terminal(multiplexer_name)
|
|
407
399
|
full_cmd = _build_agent_launch_command(
|
|
408
400
|
path, agent, extra_args, prompt, task_file, env, terminal
|
|
409
401
|
)
|
|
@@ -417,8 +409,8 @@ def launch_agent(
|
|
|
417
409
|
full_cmd,
|
|
418
410
|
tab_name,
|
|
419
411
|
repo_root,
|
|
420
|
-
|
|
421
|
-
|
|
412
|
+
multiplexer_name,
|
|
413
|
+
multiplexer_session,
|
|
422
414
|
)
|
|
423
415
|
if launched:
|
|
424
416
|
return handle
|
|
@@ -89,6 +89,28 @@ def _unidep_cmd(subcommand: str) -> str | None:
|
|
|
89
89
|
return None
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
def _python_install_commands(install_args: str) -> list[str] | None:
|
|
93
|
+
"""Build install commands using the best available Python installer.
|
|
94
|
+
|
|
95
|
+
Prefers uv (``uv venv`` creates ./.venv, which ``uv pip install`` then
|
|
96
|
+
targets from the working directory), then pip, then pip3. Returns None
|
|
97
|
+
when no installer is available.
|
|
98
|
+
|
|
99
|
+
Evidence: https://docs.astral.sh/uv/pip/environments/ - ``uv venv``
|
|
100
|
+
creates a virtual environment at .venv and ``uv pip install`` installs
|
|
101
|
+
into the .venv in the working directory. Note ``uv pip`` prefers an
|
|
102
|
+
activated environment (VIRTUAL_ENV) over ./.venv, which run_setup()
|
|
103
|
+
handles by clearing VIRTUAL_ENV from the subprocess environment.
|
|
104
|
+
"""
|
|
105
|
+
if shutil.which("uv"):
|
|
106
|
+
return ["uv venv", f"uv pip install {install_args}"]
|
|
107
|
+
if shutil.which("pip"):
|
|
108
|
+
return [f"pip install {install_args}"]
|
|
109
|
+
if shutil.which("pip3"):
|
|
110
|
+
return [f"pip3 install {install_args}"]
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
|
|
92
114
|
def _detect_unidep_project(path: Path) -> ProjectType | None:
|
|
93
115
|
"""Detect unidep project and determine the appropriate install command.
|
|
94
116
|
|
|
@@ -143,6 +165,29 @@ def _detect_unidep_project(path: Path) -> ProjectType | None:
|
|
|
143
165
|
return None
|
|
144
166
|
|
|
145
167
|
|
|
168
|
+
def _detect_pip_install_project(path: Path) -> ProjectType | None:
|
|
169
|
+
"""Detect pip-installable Python projects, skipped when no installer is available."""
|
|
170
|
+
if (path / "requirements.txt").exists():
|
|
171
|
+
commands = _python_install_commands("-r requirements.txt")
|
|
172
|
+
if commands is not None:
|
|
173
|
+
return ProjectType(
|
|
174
|
+
name="python-pip",
|
|
175
|
+
setup_commands=commands,
|
|
176
|
+
description="Python project with pip",
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
if (path / "pyproject.toml").exists():
|
|
180
|
+
commands = _python_install_commands("-e .")
|
|
181
|
+
if commands is not None:
|
|
182
|
+
return ProjectType(
|
|
183
|
+
name="python",
|
|
184
|
+
setup_commands=commands,
|
|
185
|
+
description="Python project",
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
|
|
146
191
|
def detect_project_type(path: Path) -> ProjectType | None: # noqa: PLR0911
|
|
147
192
|
"""Detect the project type based on files present.
|
|
148
193
|
|
|
@@ -181,21 +226,10 @@ def detect_project_type(path: Path) -> ProjectType | None: # noqa: PLR0911
|
|
|
181
226
|
description="Python project with Poetry",
|
|
182
227
|
)
|
|
183
228
|
|
|
184
|
-
# Python with pip/requirements.txt
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
setup_commands=["pip install -r requirements.txt"],
|
|
189
|
-
description="Python project with pip",
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
# Python with pyproject.toml (generic)
|
|
193
|
-
if (path / "pyproject.toml").exists():
|
|
194
|
-
return ProjectType(
|
|
195
|
-
name="python",
|
|
196
|
-
setup_commands=["pip install -e ."],
|
|
197
|
-
description="Python project",
|
|
198
|
-
)
|
|
229
|
+
# Python with pip/requirements.txt or generic pyproject.toml
|
|
230
|
+
pip_project = _detect_pip_install_project(path)
|
|
231
|
+
if pip_project is not None:
|
|
232
|
+
return pip_project
|
|
199
233
|
|
|
200
234
|
# Node.js with pnpm
|
|
201
235
|
if (path / "pnpm-lock.yaml").exists():
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from .base import Terminal, TerminalHandle
|
|
5
|
+
from .base import Multiplexer, Terminal, TerminalHandle
|
|
6
6
|
from .registry import (
|
|
7
7
|
detect_current_terminal,
|
|
8
8
|
get_all_terminals,
|
|
@@ -11,6 +11,7 @@ from .registry import (
|
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
14
|
+
"Multiplexer",
|
|
14
15
|
"Terminal",
|
|
15
16
|
"TerminalHandle",
|
|
16
17
|
"detect_current_terminal",
|