drydock-cli 2.4.9__tar.gz → 2.5.1__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.4.9 → drydock_cli-2.5.1}/CLAUDE.md +55 -29
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/PKG-INFO +1 -1
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/cli.py +47 -82
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agent_loop.py +36 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/pyproject.toml +1 -1
- drydock_cli-2.5.1/scripts/discover_cli_tools.sh +69 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.gitignore +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.python-version +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.typos.toml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/extensions.json +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/launch.json +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/settings.json +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/AGENTS.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/CHANGELOG.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/LICENSE +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/NOTICE +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/PRD.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/README.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/action.yml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/README.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/acp-setup.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/logger.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/slug.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/types.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/whats_new.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock-acp.spec +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock_terms.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/flake.lock +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/flake.nix +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/__main__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/analyzer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/cli.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/README.md +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/backup.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/bump_version.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/install.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/notify_release.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_full.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/tui_test.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/conftest.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/common.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/utils.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agents.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_integration.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_message_id.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_middleware.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_smoke.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_workloads.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.4.9 → drydock_cli-2.5.1}/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
|
|
|
@@ -157,92 +157,57 @@ def run_cli(args: argparse.Namespace) -> None:
|
|
|
157
157
|
loaded_session = load_session(args, config)
|
|
158
158
|
|
|
159
159
|
stdin_prompt = get_prompt_from_stdin()
|
|
160
|
+
|
|
161
|
+
# -p flag feeds prompt into the TUI (headless mode removed)
|
|
160
162
|
if args.prompt is not None:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
try:
|
|
164
|
-
active = config.get_active_model()
|
|
165
|
-
if "gemma" in active.name.lower():
|
|
166
|
-
gemma_disabled = ["todo", "task_create", "task_update", "task", "invoke_skill", "tool_search"]
|
|
167
|
-
except Exception:
|
|
168
|
-
pass
|
|
169
|
-
config.disabled_tools = [*config.disabled_tools, "ask_user_question", *gemma_disabled]
|
|
170
|
-
programmatic_prompt = args.prompt or stdin_prompt
|
|
171
|
-
if not programmatic_prompt:
|
|
172
|
-
print(
|
|
173
|
-
"Error: No prompt provided for programmatic mode", file=sys.stderr
|
|
174
|
-
)
|
|
175
|
-
sys.exit(1)
|
|
176
|
-
output_format = OutputFormat(
|
|
177
|
-
args.output if hasattr(args, "output") else "text"
|
|
178
|
-
)
|
|
163
|
+
if not hasattr(args, 'initial_prompt') or not args.initial_prompt:
|
|
164
|
+
args.initial_prompt = args.prompt or stdin_prompt
|
|
179
165
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
# Disable streaming for Gemma 4 — streaming tool call accumulation
|
|
218
|
-
# produces empty arguments (14 write_file calls → 0 files).
|
|
219
|
-
# Headless (non-streaming) works perfectly with same model.
|
|
220
|
-
use_streaming = True
|
|
221
|
-
try:
|
|
222
|
-
if "gemma" in config.get_active_model().name.lower():
|
|
223
|
-
use_streaming = False
|
|
224
|
-
except Exception:
|
|
225
|
-
pass
|
|
226
|
-
|
|
227
|
-
agent_loop = AgentLoop(
|
|
228
|
-
config,
|
|
229
|
-
agent_name=initial_agent_name,
|
|
230
|
-
enable_streaming=use_streaming,
|
|
231
|
-
entrypoint_metadata=EntrypointMetadata(
|
|
232
|
-
agent_entrypoint="cli",
|
|
233
|
-
agent_version=__version__,
|
|
234
|
-
client_name="drydock_cli",
|
|
235
|
-
client_version=__version__,
|
|
236
|
-
),
|
|
237
|
-
)
|
|
166
|
+
# Disable problematic tools for models that can't handle complex schemas
|
|
167
|
+
try:
|
|
168
|
+
active = config.get_active_model()
|
|
169
|
+
if "gemma" in active.name.lower():
|
|
170
|
+
config.disabled_tools = [
|
|
171
|
+
*config.disabled_tools,
|
|
172
|
+
"ask_user_question",
|
|
173
|
+
"todo",
|
|
174
|
+
"task_create",
|
|
175
|
+
"task_update",
|
|
176
|
+
"task",
|
|
177
|
+
"invoke_skill",
|
|
178
|
+
"tool_search",
|
|
179
|
+
]
|
|
180
|
+
except (ValueError, AttributeError):
|
|
181
|
+
pass
|
|
182
|
+
|
|
183
|
+
# Disable streaming for Gemma 4 — streaming tool call accumulation
|
|
184
|
+
# produces empty arguments (14 write_file calls → 0 files)
|
|
185
|
+
use_streaming = True
|
|
186
|
+
try:
|
|
187
|
+
if "gemma" in config.get_active_model().name.lower():
|
|
188
|
+
use_streaming = False
|
|
189
|
+
except Exception:
|
|
190
|
+
pass
|
|
191
|
+
|
|
192
|
+
agent_loop = AgentLoop(
|
|
193
|
+
config,
|
|
194
|
+
agent_name=initial_agent_name,
|
|
195
|
+
enable_streaming=use_streaming,
|
|
196
|
+
entrypoint_metadata=EntrypointMetadata(
|
|
197
|
+
agent_entrypoint="cli",
|
|
198
|
+
agent_version=__version__,
|
|
199
|
+
client_name="drydock_cli",
|
|
200
|
+
client_version=__version__,
|
|
201
|
+
),
|
|
202
|
+
)
|
|
238
203
|
|
|
239
|
-
|
|
240
|
-
|
|
204
|
+
if loaded_session:
|
|
205
|
+
_resume_previous_session(agent_loop, *loaded_session)
|
|
241
206
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
207
|
+
run_textual_ui(
|
|
208
|
+
agent_loop=agent_loop,
|
|
209
|
+
initial_prompt=args.initial_prompt or stdin_prompt,
|
|
210
|
+
teleport_on_start=args.teleport,
|
|
246
211
|
)
|
|
247
212
|
|
|
248
213
|
except (KeyboardInterrupt, EOFError):
|
|
@@ -1856,6 +1856,42 @@ class AgentLoop:
|
|
|
1856
1856
|
except Exception:
|
|
1857
1857
|
pass
|
|
1858
1858
|
|
|
1859
|
+
# Inject discoverable CLI tools (built by DryDock, CLI-Anything, system)
|
|
1860
|
+
try:
|
|
1861
|
+
from drydock.core.config.harness_files import get_harness_files_manager
|
|
1862
|
+
mgr = get_harness_files_manager()
|
|
1863
|
+
user_skills_dirs = mgr.user_skills_dirs
|
|
1864
|
+
tools_found = []
|
|
1865
|
+
for skills_dir in user_skills_dirs:
|
|
1866
|
+
if not skills_dir.is_dir():
|
|
1867
|
+
continue
|
|
1868
|
+
for skill_dir in sorted(skills_dir.iterdir())[:50]:
|
|
1869
|
+
skill_md = skill_dir / "SKILL.md"
|
|
1870
|
+
if not skill_md.is_file():
|
|
1871
|
+
continue
|
|
1872
|
+
name = skill_dir.name
|
|
1873
|
+
# Only show tool-*, system-*, cli-anything-* skills
|
|
1874
|
+
if not any(name.startswith(p) for p in ("tool-", "system-", "cli-anything-")):
|
|
1875
|
+
continue
|
|
1876
|
+
# Read first line of description
|
|
1877
|
+
try:
|
|
1878
|
+
for line in skill_md.read_text(encoding="utf-8").split("\n"):
|
|
1879
|
+
if line.strip().startswith("description:"):
|
|
1880
|
+
desc = line.split(":", 1)[1].strip().strip('"').strip("'")[:80]
|
|
1881
|
+
tools_found.append(f" {name}: {desc}")
|
|
1882
|
+
break
|
|
1883
|
+
except Exception:
|
|
1884
|
+
pass
|
|
1885
|
+
if tools_found:
|
|
1886
|
+
# Show max 15 to avoid bloating context
|
|
1887
|
+
parts.append(
|
|
1888
|
+
f"AVAILABLE CLI TOOLS ({len(tools_found)} installed, showing first 15):\n"
|
|
1889
|
+
+ "\n".join(tools_found[:15])
|
|
1890
|
+
+ "\nUse via bash: cd /path && python3 -m package_name [args]"
|
|
1891
|
+
)
|
|
1892
|
+
except Exception:
|
|
1893
|
+
pass
|
|
1894
|
+
|
|
1859
1895
|
if parts:
|
|
1860
1896
|
self._inject_system_note("\n".join(parts))
|
|
1861
1897
|
|
|
@@ -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
|
{drydock_cli-2.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.4.9 → drydock_cli-2.5.1}/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
|