drydock-cli 2.5.0__tar.gz → 2.5.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.
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CLAUDE.md +55 -29
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/PKG-INFO +1 -1
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agent_loop.py +92 -1
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/pyproject.toml +1 -1
- drydock_cli-2.5.2/scripts/discover_cli_tools.sh +69 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.gitignore +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.python-version +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.typos.toml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/extensions.json +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/launch.json +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/settings.json +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/AGENTS.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CHANGELOG.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/LICENSE +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/NOTICE +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/PRD.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/README.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/action.yml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/README.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/acp-setup.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/logger.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/slug.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/types.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/whats_new.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock-acp.spec +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock_terms.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/flake.lock +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/flake.nix +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/__main__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/analyzer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/cli.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/README.md +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/backup.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/bump_version.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/install.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/notify_release.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_full.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/tui_test.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/conftest.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/common.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/utils.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agents.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_integration.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_message_id.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_middleware.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_smoke.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_workloads.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.5.0 → drydock_cli-2.5.2}/uv.lock +0 -0
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
|
|
6
6
|
- **Repo:** https://github.com/fbobe321/drydock
|
|
7
|
-
- **PyPI:** https://pypi.org/project/drydock-cli/ (v2.
|
|
8
|
-
- **Goal:**
|
|
7
|
+
- **PyPI:** https://pypi.org/project/drydock-cli/ (v2.5.0)
|
|
8
|
+
- **Goal:** Reliable TUI coding agent with local LLMs. PRD-driven project building + SWE-bench bug fixing.
|
|
9
9
|
- **Hardware:** 2x RTX 4060 Ti 16GB, Gemma 4 26B MoE (A4B) via vLLM Docker at localhost:8000
|
|
10
10
|
- **Server:** remus (Ubuntu 22.04, user: bobef)
|
|
11
|
-
- **Active model:** Gemma 4 26B-A4B-it-AWQ-4bit (
|
|
12
|
-
- **
|
|
11
|
+
- **Active model:** Gemma 4 26B-A4B-it-AWQ-4bit (only 4B active params, ~70 tok/s)
|
|
12
|
+
- **TUI results:** 88/90 PRD projects pass (98%) through the real TUI
|
|
13
|
+
- **SWE-bench:** 70% file match (v3 baseline), 58% (v3 tuned — tighter prompt hurt)
|
|
14
|
+
- **Priority:** TUI experience first, SWE-bench second
|
|
13
15
|
|
|
14
16
|
## Build & Test
|
|
15
17
|
|
|
@@ -36,17 +38,17 @@ curl http://localhost:8000/v1/models
|
|
|
36
38
|
python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
### DryDock v2 (
|
|
41
|
+
### DryDock v2 (TUI — user-facing, v2.5.0)
|
|
40
42
|
|
|
41
43
|
```bash
|
|
42
44
|
# Install
|
|
43
|
-
|
|
45
|
+
pip install drydock-cli==2.5.0
|
|
44
46
|
|
|
45
|
-
# Run drydock
|
|
46
|
-
|
|
47
|
+
# Run TUI (the ONLY way to use drydock — no headless mode)
|
|
48
|
+
drydock
|
|
47
49
|
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
+
# Headless mode has been REMOVED. All testing goes through the TUI.
|
|
51
|
+
# Use scripts/tui_test.py (pexpect) for automated TUI testing.
|
|
50
52
|
|
|
51
53
|
# Run tests
|
|
52
54
|
uv run pytest tests/ -x -q --timeout=30
|
|
@@ -92,11 +94,15 @@ v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files,
|
|
|
92
94
|
- **Two-tier compaction.** Normal compaction truncates old tool results. Emergency compaction triggers on 400 errors (context overflow) with aggressive truncation.
|
|
93
95
|
- **Provider-agnostic design.** No model-specific hacks in the agent loop. All model quirks handled in `providers.py`.
|
|
94
96
|
|
|
95
|
-
### v2 Constraints (
|
|
97
|
+
### v2 Constraints (TUI codebase)
|
|
96
98
|
- **MessageList is not a plain list.** Never `self.messages = [...]`. Use `self.messages.reset([...])`.
|
|
97
99
|
- **vLLM/Mistral rejects `user` after `tool` messages.** `_sanitize_message_ordering()` runs before every LLM call. All injection must use `_inject_system_note()`.
|
|
98
|
-
-
|
|
99
|
-
- **
|
|
100
|
+
- **Non-streaming for Gemma 4.** Streaming tool call argument accumulation produces empty/malformed JSON. `enable_streaming=False` when model is Gemma 4.
|
|
101
|
+
- **Disabled tools for Gemma 4:** ask_user_question, todo, task_create, task_update, task, invoke_skill, tool_search. These cause loops or validation errors.
|
|
102
|
+
- **Simplified prompt for Gemma 4.** Auto-detected via model name → uses `gemma4.md` (20 lines) instead of `cli.md` (125 lines). Complex prompts cause delegation/asking instead of coding.
|
|
103
|
+
- **write_file overwrite=True by default.** Gemma 4 writes files multiple times; old default (False) caused error loops.
|
|
104
|
+
- **Headless mode removed.** All interaction through TUI. Testing via pexpect (`scripts/tui_test.py`).
|
|
105
|
+
- **NEVER test with headless.** The TUI has different code paths (streaming, approval, path expansion). Headless passes mask TUI bugs.
|
|
100
106
|
|
|
101
107
|
### Shared Constraints
|
|
102
108
|
- **"Restate the goal" blocks tool calling.** Never ask the model to output text before its first tool call — it pre-empts the tool-calling mechanism.
|
|
@@ -252,22 +258,42 @@ v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files,
|
|
|
252
258
|
|
|
253
259
|
## Key Learnings
|
|
254
260
|
|
|
255
|
-
1.
|
|
256
|
-
2.
|
|
257
|
-
3.
|
|
258
|
-
4.
|
|
259
|
-
5.
|
|
260
|
-
6.
|
|
261
|
-
7.
|
|
262
|
-
8.
|
|
263
|
-
9.
|
|
264
|
-
10.
|
|
265
|
-
11.
|
|
266
|
-
12.
|
|
267
|
-
13.
|
|
268
|
-
14.
|
|
269
|
-
15.
|
|
270
|
-
16.
|
|
261
|
+
1. **Test the TUI, not headless.** Headless passes mask real bugs. TUI has different code paths (streaming, approval, render_path_prompt). ALL testing through TUI via pexpect.
|
|
262
|
+
2. **Use PRDs for testing.** Concrete PRDs with expected files and `--help` give clear pass/fail. 100-project suite proved TUI works (98%).
|
|
263
|
+
3. **Scaffold per model.** Weaker models need more guardrails (non-streaming, fewer tools, simpler prompts). As models improve, remove scaffolding. The code should get simpler over time.
|
|
264
|
+
4. **Streaming breaks Gemma 4 tool calls.** Streaming accumulates JSON chunk-by-chunk → empty args. Non-streaming gets complete response → works perfectly. Root cause of weeks of TUI failures.
|
|
265
|
+
5. **Fewer tools = better for local models.** Gemma 4 wasted 64 turns on task_create/task_update. Disabling non-essential tools eliminated the loop.
|
|
266
|
+
6. **Simple prompts win.** The 125-line cli.md with phases/delegation confused Gemma 4. The 20-line gemma4.md ("ACT IMMEDIATELY") works.
|
|
267
|
+
7. AGENTS.md essential for devstral (loops without it), not needed for Gemma 4
|
|
268
|
+
8. Circuit breaker was net negative — removed entirely
|
|
269
|
+
9. Loop detection should guide, never stop (retrospection > hardcoded nudges)
|
|
270
|
+
10. Clean rewrites beat incremental fixes — v3 (~750 lines) outperforms v2 (~5000+ lines) on SWE-bench
|
|
271
|
+
11. Model choice matters more than agent complexity — Gemma 4 MoE gives 3-4x speed
|
|
272
|
+
12. Docker-based model serving (vLLM) is reliable — easier restarts, GPU management
|
|
273
|
+
13. Auto-read on failed edit — automatically show the model the real file content
|
|
274
|
+
14. Temperature bump on loops — force model to explore different paths
|
|
275
|
+
15. Failed-approach accumulator — prevent re-trying strategies after pruning/compaction
|
|
276
|
+
16. PRD complexity must match model capability — too many files/features causes timeout
|
|
277
|
+
|
|
278
|
+
## Testing
|
|
279
|
+
|
|
280
|
+
### TUI Test Harness
|
|
281
|
+
- **Script:** `scripts/tui_test.py` — pexpect-based, drives the REAL TUI binary
|
|
282
|
+
- **Auto-approves** tool permission prompts
|
|
283
|
+
- **Detects:** write loops, API errors, tool call counts, file creation, --help pass/fail
|
|
284
|
+
- **100 PRDs:** at `/data3/drydock_test_projects/` (88/90 pass = 98%)
|
|
285
|
+
|
|
286
|
+
### PRD Format (what works)
|
|
287
|
+
- Short (under 30 lines)
|
|
288
|
+
- 4-6 files max
|
|
289
|
+
- Clear package name and file list
|
|
290
|
+
- Test command: `python3 -m package_name --help`
|
|
291
|
+
- Stdlib only (no external deps)
|
|
292
|
+
|
|
293
|
+
### What breaks PRDs
|
|
294
|
+
- Too many files (8+) — model runs out of turns
|
|
295
|
+
- Complex parsers (custom YAML/XML from scratch)
|
|
296
|
+
- Features requiring external APIs or databases
|
|
271
297
|
|
|
272
298
|
## When Compacting
|
|
273
299
|
|
|
@@ -901,13 +901,23 @@ class AgentLoop:
|
|
|
901
901
|
self._record_failed_approach()
|
|
902
902
|
|
|
903
903
|
# RETROSPECTION: Summarize recent actions and let the model
|
|
904
|
-
# decide its own next step
|
|
904
|
+
# decide its own next step
|
|
905
905
|
retro = self._build_retrospection()
|
|
906
906
|
if retro:
|
|
907
907
|
# Include failed approaches if any
|
|
908
908
|
if self._failed_approaches:
|
|
909
909
|
approaches = "\n".join(f" - {a}" for a in self._failed_approaches[-5:])
|
|
910
910
|
retro += f"\n\nApproaches already tried (don't repeat these):\n{approaches}"
|
|
911
|
+
|
|
912
|
+
# Detect same-file write loop and add specific guidance
|
|
913
|
+
stuck_file = self._detect_stuck_file()
|
|
914
|
+
if stuck_file:
|
|
915
|
+
retro += (
|
|
916
|
+
f"\n\nYou are STUCK writing {stuck_file} repeatedly. "
|
|
917
|
+
f"That file is DONE. Move to the NEXT file now. "
|
|
918
|
+
f"Do NOT write to {stuck_file} again."
|
|
919
|
+
)
|
|
920
|
+
|
|
911
921
|
self._inject_system_note(retro)
|
|
912
922
|
else:
|
|
913
923
|
# Loop broken — reset temperature to normal
|
|
@@ -1620,6 +1630,28 @@ class AgentLoop:
|
|
|
1620
1630
|
feedback=feedback,
|
|
1621
1631
|
)
|
|
1622
1632
|
|
|
1633
|
+
def _detect_stuck_file(self) -> str | None:
|
|
1634
|
+
"""Detect if the model is writing the same file repeatedly."""
|
|
1635
|
+
write_paths: list[str] = []
|
|
1636
|
+
for msg in reversed(self.messages[-20:]):
|
|
1637
|
+
if msg.role == Role.assistant and msg.tool_calls:
|
|
1638
|
+
for tc in msg.tool_calls:
|
|
1639
|
+
if tc.function and tc.function.name in ("write_file", "search_replace"):
|
|
1640
|
+
try:
|
|
1641
|
+
args = json.loads(tc.function.arguments or "{}")
|
|
1642
|
+
path = args.get("path", args.get("file_path", ""))
|
|
1643
|
+
if path:
|
|
1644
|
+
write_paths.append(path)
|
|
1645
|
+
except (json.JSONDecodeError, AttributeError):
|
|
1646
|
+
pass
|
|
1647
|
+
if write_paths:
|
|
1648
|
+
from collections import Counter
|
|
1649
|
+
path_counts = Counter(write_paths)
|
|
1650
|
+
most_common_path, count = path_counts.most_common(1)[0]
|
|
1651
|
+
if count >= 3:
|
|
1652
|
+
return most_common_path
|
|
1653
|
+
return None
|
|
1654
|
+
|
|
1623
1655
|
def _record_failed_approach(self) -> None:
|
|
1624
1656
|
"""Record a one-line summary of the most recent failed approach.
|
|
1625
1657
|
|
|
@@ -1824,6 +1856,29 @@ class AgentLoop:
|
|
|
1824
1856
|
if tool_names[-8:] == cycle:
|
|
1825
1857
|
return f"WARNING|{last_tool}"
|
|
1826
1858
|
|
|
1859
|
+
# Check 5: Same file written 3+ times (model stuck rewriting one file)
|
|
1860
|
+
if last_tool in ("write_file", "search_replace"):
|
|
1861
|
+
write_paths: list[str] = []
|
|
1862
|
+
for msg in reversed(self.messages):
|
|
1863
|
+
if msg.role == Role.assistant and msg.tool_calls:
|
|
1864
|
+
for tc in msg.tool_calls:
|
|
1865
|
+
if tc.function and tc.function.name in ("write_file", "search_replace"):
|
|
1866
|
+
try:
|
|
1867
|
+
args = json.loads(tc.function.arguments or "{}")
|
|
1868
|
+
path = args.get("path", args.get("file_path", ""))
|
|
1869
|
+
if path:
|
|
1870
|
+
write_paths.append(path)
|
|
1871
|
+
except (json.JSONDecodeError, AttributeError):
|
|
1872
|
+
pass
|
|
1873
|
+
if len(write_paths) >= 10:
|
|
1874
|
+
break
|
|
1875
|
+
if write_paths:
|
|
1876
|
+
from collections import Counter
|
|
1877
|
+
path_counts = Counter(write_paths)
|
|
1878
|
+
most_common_path, most_common_count = path_counts.most_common(1)[0]
|
|
1879
|
+
if most_common_count >= 3:
|
|
1880
|
+
return f"WARNING|{last_tool}"
|
|
1881
|
+
|
|
1827
1882
|
return None
|
|
1828
1883
|
|
|
1829
1884
|
async def _auto_route_task(self, user_msg: str) -> None:
|
|
@@ -1856,6 +1911,42 @@ class AgentLoop:
|
|
|
1856
1911
|
except Exception:
|
|
1857
1912
|
pass
|
|
1858
1913
|
|
|
1914
|
+
# Inject discoverable CLI tools (built by DryDock, CLI-Anything, system)
|
|
1915
|
+
try:
|
|
1916
|
+
from drydock.core.config.harness_files import get_harness_files_manager
|
|
1917
|
+
mgr = get_harness_files_manager()
|
|
1918
|
+
user_skills_dirs = mgr.user_skills_dirs
|
|
1919
|
+
tools_found = []
|
|
1920
|
+
for skills_dir in user_skills_dirs:
|
|
1921
|
+
if not skills_dir.is_dir():
|
|
1922
|
+
continue
|
|
1923
|
+
for skill_dir in sorted(skills_dir.iterdir())[:50]:
|
|
1924
|
+
skill_md = skill_dir / "SKILL.md"
|
|
1925
|
+
if not skill_md.is_file():
|
|
1926
|
+
continue
|
|
1927
|
+
name = skill_dir.name
|
|
1928
|
+
# Only show tool-*, system-*, cli-anything-* skills
|
|
1929
|
+
if not any(name.startswith(p) for p in ("tool-", "system-", "cli-anything-")):
|
|
1930
|
+
continue
|
|
1931
|
+
# Read first line of description
|
|
1932
|
+
try:
|
|
1933
|
+
for line in skill_md.read_text(encoding="utf-8").split("\n"):
|
|
1934
|
+
if line.strip().startswith("description:"):
|
|
1935
|
+
desc = line.split(":", 1)[1].strip().strip('"').strip("'")[:80]
|
|
1936
|
+
tools_found.append(f" {name}: {desc}")
|
|
1937
|
+
break
|
|
1938
|
+
except Exception:
|
|
1939
|
+
pass
|
|
1940
|
+
if tools_found:
|
|
1941
|
+
# Show max 15 to avoid bloating context
|
|
1942
|
+
parts.append(
|
|
1943
|
+
f"AVAILABLE CLI TOOLS ({len(tools_found)} installed, showing first 15):\n"
|
|
1944
|
+
+ "\n".join(tools_found[:15])
|
|
1945
|
+
+ "\nUse via bash: cd /path && python3 -m package_name [args]"
|
|
1946
|
+
)
|
|
1947
|
+
except Exception:
|
|
1948
|
+
pass
|
|
1949
|
+
|
|
1859
1950
|
if parts:
|
|
1860
1951
|
self._inject_system_note("\n".join(parts))
|
|
1861
1952
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Discover installed CLI tools and create DryDock skill wrappers
|
|
3
|
+
# Run this to auto-detect useful CLIs on the system
|
|
4
|
+
|
|
5
|
+
SKILLS_DIR="$HOME/.drydock/skills"
|
|
6
|
+
mkdir -p "$SKILLS_DIR"
|
|
7
|
+
|
|
8
|
+
# List of CLI tools to check for and create skill wrappers
|
|
9
|
+
TOOLS=(
|
|
10
|
+
"jq|JSON processor — query and transform JSON data"
|
|
11
|
+
"yq|YAML/JSON/XML processor — like jq but for YAML"
|
|
12
|
+
"rg|ripgrep — fast regex search across files"
|
|
13
|
+
"fd|fd-find — fast file finder (better find)"
|
|
14
|
+
"bat|cat with syntax highlighting and line numbers"
|
|
15
|
+
"scc|Source code line counter by language"
|
|
16
|
+
"httpie|HTTPie — user-friendly HTTP client (http command)"
|
|
17
|
+
"tree|Directory tree viewer"
|
|
18
|
+
"pandoc|Universal document converter"
|
|
19
|
+
"ffmpeg|Audio/video processing tool"
|
|
20
|
+
"convert|ImageMagick — image conversion and manipulation"
|
|
21
|
+
"sqlite3|SQLite database CLI"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
created=0
|
|
25
|
+
for entry in "${TOOLS[@]}"; do
|
|
26
|
+
IFS='|' read -r cmd desc <<< "$entry"
|
|
27
|
+
|
|
28
|
+
# Check if command exists
|
|
29
|
+
if ! command -v "$cmd" &>/dev/null; then
|
|
30
|
+
continue
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
skill_name="system-$cmd"
|
|
34
|
+
skill_dir="$SKILLS_DIR/$skill_name"
|
|
35
|
+
|
|
36
|
+
# Skip if already exists
|
|
37
|
+
[ -f "$skill_dir/SKILL.md" ] && continue
|
|
38
|
+
|
|
39
|
+
# Get help text
|
|
40
|
+
help_text=$($cmd --help 2>&1 | head -30 || echo "No help available")
|
|
41
|
+
|
|
42
|
+
mkdir -p "$skill_dir"
|
|
43
|
+
cat > "$skill_dir/SKILL.md" << EOF
|
|
44
|
+
---
|
|
45
|
+
name: $skill_name
|
|
46
|
+
description: "$desc"
|
|
47
|
+
user-invocable: false
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
# $cmd
|
|
51
|
+
|
|
52
|
+
$desc
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
Run via bash tool: \`$cmd [args]\`
|
|
56
|
+
|
|
57
|
+
## Help Output
|
|
58
|
+
\`\`\`
|
|
59
|
+
$help_text
|
|
60
|
+
\`\`\`
|
|
61
|
+
EOF
|
|
62
|
+
|
|
63
|
+
echo "Created skill: $skill_name ($cmd)"
|
|
64
|
+
created=$((created + 1))
|
|
65
|
+
done
|
|
66
|
+
|
|
67
|
+
echo "---"
|
|
68
|
+
echo "Discovered $created new CLI tools as skills"
|
|
69
|
+
echo "Total user skills: $(ls -d "$SKILLS_DIR"/*/SKILL.md 2>/dev/null | wc -l)"
|
|
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
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
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
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.py
RENAMED
|
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
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/history_windowing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|