drydock-cli 2.2.3__tar.gz → 2.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/CLAUDE.md +114 -12
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/PKG-INFO +1 -1
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/pyproject.toml +1 -1
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.gitignore +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.python-version +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.typos.toml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.vscode/extensions.json +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.vscode/launch.json +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/.vscode/settings.json +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/AGENTS.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/CHANGELOG.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/LICENSE +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/NOTICE +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/PRD.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/README.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/action.yml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/docs/README.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/docs/acp-setup.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/logger.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/slug.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/types.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/whats_new.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock-acp.spec +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock_terms.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/flake.lock +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/flake.nix +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/README.md +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/backup.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/bump_version.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/install.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/notify_release.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/test_full.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/conftest.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/common.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/mock/utils.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_agents.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_integration.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_message_id.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_middleware.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_smoke.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/test_workloads.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.2.3 → drydock_cli-2.2.4}/uv.lock +0 -0
|
@@ -4,13 +4,40 @@
|
|
|
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.2.1)
|
|
7
|
+
- **PyPI:** https://pypi.org/project/drydock-cli/ (v2.2.1 for v2, v3.0.0 for v3)
|
|
8
8
|
- **Goal:** Best-in-class SWE-bench Verified pass rate with local LLMs
|
|
9
|
-
- **Hardware:** 2x RTX 4060 Ti 16GB,
|
|
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 (replaced devstral-24B — 3-4x faster, better results)
|
|
12
|
+
- **Active codebase:** DryDock v3 at `/data3/drydock-v3/` (clean rewrite)
|
|
11
13
|
|
|
12
14
|
## Build & Test
|
|
13
15
|
|
|
16
|
+
### DryDock v3 (active)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install (minimal deps: only openai>=1.0)
|
|
20
|
+
cd /data3/drydock-v3 && pip install -e .
|
|
21
|
+
|
|
22
|
+
# Run drydock CLI (defaults to gemma4 model)
|
|
23
|
+
python -m drydock
|
|
24
|
+
python -m drydock --model gemma4
|
|
25
|
+
|
|
26
|
+
# Run programmatically (headless, for benchmarks)
|
|
27
|
+
PYTHONPATH=/data3/drydock-v3 python3 -c "import sys; sys.path.insert(0, '/data3/drydock-v3'); from drydock.cli import main; main()"
|
|
28
|
+
|
|
29
|
+
# Start Gemma 4 model server
|
|
30
|
+
bash /data3/Models/start_gemma4.sh
|
|
31
|
+
|
|
32
|
+
# Check model is running
|
|
33
|
+
curl http://localhost:8000/v1/models
|
|
34
|
+
|
|
35
|
+
# Syntax check modified files
|
|
36
|
+
python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### DryDock v2 (legacy)
|
|
40
|
+
|
|
14
41
|
```bash
|
|
15
42
|
# Install
|
|
16
43
|
uv sync
|
|
@@ -30,7 +57,20 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
30
57
|
|
|
31
58
|
## Key Architecture
|
|
32
59
|
|
|
33
|
-
|
|
60
|
+
### DryDock v3 (active — clean rewrite at `/data3/drydock-v3/`)
|
|
61
|
+
|
|
62
|
+
v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files, ~750 lines total. Provider-agnostic, works with any OpenAI-compatible endpoint.
|
|
63
|
+
|
|
64
|
+
- `drydock/agent.py` — Core agent loop (161 lines). Multi-turn tool calling, event-driven. **Most changes go here.**
|
|
65
|
+
- `drydock/providers.py` — LLM abstraction (209 lines). Provider registry (vLLM, Ollama, LM Studio, OpenAI, Anthropic). Streams responses, filters Gemma 4 thinking tokens.
|
|
66
|
+
- `drydock/tool_registry.py` — Tool plugin system (46 lines). Register/execute tools by name.
|
|
67
|
+
- `drydock/tools/__init__.py` — 6 built-in tools (258 lines): Read, Write, Edit, Bash, Glob, Grep
|
|
68
|
+
- `drydock/cli.py` — CLI entry point (213 lines). Default model: gemma4.
|
|
69
|
+
- `drydock/compaction.py` — Two-tier context management (119 lines). Normal compaction + emergency compaction on 400 errors.
|
|
70
|
+
|
|
71
|
+
### DryDock v2 (legacy at `/data3/drydock/`)
|
|
72
|
+
|
|
73
|
+
- `drydock/core/agent_loop.py` — Main agent loop. Loop detection, message ordering, tool execution.
|
|
34
74
|
- `drydock/core/programmatic.py` — Headless API entry point used by SWE-bench harness
|
|
35
75
|
- `drydock/core/build_orchestrator.py` — Multi-phase build pipeline (currently disabled, model drives builds)
|
|
36
76
|
- `drydock/core/tools/builtins/bash.py` — Shell tool with allowlist/denylist, conda support
|
|
@@ -47,16 +87,35 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
47
87
|
|
|
48
88
|
## Critical Constraints
|
|
49
89
|
|
|
90
|
+
### v3 Constraints
|
|
91
|
+
- **Gemma 4 leaks thinking tokens.** The model emits `<|channel>thought<channel|>` tokens that must be filtered out. `providers.py` strips these via regex before displaying output.
|
|
92
|
+
- **Two-tier compaction.** Normal compaction truncates old tool results. Emergency compaction triggers on 400 errors (context overflow) with aggressive truncation.
|
|
93
|
+
- **Provider-agnostic design.** No model-specific hacks in the agent loop. All model quirks handled in `providers.py`.
|
|
94
|
+
|
|
95
|
+
### v2 Constraints (still apply to v2 codebase)
|
|
50
96
|
- **MessageList is not a plain list.** Never `self.messages = [...]`. Use `self.messages.reset([...])`.
|
|
51
97
|
- **vLLM/Mistral rejects `user` after `tool` messages.** `_sanitize_message_ordering()` runs before every LLM call. All injection must use `_inject_system_note()`.
|
|
52
98
|
- **`os._exit()` in programmatic.py** — necessary because async cleanup hangs. Ensure stdout is flushed before calling.
|
|
53
99
|
- **AGENTS.md is CRITICAL for devstral.** Without per-project instructions, the model loops on ls/bash. Auto-created by `_ensure_agents_md()`.
|
|
100
|
+
|
|
101
|
+
### Shared Constraints
|
|
54
102
|
- **"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.
|
|
55
103
|
- **Additive-only harness changes.** Every control flow modification (circuit breaker, orchestrator, nudges) caused regressions. Just inject better context before the agent loop.
|
|
56
104
|
- **Circuit breaker is disabled.** It blocked valid retries. Loop detection prunes duplicates and nudges instead. Never stops the session.
|
|
57
105
|
- **Loop detection never stops.** Only prunes repeated tool calls and injects guidance. The only hard stop is MAX_TOOL_TURNS (200).
|
|
58
106
|
|
|
59
|
-
##
|
|
107
|
+
## Gemma 4 Tool Calling (v3 — active)
|
|
108
|
+
|
|
109
|
+
- **Model:** Gemma-4-26B-A4B-it-AWQ-4bit (26B MoE, only 4B active params per token)
|
|
110
|
+
- **Serving:** vLLM Docker image `vllm/vllm-openai:gemma4` with `--tool-call-parser gemma4 --enable-auto-tool-choice`
|
|
111
|
+
- **Start script:** `/data3/Models/start_gemma4.sh` (Docker: 2 GPU tensor parallel, 131K context, fp8 KV cache)
|
|
112
|
+
- **Performance:** 3-4x faster than devstral-24B, 0% timeouts on SWE-bench, 70% file match (vs 60% devstral)
|
|
113
|
+
- **Thinking tokens:** Model leaks `<|channel>thought<channel|>` — filtered in `providers.py` via regex
|
|
114
|
+
- **Tool choice:** `tool_choice="auto"` (default), model natively decides tool vs text
|
|
115
|
+
- **No AGENTS.md dependency:** Gemma 4 does not loop without AGENTS.md (unlike devstral)
|
|
116
|
+
- **Docker management:** `docker stop gemma4 && docker rm gemma4` to restart
|
|
117
|
+
|
|
118
|
+
## Mistral/devstral Tool Calling (v2 — legacy)
|
|
60
119
|
|
|
61
120
|
- `tool_choice="auto"` (default): model decides whether to call a tool or respond with text
|
|
62
121
|
- Never ask for text before first tool call — blocks tool calling
|
|
@@ -67,10 +126,28 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
67
126
|
## File Locations
|
|
68
127
|
|
|
69
128
|
```
|
|
70
|
-
/data3/drydock/
|
|
129
|
+
/data3/drydock-v3/ ← DryDock v3 (active, clean rewrite)
|
|
130
|
+
├── drydock/ ← Python package (~750 lines total)
|
|
131
|
+
│ ├── agent.py ← Core agent loop (THE most important file)
|
|
132
|
+
│ ├── providers.py ← LLM abstraction (vLLM, Ollama, etc.)
|
|
133
|
+
│ ├── tool_registry.py ← Tool plugin system
|
|
134
|
+
│ ├── tools/__init__.py ← 6 built-in tools (Read, Write, Edit, Bash, Glob, Grep)
|
|
135
|
+
│ ├── cli.py ← CLI entry point
|
|
136
|
+
│ ├── compaction.py ← Two-tier context management
|
|
137
|
+
│ ├── memory/ ← Memory system
|
|
138
|
+
│ └── skills/ ← Skill framework
|
|
139
|
+
├── scripts/
|
|
140
|
+
│ └── monitor.sh ← Process monitor (restarts Gemma 4 if needed)
|
|
141
|
+
├── logs/ ← Runtime logs
|
|
142
|
+
├── pyproject.toml ← v3.0.0, depends only on openai>=1.0
|
|
143
|
+
└── AGENTS.md ← Project instructions
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
/data3/drydock/ ← DryDock v2 (legacy, original codebase)
|
|
71
148
|
├── drydock/ ← Python package
|
|
72
149
|
│ ├── core/
|
|
73
|
-
│ │ ├── agent_loop.py ←
|
|
150
|
+
│ │ ├── agent_loop.py ← v2 agent loop
|
|
74
151
|
│ │ ├── prompts/cli.md ← System prompt
|
|
75
152
|
│ │ ├── build_orchestrator.py ← Multi-phase builder (disabled)
|
|
76
153
|
│ │ ├── tools/builtins/ ← 24 builtin tools
|
|
@@ -93,11 +170,18 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
93
170
|
|
|
94
171
|
```
|
|
95
172
|
/data3/swe_bench_runs/ ← SWE-bench infrastructure (separate)
|
|
96
|
-
├── harness.py ← Runs drydock on SWE-bench tasks
|
|
97
|
-
├── continuous_bench.sh ← Continuous improvement loop
|
|
173
|
+
├── harness.py ← Runs drydock on SWE-bench tasks (supports v2 + v3 backends)
|
|
174
|
+
├── continuous_bench.sh ← Continuous improvement loop (v2/devstral)
|
|
175
|
+
├── continuous_gemma4.sh ← Continuous improvement loop (v3/Gemma 4, 20-task batches)
|
|
98
176
|
└── logs/ ← Batch results
|
|
99
177
|
```
|
|
100
178
|
|
|
179
|
+
```
|
|
180
|
+
/data3/Models/ ← Model files and startup scripts
|
|
181
|
+
├── Gemma-4-26B-A4B-it-AWQ-4bit/ ← Gemma 4 model weights
|
|
182
|
+
└── start_gemma4.sh ← Docker startup (vLLM + Gemma 4)
|
|
183
|
+
```
|
|
184
|
+
|
|
101
185
|
## Configuration Management
|
|
102
186
|
|
|
103
187
|
**All scripts use explicit Python path:** `/home/bobef/miniconda3/bin/python3`
|
|
@@ -119,12 +203,18 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
119
203
|
|
|
120
204
|
## SWE-bench
|
|
121
205
|
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
- Harness at `/data3/swe_bench_runs/harness.py`
|
|
206
|
+
### Current Results (Gemma 4 + DryDock v3)
|
|
207
|
+
- **70% file match** (vs 60% devstral v2), 0% timeouts, 8x faster per task
|
|
208
|
+
- Harness at `/data3/swe_bench_runs/harness.py` supports both v2 (devstral) and v3 (gemma4) backends
|
|
209
|
+
- Continuous bench loop: `/data3/swe_bench_runs/continuous_gemma4.sh` (20-task batches with Telegram updates)
|
|
125
210
|
- AGENTS.md auto-created per task with bug-fix workflow
|
|
126
211
|
- Environment bootstrapping (Meta-Harness technique) gathers repo structure before first LLM call
|
|
127
212
|
|
|
213
|
+
### Previous Results (devstral + DryDock v2)
|
|
214
|
+
- 42% file match, 62% real patches (50-task eval)
|
|
215
|
+
- Target was 68% (devstral-small-2 published score)
|
|
216
|
+
- Continuous bench loop: `/data3/swe_bench_runs/continuous_bench.sh`
|
|
217
|
+
|
|
128
218
|
## Improvement Backlog (from research papers + industry analysis)
|
|
129
219
|
|
|
130
220
|
**Meta-Harness (arXiv:2603.28052) — still TODO:**
|
|
@@ -151,12 +241,18 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
151
241
|
- ✅ "Task Completed" false claim detection
|
|
152
242
|
- ✅ Loop guidance (never stops, only redirects)
|
|
153
243
|
- ✅ Composable prompt (static first, dynamic after)
|
|
244
|
+
- ✅ DryDock v3 clean rewrite (provider-agnostic, ~750 lines)
|
|
245
|
+
- ✅ Gemma 4 MoE model (3-4x faster, 70% file match)
|
|
246
|
+
- ✅ Two-tier context compaction (normal + emergency on 400 errors)
|
|
247
|
+
- ✅ Docker-based model serving (vLLM + Gemma 4)
|
|
248
|
+
- ✅ Multi-backend SWE-bench harness (v2/devstral + v3/gemma4)
|
|
249
|
+
- ✅ Thinking token filtering (Gemma 4 `<|channel>` leak)
|
|
154
250
|
|
|
155
251
|
**Legal note:** All patterns are standard design concepts implemented from scratch. No proprietary code copied.
|
|
156
252
|
|
|
157
253
|
## Key Learnings
|
|
158
254
|
|
|
159
|
-
1. AGENTS.md is essential — devstral loops without it
|
|
255
|
+
1. AGENTS.md is essential — devstral loops without it (Gemma 4 does not have this problem)
|
|
160
256
|
2. "Restate the goal" blocked tool calling for months — one line
|
|
161
257
|
3. Additive-only changes work best — control flow mods regress
|
|
162
258
|
4. The harness matters as much as the model (Meta-Harness paper)
|
|
@@ -166,6 +262,12 @@ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
|
|
|
166
262
|
8. Loop detection should guide, never stop
|
|
167
263
|
9. Test the installed package, not source (different Python envs)
|
|
168
264
|
10. Never wait for full test runs — fix issues from early results
|
|
265
|
+
11. Clean rewrites beat incremental fixes — v3 (~750 lines) outperforms v2 (~5000+ lines)
|
|
266
|
+
12. Model choice matters more than agent complexity — Gemma 4 MoE gives 3-4x speed + better accuracy than devstral
|
|
267
|
+
13. Gemma 4 leaks thinking tokens (`<|channel>thought<channel|>`) — must filter in provider layer
|
|
268
|
+
14. Two-tier compaction (normal + emergency on 400) is more robust than single-tier
|
|
269
|
+
15. Provider-agnostic design enables fast model switching — v3 works with any OpenAI-compatible endpoint
|
|
270
|
+
16. Docker-based model serving (vLLM) is more reliable than bare-metal — easier restarts, GPU management
|
|
169
271
|
|
|
170
272
|
## When Compacting
|
|
171
273
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/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.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/cli/update_notifier/ports/update_cache_repository.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
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/autocompletion/file_indexer/ignore_rules.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
|
{drydock_cli-2.2.3 → drydock_cli-2.2.4}/drydock/core/config/harness_files/_harness_manager.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
|