drydock-cli 2.2.6__tar.gz → 2.2.8__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.6 → drydock_cli-2.2.8}/PKG-INFO +1 -1
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/whats_new.py +11 -1
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/agent_loop.py +55 -45
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/search_replace.py +13 -2
- drydock_cli-2.2.8/drydock/whats_new.md +7 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/pyproject.toml +1 -1
- drydock_cli-2.2.6/drydock/whats_new.md +0 -8
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.gitignore +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.python-version +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.typos.toml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.vscode/extensions.json +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.vscode/launch.json +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/.vscode/settings.json +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/AGENTS.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/CHANGELOG.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/CLAUDE.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/LICENSE +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/NOTICE +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/PRD.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/README.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/action.yml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/docs/README.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/docs/acp-setup.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/logger.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/slug.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/types.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock-acp.spec +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock_terms.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/flake.lock +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/flake.nix +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/README.md +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/backup.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/bump_version.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/install.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/notify_release.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/test_full.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/conftest.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/common.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/mock/utils.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_agents.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_integration.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_message_id.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_middleware.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_smoke.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/test_workloads.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.2.6 → drydock_cli-2.2.8}/uv.lock +0 -0
|
@@ -24,7 +24,17 @@ def load_whats_new_content() -> str | None:
|
|
|
24
24
|
return None
|
|
25
25
|
try:
|
|
26
26
|
content = whats_new_file.read_text(encoding="utf-8").strip()
|
|
27
|
-
|
|
27
|
+
if not content:
|
|
28
|
+
return None
|
|
29
|
+
# Dynamically replace version in header with current version
|
|
30
|
+
import re
|
|
31
|
+
from drydock import __version__
|
|
32
|
+
content = re.sub(
|
|
33
|
+
r"^#\s*What's new in v[\d.]+",
|
|
34
|
+
f"# What's new in v{__version__}",
|
|
35
|
+
content,
|
|
36
|
+
)
|
|
37
|
+
return content
|
|
28
38
|
except OSError:
|
|
29
39
|
return None
|
|
30
40
|
|
|
@@ -861,57 +861,18 @@ class AgentLoop:
|
|
|
861
861
|
if nudge_text:
|
|
862
862
|
self._inject_system_note(nudge_text)
|
|
863
863
|
|
|
864
|
-
# Loop guidance —
|
|
864
|
+
# Loop guidance — retrospection, NEVER stop
|
|
865
865
|
if not should_break_loop:
|
|
866
866
|
rep = self._check_tool_call_repetition()
|
|
867
867
|
if rep == "FORCE_STOP" or (rep and rep.startswith("WARNING")):
|
|
868
|
-
stuck_tool = ""
|
|
869
|
-
if rep and "|" in rep:
|
|
870
|
-
stuck_tool = rep.split("|", 1)[1]
|
|
871
|
-
|
|
872
868
|
# Prune duplicate tool calls to give model fresh context
|
|
873
869
|
self._prune_repeated_tool_calls()
|
|
874
870
|
|
|
875
|
-
#
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
nudge = "Try a different search term or read a file you found."
|
|
881
|
-
elif stuck_tool in ("bash", "run_command"):
|
|
882
|
-
nudge = "If the command failed, read the error and fix the code."
|
|
883
|
-
self._inject_system_note(nudge)
|
|
884
|
-
|
|
885
|
-
# Extract tool-specific nudge
|
|
886
|
-
nudge = ""
|
|
887
|
-
if stuck_tool in ("read_file",):
|
|
888
|
-
nudge = " You have been READING the same code repeatedly. You already know what it says. Make your EDIT now using search_replace or write_file."
|
|
889
|
-
elif stuck_tool in ("grep",):
|
|
890
|
-
nudge = " You have been SEARCHING repeatedly. Pick the most relevant file from your search results and READ it, then make your edit."
|
|
891
|
-
elif stuck_tool in ("bash", "run_command"):
|
|
892
|
-
nudge = (
|
|
893
|
-
" You have been running the SAME bash command repeatedly. "
|
|
894
|
-
"Running the same command again will give the same result. "
|
|
895
|
-
"If it succeeded but didn't do what you expected, READ the source code "
|
|
896
|
-
"to understand WHY, then FIX the code with search_replace. "
|
|
897
|
-
"If it failed, try a DIFFERENT command or approach."
|
|
898
|
-
)
|
|
899
|
-
if repeat_warnings >= 4:
|
|
900
|
-
# Escalated: replace tool result with strong directive
|
|
901
|
-
warning_text = (
|
|
902
|
-
"BLOCKED: Your tool call was not executed because you have been repeating the same action. "
|
|
903
|
-
"You already have all the information you need from previous tool results. "
|
|
904
|
-
"Your ONLY valid next action is: use search_replace to make your code fix. "
|
|
905
|
-
"Do NOT read, grep, or bash. Use search_replace NOW."
|
|
906
|
-
)
|
|
907
|
-
self._inject_system_note(warning_text, replace_last_tool=True)
|
|
908
|
-
else:
|
|
909
|
-
warning_text = (
|
|
910
|
-
"WARNING: You are repeating the same tool call with the same arguments. "
|
|
911
|
-
"This is not making progress. Try a DIFFERENT approach, use a different tool, "
|
|
912
|
-
"or tell the user what's blocking you." + nudge
|
|
913
|
-
)
|
|
914
|
-
self._inject_system_note(warning_text)
|
|
871
|
+
# RETROSPECTION: Summarize recent actions and let the model
|
|
872
|
+
# decide its own next step — no hardcoded nudges
|
|
873
|
+
retro = self._build_retrospection()
|
|
874
|
+
if retro:
|
|
875
|
+
self._inject_system_note(retro)
|
|
915
876
|
|
|
916
877
|
if user_cancelled:
|
|
917
878
|
return
|
|
@@ -1584,6 +1545,55 @@ class AgentLoop:
|
|
|
1584
1545
|
feedback=feedback,
|
|
1585
1546
|
)
|
|
1586
1547
|
|
|
1548
|
+
def _build_retrospection(self) -> str | None:
|
|
1549
|
+
"""Build a retrospection summary of recent tool calls.
|
|
1550
|
+
|
|
1551
|
+
Instead of hardcoded nudges, show the model what it's been doing
|
|
1552
|
+
and let it decide on a different approach. The model is better at
|
|
1553
|
+
self-correcting when it can see its own pattern of behavior.
|
|
1554
|
+
"""
|
|
1555
|
+
# Collect last 8 tool calls with their results (truncated)
|
|
1556
|
+
recent: list[str] = []
|
|
1557
|
+
count = 0
|
|
1558
|
+
for msg in reversed(self.messages):
|
|
1559
|
+
if count >= 8:
|
|
1560
|
+
break
|
|
1561
|
+
if msg.role == Role.assistant and msg.tool_calls:
|
|
1562
|
+
for tc in reversed(msg.tool_calls or []):
|
|
1563
|
+
if tc.function:
|
|
1564
|
+
name = tc.function.name or "?"
|
|
1565
|
+
args_str = tc.function.arguments or ""
|
|
1566
|
+
# Truncate args for readability
|
|
1567
|
+
if len(args_str) > 120:
|
|
1568
|
+
args_str = args_str[:120] + "..."
|
|
1569
|
+
recent.append(f" {count+1}. {name}({args_str})")
|
|
1570
|
+
count += 1
|
|
1571
|
+
if count >= 8:
|
|
1572
|
+
break
|
|
1573
|
+
elif msg.role == Role.tool and recent:
|
|
1574
|
+
# Add result summary to last entry
|
|
1575
|
+
result = str(msg.content or "")[:150]
|
|
1576
|
+
if "error" in result.lower() or "Error" in result:
|
|
1577
|
+
recent[-1] += f" → ERROR"
|
|
1578
|
+
elif "not found" in result.lower():
|
|
1579
|
+
recent[-1] += f" → NOT FOUND"
|
|
1580
|
+
else:
|
|
1581
|
+
recent[-1] += f" → ok"
|
|
1582
|
+
|
|
1583
|
+
if len(recent) < 3:
|
|
1584
|
+
return None
|
|
1585
|
+
|
|
1586
|
+
recent.reverse()
|
|
1587
|
+
summary = "\n".join(recent)
|
|
1588
|
+
|
|
1589
|
+
return (
|
|
1590
|
+
f"RETROSPECTION — Your last {len(recent)} tool calls:\n"
|
|
1591
|
+
f"{summary}\n\n"
|
|
1592
|
+
f"You are repeating a pattern that is not making progress. "
|
|
1593
|
+
f"Review the sequence above. What went wrong? What should you do differently? "
|
|
1594
|
+
f"Choose a different approach on your own."
|
|
1595
|
+
)
|
|
1596
|
+
|
|
1587
1597
|
def _inject_system_note(self, text: str, replace_last_tool: bool = False) -> None:
|
|
1588
1598
|
"""Safely inject a system note into conversation without breaking message ordering.
|
|
1589
1599
|
|
|
@@ -23,11 +23,12 @@ from drydock.core.tools.utils import resolve_file_tool_permission
|
|
|
23
23
|
from drydock.core.types import ToolResultEvent, ToolStreamEvent
|
|
24
24
|
|
|
25
25
|
SEARCH_REPLACE_BLOCK_RE = re.compile(
|
|
26
|
-
r"<{5,}
|
|
26
|
+
r"<{5,}\s*(?:SEARCH\s*)+\r?\n(.*?)\r?\n?={5,}\r?\n(.*?)\r?\n?>{5,}\s*(?:REPLACE\s*)+",
|
|
27
|
+
flags=re.DOTALL,
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
SEARCH_REPLACE_BLOCK_WITH_FENCE_RE = re.compile(
|
|
30
|
-
r"```[\s\S]*?\n<{5,}
|
|
31
|
+
r"```[\s\S]*?\n<{5,}\s*(?:SEARCH\s*)+\r?\n(.*?)\r?\n?={5,}\r?\n(.*?)\r?\n?>{5,}\s*(?:REPLACE\s*)+\s*\n```",
|
|
31
32
|
flags=re.DOTALL,
|
|
32
33
|
)
|
|
33
34
|
|
|
@@ -213,6 +214,16 @@ class SearchReplace(
|
|
|
213
214
|
">>>>>>> REPLACE"
|
|
214
215
|
)
|
|
215
216
|
|
|
217
|
+
# Detect garbled token output (common with some models/parsers)
|
|
218
|
+
for block in search_replace_blocks:
|
|
219
|
+
if re.search(r'(.)\1{4,}', block.search) or re.search(r'<{3,}[a-z]', block.search):
|
|
220
|
+
raise ToolError(
|
|
221
|
+
"Your search text appears garbled (repeated/corrupted characters). "
|
|
222
|
+
"This happens when regex or special characters confuse the tool call parser. "
|
|
223
|
+
"WORKAROUND: Use read_file to get the exact line numbers, then use write_file "
|
|
224
|
+
"to rewrite the entire function instead of search_replace on complex regex patterns."
|
|
225
|
+
)
|
|
226
|
+
|
|
216
227
|
return file_path, search_replace_blocks
|
|
217
228
|
|
|
218
229
|
async def _read_file(self, file_path: Path) -> str:
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# What's new in v2.2.6
|
|
2
|
+
|
|
3
|
+
- **Gemma 4 support**: Tool calling with Gemma 4 26B MoE via vLLM Docker — 3-4x faster inference
|
|
4
|
+
- **search_replace compatibility**: Accepts JSON, separator, and block formats for any model
|
|
5
|
+
- **Planner/diagnostic subagents**: Fixed missing prompt registration that crashed subagent delegation
|
|
6
|
+
- **Context-limit recovery**: Auto-truncates old tool results on 400 errors instead of looping
|
|
7
|
+
- **SWE-bench 70%**: File match rate up from 60% (devstral) to 70% (Gemma 4), 8x faster
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# What's new in v1.8.0
|
|
2
|
-
|
|
3
|
-
- **Multi-phase build orchestrator**: PRDs are built in phases — plan, scaffold, implement per file, auto-fix imports. 83% pass rate on 6 project types
|
|
4
|
-
- **Deterministic planning**: No LLM needed for project planning — PRD parsed directly
|
|
5
|
-
- **Auto-fix**: `__main__.py`, absolute imports, circular imports, cross-file name matching
|
|
6
|
-
- **7 bundled skills**: /investigate, /review, /ship, /batch, /simplify, /deep-research, /create-presentation
|
|
7
|
-
- **Smart circuit breaker**: Only blocks failed commands, allows retries after fixes
|
|
8
|
-
- **Vibe references removed**: All user-facing strings now say Drydock
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.2.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.6 → drydock_cli-2.2.8}/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
|
{drydock_cli-2.2.6 → drydock_cli-2.2.8}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-2.2.6 → drydock_cli-2.2.8}/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.6 → drydock_cli-2.2.8}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|