drydock-cli 2.6.28__tar.gz → 2.6.30__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.6.28 → drydock_cli-2.6.30}/PKG-INFO +129 -61
- drydock_cli-2.6.30/README.md +270 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agent_loop.py +124 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/format.py +18 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/search_replace.py +61 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/pyproject.toml +6 -3
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown.py +52 -1
- drydock_cli-2.6.30/scripts/shakedown_interactive.py +449 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/uv.lock +1 -1
- drydock_cli-2.6.28/.auto_release.lock +0 -1
- drydock_cli-2.6.28/README.md +0 -202
- drydock_cli-2.6.28/log_analyzer/__init__.py +0 -2
- drydock_cli-2.6.28/log_analyzer/__main__.py +0 -9
- drydock_cli-2.6.28/log_analyzer/analyzer.py +0 -48
- drydock_cli-2.6.28/log_analyzer/cli.py +0 -40
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.gitignore +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.python-version +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.typos.toml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/extensions.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/launch.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/settings.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/AGENTS.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CHANGELOG.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CLAUDE.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/LICENSE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/NOTICE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/PRD.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/action.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/README.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/acp-setup.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/slug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/whats_new.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock-acp.spec +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock_terms.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/flake.lock +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/flake.nix +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/README.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/backup.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/bump_version.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/install.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/notify_release.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_full.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/tui_test.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/common.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/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.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agents.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_integration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_message_id.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_middleware.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_smoke.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_workloads.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_whats_new.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.6.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 2.6.30
|
|
4
|
+
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
7
7
|
Project-URL: Issues, https://github.com/fbobe321/drydock/issues
|
|
@@ -10,7 +10,7 @@ Author: Drydock contributors, Mistral AI (original)
|
|
|
10
10
|
License: Apache-2.0
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
License-File: NOTICE
|
|
13
|
-
Keywords: ai,cli,coding-assistant,developer-tools,drydock,llm,
|
|
13
|
+
Keywords: ai,cli,coding-assistant,developer-tools,drydock,gemma,llm,local-llm,tui,vllm
|
|
14
14
|
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -60,41 +60,123 @@ Description-Content-Type: text/markdown
|
|
|
60
60
|
[](https://github.com/fbobe321/drydock/blob/main/LICENSE)
|
|
61
61
|
|
|
62
62
|
```
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
\_________________/
|
|
70
|
-
~~~~ ~~~ ~~~~ ~~~ ~~~~
|
|
71
|
-
~~~ ~~~~ ~~~ ~~~ ~~~
|
|
63
|
+
____ _ _
|
|
64
|
+
| _ \ _ __ _ _ __| | ___ ___ | | __
|
|
65
|
+
| | | | '__| | | |/ _` |/ _ \ / __|| |/ /
|
|
66
|
+
| |_| | | | |_| | (_| | (_) | (__ | <
|
|
67
|
+
|____/|_| \__, |\__,_|\___/ \___||_|\_\
|
|
68
|
+
|___/
|
|
72
69
|
```
|
|
73
70
|
|
|
74
|
-
**
|
|
71
|
+
**Local-first CLI coding agent. Chart your course. Execute with precision.**
|
|
75
72
|
|
|
76
|
-
DryDock is a
|
|
73
|
+
DryDock is a TUI coding assistant designed to work with **local LLMs**. It provides a conversational interface to your codebase — explore, modify, build, and test projects through natural language and a powerful set of tools.
|
|
77
74
|
|
|
78
|
-
> [!
|
|
79
|
-
> DryDock
|
|
75
|
+
> [!IMPORTANT]
|
|
76
|
+
> DryDock is tested and optimized for **Gemma 4 26B-A4B** (26B MoE, 4B active parameters) served via vLLM. Other models and providers are supported (Mistral, OpenAI, Anthropic, Ollama) but are not as thoroughly tested. If you use a different model, expect to tune prompts and tool settings.
|
|
80
77
|
|
|
81
|
-
|
|
78
|
+
## Tested Hardware + Model
|
|
79
|
+
|
|
80
|
+
| Component | Spec |
|
|
81
|
+
|-----------|------|
|
|
82
|
+
| GPUs | 2x NVIDIA RTX 4060 Ti 16GB |
|
|
83
|
+
| Model | [Gemma-4-26B-A4B-it-AWQ-4bit](https://huggingface.co/casperhansen/gemma-4-26b-a4b-it-AWQ-4bit) |
|
|
84
|
+
| Serving | vLLM (Docker image `vllm/vllm-openai:gemma4`) |
|
|
85
|
+
| Performance | ~70 tok/s, 131K context, 0% timeouts |
|
|
86
|
+
| Active params | 4B per token (MoE architecture — fast inference) |
|
|
87
|
+
|
|
88
|
+
### Install the model
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Download the model weights (requires HuggingFace access)
|
|
92
|
+
pip install huggingface-hub
|
|
93
|
+
huggingface-cli download casperhansen/gemma-4-26b-a4b-it-AWQ-4bit \
|
|
94
|
+
--local-dir /path/to/models/Gemma-4-26B-A4B-it-AWQ-4bit
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Start vLLM
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
docker run -d \
|
|
101
|
+
--gpus all \
|
|
102
|
+
--name gemma4 \
|
|
103
|
+
-p 8000:8000 \
|
|
104
|
+
-v /path/to/models:/models \
|
|
105
|
+
--ipc=host \
|
|
106
|
+
vllm/vllm-openai:gemma4 \
|
|
107
|
+
--model /models/Gemma-4-26B-A4B-it-AWQ-4bit \
|
|
108
|
+
--quantization compressed-tensors \
|
|
109
|
+
--tensor-parallel-size 2 \
|
|
110
|
+
--max-model-len 131072 \
|
|
111
|
+
--max-num-seqs 2 \
|
|
112
|
+
--gpu-memory-utilization 0.95 \
|
|
113
|
+
--kv-cache-dtype fp8 \
|
|
114
|
+
--served-model-name gemma4 \
|
|
115
|
+
--trust-remote-code \
|
|
116
|
+
--tool-call-parser gemma4 \
|
|
117
|
+
--enable-auto-tool-choice \
|
|
118
|
+
--attention-backend TRITON_ATTN
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Key flags:
|
|
122
|
+
- `--tensor-parallel-size 2` — split across 2 GPUs
|
|
123
|
+
- `--kv-cache-dtype fp8` — reduce KV cache memory for longer contexts
|
|
124
|
+
- `--tool-call-parser gemma4` + `--enable-auto-tool-choice` — required for Gemma 4 tool calling
|
|
125
|
+
- `--max-num-seqs 2` — limit concurrent requests (prevents OOM on 16GB GPUs)
|
|
126
|
+
|
|
127
|
+
Verify the model is running:
|
|
128
|
+
```bash
|
|
129
|
+
curl http://localhost:8000/v1/models
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Configure DryDock
|
|
133
|
+
|
|
134
|
+
```toml
|
|
135
|
+
# ~/.drydock/config.toml
|
|
136
|
+
[models.gemma4]
|
|
137
|
+
name = "gemma4"
|
|
138
|
+
provider = "generic-openai"
|
|
139
|
+
alias = "gemma4"
|
|
140
|
+
temperature = 0.2
|
|
141
|
+
thinking = "high"
|
|
142
|
+
|
|
143
|
+
[providers.generic-openai]
|
|
144
|
+
api_base = "http://localhost:8000/v1"
|
|
145
|
+
api_style = "openai"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Install
|
|
82
149
|
|
|
83
150
|
```bash
|
|
84
151
|
pip install drydock-cli
|
|
85
152
|
```
|
|
86
153
|
|
|
87
154
|
Or with uv:
|
|
88
|
-
|
|
89
155
|
```bash
|
|
90
156
|
uv tool install drydock-cli
|
|
91
157
|
```
|
|
92
158
|
|
|
159
|
+
## Quick Start
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
cd your-project/
|
|
163
|
+
drydock
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
First run creates a config at `~/.drydock/config.toml` and prompts for your provider setup.
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
> Review the PRD and build the package
|
|
170
|
+
```
|
|
171
|
+
|
|
93
172
|
## Features
|
|
94
173
|
|
|
95
|
-
- **
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
174
|
+
- **TUI Interface**: Full terminal UI with streaming output, tool approval, and session management.
|
|
175
|
+
- **Adaptive Thinking**: Automatically adjusts reasoning depth per turn — full thinking for planning, fast mode for file writes.
|
|
176
|
+
- **Powerful Toolset**: Read, write, and patch files. Execute shell commands. Search code with `grep`. Delegate to subagents.
|
|
177
|
+
- **Project-Aware**: Scans project structure, loads `AGENTS.md` / `DRYDOCK.md` for context.
|
|
178
|
+
- **Subagent Delegation**: Large tasks can be delegated to builder/planner/explorer subagents with isolated context.
|
|
179
|
+
- **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
|
|
98
180
|
- **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
|
|
99
181
|
- **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
|
|
100
182
|
- **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
|
|
@@ -111,21 +193,16 @@ uv tool install drydock-cli
|
|
|
111
193
|
drydock --agent plan
|
|
112
194
|
```
|
|
113
195
|
|
|
114
|
-
|
|
196
|
+
### Gemma 4 Optimizations
|
|
115
197
|
|
|
116
|
-
|
|
198
|
+
DryDock includes several optimizations specifically tuned for Gemma 4:
|
|
117
199
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
3. Start chatting:
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
> Can you find all TODO comments in this project?
|
|
128
|
-
```
|
|
200
|
+
- **Simplified prompt** (`gemma4.md`): 20-line system prompt instead of 125 lines. Complex prompts cause Gemma 4 to plan instead of act.
|
|
201
|
+
- **Non-streaming mode**: Streaming breaks Gemma 4 tool call JSON parsing. DryDock automatically disables streaming for Gemma 4.
|
|
202
|
+
- **Thinking token filtering**: Gemma 4 leaks `<|channel>thought<channel|>` tokens into text output. DryDock strips these before storing in context.
|
|
203
|
+
- **Adaptive thinking**: Full thinking for planning (turn 1) and error recovery. Thinking OFF for routine file writes — eliminates 30-120s hangs between files.
|
|
204
|
+
- **search_replace resilience**: Auto-detects already-applied edits, infers missing file paths, fuzzy-matches whitespace differences.
|
|
205
|
+
- **Reduced tool set**: Disables tools that confuse Gemma 4 (`ask_user_question`, `task_create`, etc.).
|
|
129
206
|
|
|
130
207
|
## Usage
|
|
131
208
|
|
|
@@ -153,10 +230,6 @@ drydock --prompt "Analyze the codebase" --max-turns 5 --output json
|
|
|
153
230
|
drydock --dangerously-skip-permissions -p "Fix all lint errors"
|
|
154
231
|
```
|
|
155
232
|
|
|
156
|
-
### Trust Folder System
|
|
157
|
-
|
|
158
|
-
DryDock includes a trust folder system. When you run DryDock in a directory with a `.drydock` folder, it asks you to confirm trust. Managed via `~/.drydock/trusted_folders.toml`.
|
|
159
|
-
|
|
160
233
|
## Configuration
|
|
161
234
|
|
|
162
235
|
DryDock is configured via `config.toml`. It looks first in `./.drydock/config.toml`, then `~/.drydock/config.toml`.
|
|
@@ -175,11 +248,10 @@ Keys are saved to `~/.drydock/.env`.
|
|
|
175
248
|
Set a smarter model for the `/consult` command:
|
|
176
249
|
|
|
177
250
|
```toml
|
|
178
|
-
# In ~/.drydock/config.toml
|
|
179
251
|
consultant_model = "gemini-2.5-pro"
|
|
180
252
|
```
|
|
181
253
|
|
|
182
|
-
The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it.
|
|
254
|
+
The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it.
|
|
183
255
|
|
|
184
256
|
### Custom Agents
|
|
185
257
|
|
|
@@ -192,18 +264,6 @@ system_prompt_id = "redteam"
|
|
|
192
264
|
disabled_tools = ["search_replace", "write_file"]
|
|
193
265
|
```
|
|
194
266
|
|
|
195
|
-
```bash
|
|
196
|
-
drydock --agent redteam
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### Custom Prompts
|
|
200
|
-
|
|
201
|
-
Create markdown files in `~/.drydock/prompts/`:
|
|
202
|
-
|
|
203
|
-
```toml
|
|
204
|
-
system_prompt_id = "my_custom_prompt"
|
|
205
|
-
```
|
|
206
|
-
|
|
207
267
|
### Skills
|
|
208
268
|
|
|
209
269
|
DryDock discovers skills from:
|
|
@@ -222,13 +282,27 @@ command = "uvx"
|
|
|
222
282
|
args = ["mcp-server-fetch"]
|
|
223
283
|
```
|
|
224
284
|
|
|
225
|
-
|
|
285
|
+
## Testing
|
|
286
|
+
|
|
287
|
+
DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
|
|
226
288
|
|
|
227
289
|
```bash
|
|
228
|
-
|
|
290
|
+
# Single project test
|
|
291
|
+
python3 scripts/shakedown.py \
|
|
292
|
+
--cwd /path/to/project \
|
|
293
|
+
--prompt "review the PRD and build the package" \
|
|
294
|
+
--pkg package_name
|
|
295
|
+
|
|
296
|
+
# Interactive back-and-forth test
|
|
297
|
+
python3 scripts/shakedown_interactive.py \
|
|
298
|
+
--cwd /path/to/project \
|
|
299
|
+
--pkg package_name
|
|
300
|
+
|
|
301
|
+
# Full regression suite (370 PRDs)
|
|
302
|
+
bash scripts/shakedown_suite.sh
|
|
229
303
|
```
|
|
230
304
|
|
|
231
|
-
|
|
305
|
+
Pass criteria: no write loops, no ignored interrupts, no search_replace cascades, package executes, session finishes within time budget.
|
|
232
306
|
|
|
233
307
|
## Slash Commands
|
|
234
308
|
|
|
@@ -242,12 +316,6 @@ drydock --resume abc123 # Resume specific session
|
|
|
242
316
|
drydock --workdir /path/to/dir # Set working directory
|
|
243
317
|
```
|
|
244
318
|
|
|
245
|
-
## Resources
|
|
246
|
-
|
|
247
|
-
- [CHANGELOG](CHANGELOG.md)
|
|
248
|
-
- [CONTRIBUTING](CONTRIBUTING.md)
|
|
249
|
-
- [ACP Setup](docs/acp-setup.md) — Editor/IDE integration
|
|
250
|
-
|
|
251
319
|
## License
|
|
252
320
|
|
|
253
321
|
Copyright 2025 Mistral AI (original work)
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# DryDock
|
|
2
|
+
|
|
3
|
+
[](https://www.python.org/downloads/release/python-3120/)
|
|
4
|
+
[](https://github.com/fbobe321/drydock/blob/main/LICENSE)
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
____ _ _
|
|
8
|
+
| _ \ _ __ _ _ __| | ___ ___ | | __
|
|
9
|
+
| | | | '__| | | |/ _` |/ _ \ / __|| |/ /
|
|
10
|
+
| |_| | | | |_| | (_| | (_) | (__ | <
|
|
11
|
+
|____/|_| \__, |\__,_|\___/ \___||_|\_\
|
|
12
|
+
|___/
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Local-first CLI coding agent. Chart your course. Execute with precision.**
|
|
16
|
+
|
|
17
|
+
DryDock is a TUI coding assistant designed to work with **local LLMs**. It provides a conversational interface to your codebase — explore, modify, build, and test projects through natural language and a powerful set of tools.
|
|
18
|
+
|
|
19
|
+
> [!IMPORTANT]
|
|
20
|
+
> DryDock is tested and optimized for **Gemma 4 26B-A4B** (26B MoE, 4B active parameters) served via vLLM. Other models and providers are supported (Mistral, OpenAI, Anthropic, Ollama) but are not as thoroughly tested. If you use a different model, expect to tune prompts and tool settings.
|
|
21
|
+
|
|
22
|
+
## Tested Hardware + Model
|
|
23
|
+
|
|
24
|
+
| Component | Spec |
|
|
25
|
+
|-----------|------|
|
|
26
|
+
| GPUs | 2x NVIDIA RTX 4060 Ti 16GB |
|
|
27
|
+
| Model | [Gemma-4-26B-A4B-it-AWQ-4bit](https://huggingface.co/casperhansen/gemma-4-26b-a4b-it-AWQ-4bit) |
|
|
28
|
+
| Serving | vLLM (Docker image `vllm/vllm-openai:gemma4`) |
|
|
29
|
+
| Performance | ~70 tok/s, 131K context, 0% timeouts |
|
|
30
|
+
| Active params | 4B per token (MoE architecture — fast inference) |
|
|
31
|
+
|
|
32
|
+
### Install the model
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Download the model weights (requires HuggingFace access)
|
|
36
|
+
pip install huggingface-hub
|
|
37
|
+
huggingface-cli download casperhansen/gemma-4-26b-a4b-it-AWQ-4bit \
|
|
38
|
+
--local-dir /path/to/models/Gemma-4-26B-A4B-it-AWQ-4bit
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Start vLLM
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
docker run -d \
|
|
45
|
+
--gpus all \
|
|
46
|
+
--name gemma4 \
|
|
47
|
+
-p 8000:8000 \
|
|
48
|
+
-v /path/to/models:/models \
|
|
49
|
+
--ipc=host \
|
|
50
|
+
vllm/vllm-openai:gemma4 \
|
|
51
|
+
--model /models/Gemma-4-26B-A4B-it-AWQ-4bit \
|
|
52
|
+
--quantization compressed-tensors \
|
|
53
|
+
--tensor-parallel-size 2 \
|
|
54
|
+
--max-model-len 131072 \
|
|
55
|
+
--max-num-seqs 2 \
|
|
56
|
+
--gpu-memory-utilization 0.95 \
|
|
57
|
+
--kv-cache-dtype fp8 \
|
|
58
|
+
--served-model-name gemma4 \
|
|
59
|
+
--trust-remote-code \
|
|
60
|
+
--tool-call-parser gemma4 \
|
|
61
|
+
--enable-auto-tool-choice \
|
|
62
|
+
--attention-backend TRITON_ATTN
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Key flags:
|
|
66
|
+
- `--tensor-parallel-size 2` — split across 2 GPUs
|
|
67
|
+
- `--kv-cache-dtype fp8` — reduce KV cache memory for longer contexts
|
|
68
|
+
- `--tool-call-parser gemma4` + `--enable-auto-tool-choice` — required for Gemma 4 tool calling
|
|
69
|
+
- `--max-num-seqs 2` — limit concurrent requests (prevents OOM on 16GB GPUs)
|
|
70
|
+
|
|
71
|
+
Verify the model is running:
|
|
72
|
+
```bash
|
|
73
|
+
curl http://localhost:8000/v1/models
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Configure DryDock
|
|
77
|
+
|
|
78
|
+
```toml
|
|
79
|
+
# ~/.drydock/config.toml
|
|
80
|
+
[models.gemma4]
|
|
81
|
+
name = "gemma4"
|
|
82
|
+
provider = "generic-openai"
|
|
83
|
+
alias = "gemma4"
|
|
84
|
+
temperature = 0.2
|
|
85
|
+
thinking = "high"
|
|
86
|
+
|
|
87
|
+
[providers.generic-openai]
|
|
88
|
+
api_base = "http://localhost:8000/v1"
|
|
89
|
+
api_style = "openai"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Install
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pip install drydock-cli
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Or with uv:
|
|
99
|
+
```bash
|
|
100
|
+
uv tool install drydock-cli
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Quick Start
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
cd your-project/
|
|
107
|
+
drydock
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
First run creates a config at `~/.drydock/config.toml` and prompts for your provider setup.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
> Review the PRD and build the package
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Features
|
|
117
|
+
|
|
118
|
+
- **TUI Interface**: Full terminal UI with streaming output, tool approval, and session management.
|
|
119
|
+
- **Adaptive Thinking**: Automatically adjusts reasoning depth per turn — full thinking for planning, fast mode for file writes.
|
|
120
|
+
- **Powerful Toolset**: Read, write, and patch files. Execute shell commands. Search code with `grep`. Delegate to subagents.
|
|
121
|
+
- **Project-Aware**: Scans project structure, loads `AGENTS.md` / `DRYDOCK.md` for context.
|
|
122
|
+
- **Subagent Delegation**: Large tasks can be delegated to builder/planner/explorer subagents with isolated context.
|
|
123
|
+
- **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
|
|
124
|
+
- **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
|
|
125
|
+
- **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
|
|
126
|
+
- **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
|
|
127
|
+
- **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
|
|
128
|
+
|
|
129
|
+
### Built-in Agents
|
|
130
|
+
|
|
131
|
+
- **`default`**: Standard agent that requires approval for tool executions.
|
|
132
|
+
- **`plan`**: Read-only agent for exploration and planning.
|
|
133
|
+
- **`accept-edits`**: Auto-approves file edits only.
|
|
134
|
+
- **`auto-approve`**: Auto-approves all tool executions.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
drydock --agent plan
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Gemma 4 Optimizations
|
|
141
|
+
|
|
142
|
+
DryDock includes several optimizations specifically tuned for Gemma 4:
|
|
143
|
+
|
|
144
|
+
- **Simplified prompt** (`gemma4.md`): 20-line system prompt instead of 125 lines. Complex prompts cause Gemma 4 to plan instead of act.
|
|
145
|
+
- **Non-streaming mode**: Streaming breaks Gemma 4 tool call JSON parsing. DryDock automatically disables streaming for Gemma 4.
|
|
146
|
+
- **Thinking token filtering**: Gemma 4 leaks `<|channel>thought<channel|>` tokens into text output. DryDock strips these before storing in context.
|
|
147
|
+
- **Adaptive thinking**: Full thinking for planning (turn 1) and error recovery. Thinking OFF for routine file writes — eliminates 30-120s hangs between files.
|
|
148
|
+
- **search_replace resilience**: Auto-detects already-applied edits, infers missing file paths, fuzzy-matches whitespace differences.
|
|
149
|
+
- **Reduced tool set**: Disables tools that confuse Gemma 4 (`ask_user_question`, `task_create`, etc.).
|
|
150
|
+
|
|
151
|
+
## Usage
|
|
152
|
+
|
|
153
|
+
### Interactive Mode
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
drydock # Start interactive session
|
|
157
|
+
drydock "Fix the login bug" # Start with a prompt
|
|
158
|
+
drydock --continue # Resume last session
|
|
159
|
+
drydock --resume abc123 # Resume specific session
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Keyboard shortcuts:**
|
|
163
|
+
- `Ctrl+C` — Cancel current operation (double-tap to quit)
|
|
164
|
+
- `Shift+Tab` — Toggle auto-approve mode
|
|
165
|
+
- `Ctrl+O` — Toggle tool output
|
|
166
|
+
- `Ctrl+G` — Open external editor
|
|
167
|
+
- `@` — File path autocompletion
|
|
168
|
+
- `!command` — Run shell command directly
|
|
169
|
+
|
|
170
|
+
### Programmatic Mode
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
drydock --prompt "Analyze the codebase" --max-turns 5 --output json
|
|
174
|
+
drydock --dangerously-skip-permissions -p "Fix all lint errors"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Configuration
|
|
178
|
+
|
|
179
|
+
DryDock is configured via `config.toml`. It looks first in `./.drydock/config.toml`, then `~/.drydock/config.toml`.
|
|
180
|
+
|
|
181
|
+
### API Key
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
drydock --setup # Interactive setup
|
|
185
|
+
export MISTRAL_API_KEY="your_key" # Or set env var
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Keys are saved to `~/.drydock/.env`.
|
|
189
|
+
|
|
190
|
+
### Consultant Model
|
|
191
|
+
|
|
192
|
+
Set a smarter model for the `/consult` command:
|
|
193
|
+
|
|
194
|
+
```toml
|
|
195
|
+
consultant_model = "gemini-2.5-pro"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it.
|
|
199
|
+
|
|
200
|
+
### Custom Agents
|
|
201
|
+
|
|
202
|
+
Create agent configs in `~/.drydock/agents/`:
|
|
203
|
+
|
|
204
|
+
```toml
|
|
205
|
+
# ~/.drydock/agents/redteam.toml
|
|
206
|
+
active_model = "devstral-2"
|
|
207
|
+
system_prompt_id = "redteam"
|
|
208
|
+
disabled_tools = ["search_replace", "write_file"]
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Skills
|
|
212
|
+
|
|
213
|
+
DryDock discovers skills from:
|
|
214
|
+
1. Custom paths in `config.toml` via `skill_paths`
|
|
215
|
+
2. Project `.drydock/skills/` or `.agents/skills/`
|
|
216
|
+
3. Global `~/.drydock/skills/`
|
|
217
|
+
4. Bundled skills (shipped with the package)
|
|
218
|
+
|
|
219
|
+
### MCP Servers
|
|
220
|
+
|
|
221
|
+
```toml
|
|
222
|
+
[[mcp_servers]]
|
|
223
|
+
name = "fetch_server"
|
|
224
|
+
transport = "stdio"
|
|
225
|
+
command = "uvx"
|
|
226
|
+
args = ["mcp-server-fetch"]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Testing
|
|
230
|
+
|
|
231
|
+
DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# Single project test
|
|
235
|
+
python3 scripts/shakedown.py \
|
|
236
|
+
--cwd /path/to/project \
|
|
237
|
+
--prompt "review the PRD and build the package" \
|
|
238
|
+
--pkg package_name
|
|
239
|
+
|
|
240
|
+
# Interactive back-and-forth test
|
|
241
|
+
python3 scripts/shakedown_interactive.py \
|
|
242
|
+
--cwd /path/to/project \
|
|
243
|
+
--pkg package_name
|
|
244
|
+
|
|
245
|
+
# Full regression suite (370 PRDs)
|
|
246
|
+
bash scripts/shakedown_suite.sh
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Pass criteria: no write loops, no ignored interrupts, no search_replace cascades, package executes, session finishes within time budget.
|
|
250
|
+
|
|
251
|
+
## Slash Commands
|
|
252
|
+
|
|
253
|
+
Type `/help` in the input for available commands. Create custom slash commands via the skills system.
|
|
254
|
+
|
|
255
|
+
## Session Management
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
drydock --continue # Continue last session
|
|
259
|
+
drydock --resume abc123 # Resume specific session
|
|
260
|
+
drydock --workdir /path/to/dir # Set working directory
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## License
|
|
264
|
+
|
|
265
|
+
Copyright 2025 Mistral AI (original work)
|
|
266
|
+
Copyright 2026 DryDock contributors (modifications)
|
|
267
|
+
|
|
268
|
+
Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details.
|
|
269
|
+
|
|
270
|
+
DryDock is a fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe) (Apache 2.0). See [NOTICE](NOTICE) for attribution.
|