drydock-cli 2.5.4__tar.gz → 2.5.6__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.5.4 → drydock_cli-2.5.6}/PKG-INFO +1 -1
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/agent_loop.py +28 -74
- drydock_cli-2.5.6/drydock/core/session_checker.py +163 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/search_replace.py +19 -3
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/pyproject.toml +1 -1
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.gitignore +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.python-version +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.typos.toml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.vscode/extensions.json +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.vscode/launch.json +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/.vscode/settings.json +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/AGENTS.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/CHANGELOG.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/CLAUDE.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/LICENSE +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/NOTICE +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/PRD.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/README.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/action.yml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/docs/README.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/docs/acp-setup.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/logger.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/slug.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/types.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/core/utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/whats_new.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock-acp.spec +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock_terms.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/flake.lock +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/flake.nix +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/log_analyzer/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/log_analyzer/__main__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/log_analyzer/analyzer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/log_analyzer/cli.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/README.md +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/backup.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/bump_version.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/install.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/notify_release.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/test_full.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/scripts/tui_test.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/conftest.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/common.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/mock/utils.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_agents.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_integration.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_message_id.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_middleware.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_smoke.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/test_workloads.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.5.4 → drydock_cli-2.5.6}/uv.lock +0 -0
|
@@ -790,81 +790,21 @@ class AgentLoop:
|
|
|
790
790
|
continue
|
|
791
791
|
# After 3 empty responses, let it exit
|
|
792
792
|
|
|
793
|
-
#
|
|
794
|
-
#
|
|
795
|
-
#
|
|
796
|
-
if should_break_loop and not has_made_edit
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
"the fix is complete", "issue is resolved",
|
|
808
|
-
]
|
|
809
|
-
claims_complete = any(p in last_text_lower for p in task_complete_phrases)
|
|
810
|
-
|
|
811
|
-
if claims_complete:
|
|
812
|
-
nudge_text = (
|
|
813
|
-
"You said the task is complete but NO code was actually changed. "
|
|
814
|
-
"Your search_replace call either failed or was never made. "
|
|
815
|
-
"Use read_file to read the target file, then use search_replace "
|
|
816
|
-
"to make your edit. Do NOT say the task is done until search_replace succeeds."
|
|
817
|
-
)
|
|
818
|
-
elif text_without_action == 1:
|
|
819
|
-
last_text = (last_message.content or "").lower()
|
|
820
|
-
# Detect model asking for confirmation instead of acting
|
|
821
|
-
is_asking = any(kw in last_text for kw in (
|
|
822
|
-
"standing by", "waiting for", "please provide",
|
|
823
|
-
"what would you like", "how can i help",
|
|
824
|
-
"what should i", "do you want me to",
|
|
825
|
-
"ready to begin", "i will start",
|
|
826
|
-
"shall i", "would you like me to",
|
|
827
|
-
"let me know", "please confirm",
|
|
828
|
-
"i am ready", "ready to proceed",
|
|
829
|
-
))
|
|
830
|
-
if is_asking:
|
|
831
|
-
nudge_text = (
|
|
832
|
-
"DO NOT ask for confirmation. Act NOW. "
|
|
833
|
-
"If there is a PRD.md, implement it with write_file. "
|
|
834
|
-
"If there is code, read it with read_file and fix bugs with search_replace. "
|
|
835
|
-
"Call a tool on your next response."
|
|
836
|
-
)
|
|
837
|
-
elif "TARGET:" in last_text.upper() or "FILE:" in last_text.upper():
|
|
838
|
-
nudge_text = (
|
|
839
|
-
"Good — you identified the target. Now use read_file then search_replace."
|
|
840
|
-
)
|
|
841
|
-
else:
|
|
842
|
-
nudge_text = (
|
|
843
|
-
"You responded with text but did not call any tools. "
|
|
844
|
-
"Call write_file, read_file, or search_replace NOW."
|
|
845
|
-
)
|
|
846
|
-
elif text_without_action == 2:
|
|
847
|
-
nudge_text = (
|
|
848
|
-
"STOP describing the fix. You MUST call search_replace on your NEXT response. "
|
|
849
|
-
"No more text-only responses. Act NOW."
|
|
850
|
-
)
|
|
851
|
-
elif text_without_action <= 5:
|
|
852
|
-
nudge_text = (
|
|
853
|
-
f"WARNING ({text_without_action} text responses without editing): "
|
|
854
|
-
"You MUST call search_replace or read_file immediately. "
|
|
855
|
-
"Make your best fix attempt RIGHT NOW even if you are unsure. "
|
|
856
|
-
"Pick the most likely file and function, and make a minimal edit."
|
|
857
|
-
)
|
|
858
|
-
else:
|
|
859
|
-
# Keep nudging — never give up
|
|
860
|
-
nudge_text = (
|
|
861
|
-
"You MUST call a tool. Use grep to find the file, "
|
|
862
|
-
"read_file to read it, then search_replace to fix."
|
|
793
|
+
# Text response without edits — this is FINE for questions,
|
|
794
|
+
# explanations, running code, etc. Only nudge if the model
|
|
795
|
+
# is clearly asking for permission instead of acting.
|
|
796
|
+
if should_break_loop and not has_made_edit:
|
|
797
|
+
last_text = (last_message.content or "").lower()
|
|
798
|
+
is_asking = any(kw in last_text for kw in (
|
|
799
|
+
"shall i", "would you like me to",
|
|
800
|
+
"ready to begin", "please confirm",
|
|
801
|
+
))
|
|
802
|
+
if is_asking and tool_turns == 0:
|
|
803
|
+
# Model asked without doing anything — nudge once
|
|
804
|
+
should_break_loop = False
|
|
805
|
+
self._inject_system_note(
|
|
806
|
+
"Act immediately. Do not ask for confirmation."
|
|
863
807
|
)
|
|
864
|
-
if nudge_text:
|
|
865
|
-
# Use _inject_system_note (appends to last tool/user message)
|
|
866
|
-
# User messages cause 'tool after user' ordering violations
|
|
867
|
-
self._inject_system_note(nudge_text)
|
|
868
808
|
logger.info("Model gave text without editing — nudging (attempt %d)", text_without_action)
|
|
869
809
|
|
|
870
810
|
# If model has been investigating for too long without making an edit,
|
|
@@ -949,6 +889,20 @@ class AgentLoop:
|
|
|
949
889
|
finally:
|
|
950
890
|
await self._save_messages()
|
|
951
891
|
|
|
892
|
+
# Post-session quality check
|
|
893
|
+
try:
|
|
894
|
+
from drydock.core.session_checker import check_session, format_issues
|
|
895
|
+
issues = check_session(
|
|
896
|
+
list(self.messages),
|
|
897
|
+
has_made_edit=has_made_edit,
|
|
898
|
+
)
|
|
899
|
+
if issues:
|
|
900
|
+
report = format_issues(issues)
|
|
901
|
+
if report:
|
|
902
|
+
yield AssistantEvent(content=report)
|
|
903
|
+
except Exception:
|
|
904
|
+
pass # Non-critical — don't crash on checker errors
|
|
905
|
+
|
|
952
906
|
async def _perform_llm_turn(self) -> AsyncGenerator[BaseEvent, None]:
|
|
953
907
|
if self.enable_streaming:
|
|
954
908
|
async for event in self._stream_assistant_events():
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"""Post-session quality checker for DryDock TUI.
|
|
2
|
+
|
|
3
|
+
After each agent session, scans the conversation for common issues
|
|
4
|
+
and reports them to the user. This catches problems that the model
|
|
5
|
+
doesn't self-detect.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import re
|
|
11
|
+
from collections import Counter
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from drydock.core.types import LLMMessage, Role
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SessionIssue:
|
|
19
|
+
def __init__(self, severity: str, category: str, message: str):
|
|
20
|
+
self.severity = severity # "error", "warning", "info"
|
|
21
|
+
self.category = category
|
|
22
|
+
self.message = message
|
|
23
|
+
|
|
24
|
+
def __str__(self):
|
|
25
|
+
icons = {"error": "✗", "warning": "⚠", "info": "ℹ"}
|
|
26
|
+
return f"{icons.get(self.severity, '?')} [{self.category}] {self.message}"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def check_session(messages: list, has_made_edit: bool = False) -> list[SessionIssue]:
|
|
30
|
+
"""Check a completed session for quality issues.
|
|
31
|
+
|
|
32
|
+
Returns a list of issues found. Empty list = clean session.
|
|
33
|
+
"""
|
|
34
|
+
issues = []
|
|
35
|
+
|
|
36
|
+
if not messages:
|
|
37
|
+
return issues
|
|
38
|
+
|
|
39
|
+
# 1. Unknown tool errors
|
|
40
|
+
unknown_tools = []
|
|
41
|
+
for msg in messages:
|
|
42
|
+
content = str(getattr(msg, 'content', '') or '')
|
|
43
|
+
if "Unknown tool" in content:
|
|
44
|
+
match = re.search(r"Unknown tool '(\w+)'", content)
|
|
45
|
+
if match:
|
|
46
|
+
unknown_tools.append(match.group(1))
|
|
47
|
+
if unknown_tools:
|
|
48
|
+
tools = ', '.join(set(unknown_tools))
|
|
49
|
+
issues.append(SessionIssue(
|
|
50
|
+
"warning", "tool_error",
|
|
51
|
+
f"Model tried to call unavailable tools: {tools}"
|
|
52
|
+
))
|
|
53
|
+
|
|
54
|
+
# 2. search_replace errors
|
|
55
|
+
sr_errors = 0
|
|
56
|
+
for msg in messages:
|
|
57
|
+
content = str(getattr(msg, 'content', '') or '')
|
|
58
|
+
if "search_replace" in content and ("error" in content.lower() or "not found" in content.lower()):
|
|
59
|
+
sr_errors += 1
|
|
60
|
+
if sr_errors > 2:
|
|
61
|
+
issues.append(SessionIssue(
|
|
62
|
+
"warning", "edit_failures",
|
|
63
|
+
f"search_replace failed {sr_errors} times — model may not have applied intended edits"
|
|
64
|
+
))
|
|
65
|
+
|
|
66
|
+
# 3. Same file written too many times
|
|
67
|
+
write_paths = []
|
|
68
|
+
for msg in messages:
|
|
69
|
+
if hasattr(msg, 'tool_calls') and msg.tool_calls:
|
|
70
|
+
for tc in (msg.tool_calls or []):
|
|
71
|
+
if hasattr(tc, 'function') and tc.function:
|
|
72
|
+
if tc.function.name == "write_file":
|
|
73
|
+
try:
|
|
74
|
+
args = json.loads(tc.function.arguments or "{}")
|
|
75
|
+
path = args.get("path", "")
|
|
76
|
+
if path:
|
|
77
|
+
write_paths.append(path)
|
|
78
|
+
except (json.JSONDecodeError, AttributeError):
|
|
79
|
+
pass
|
|
80
|
+
if write_paths:
|
|
81
|
+
counts = Counter(write_paths)
|
|
82
|
+
for path, count in counts.most_common(3):
|
|
83
|
+
if count > 3:
|
|
84
|
+
issues.append(SessionIssue(
|
|
85
|
+
"warning", "write_loop",
|
|
86
|
+
f"'{path}' was written {count} times — possible loop"
|
|
87
|
+
))
|
|
88
|
+
|
|
89
|
+
# 4. Text repetition in model responses
|
|
90
|
+
for msg in messages:
|
|
91
|
+
content = str(getattr(msg, 'content', '') or '')
|
|
92
|
+
if len(content) > 300:
|
|
93
|
+
sentences = [s.strip() for s in content.split('.') if len(s.strip()) > 30]
|
|
94
|
+
if sentences:
|
|
95
|
+
counts = Counter(sentences)
|
|
96
|
+
most, count = counts.most_common(1)[0]
|
|
97
|
+
if count >= 3:
|
|
98
|
+
issues.append(SessionIssue(
|
|
99
|
+
"warning", "text_loop",
|
|
100
|
+
f"Model repeated the same sentence {count} times"
|
|
101
|
+
))
|
|
102
|
+
break # Only report once
|
|
103
|
+
|
|
104
|
+
# 5. "Please let me know" / asking for confirmation
|
|
105
|
+
ask_count = 0
|
|
106
|
+
for msg in messages:
|
|
107
|
+
content = str(getattr(msg, 'content', '') or '').lower()
|
|
108
|
+
if any(phrase in content for phrase in [
|
|
109
|
+
"please let me know", "shall i", "would you like",
|
|
110
|
+
"ready to begin", "please provide", "let me know if",
|
|
111
|
+
]):
|
|
112
|
+
ask_count += 1
|
|
113
|
+
if ask_count > 1:
|
|
114
|
+
issues.append(SessionIssue(
|
|
115
|
+
"info", "confirmation_asking",
|
|
116
|
+
f"Model asked for confirmation {ask_count} times instead of acting"
|
|
117
|
+
))
|
|
118
|
+
|
|
119
|
+
# 6. API errors
|
|
120
|
+
api_errors = 0
|
|
121
|
+
for msg in messages:
|
|
122
|
+
content = str(getattr(msg, 'content', '') or '')
|
|
123
|
+
if "API error" in content or "400 Bad Request" in content:
|
|
124
|
+
api_errors += 1
|
|
125
|
+
if api_errors > 0:
|
|
126
|
+
issues.append(SessionIssue(
|
|
127
|
+
"error", "api_errors",
|
|
128
|
+
f"{api_errors} API errors occurred during the session"
|
|
129
|
+
))
|
|
130
|
+
|
|
131
|
+
# 7. No edits — only flag if the user explicitly asked to build/fix/create something
|
|
132
|
+
# Questions, exploration, and running code don't need edits
|
|
133
|
+
if not has_made_edit and len(messages) > 10:
|
|
134
|
+
user_msgs = [str(getattr(m, 'content', '') or '').lower() for m in messages
|
|
135
|
+
if hasattr(m, 'role') and str(getattr(m, 'role', '')) == 'user']
|
|
136
|
+
build_words = ["build", "create", "fix", "implement", "write", "add", "modify", "update", "edit"]
|
|
137
|
+
user_asked_for_edit = any(
|
|
138
|
+
any(w in msg for w in build_words)
|
|
139
|
+
for msg in user_msgs
|
|
140
|
+
)
|
|
141
|
+
if user_asked_for_edit:
|
|
142
|
+
issues.append(SessionIssue(
|
|
143
|
+
"info", "no_edits",
|
|
144
|
+
"No file changes were made — the model may not have completed the task"
|
|
145
|
+
))
|
|
146
|
+
|
|
147
|
+
return issues
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def format_issues(issues: list[SessionIssue]) -> str:
|
|
151
|
+
"""Format issues for display in the TUI."""
|
|
152
|
+
if not issues:
|
|
153
|
+
return ""
|
|
154
|
+
|
|
155
|
+
errors = [i for i in issues if i.severity == "error"]
|
|
156
|
+
warnings = [i for i in issues if i.severity == "warning"]
|
|
157
|
+
infos = [i for i in issues if i.severity == "info"]
|
|
158
|
+
|
|
159
|
+
lines = ["", "Session Quality Check:"]
|
|
160
|
+
for issue in errors + warnings + infos:
|
|
161
|
+
lines.append(f" {issue}")
|
|
162
|
+
|
|
163
|
+
return "\n".join(lines)
|
|
@@ -53,8 +53,11 @@ class BlockApplyResult(NamedTuple):
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class SearchReplaceArgs(BaseModel):
|
|
56
|
-
file_path: str
|
|
57
|
-
content: str
|
|
56
|
+
file_path: str = Field(default="", description="Path to the file to edit")
|
|
57
|
+
content: str = Field(default="", description="SEARCH/REPLACE blocks or JSON with old_string/new_string")
|
|
58
|
+
# Gemma 4 sometimes sends these directly instead of in content
|
|
59
|
+
old_string: str | None = Field(default=None, description="Text to find (alternative to content blocks)")
|
|
60
|
+
new_string: str | None = Field(default=None, description="Replacement text (alternative to content blocks)")
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
class SearchReplaceResult(BaseModel):
|
|
@@ -178,8 +181,21 @@ class SearchReplace(
|
|
|
178
181
|
file_path_str = args.file_path.strip()
|
|
179
182
|
content = args.content.strip()
|
|
180
183
|
|
|
184
|
+
# Handle direct old_string/new_string args (Gemma 4 sometimes sends these)
|
|
185
|
+
if not content and args.old_string is not None and args.new_string is not None:
|
|
186
|
+
content = f"<<<<<<< SEARCH\n{args.old_string}\n=======\n{args.new_string}\n>>>>>>> REPLACE"
|
|
187
|
+
|
|
188
|
+
# Try to extract file_path from content if missing
|
|
189
|
+
if not file_path_str and content:
|
|
190
|
+
# Look for file path in the content (common when model puts everything in content)
|
|
191
|
+
path_match = re.search(r'(?:file[_\s]?path|path|file)[\s:="\']+([^\s"\']+\.py)', content[:200], re.IGNORECASE)
|
|
192
|
+
if path_match:
|
|
193
|
+
file_path_str = path_match.group(1)
|
|
194
|
+
|
|
181
195
|
if not file_path_str:
|
|
182
|
-
raise ToolError(
|
|
196
|
+
raise ToolError(
|
|
197
|
+
"File path is required. Use: search_replace(file_path='path/to/file.py', content='...')"
|
|
198
|
+
)
|
|
183
199
|
|
|
184
200
|
if len(content) > self.config.max_content_size:
|
|
185
201
|
raise ToolError(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/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.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-2.5.4 → drydock_cli-2.5.6}/drydock/cli/update_notifier/ports/update_cache_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|