agent-cli 0.84.1__tar.gz → 0.84.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_cli-0.84.1 → agent_cli-0.84.2}/PKG-INFO +1 -1
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/cli.py +20 -6
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/tmux.py +12 -16
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_cli.py +39 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_terminals.py +66 -20
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude-plugin/README.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude-plugin/marketplace.json +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude-plugin/plugin.json +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.cursorrules +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.dockerignore +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.env.example +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/logo.svg +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/release-drafter.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/renovate.json +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/scripts/check_extras_sync.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/scripts/check_plugin_skill_sync.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/scripts/sync_extras.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/scripts/sync_requirements.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/automerge.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/docker.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/docs.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/markdown-code-runner.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/pytest.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/release-drafter.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/release.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.github/workflows/toc.yaml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.gitignore +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.jscpd.json +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.pre-commit-config.yaml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.prompts/docs-review.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/.prompts/pr-review.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/CLAUDE.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/LICENSE +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/README.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/__main__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_extras.json +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/.gitkeep +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/audio.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/faster-whisper.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/kokoro.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/llm.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/memory.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/mlx-whisper.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/piper.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/rag.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/server.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/speed.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/vad.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/vectordb.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/whisper-transformers.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_requirements/wyoming.txt +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/_tools.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/_voice_agent_common.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/assistant.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/autocorrect.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/chat.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/memory/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/memory/add.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/memory/proxy.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/rag_proxy.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/speak.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/transcribe.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/transcribe_live.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/agents/voice_edit.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/cli.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/config.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/config_cmd.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/constants.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/audio.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/audio_format.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/chroma.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/deps.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/openai_proxy.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/process.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/reranker.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/sse.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/transcription_logger.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/vad.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/core/watch.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/daemon/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/daemon/cli.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/_branch_name.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/_output.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/cleanup.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/aider.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/base.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/claude.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/codex.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/copilot.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/gemini.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/opencode.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/coding_agents/registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/base.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/cursor.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/emacs.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/jetbrains.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/nano.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/neovim.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/sublime.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/vim.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/vscode.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/editors/zed.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/launch.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/project.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/skill/SKILL.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/skill/examples.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/apple_terminal.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/base.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/gnome.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/iterm2.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/kitty.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/warp.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/terminals/zellij.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/dev/worktree.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/docs_gen.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/example-config.toml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/common.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/extras.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/hotkeys.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/launchd.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/service_config.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/services.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/install/systemd.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_files.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_filters.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_git.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_indexer.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_ingest.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_persistence.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_prompt.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_retrieval.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_store.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_streaming.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/_tasks.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/client.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/engine.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/entities.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/memory/models.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/opts.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/py.typed +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_indexer.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_indexing.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_prompt.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_retriever.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_store.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/client.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/engine.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/rag/models.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/.runtime/.gitkeep +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/run-openwakeword.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/setup-linux.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/setup-macos.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/setup-windows.ps1 +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/scripts/start-all-services.sh +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/cli.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/common.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/model_manager.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/model_registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/proxy/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/proxy/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/streaming.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/backends/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/backends/base.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/backends/kokoro.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/backends/piper.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/model_manager.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/model_registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/tts/wyoming_handler.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/backends/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/backends/base.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/backends/mlx.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/backends/transformers.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/languages.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/model_manager.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/model_registry.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/server/whisper/wyoming_handler.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/_wyoming_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/asr.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/llm.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/tts.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/agent_cli/services/wake_word.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/docker-compose.yml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/memory-proxy.Dockerfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/rag-proxy.Dockerfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/transcribe-proxy.Dockerfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/tts.Dockerfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docker/whisper.Dockerfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/CNAME +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/architecture/index.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/architecture/memory.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/architecture/rag.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/assistant.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/autocorrect.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/chat.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/config.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/daemon.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/dev.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/index.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/install-extras.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/install-hotkeys.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/install-services.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/memory.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/rag-proxy.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/server/index.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/server/transcribe-proxy.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/server/tts.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/server/whisper.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/speak.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/start-services.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/transcribe-live.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/transcribe.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/commands/voice-edit.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/configuration.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/getting-started.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/iOS_Shortcut_Guide.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/index.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/docker.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/index.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/linux.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/macos.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/nixos.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/installation/windows.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/logo-clean.svg +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/run_markdown_code_runner.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/docs/system-integration.md +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/example.agent-cli-config.toml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/justfile +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/pyproject.toml +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/shell.nix +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_fix_my_text.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_interactive.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_interactive_extra.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_memory_add.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_speak.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_speak_e2e.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_transcribe.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_transcribe_agent.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_transcribe_e2e.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_transcribe_live.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_transcribe_recovery.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_tts_common.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_tts_common_extra.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_voice_agent_common.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_voice_edit.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_voice_edit_e2e.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/agents/test_wake_word_assistant.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/conftest.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_audio.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_audio_format.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_chroma.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_sse.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_vad.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/core/test_watch.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_coding_agents.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_editors.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_launch.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_project.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_verification.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/dev/test_worktree.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/install/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/install/test_extras.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_api_health.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_api_integration_liveish.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_client.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_engine.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_files.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_filters.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_git_integration.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_indexer.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_memory_integration.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_proxy_passthrough.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_store.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/memory/test_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/mocks/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/mocks/audio.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/mocks/llm.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/mocks/wyoming.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/__init__.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_engine.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_history.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_indexer.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_indexing.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_rag_client.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_rag_integration_liveish.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_rag_proxy_passthrough.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_retriever.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_store.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/rag/test_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_api.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_api_integration.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_asr.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_asr_recovery.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_audio_e2e.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_cli.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_config.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_config_cmd.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_daemon.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_docs_gen.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_env_vars.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_json_output.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_llm.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_llm_gemini.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_memory_tools.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_mlx_backend.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_process_manager.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_requires_extras.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_server_streaming.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_server_tts.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_server_whisper.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_services.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_tools.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_transformers_backend.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_tts.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_wake_word.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/tests/test_wyoming_utils.py +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/uv.lock +0 -0
- {agent_cli-0.84.1 → agent_cli-0.84.2}/zensical.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-cli
|
|
3
|
-
Version: 0.84.
|
|
3
|
+
Version: 0.84.2
|
|
4
4
|
Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
|
|
5
5
|
Project-URL: Homepage, https://github.com/basnijholt/agent-cli
|
|
6
6
|
Author-email: Bas Nijholt <bas@nijho.lt>
|
|
@@ -134,6 +134,24 @@ def _require_available_agent(
|
|
|
134
134
|
return agent
|
|
135
135
|
|
|
136
136
|
|
|
137
|
+
def _resolve_prompt_text(
|
|
138
|
+
prompt: str | None,
|
|
139
|
+
*,
|
|
140
|
+
prompt_file: Path | None = None,
|
|
141
|
+
) -> str | None:
|
|
142
|
+
"""Resolve prompt text from CLI input and reject empty explicit prompts."""
|
|
143
|
+
if prompt_file is not None:
|
|
144
|
+
prompt = prompt_file.read_text().strip()
|
|
145
|
+
if not prompt:
|
|
146
|
+
error(f"Prompt file is empty: {prompt_file}")
|
|
147
|
+
return prompt
|
|
148
|
+
|
|
149
|
+
if prompt is not None and not prompt.strip():
|
|
150
|
+
error("--prompt cannot be empty")
|
|
151
|
+
|
|
152
|
+
return prompt
|
|
153
|
+
|
|
154
|
+
|
|
137
155
|
def _resolve_branch_name(
|
|
138
156
|
branch: str | None,
|
|
139
157
|
branch_name_mode: str,
|
|
@@ -406,9 +424,7 @@ def new(
|
|
|
406
424
|
- `dev new feature-x --from origin/develop` — Branch from develop instead
|
|
407
425
|
- `dev new feature-x --with-agent aider --with-editor cursor` — Specific tools
|
|
408
426
|
"""
|
|
409
|
-
|
|
410
|
-
if prompt_file is not None:
|
|
411
|
-
prompt = prompt_file.read_text().strip()
|
|
427
|
+
prompt = _resolve_prompt_text(prompt, prompt_file=prompt_file)
|
|
412
428
|
|
|
413
429
|
# If a prompt is provided, automatically enable agent mode
|
|
414
430
|
if prompt:
|
|
@@ -928,9 +944,7 @@ def start_agent(
|
|
|
928
944
|
- `dev agent my-feature -a claude` — Start Claude specifically
|
|
929
945
|
- `dev agent my-feature -p "Continue the auth refactor"` — Start with a task
|
|
930
946
|
"""
|
|
931
|
-
|
|
932
|
-
if prompt_file is not None:
|
|
933
|
-
prompt = prompt_file.read_text().strip()
|
|
947
|
+
prompt = _resolve_prompt_text(prompt, prompt_file=prompt_file)
|
|
934
948
|
|
|
935
949
|
repo_root = _ensure_git_repo()
|
|
936
950
|
|
|
@@ -49,19 +49,6 @@ class Tmux(Terminal):
|
|
|
49
49
|
session_name = result.stdout.strip()
|
|
50
50
|
return session_name or None
|
|
51
51
|
|
|
52
|
-
def session_exists(self, session_name: str) -> bool:
|
|
53
|
-
"""Check if a tmux session exists."""
|
|
54
|
-
try:
|
|
55
|
-
subprocess.run(
|
|
56
|
-
["tmux", "has-session", "-t", session_name], # noqa: S607
|
|
57
|
-
check=True,
|
|
58
|
-
capture_output=True,
|
|
59
|
-
text=True,
|
|
60
|
-
)
|
|
61
|
-
return True
|
|
62
|
-
except subprocess.CalledProcessError:
|
|
63
|
-
return False
|
|
64
|
-
|
|
65
52
|
def open_in_session(
|
|
66
53
|
self,
|
|
67
54
|
path: Path,
|
|
@@ -84,9 +71,18 @@ class Tmux(Terminal):
|
|
|
84
71
|
return None
|
|
85
72
|
return self._open_window(path, command, tab_name, session_name=session_name)
|
|
86
73
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
74
|
+
# Avoid a has-session/new-session race when several launches try to create the
|
|
75
|
+
# same repo-scoped session concurrently: try new-window first, then create,
|
|
76
|
+
# then retry new-window in case another launcher created the session first.
|
|
77
|
+
handle = self._open_window(path, command, tab_name, session_name=session_name)
|
|
78
|
+
if handle is not None:
|
|
79
|
+
return handle
|
|
80
|
+
|
|
81
|
+
handle = self._create_session(path, command, tab_name, session_name=session_name)
|
|
82
|
+
if handle is not None:
|
|
83
|
+
return handle
|
|
84
|
+
|
|
85
|
+
return self._open_window(path, command, tab_name, session_name=session_name)
|
|
90
86
|
|
|
91
87
|
def open_new_tab(
|
|
92
88
|
self,
|
|
@@ -634,6 +634,30 @@ direnv = false
|
|
|
634
634
|
assert "Success" not in result.output
|
|
635
635
|
mock_create.assert_not_called()
|
|
636
636
|
|
|
637
|
+
def test_new_rejects_empty_prompt(self) -> None:
|
|
638
|
+
"""Explicit empty prompts should error instead of silently becoming no-op."""
|
|
639
|
+
with patch("agent_cli.dev.cli._ensure_git_repo") as mock_ensure_repo:
|
|
640
|
+
result = runner.invoke(app, ["dev", "new", "my-feature", "--prompt", " "])
|
|
641
|
+
|
|
642
|
+
assert result.exit_code == 1
|
|
643
|
+
assert "--prompt cannot be empty" in result.output
|
|
644
|
+
mock_ensure_repo.assert_not_called()
|
|
645
|
+
|
|
646
|
+
def test_new_rejects_empty_prompt_file(self, tmp_path: Path) -> None:
|
|
647
|
+
"""Empty prompt files should fail before any worktree setup starts."""
|
|
648
|
+
prompt_file = tmp_path / "empty.md"
|
|
649
|
+
prompt_file.write_text(" \n")
|
|
650
|
+
|
|
651
|
+
with patch("agent_cli.dev.cli._ensure_git_repo") as mock_ensure_repo:
|
|
652
|
+
result = runner.invoke(
|
|
653
|
+
app,
|
|
654
|
+
["dev", "new", "my-feature", "--prompt-file", str(prompt_file)],
|
|
655
|
+
)
|
|
656
|
+
|
|
657
|
+
assert result.exit_code == 1
|
|
658
|
+
assert f"Prompt file is empty: {prompt_file}" in result.output
|
|
659
|
+
mock_ensure_repo.assert_not_called()
|
|
660
|
+
|
|
637
661
|
|
|
638
662
|
class TestDevHelp:
|
|
639
663
|
"""Tests for dev command help."""
|
|
@@ -714,6 +738,21 @@ class TestDevAgent:
|
|
|
714
738
|
assert result.exit_code == 0
|
|
715
739
|
assert "tmux attach -t 'my session'" in result.output
|
|
716
740
|
|
|
741
|
+
def test_agent_rejects_empty_prompt_file(self, tmp_path: Path) -> None:
|
|
742
|
+
"""Empty prompt files should fail before repo/worktree resolution."""
|
|
743
|
+
prompt_file = tmp_path / "empty.md"
|
|
744
|
+
prompt_file.write_text("\n")
|
|
745
|
+
|
|
746
|
+
with patch("agent_cli.dev.cli._ensure_git_repo") as mock_ensure_repo:
|
|
747
|
+
result = runner.invoke(
|
|
748
|
+
app,
|
|
749
|
+
["dev", "agent", "feature", "--prompt-file", str(prompt_file)],
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
assert result.exit_code == 1
|
|
753
|
+
assert f"Prompt file is empty: {prompt_file}" in result.output
|
|
754
|
+
mock_ensure_repo.assert_not_called()
|
|
755
|
+
|
|
717
756
|
|
|
718
757
|
class TestDevAgents:
|
|
719
758
|
"""Tests for dev agents command."""
|
|
@@ -65,11 +65,14 @@ class TestTmux:
|
|
|
65
65
|
def test_open_in_session_creates_detached_session_when_missing(self) -> None:
|
|
66
66
|
"""Outside tmux, a named session is created in detached mode if absent."""
|
|
67
67
|
terminal = Tmux()
|
|
68
|
-
mock_run = MagicMock(return_value=MagicMock(stdout="%42\n"))
|
|
69
68
|
with (
|
|
70
|
-
patch("
|
|
71
|
-
patch.object(terminal, "
|
|
72
|
-
patch(
|
|
69
|
+
patch.object(terminal, "is_available", return_value=True),
|
|
70
|
+
patch.object(terminal, "_open_window", return_value=None) as mock_open,
|
|
71
|
+
patch.object(
|
|
72
|
+
terminal,
|
|
73
|
+
"_create_session",
|
|
74
|
+
return_value=MagicMock(handle="%42", session_name="repo-session"),
|
|
75
|
+
) as mock_create,
|
|
73
76
|
):
|
|
74
77
|
handle = terminal.open_in_session(
|
|
75
78
|
Path("/some/path"),
|
|
@@ -81,23 +84,30 @@ class TestTmux:
|
|
|
81
84
|
assert handle is not None
|
|
82
85
|
assert handle.handle == "%42"
|
|
83
86
|
assert handle.session_name == "repo-session"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
mock_open.assert_called_once_with(
|
|
88
|
+
Path("/some/path"),
|
|
89
|
+
"echo hello",
|
|
90
|
+
"test",
|
|
91
|
+
session_name="repo-session",
|
|
92
|
+
)
|
|
93
|
+
mock_create.assert_called_once_with(
|
|
94
|
+
Path("/some/path"),
|
|
95
|
+
"echo hello",
|
|
96
|
+
"test",
|
|
97
|
+
session_name="repo-session",
|
|
98
|
+
)
|
|
92
99
|
|
|
93
100
|
def test_open_in_session_reuses_existing_session(self) -> None:
|
|
94
101
|
"""Outside tmux, a named session gets a new window when it already exists."""
|
|
95
102
|
terminal = Tmux()
|
|
96
|
-
mock_run = MagicMock(return_value=MagicMock(stdout="%5\n"))
|
|
97
103
|
with (
|
|
98
|
-
patch("
|
|
99
|
-
patch.object(
|
|
100
|
-
|
|
104
|
+
patch.object(terminal, "is_available", return_value=True),
|
|
105
|
+
patch.object(
|
|
106
|
+
terminal,
|
|
107
|
+
"_open_window",
|
|
108
|
+
return_value=MagicMock(handle="%5", session_name="repo-session"),
|
|
109
|
+
) as mock_open,
|
|
110
|
+
patch.object(terminal, "_create_session") as mock_create,
|
|
101
111
|
):
|
|
102
112
|
handle = terminal.open_in_session(
|
|
103
113
|
Path("/some/path"),
|
|
@@ -109,10 +119,46 @@ class TestTmux:
|
|
|
109
119
|
assert handle is not None
|
|
110
120
|
assert handle.handle == "%5"
|
|
111
121
|
assert handle.session_name == "repo-session"
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
mock_open.assert_called_once_with(
|
|
123
|
+
Path("/some/path"),
|
|
124
|
+
"echo hello",
|
|
125
|
+
"test",
|
|
126
|
+
session_name="repo-session",
|
|
127
|
+
)
|
|
128
|
+
mock_create.assert_not_called()
|
|
129
|
+
|
|
130
|
+
def test_open_in_session_retries_when_session_appears_during_race(self) -> None:
|
|
131
|
+
"""Concurrent creators should fall back to opening a new window."""
|
|
132
|
+
terminal = Tmux()
|
|
133
|
+
with (
|
|
134
|
+
patch.object(terminal, "is_available", return_value=True),
|
|
135
|
+
patch.object(
|
|
136
|
+
terminal,
|
|
137
|
+
"_open_window",
|
|
138
|
+
side_effect=[
|
|
139
|
+
None,
|
|
140
|
+
MagicMock(handle="%7", session_name="repo-session"),
|
|
141
|
+
],
|
|
142
|
+
) as mock_open,
|
|
143
|
+
patch.object(terminal, "_create_session", return_value=None) as mock_create,
|
|
144
|
+
):
|
|
145
|
+
handle = terminal.open_in_session(
|
|
146
|
+
Path("/some/path"),
|
|
147
|
+
"echo hello",
|
|
148
|
+
tab_name="test",
|
|
149
|
+
session_name="repo-session",
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
assert handle is not None
|
|
153
|
+
assert handle.handle == "%7"
|
|
154
|
+
assert handle.session_name == "repo-session"
|
|
155
|
+
assert mock_open.call_count == 2
|
|
156
|
+
mock_create.assert_called_once_with(
|
|
157
|
+
Path("/some/path"),
|
|
158
|
+
"echo hello",
|
|
159
|
+
"test",
|
|
160
|
+
session_name="repo-session",
|
|
161
|
+
)
|
|
116
162
|
|
|
117
163
|
|
|
118
164
|
class TestZellij:
|
|
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
|
|
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
|
|
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
|