drydock-cli 2.6.28__tar.gz → 2.6.29__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.29}/PKG-INFO +1 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/agent_loop.py +68 -2
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/format.py +18 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/search_replace.py +61 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/pyproject.toml +1 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/shakedown.py +51 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/uv.lock +1 -1
- drydock_cli-2.6.28/.auto_release.lock +0 -1
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.gitignore +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.python-version +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.typos.toml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.vscode/extensions.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.vscode/launch.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/.vscode/settings.json +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/AGENTS.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/CHANGELOG.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/CLAUDE.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/LICENSE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/NOTICE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/PRD.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/README.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/action.yml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/docs/README.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/docs/acp-setup.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/slug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/types.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/core/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/whats_new.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock-acp.spec +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock_terms.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/flake.lock +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/flake.nix +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/log_analyzer/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/log_analyzer/__main__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/log_analyzer/analyzer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/log_analyzer/cli.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/README.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/backup.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/bump_version.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/install.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/notify_release.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/test_full.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/tui_test.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/common.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/mock/utils.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/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.29}/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.29}/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.29}/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.29}/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.29}/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.29}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_agents.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_integration.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_message_id.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_middleware.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_smoke.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/test_workloads.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.6.28 → drydock_cli-2.6.29}/tests/update_notifier/test_whats_new.py +0 -0
|
@@ -653,6 +653,36 @@ class AgentLoop:
|
|
|
653
653
|
return
|
|
654
654
|
last_message = self.messages[-1]
|
|
655
655
|
|
|
656
|
+
# Detect thinking-only stall: model produced no visible content
|
|
657
|
+
# AND no tool calls. This happens when Gemma 4 leaks thinking
|
|
658
|
+
# tokens that get stripped, leaving an empty assistant message.
|
|
659
|
+
# If the previous message was a tool result (model was mid-work),
|
|
660
|
+
# inject a nudge to keep it going instead of silently ending.
|
|
661
|
+
if (
|
|
662
|
+
not last_message.content
|
|
663
|
+
and not last_message.tool_calls
|
|
664
|
+
and len(self.messages) >= 3
|
|
665
|
+
):
|
|
666
|
+
prev_role = self.messages[-2].role if len(self.messages) >= 2 else None
|
|
667
|
+
if prev_role == Role.tool:
|
|
668
|
+
# Track consecutive empty turns to avoid infinite nudge loops
|
|
669
|
+
empty_turns = getattr(self, "_consecutive_empty_turns", 0) + 1
|
|
670
|
+
self._consecutive_empty_turns = empty_turns
|
|
671
|
+
if empty_turns <= 2:
|
|
672
|
+
logger.info("Thinking-only stall detected (attempt %d) — nudging model to continue", empty_turns)
|
|
673
|
+
# Remove the empty assistant message and inject a nudge
|
|
674
|
+
self.messages.pop()
|
|
675
|
+
self._inject_system_note(
|
|
676
|
+
"Continue working. Use a tool (read_file, write_file, "
|
|
677
|
+
"search_replace, bash) or say what you want to do next."
|
|
678
|
+
)
|
|
679
|
+
return # will re-enter _perform_llm_turn on the next loop iteration
|
|
680
|
+
else:
|
|
681
|
+
logger.info("Thinking-only stall persists after %d nudges — letting session end", empty_turns)
|
|
682
|
+
else:
|
|
683
|
+
# Reset counter on any productive turn
|
|
684
|
+
self._consecutive_empty_turns = 0
|
|
685
|
+
|
|
656
686
|
# Detect repetitive text generation (Gemma 4 sometimes loops text within one response)
|
|
657
687
|
if last_message.content and len(last_message.content) > 200:
|
|
658
688
|
text = last_message.content
|
|
@@ -1219,7 +1249,15 @@ class AgentLoop:
|
|
|
1219
1249
|
f"the CODE is. Use read_file to inspect the source, then write_file or "
|
|
1220
1250
|
f"search_replace to fix the bug. Do not re-run the same command again."
|
|
1221
1251
|
)
|
|
1222
|
-
if stuck_tool
|
|
1252
|
+
if stuck_tool == "search_replace":
|
|
1253
|
+
return (
|
|
1254
|
+
f"STOP: You are calling search_replace with the same arguments "
|
|
1255
|
+
f"repeatedly. If the tool said 'ALREADY APPLIED', the edit is DONE. "
|
|
1256
|
+
f"If it said 'not found', you need to read_file FIRST to see the "
|
|
1257
|
+
f"actual file contents, then use the EXACT text from the file. "
|
|
1258
|
+
f"Do NOT retry the same search_replace again."
|
|
1259
|
+
)
|
|
1260
|
+
if stuck_tool == "write_file":
|
|
1223
1261
|
return (
|
|
1224
1262
|
f"You have written the same file multiple times in a row. "
|
|
1225
1263
|
f"Move to the NEXT file in your plan. If no next file, run the code "
|
|
@@ -1405,6 +1443,12 @@ class AgentLoop:
|
|
|
1405
1443
|
start_time = time.perf_counter()
|
|
1406
1444
|
# Use temperature override if set (loop detection bumps it)
|
|
1407
1445
|
temp = active_model.temperature
|
|
1446
|
+
# Cap max_tokens for Gemma 4 to prevent infinite thinking loops.
|
|
1447
|
+
# Without a cap, the model can generate 100K+ thinking tokens
|
|
1448
|
+
# (filling the 131K context), hanging for 20+ minutes per turn.
|
|
1449
|
+
effective_max_tokens = max_tokens
|
|
1450
|
+
if effective_max_tokens is None and "gemma" in active_model.name.lower():
|
|
1451
|
+
effective_max_tokens = 8192
|
|
1408
1452
|
result = await self.backend.complete(
|
|
1409
1453
|
model=active_model,
|
|
1410
1454
|
messages=self.messages,
|
|
@@ -1412,7 +1456,7 @@ class AgentLoop:
|
|
|
1412
1456
|
tools=available_tools,
|
|
1413
1457
|
tool_choice=tool_choice,
|
|
1414
1458
|
extra_headers=self._get_extra_headers(provider),
|
|
1415
|
-
max_tokens=
|
|
1459
|
+
max_tokens=effective_max_tokens,
|
|
1416
1460
|
metadata=self.entrypoint_metadata.model_dump()
|
|
1417
1461
|
if self.entrypoint_metadata
|
|
1418
1462
|
else None,
|
|
@@ -1742,6 +1786,28 @@ class AgentLoop:
|
|
|
1742
1786
|
|
|
1743
1787
|
def _check_tool_call_repetition(self) -> str | None:
|
|
1744
1788
|
"""Check if recent tool calls are repeating. Returns 'FORCE_STOP', 'WARNING', or None."""
|
|
1789
|
+
|
|
1790
|
+
# Early check: search_replace with the same file + old_string twice
|
|
1791
|
+
# in a row. This is the #1 user-pain loop — the model retries an
|
|
1792
|
+
# edit that already succeeded or that keeps failing with the same
|
|
1793
|
+
# "not found" error. Nudge after just 2 identical attempts.
|
|
1794
|
+
recent_sr: list[str] = []
|
|
1795
|
+
for msg in reversed(self.messages[-20:]):
|
|
1796
|
+
if msg.role == Role.assistant and msg.tool_calls:
|
|
1797
|
+
for tc in msg.tool_calls:
|
|
1798
|
+
if tc.function and tc.function.name == "search_replace":
|
|
1799
|
+
try:
|
|
1800
|
+
args = json.loads(tc.function.arguments or "{}")
|
|
1801
|
+
# Build a key from file_path + old_string (content block)
|
|
1802
|
+
key = f"{args.get('file_path', '')}:{args.get('content', '')}"
|
|
1803
|
+
recent_sr.append(key)
|
|
1804
|
+
except (json.JSONDecodeError, AttributeError):
|
|
1805
|
+
pass
|
|
1806
|
+
if len(recent_sr) >= 4:
|
|
1807
|
+
break
|
|
1808
|
+
if len(recent_sr) >= 2 and recent_sr[0] == recent_sr[1]:
|
|
1809
|
+
return "WARNING|search_replace"
|
|
1810
|
+
|
|
1745
1811
|
sigs: list[str] = []
|
|
1746
1812
|
tool_names: list[str] = []
|
|
1747
1813
|
lookback = 0
|
|
@@ -76,9 +76,26 @@ class APIToolFormatHandler:
|
|
|
76
76
|
return "auto"
|
|
77
77
|
|
|
78
78
|
def process_api_response_message(self, message: Any) -> LLMMessage:
|
|
79
|
+
# Strip ALL Gemma 4 leaked channel tokens from content.
|
|
80
|
+
# The model emits various formats:
|
|
81
|
+
# <|channel>thought...<channel|> (thinking tokens)
|
|
82
|
+
# <|channel>call:tool_name{...}<tool_call|> (malformed tool calls)
|
|
83
|
+
# <|channel><|channel>list_mcp_resources{...}<tool_call|> (double channel)
|
|
84
|
+
# Keeping them wastes context and confuses subsequent turns.
|
|
85
|
+
content = message.content
|
|
86
|
+
if content and "<|channel>" in content:
|
|
87
|
+
import re as _re
|
|
88
|
+
# Strip any <|channel>...<channel|> or <|channel>...<tool_call|> blocks
|
|
89
|
+
content = _re.sub(
|
|
90
|
+
r"<\|channel\>.*?(?:<channel\|>|<tool_call\|>)",
|
|
91
|
+
"",
|
|
92
|
+
content,
|
|
93
|
+
flags=_re.DOTALL,
|
|
94
|
+
).strip() or None
|
|
95
|
+
|
|
79
96
|
clean_message = {
|
|
80
97
|
"role": message.role,
|
|
81
|
-
"content":
|
|
98
|
+
"content": content,
|
|
82
99
|
"reasoning_content": getattr(message, "reasoning_content", None),
|
|
83
100
|
"reasoning_signature": getattr(message, "reasoning_signature", None),
|
|
84
101
|
}
|
|
@@ -224,6 +224,38 @@ class SearchReplace(
|
|
|
224
224
|
if path_match:
|
|
225
225
|
file_path_str = path_match.group(1)
|
|
226
226
|
|
|
227
|
+
# Last resort: if file_path is still missing but we have SEARCH text,
|
|
228
|
+
# scan project files for a match. Gemma 4 frequently drops file_path.
|
|
229
|
+
# Limit scan to avoid hanging on large repos.
|
|
230
|
+
if not file_path_str and content:
|
|
231
|
+
blocks = self._parse_search_replace_blocks(content)
|
|
232
|
+
if blocks:
|
|
233
|
+
search_text = blocks[0].search.strip()
|
|
234
|
+
if search_text and len(search_text) >= 10:
|
|
235
|
+
project_root = Path.cwd()
|
|
236
|
+
candidates: list[Path] = []
|
|
237
|
+
files_checked = 0
|
|
238
|
+
for ext in ("*.py",): # Only scan Python files
|
|
239
|
+
for f in project_root.rglob(ext):
|
|
240
|
+
if files_checked > 200:
|
|
241
|
+
break
|
|
242
|
+
if "__pycache__" in str(f) or ".git" in str(f):
|
|
243
|
+
continue
|
|
244
|
+
files_checked += 1
|
|
245
|
+
try:
|
|
246
|
+
text = f.read_text(encoding="utf-8", errors="replace")
|
|
247
|
+
if len(text) > 100_000:
|
|
248
|
+
continue
|
|
249
|
+
if search_text in text:
|
|
250
|
+
candidates.append(f)
|
|
251
|
+
except Exception:
|
|
252
|
+
continue
|
|
253
|
+
if len(candidates) == 1:
|
|
254
|
+
file_path_str = str(candidates[0])
|
|
255
|
+
elif candidates:
|
|
256
|
+
candidates.sort(key=lambda p: len(str(p)))
|
|
257
|
+
file_path_str = str(candidates[0])
|
|
258
|
+
|
|
227
259
|
if not file_path_str:
|
|
228
260
|
raise ToolError(
|
|
229
261
|
"File path is required. Use: search_replace(file_path='path/to/file.py', content='...')"
|
|
@@ -333,6 +365,35 @@ class SearchReplace(
|
|
|
333
365
|
|
|
334
366
|
for i, (search, replace) in enumerate(blocks, 1):
|
|
335
367
|
if search not in current_content:
|
|
368
|
+
# Check if this change was ALREADY APPLIED — the replacement
|
|
369
|
+
# text is in the file but the search text is not. This is the
|
|
370
|
+
# #1 cause of edit loops: the model successfully edits a file
|
|
371
|
+
# then retries the same edit because it doesn't realise it
|
|
372
|
+
# already worked.
|
|
373
|
+
if (replace and replace.strip()
|
|
374
|
+
and len(replace.strip()) >= 10
|
|
375
|
+
and replace.strip() in current_content):
|
|
376
|
+
warnings.append(
|
|
377
|
+
f"Block {i}: ALREADY APPLIED — the replacement text already "
|
|
378
|
+
f"exists in {filepath.name}. The search text is gone because "
|
|
379
|
+
f"a previous edit already made this change. "
|
|
380
|
+
f"Move on to the next task."
|
|
381
|
+
)
|
|
382
|
+
# Count as "applied" so we don't error — the file is correct
|
|
383
|
+
applied += 1
|
|
384
|
+
continue
|
|
385
|
+
# Also detect deletion that already happened (search text removed,
|
|
386
|
+
# replace is empty — the line is simply gone). Only trigger
|
|
387
|
+
# for meaningful search strings to avoid false positives.
|
|
388
|
+
if (not replace or not replace.strip()) and len(search.strip()) >= 10:
|
|
389
|
+
warnings.append(
|
|
390
|
+
f"Block {i}: ALREADY APPLIED — the text you want to remove "
|
|
391
|
+
f"is already absent from {filepath.name}. "
|
|
392
|
+
f"Move on to the next task."
|
|
393
|
+
)
|
|
394
|
+
applied += 1
|
|
395
|
+
continue
|
|
396
|
+
|
|
336
397
|
# Try auto-applying high-confidence fuzzy match (>= 0.95 similarity)
|
|
337
398
|
auto_apply_threshold = max(fuzzy_threshold, 0.95)
|
|
338
399
|
best_match = SearchReplace._find_best_fuzzy_match(
|
|
@@ -400,6 +400,27 @@ class DrydockDriver:
|
|
|
400
400
|
time.sleep(0.2)
|
|
401
401
|
self.child.send("\r") # submit
|
|
402
402
|
|
|
403
|
+
def dismiss_trust_dialog(self) -> bool:
|
|
404
|
+
"""Detect and dismiss the 'Trust this folder?' dialog.
|
|
405
|
+
|
|
406
|
+
This dialog can appear AFTER spawn() — e.g., when drydock lazily
|
|
407
|
+
resolves the project folder. If we don't catch it, the prompt
|
|
408
|
+
gets eaten by the dialog and the session never starts.
|
|
409
|
+
"""
|
|
410
|
+
if self.child is None:
|
|
411
|
+
return False
|
|
412
|
+
try:
|
|
413
|
+
recent = self.child.before or ""
|
|
414
|
+
except Exception:
|
|
415
|
+
return False
|
|
416
|
+
if "Trust this folder" in recent or "trust this folder" in recent.lower():
|
|
417
|
+
self.child.send("\x1b[D") # Left arrow (No → Yes)
|
|
418
|
+
time.sleep(0.2)
|
|
419
|
+
self.child.send("\r") # Enter
|
|
420
|
+
time.sleep(2)
|
|
421
|
+
return True
|
|
422
|
+
return False
|
|
423
|
+
|
|
403
424
|
def dismiss_permission_prompts(self) -> bool:
|
|
404
425
|
"""Detect and auto-approve any tool permission dialog.
|
|
405
426
|
|
|
@@ -528,6 +549,13 @@ def run_test(cwd: Path, prompt: str, pkg: str) -> int:
|
|
|
528
549
|
print(f"\n[*] TUI exited at {int(elapsed)}s")
|
|
529
550
|
break
|
|
530
551
|
|
|
552
|
+
# Trust dialog check — can appear AFTER spawn, eating the prompt
|
|
553
|
+
if driver.dismiss_trust_dialog():
|
|
554
|
+
print(f" [{int(elapsed):4d}s] Trust dialog dismissed — re-sending prompt")
|
|
555
|
+
time.sleep(1)
|
|
556
|
+
driver.type_message(prompt)
|
|
557
|
+
time.sleep(2)
|
|
558
|
+
|
|
531
559
|
# Permission dialog check — fast, just peeks at buffer
|
|
532
560
|
if driver.dismiss_permission_prompts():
|
|
533
561
|
print(f" [{int(elapsed):4d}s] permission dialog auto-approved")
|
|
@@ -588,8 +616,30 @@ def run_test(cwd: Path, prompt: str, pkg: str) -> int:
|
|
|
588
616
|
print(f"\n[*] Model finished (text response, no tool call)")
|
|
589
617
|
break
|
|
590
618
|
|
|
591
|
-
# True dead silence: no new MESSAGES of any kind
|
|
619
|
+
# True dead silence: no new MESSAGES of any kind.
|
|
620
|
+
# But first: if the package already works, the model just
|
|
621
|
+
# stalled after finishing — that's a PASS, not a FAIL.
|
|
622
|
+
# Gemma 4 often goes silent for 5+ min on a final thinking
|
|
623
|
+
# turn after successfully writing all files.
|
|
592
624
|
if detector.silent_seconds() > DEAD_SILENCE_SECONDS:
|
|
625
|
+
# Early-exit check: does the package already work?
|
|
626
|
+
if pkg_dir.exists():
|
|
627
|
+
try:
|
|
628
|
+
check = subprocess.run(
|
|
629
|
+
["python3", "-m", pkg, "--help"],
|
|
630
|
+
cwd=str(cwd),
|
|
631
|
+
capture_output=True,
|
|
632
|
+
text=True,
|
|
633
|
+
timeout=10,
|
|
634
|
+
)
|
|
635
|
+
if check.returncode == 0 and len(check.stdout.strip()) > 0:
|
|
636
|
+
print(
|
|
637
|
+
f"\n[*] Model silent {int(detector.silent_seconds())}s "
|
|
638
|
+
f"but {pkg} --help works — treating as done"
|
|
639
|
+
)
|
|
640
|
+
break # exit cleanly — no fail_reason added
|
|
641
|
+
except Exception:
|
|
642
|
+
pass
|
|
593
643
|
fail_reasons.append(
|
|
594
644
|
f"dead silence for {int(detector.silent_seconds())}s "
|
|
595
645
|
f"(no new messages of any kind)"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
320765
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.6.28 → drydock_cli-2.6.29}/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.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/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.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/text_area.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/context_progress.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/no_markup_static.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.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/teleport_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.28 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/history_windowing.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.6.28 → drydock_cli-2.6.29}/drydock/cli/update_notifier/ports/update_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
|