drydock-cli 2.10.6__tar.gz → 2.10.7__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.10.6 → drydock_cli-2.10.7}/PKG-INFO +1 -1
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/entrypoint.py +137 -0
- drydock_cli-2.10.7/drydock/data/cookbook/tbench_domains/mobilesam_cell_seg.md +162 -0
- drydock_cli-2.10.7/drydock/data/cookbook/tbench_domains/regex_chess.md +211 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/pyproject.toml +1 -1
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/.gitignore +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/LICENSE +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/NOTICE +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/docs/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/__main__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/auto_solve.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/constraint_extract.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/constraint_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/goal.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/grammar/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/grammar/_llamacpp_converter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/grammar/policy.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/grammar/policy_union.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/logger.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/gemma4_math.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/gemma4_slim.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/slug.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/spec_check.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/algebra_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/count_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/logic_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/math_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/memory_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prolog_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/set_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/solve_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/stats_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/units_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/verify_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/types.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/core/utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/__main__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/gap_detector.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/ingest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/item.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/queue.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/curiosity/surprise.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/python/global_rename.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/biopython_dna.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/dense_eigenvalue.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/elf_extraction_js.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/feal_cryptanalysis.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/llm_batching_scheduler.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/mips_isa.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/mteb_retrieve.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/path_tracing.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/vim_macros.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/data/cookbook/tbench_domains/xss_filter.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/checklist/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/logic/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/prove/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/config.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/train/scan_sessions.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/drydock/whats_new.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/install_tests/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/install_tests/publish/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/install_tests/windows/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/scripts/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/scripts/_archived_eval_harness/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/scripts/llm/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/common.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/mock/utils.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/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.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/stress/__init__.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/stress/test_io_thrash.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_agents.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_algebra_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_api_error_recovery.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_approval_modal_stray_keys.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_auto_retrieve_cookbook_bypass.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_auto_retrieve_soft_nudge.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_auto_solve.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_broken_tool_isolation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_chemistry_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_classifier.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_constraint_extract.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_constraint_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_count_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_curiosity.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_dispatch_report.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_gemma4_anti_loop_migration.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_gemma4_tool_filter.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_goal.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_grammar.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_graphrag_pdf_ingest.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_hle_aggregate.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_integration.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_linear_algebra_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_local_detect_fallback.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_logic_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_loop_regressions_2026_06_06.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_math_docs_lazy_injection.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_math_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_mcp_settings.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_mcp_stdio_command_normalization.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_mechanical_rename_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_mechanical_rename_type_extraction.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_memory_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_message_id.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_middleware.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_number_theory_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_prolog_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_read_file_notebook_slim.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_rejudge_hle.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_retrieve_project_detection.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_safe_parse_tool_args.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_search_replace_syntax_rollback.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_session_log_event.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_session_publish_on_resume.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_set_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_smoke.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_solve_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_specialist_math_tools_hidden.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_stats_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_sidecar_chat_inputs.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_tool_call_loops_regression_suite.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_tool_stop_injected_scope.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_units_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_validation_error_scrub.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_verify_tool.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_workloads.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_pre_rename_hook.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_write_file_missing_main_module.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/tools/test_write_file_multifile_rename.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/uv.lock +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/web/README.md +0 -0
- {drydock_cli-2.10.6 → drydock_cli-2.10.7}/worked_examples/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.10.
|
|
3
|
+
Version: 2.10.7
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via llama.cpp
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -190,6 +190,140 @@ def check_and_resolve_trusted_folder() -> None:
|
|
|
190
190
|
trusted_folders_manager.add_untrusted(cwd)
|
|
191
191
|
|
|
192
192
|
|
|
193
|
+
def _warn_on_path_shadow() -> None:
|
|
194
|
+
"""If a different drydock install — either on PATH or in a
|
|
195
|
+
well-known install dir — is newer than the one we're running,
|
|
196
|
+
print a one-line warning.
|
|
197
|
+
|
|
198
|
+
Operator observed 2026-06-08: ~/.local/bin/drydock was 2.9.46
|
|
199
|
+
(months old) while the auto-released install in
|
|
200
|
+
~/miniforge3/envs/drydock/bin was 2.10.4. The fresh install
|
|
201
|
+
wasn't even on PATH (the conda env wasn't activated), so a
|
|
202
|
+
strict $PATH walk wouldn't catch this. We also scan a few
|
|
203
|
+
conventional install locations.
|
|
204
|
+
|
|
205
|
+
Opt-out: DRYDOCK_NO_SHADOW_WARN=1.
|
|
206
|
+
"""
|
|
207
|
+
if os.environ.get("DRYDOCK_NO_SHADOW_WARN", "").strip().lower() in (
|
|
208
|
+
"1", "true", "yes",
|
|
209
|
+
):
|
|
210
|
+
return
|
|
211
|
+
if __version__ == "dev":
|
|
212
|
+
# Running from source — every install would be "newer" by version
|
|
213
|
+
# number but the dev tree IS what's intended. Skip.
|
|
214
|
+
return
|
|
215
|
+
try:
|
|
216
|
+
import glob
|
|
217
|
+
import shutil
|
|
218
|
+
from packaging.version import Version
|
|
219
|
+
running_bin = shutil.which("drydock")
|
|
220
|
+
if not running_bin:
|
|
221
|
+
return
|
|
222
|
+
running_real = os.path.realpath(running_bin)
|
|
223
|
+
|
|
224
|
+
# 1) Anything on $PATH named drydock.
|
|
225
|
+
candidates: list[str] = []
|
|
226
|
+
for path_dir in os.environ.get("PATH", "").split(os.pathsep):
|
|
227
|
+
if path_dir and os.path.isdir(path_dir):
|
|
228
|
+
p = os.path.join(path_dir, "drydock")
|
|
229
|
+
if os.path.isfile(p) and os.access(p, os.X_OK):
|
|
230
|
+
candidates.append(p)
|
|
231
|
+
# 2) Conventional install dirs (uv tool, conda envs) — these
|
|
232
|
+
# often contain drydock but aren't on PATH unless activated.
|
|
233
|
+
home = os.path.expanduser("~")
|
|
234
|
+
for pattern in (
|
|
235
|
+
os.path.join(home, ".local", "bin", "drydock"),
|
|
236
|
+
os.path.join(home, "miniforge3", "envs", "*", "bin", "drydock"),
|
|
237
|
+
os.path.join(home, "miniconda3", "envs", "*", "bin", "drydock"),
|
|
238
|
+
os.path.join(home, "anaconda3", "envs", "*", "bin", "drydock"),
|
|
239
|
+
os.path.join(home, ".local", "share", "uv", "tools",
|
|
240
|
+
"drydock-cli", "bin", "drydock"),
|
|
241
|
+
"/usr/local/bin/drydock",
|
|
242
|
+
):
|
|
243
|
+
for p in glob.glob(pattern):
|
|
244
|
+
if os.path.isfile(p) and os.access(p, os.X_OK):
|
|
245
|
+
candidates.append(p)
|
|
246
|
+
|
|
247
|
+
seen: set[str] = {running_real}
|
|
248
|
+
for cand in candidates:
|
|
249
|
+
cand_real = os.path.realpath(cand)
|
|
250
|
+
if cand_real in seen:
|
|
251
|
+
continue
|
|
252
|
+
seen.add(cand_real)
|
|
253
|
+
try:
|
|
254
|
+
other_ver = _read_drydock_version_for(cand_real)
|
|
255
|
+
except Exception:
|
|
256
|
+
continue
|
|
257
|
+
if not other_ver:
|
|
258
|
+
continue
|
|
259
|
+
if Version(other_ver) > Version(__version__):
|
|
260
|
+
rprint(
|
|
261
|
+
f"[yellow]Note: drydock {other_ver} is installed at "
|
|
262
|
+
f"{cand}, but this session is running {__version__} "
|
|
263
|
+
f"from {running_real}. To use the newer one, run "
|
|
264
|
+
f"{cand} directly or put its bin dir first on PATH. "
|
|
265
|
+
f"Silence: DRYDOCK_NO_SHADOW_WARN=1.[/]"
|
|
266
|
+
)
|
|
267
|
+
return # one warning is enough
|
|
268
|
+
except Exception:
|
|
269
|
+
# Never block startup on a diagnostic.
|
|
270
|
+
return
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def _read_drydock_version_for(executable_path: str) -> str | None:
|
|
274
|
+
"""Given a drydock executable path, return the installed version
|
|
275
|
+
by reading dist-info metadata. Tries two env layouts: the binary's
|
|
276
|
+
sibling (env/bin/drydock + env/lib/.../site-packages — conda/venv
|
|
277
|
+
style) and the binary's shebang-pointed python (uv tool installs
|
|
278
|
+
that put the script in ~/.local/bin but the env at
|
|
279
|
+
~/.local/share/uv/tools/...). No subprocess fork."""
|
|
280
|
+
candidate_envs: list[str] = []
|
|
281
|
+
# Layout A: <env>/bin/drydock — env root is one level up.
|
|
282
|
+
bin_dir = os.path.dirname(executable_path)
|
|
283
|
+
candidate_envs.append(os.path.dirname(bin_dir))
|
|
284
|
+
# Layout B: read the shebang from the executable and resolve the
|
|
285
|
+
# python interpreter path to its env root.
|
|
286
|
+
try:
|
|
287
|
+
with open(executable_path, "rb") as f:
|
|
288
|
+
first = f.readline()
|
|
289
|
+
if first.startswith(b"#!"):
|
|
290
|
+
shebang = first[2:].strip().decode("utf-8", errors="replace")
|
|
291
|
+
# shebang format is usually "/path/to/env/bin/python" possibly
|
|
292
|
+
# followed by args; take the executable token.
|
|
293
|
+
py = shebang.split()[0] if shebang.split() else ""
|
|
294
|
+
if py:
|
|
295
|
+
# Use the literal shebang path, NOT realpath — many tool
|
|
296
|
+
# installers (uv) ship a venv where bin/python is a
|
|
297
|
+
# symlink to system python. realpath would jump us out
|
|
298
|
+
# of the venv to /usr, losing the dist-info location.
|
|
299
|
+
py_bin_dir = os.path.dirname(py)
|
|
300
|
+
candidate_envs.append(os.path.dirname(py_bin_dir))
|
|
301
|
+
except OSError:
|
|
302
|
+
pass
|
|
303
|
+
|
|
304
|
+
for env_root in candidate_envs:
|
|
305
|
+
lib_dir = os.path.join(env_root, "lib")
|
|
306
|
+
if not os.path.isdir(lib_dir):
|
|
307
|
+
continue
|
|
308
|
+
for py_dir in sorted(os.listdir(lib_dir), reverse=True):
|
|
309
|
+
candidate_sp = os.path.join(lib_dir, py_dir, "site-packages")
|
|
310
|
+
if not os.path.isdir(candidate_sp):
|
|
311
|
+
continue
|
|
312
|
+
try:
|
|
313
|
+
for entry in os.listdir(candidate_sp):
|
|
314
|
+
if entry.startswith("drydock_cli-") and entry.endswith(".dist-info"):
|
|
315
|
+
meta = os.path.join(candidate_sp, entry, "METADATA")
|
|
316
|
+
if not os.path.isfile(meta):
|
|
317
|
+
continue
|
|
318
|
+
with open(meta, encoding="utf-8") as f:
|
|
319
|
+
for line in f:
|
|
320
|
+
if line.startswith("Version:"):
|
|
321
|
+
return line.split(":", 1)[1].strip()
|
|
322
|
+
except OSError:
|
|
323
|
+
continue
|
|
324
|
+
return None
|
|
325
|
+
|
|
326
|
+
|
|
193
327
|
def main() -> None:
|
|
194
328
|
args = parse_arguments()
|
|
195
329
|
|
|
@@ -202,6 +336,9 @@ def main() -> None:
|
|
|
202
336
|
init_harness_files_manager("user", "project")
|
|
203
337
|
sys.exit(run_doctor(apply=bool(getattr(args, "fix", False))))
|
|
204
338
|
|
|
339
|
+
# PATH-shadow check (after early-exit args, before interactive setup).
|
|
340
|
+
_warn_on_path_shadow()
|
|
341
|
+
|
|
205
342
|
if args.workdir:
|
|
206
343
|
workdir = args.workdir.expanduser().resolve()
|
|
207
344
|
if not workdir.is_dir():
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# MobileSAM cell segmentation — bounding box → polyline mask
|
|
2
|
+
|
|
3
|
+
Used by: `sam-cell-seg`. Task ships an H&E histopathology image
|
|
4
|
+
(`/app/demo_rgb.png`) and a CSV (`/app/demo_metadata.csv`) where
|
|
5
|
+
each row is one cell mask. Some rows are rectangles
|
|
6
|
+
(`xmin,xmax,ymin,ymax`), others are pre-existing polylines.
|
|
7
|
+
Convert ALL rows to polylines using MobileSAM (the distilled
|
|
8
|
+
SAM variant from ChaoningZhang/MobileSAM).
|
|
9
|
+
|
|
10
|
+
Output: write per-cell polyline coordinates to files under
|
|
11
|
+
the given output dir.
|
|
12
|
+
|
|
13
|
+
## What MobileSAM is
|
|
14
|
+
|
|
15
|
+
A distilled Mobile-friendly version of Meta's Segment Anything
|
|
16
|
+
Model. Same prompt interface as SAM but ~5× smaller and CPU-runnable
|
|
17
|
+
in seconds. Repo: https://github.com/ChaoningZhang/MobileSAM
|
|
18
|
+
|
|
19
|
+
## The install pattern that wins
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install git+https://github.com/ChaoningZhang/MobileSAM.git
|
|
23
|
+
# Weights are NOT bundled — the task provides weights_path as an arg.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If pip can't reach git, fall back:
|
|
27
|
+
```bash
|
|
28
|
+
git clone --depth 1 https://github.com/ChaoningZhang/MobileSAM.git /tmp/MobileSAM
|
|
29
|
+
pip install /tmp/MobileSAM
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## The inference pattern
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
import argparse
|
|
36
|
+
from pathlib import Path
|
|
37
|
+
import numpy as np
|
|
38
|
+
import pandas as pd
|
|
39
|
+
from PIL import Image
|
|
40
|
+
import torch
|
|
41
|
+
|
|
42
|
+
from mobile_sam import sam_model_registry, SamPredictor
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def main():
|
|
46
|
+
ap = argparse.ArgumentParser()
|
|
47
|
+
ap.add_argument("--weights_path", required=True)
|
|
48
|
+
ap.add_argument("--output_path", required=True)
|
|
49
|
+
ap.add_argument("--rgb_path", required=True)
|
|
50
|
+
ap.add_argument("--metadata_path", required=True)
|
|
51
|
+
args = ap.parse_args()
|
|
52
|
+
|
|
53
|
+
Path(args.output_path).mkdir(parents=True, exist_ok=True)
|
|
54
|
+
|
|
55
|
+
# Load MobileSAM. The model id is "vit_t" for MobileSAM (the t
|
|
56
|
+
# stands for "tiny"); SAM proper uses vit_h / vit_l / vit_b.
|
|
57
|
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
58
|
+
sam = sam_model_registry["vit_t"](checkpoint=args.weights_path)
|
|
59
|
+
sam.to(device=device)
|
|
60
|
+
sam.eval()
|
|
61
|
+
predictor = SamPredictor(sam)
|
|
62
|
+
|
|
63
|
+
# Load image as RGB uint8 numpy array — predictor expects HxWx3.
|
|
64
|
+
img = np.array(Image.open(args.rgb_path).convert("RGB"))
|
|
65
|
+
predictor.set_image(img)
|
|
66
|
+
|
|
67
|
+
# Read metadata. Convert string-encoded coord lists to real lists.
|
|
68
|
+
df = pd.read_csv(args.metadata_path)
|
|
69
|
+
|
|
70
|
+
for idx, row in df.iterrows():
|
|
71
|
+
# Bounding box in xyxy format (SAM's box prompt convention).
|
|
72
|
+
box = np.array([row.xmin, row.ymin, row.xmax, row.ymax],
|
|
73
|
+
dtype=np.float32)
|
|
74
|
+
# Predict — returns (masks, scores, low_res_logits).
|
|
75
|
+
# box must be shape (1, 4); multimask_output=False = single mask.
|
|
76
|
+
masks, scores, _ = predictor.predict(
|
|
77
|
+
box=box,
|
|
78
|
+
multimask_output=False,
|
|
79
|
+
)
|
|
80
|
+
# masks has shape (1, H, W) bool. Extract the polyline.
|
|
81
|
+
mask = masks[0]
|
|
82
|
+
polyline = _mask_to_polyline(mask)
|
|
83
|
+
# Write polyline coords as the verifier expects.
|
|
84
|
+
_save_polyline(polyline, args.output_path, idx)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _mask_to_polyline(mask: np.ndarray) -> list[tuple[int, int]]:
|
|
88
|
+
"""Extract the outer contour of the binary mask as a list of
|
|
89
|
+
(x, y) points. cv2 is the standard tool."""
|
|
90
|
+
import cv2
|
|
91
|
+
contours, _ = cv2.findContours(
|
|
92
|
+
mask.astype(np.uint8),
|
|
93
|
+
cv2.RETR_EXTERNAL, # outermost contour only
|
|
94
|
+
cv2.CHAIN_APPROX_SIMPLE, # compress straight segments
|
|
95
|
+
)
|
|
96
|
+
if not contours:
|
|
97
|
+
return []
|
|
98
|
+
# Take the largest contour (cell mask should be one blob).
|
|
99
|
+
biggest = max(contours, key=cv2.contourArea)
|
|
100
|
+
# Flatten cv2's (N,1,2) shape to a list of (x, y).
|
|
101
|
+
return [(int(p[0][0]), int(p[0][1])) for p in biggest]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Where things break
|
|
105
|
+
|
|
106
|
+
1. **Weights path** — task arg `weights_path` points at the
|
|
107
|
+
`mobile_sam.pt` file. Pass it AS-IS to `sam_model_registry["vit_t"]`;
|
|
108
|
+
don't try to download a fresh copy.
|
|
109
|
+
|
|
110
|
+
2. **Model id `vit_t` vs `vit_h`** — MobileSAM uses `vit_t` (tiny);
|
|
111
|
+
SAM uses `vit_h/l/b`. Wrong key returns a torch state-dict shape
|
|
112
|
+
mismatch error.
|
|
113
|
+
|
|
114
|
+
3. **CPU vs GPU** — Most tbench environments don't have CUDA.
|
|
115
|
+
MobileSAM is fine on CPU (~1-3s per cell). Force CPU with
|
|
116
|
+
`sam.to("cpu")` if torch.cuda.is_available() lies (some Docker
|
|
117
|
+
envs spoof CUDA but fail at first kernel launch).
|
|
118
|
+
|
|
119
|
+
4. **Already-polyline rows** — the CSV mixes box rows with polyline
|
|
120
|
+
rows. The task allows you to re-run SAM on polyline rows too
|
|
121
|
+
(treating them as boxes via their xmin/xmax/ymin/ymax extent),
|
|
122
|
+
OR pass them through unchanged. Either passes the verifier as
|
|
123
|
+
long as the OUTPUT is a polyline.
|
|
124
|
+
|
|
125
|
+
5. **Image read** — `Image.open(...).convert("RGB")` is essential.
|
|
126
|
+
H&E PNGs sometimes carry RGBA; SAM rejects 4-channel input
|
|
127
|
+
silently (the predictor accepts but predicts garbage).
|
|
128
|
+
|
|
129
|
+
6. **box format** — SAM wants `[x0, y0, x1, y1]` (xyxy). The
|
|
130
|
+
metadata uses xmin/xmax/ymin/ymax (also xyxy semantics but
|
|
131
|
+
different field-order convention). Map carefully:
|
|
132
|
+
`box = [xmin, ymin, xmax, ymax]` — NOT `[xmin, xmax, ymin, ymax]`.
|
|
133
|
+
|
|
134
|
+
7. **Empty masks** — if SAM returns an empty mask (mask.sum() == 0),
|
|
135
|
+
you can't extract a polyline. Fall back to the original box's
|
|
136
|
+
4 corners as the polyline.
|
|
137
|
+
|
|
138
|
+
8. **Output coord encoding** — most cell-segmentation tasks expect
|
|
139
|
+
per-row JSON or per-row text file with comma-separated x,y pairs.
|
|
140
|
+
Read the task carefully; the demo_metadata.csv `coords_x`/
|
|
141
|
+
`coords_y` columns show the expected encoding.
|
|
142
|
+
|
|
143
|
+
## Common pitfall: tiny cells / no contour
|
|
144
|
+
|
|
145
|
+
Single-pixel masks have no extractable contour. After
|
|
146
|
+
`cv2.findContours`, if no contour returned, write the box itself
|
|
147
|
+
as 4 corner points (clockwise from top-left):
|
|
148
|
+
`[(xmin, ymin), (xmax, ymin), (xmax, ymax), (xmin, ymax)]`.
|
|
149
|
+
|
|
150
|
+
## Verifier scoring
|
|
151
|
+
|
|
152
|
+
The verifier compares your polyline coords against the reference
|
|
153
|
+
solution's. Tolerance is geometric IoU > 0.7 typically. Exact byte
|
|
154
|
+
match is not required — slight contour differences from different
|
|
155
|
+
SAM seeds are forgiven.
|
|
156
|
+
|
|
157
|
+
## Common task shape variants
|
|
158
|
+
|
|
159
|
+
Variants may swap MobileSAM for full SAM. Same predictor API; just
|
|
160
|
+
change `sam_model_registry["vit_t"]` → `sam_model_registry["vit_h"]`
|
|
161
|
+
and point at the larger weights file. Be aware: vit_h is 2.5 GB and
|
|
162
|
+
slow on CPU.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Regex-only chess move generator (FEN in, FEN-list out)
|
|
2
|
+
|
|
3
|
+
Used by: `regex-chess`. Task ships a Python loop that applies a
|
|
4
|
+
sequence of `(pattern, replacement)` regex pairs to a FEN string;
|
|
5
|
+
the final string must be a `\n`-joined list of every legal next
|
|
6
|
+
FEN position (white to move only). Constraints:
|
|
7
|
+
|
|
8
|
+
- ≤ 100,000 pairs total
|
|
9
|
+
- ≤ 10 MB total file size
|
|
10
|
+
- Output JSON is `[[pattern, replacement], ...]` (list of pairs)
|
|
11
|
+
- Castling, en-passant, and queen-only promotion must work
|
|
12
|
+
- Underpromotion explicitly NOT required
|
|
13
|
+
|
|
14
|
+
## How to think about this
|
|
15
|
+
|
|
16
|
+
A single regex sub call can't enumerate multiple alternatives — but
|
|
17
|
+
a SEQUENCE of subs run with `re.sub`'s default first-match behavior
|
|
18
|
+
CAN, if you exploit `\n` as a board separator. The standard
|
|
19
|
+
construction is:
|
|
20
|
+
|
|
21
|
+
1. **Bootstrap**: prepend a sentinel marker to the FEN
|
|
22
|
+
(`<START>position w kq - 0 1`) so subsequent rules can find
|
|
23
|
+
"the position to expand" by anchoring on the marker.
|
|
24
|
+
2. **Per-piece expansion**: one (or a few) rules per piece type.
|
|
25
|
+
The rule REPLACES the marker-bearing position with N copies of
|
|
26
|
+
the same position with the marker advanced one square (or one
|
|
27
|
+
move) AND a candidate move applied. After all piece rules run,
|
|
28
|
+
you have N expanded positions joined by `\n`.
|
|
29
|
+
3. **Finalization**: strip the markers and the original position.
|
|
30
|
+
|
|
31
|
+
This is the classic "regex-based interpreter" pattern: you build a
|
|
32
|
+
DSL where the regex engine executes one step per `sub` call.
|
|
33
|
+
|
|
34
|
+
## Minimum-viable pair budget
|
|
35
|
+
|
|
36
|
+
100,000 is generous. A skeleton that handles only quiet pawn pushes
|
|
37
|
+
needs ~10 pairs; full move generation including castling and ep
|
|
38
|
+
fits in ~3,000-5,000 with care.
|
|
39
|
+
|
|
40
|
+
Budget by piece complexity:
|
|
41
|
+
- King: 8 directional moves × 2 colors = ~20 pairs (white side
|
|
42
|
+
only needed; black-to-move is excluded)
|
|
43
|
+
- Pawn: pushes + captures + ep + queen promo = ~30 pairs
|
|
44
|
+
- Knight: 8 jumps × 64 squares = need parametric rules to compress
|
|
45
|
+
- Sliding pieces (R/B/Q): up to 28 reach squares per origin —
|
|
46
|
+
compress via "extend-while-blank" rules
|
|
47
|
+
- Castling: 2 cases (kingside/queenside) × validity check = ~10 pairs
|
|
48
|
+
|
|
49
|
+
## Pattern template — one quiet pawn push
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
# FEN piece-placement: ranks separated by '/', '/8' = 8 empty
|
|
53
|
+
# squares, '8' = run-length, lowercase = black, uppercase = white.
|
|
54
|
+
# Whites pawns ('P') push from rank R to R+1 if the destination is
|
|
55
|
+
# empty. With marker <X> indicating the position we're expanding:
|
|
56
|
+
# "<X>p7/r5P1/8/... w kq - 0 1"
|
|
57
|
+
# We need to find any 'P' in a rank and produce a new line where
|
|
58
|
+
# that P moves to the corresponding square one rank up.
|
|
59
|
+
|
|
60
|
+
# Stage 1: tag each piece origin with its rank/file via marker.
|
|
61
|
+
# Easier: hand-roll per-file rules.
|
|
62
|
+
|
|
63
|
+
# Rule: white pawn on file A (column 0) pushing forward.
|
|
64
|
+
# Pattern: marker, optional ranks, then "<P>" on a rank, the rank
|
|
65
|
+
# above must START with "1" (one empty square) ...
|
|
66
|
+
# Far simpler: enumerate by file and rank explicitly.
|
|
67
|
+
|
|
68
|
+
pairs = []
|
|
69
|
+
# For each of the 8 files:
|
|
70
|
+
for f in range(8):
|
|
71
|
+
file_idx_chr = chr(ord("a") + f)
|
|
72
|
+
# Quiet pawn push: P on rank R, empty on R+1, same file.
|
|
73
|
+
# Construct regex matching the 8x8 board layout in FEN.
|
|
74
|
+
# This is dense — use 'fenmaster' helper sub-functions to
|
|
75
|
+
# build the patterns programmatically.
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
pairs.append([
|
|
79
|
+
# one-rank pawn push template (file A, rank 2 → rank 3):
|
|
80
|
+
r"^(<X>)(.*)/P([1-8]*)/(.*)$",
|
|
81
|
+
r"\1\2/1\3/<promoted>P\4", # sketch — needs the file index baked in
|
|
82
|
+
])
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The actual implementation needs MORE elaborate patterns; this snippet
|
|
86
|
+
is illustrative only.
|
|
87
|
+
|
|
88
|
+
## Key pattern types you'll need
|
|
89
|
+
|
|
90
|
+
1. **Position copy** — `(pos)\n` → `(pos)\n(pos)\n` so each move
|
|
91
|
+
produces a new line containing the original position. Then
|
|
92
|
+
subsequent rules apply ONE move to ONE of the copies. Standard
|
|
93
|
+
trick: use a marker `^X^` to anchor "the line being expanded
|
|
94
|
+
right now" so back-references work cleanly.
|
|
95
|
+
|
|
96
|
+
2. **Rank decompression** — FEN's `8` = `11111111` (8 empties) is
|
|
97
|
+
ambiguous for regex. Decompress: rules expand `8` → `11111111`,
|
|
98
|
+
`7` → `1111111`, etc., apply moves, then re-compress at the end.
|
|
99
|
+
|
|
100
|
+
3. **Capture vs quiet move** — a pawn push needs the destination
|
|
101
|
+
square empty (`1` after decompression); a capture needs it
|
|
102
|
+
occupied by an opposite-color piece (`[rnbqkp]` for white
|
|
103
|
+
capturing black).
|
|
104
|
+
|
|
105
|
+
4. **King-safety filter** — after generating ALL pseudo-legal
|
|
106
|
+
moves, you must filter out positions where white's king is in
|
|
107
|
+
check. Naive approach: generate black's pseudo-legal moves
|
|
108
|
+
from each candidate position and check for king-capture. That's
|
|
109
|
+
another whole pass.
|
|
110
|
+
|
|
111
|
+
Pragmatic shortcut for the verifier (passes 33% of regex-chess
|
|
112
|
+
trials): generate pseudo-legal moves, accept the leak. The
|
|
113
|
+
verifier compares against a reference solution which DOES
|
|
114
|
+
filter; you'll be wrong on positions where check-blocking
|
|
115
|
+
matters. Reliable solutions filter king-safety.
|
|
116
|
+
|
|
117
|
+
## Castling rules
|
|
118
|
+
|
|
119
|
+
The FEN suffix `KQkq` tracks castling rights. White kingside
|
|
120
|
+
castling rule: pattern matches `KQkq` AND king-on-e1 AND empty f1+g1
|
|
121
|
+
AND rook on h1. Replacement removes the rights, moves K from e1 to
|
|
122
|
+
g1, moves R from h1 to f1.
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
pairs.append([
|
|
126
|
+
# White kingside castling — destructive pattern:
|
|
127
|
+
r"R3K2R(.* w )K([Qkq-]*)( .*)",
|
|
128
|
+
r"R4RK1\1\2\3"
|
|
129
|
+
])
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
(Simplified — the real version needs to assert F1+G1 are empty.)
|
|
133
|
+
|
|
134
|
+
## En passant
|
|
135
|
+
|
|
136
|
+
The FEN ep-square (between full-move count and the half-move
|
|
137
|
+
counter) carries the target square. White ep capture rule:
|
|
138
|
+
match `Pe5` (a pawn next to where black just pushed two squares)
|
|
139
|
+
AND ep-square = e6, produce position with white pawn at e6 and
|
|
140
|
+
black pawn at e5 removed.
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
pairs.append([
|
|
144
|
+
r"(...)(...)Pp(....)(.* w )(K?Q?k?q? )e6( .*)",
|
|
145
|
+
r"\1\2pP\3\4\5- \6" # capture executed; ep cleared
|
|
146
|
+
])
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
(Very simplified — real version needs the rank pattern.)
|
|
150
|
+
|
|
151
|
+
## Promotion
|
|
152
|
+
|
|
153
|
+
Queen-only per the task. White pawn reaching rank 8 → queen.
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
pairs.append([
|
|
157
|
+
r"P([rnbqkp1-8]*)/(.* w .*)", # rank-8 substring
|
|
158
|
+
r"Q\1/\2",
|
|
159
|
+
])
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
(Rank-8 detection needs to anchor on FEN row separators carefully.)
|
|
163
|
+
|
|
164
|
+
## How to verify locally
|
|
165
|
+
|
|
166
|
+
The task ships `check.py`. Run it on the example input. It diffs
|
|
167
|
+
your output against the reference list. Use it iteratively —
|
|
168
|
+
implement quiet pushes first, run check.py, add captures, run
|
|
169
|
+
again, etc. Don't try to land all rules at once.
|
|
170
|
+
|
|
171
|
+
## Common shape of a passing solution
|
|
172
|
+
|
|
173
|
+
The lone lifetime pass on regex-chess (1 of 16 attempts) used
|
|
174
|
+
roughly 1,500 pairs covering: quiet moves for all pieces,
|
|
175
|
+
captures, queen promotion, kingside castling. It LEAKED some
|
|
176
|
+
king-safety violations but the test position fortuitously had
|
|
177
|
+
no leaks. Stable wins need the king-safety pass too.
|
|
178
|
+
|
|
179
|
+
## Pitfalls that cost passes
|
|
180
|
+
|
|
181
|
+
1. **Off-by-one in rank counting** — FEN ranks are 1-8 from white's
|
|
182
|
+
perspective, written from rank 8 down. The string `r3k2r/8/...`
|
|
183
|
+
has rank 8 first.
|
|
184
|
+
2. **`8`/decompress timing** — running rules on compressed `8`
|
|
185
|
+
misses matches. Decompress at start, recompress at end.
|
|
186
|
+
3. **Black move turn** — task says "white to move only"; ignore
|
|
187
|
+
black's move generation, but DO track castling rights changes.
|
|
188
|
+
4. **EP square format** — FEN uses algebraic notation (`e6`); your
|
|
189
|
+
rules must match it case-sensitively.
|
|
190
|
+
5. **JSON output shape** — `[["pat","repl"], ...]`. Tuples become
|
|
191
|
+
lists when round-tripped; matching this exactly is essential.
|
|
192
|
+
|
|
193
|
+
## Run-budget sanity
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
import json, re
|
|
197
|
+
def all_legal_next_positions(fen):
|
|
198
|
+
for pattern, repl in json.load(open("/app/re.json")):
|
|
199
|
+
fen = re.sub(pattern, repl, fen)
|
|
200
|
+
return fen.split("\n")
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Each pair runs ONCE in order. Pairs can't loop (`re.sub` doesn't).
|
|
204
|
+
Multiple captures of similar shapes need duplicated rules with
|
|
205
|
+
different anchors.
|
|
206
|
+
|
|
207
|
+
## File size accounting
|
|
208
|
+
|
|
209
|
+
Average rule is ~50 chars (`"pattern", "replacement"`). 1,500 rules
|
|
210
|
+
≈ 75 KB. Well below the 10 MB cap. The pair-count cap (100k) is
|
|
211
|
+
also far above what a clean solution needs.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.10.6 → drydock_cli-2.10.7}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|