drydock-cli 2.9.103__tar.gz → 2.9.107__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.9.103 → drydock_cli-2.9.107}/PKG-INFO +1 -1
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/agent_loop.py +60 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/gemma4_slim.md +8 -24
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/pyproject.toml +1 -1
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_loop_regressions_2026_06_06.py +96 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/uv.lock +1 -1
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/.gitignore +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/LICENSE +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/NOTICE +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/docs/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/__main__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/auto_solve.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/constraint_extract.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/constraint_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/goal.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/grammar/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/grammar/_llamacpp_converter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/grammar/policy.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/grammar/policy_union.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/logger.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/gemma4_math.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/slug.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/spec_check.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/algebra_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/count_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/logic_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/math_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/memory_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prolog_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/set_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/solve_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/stats_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/units_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/verify_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/types.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/__main__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/gap_detector.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/ingest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/item.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/queue.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/curiosity/surprise.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/checklist/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/logic/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/prove/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/config.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/train/scan_sessions.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/whats_new.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/install_tests/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/install_tests/publish/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/install_tests/windows/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/scripts/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/scripts/_archived_eval_harness/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/scripts/llm/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/common.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/mock/utils.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/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.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/stress/__init__.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/stress/test_io_thrash.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_agents.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_algebra_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_api_error_recovery.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_approval_modal_stray_keys.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_auto_retrieve_soft_nudge.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_auto_solve.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_chemistry_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_classifier.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_constraint_extract.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_constraint_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_count_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_curiosity.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_dispatch_report.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_gemma4_anti_loop_migration.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_gemma4_tool_filter.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_goal.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_grammar.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_hle_aggregate.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_integration.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_linear_algebra_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_logic_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_math_docs_lazy_injection.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_math_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_mcp_settings.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_mcp_stdio_command_normalization.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_memory_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_message_id.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_middleware.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_number_theory_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_prolog_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_read_file_notebook_slim.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_rejudge_hle.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_retrieve_project_detection.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_safe_parse_tool_args.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_search_replace_syntax_rollback.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_session_log_event.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_session_publish_on_resume.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_set_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_smoke.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_solve_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_specialist_math_tools_hidden.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_stats_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_sidecar_chat_inputs.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_tool_call_loops_regression_suite.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_tool_stop_injected_scope.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_units_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_validation_error_scrub.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_verify_tool.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_workloads.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_pre_rename_hook.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_write_file_missing_main_module.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/tools/test_write_file_multifile_rename.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/web/README.md +0 -0
- {drydock_cli-2.9.103 → drydock_cli-2.9.107}/worked_examples/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.9.
|
|
3
|
+
Version: 2.9.107
|
|
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
|
|
@@ -3242,6 +3242,66 @@ class AgentLoop:
|
|
|
3242
3242
|
)
|
|
3243
3243
|
return
|
|
3244
3244
|
|
|
3245
|
+
# 2026-06-07 Pre-flight: prune duplicate write_file history (v2.9.104).
|
|
3246
|
+
# User session 2026-06-06 v2.9.95 batch `sam-cell-seg` trial:
|
|
3247
|
+
# 22 identical writes to `/app/conversation_summary.smd` with the
|
|
3248
|
+
# same sha8=d3bedbf3 content. The existing write_file dedup is
|
|
3249
|
+
# advisory-only (per feedback_no_tool_errors_for_loop_detection.md)
|
|
3250
|
+
# and Gemma 4 ignores the advisory. Same architectural fix as the
|
|
3251
|
+
# consecutive-task preflight: drop the old duplicate calls from
|
|
3252
|
+
# history so the model's next turn sees a cleaner context, with
|
|
3253
|
+
# only the most recent attempt visible. Tool itself stays advisory.
|
|
3254
|
+
if tool_call.tool_name == "write_file":
|
|
3255
|
+
try:
|
|
3256
|
+
cur_path = (
|
|
3257
|
+
tool_call.args_dict.get("path")
|
|
3258
|
+
or tool_call.args_dict.get("file_path")
|
|
3259
|
+
or ""
|
|
3260
|
+
)
|
|
3261
|
+
cur_content = tool_call.args_dict.get("content", "")
|
|
3262
|
+
if cur_path and isinstance(cur_content, str):
|
|
3263
|
+
dup_count = 0
|
|
3264
|
+
dup_indices: list[int] = []
|
|
3265
|
+
for i, m in enumerate(self.messages):
|
|
3266
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
3267
|
+
continue
|
|
3268
|
+
for tc in m.tool_calls:
|
|
3269
|
+
if tc.function.name != "write_file":
|
|
3270
|
+
continue
|
|
3271
|
+
try:
|
|
3272
|
+
a = json.loads(tc.function.arguments or "{}")
|
|
3273
|
+
except Exception:
|
|
3274
|
+
continue
|
|
3275
|
+
ap = a.get("path") or a.get("file_path") or ""
|
|
3276
|
+
ac = a.get("content", "")
|
|
3277
|
+
if ap == cur_path and ac == cur_content:
|
|
3278
|
+
dup_count += 1
|
|
3279
|
+
dup_indices.append(i)
|
|
3280
|
+
break
|
|
3281
|
+
if dup_count >= 5 and len(dup_indices) > 1:
|
|
3282
|
+
# Drop all but the most recent prior duplicate.
|
|
3283
|
+
# Also drop the tool result that immediately follows.
|
|
3284
|
+
to_drop = set()
|
|
3285
|
+
for idx in dup_indices[:-1]:
|
|
3286
|
+
to_drop.add(idx)
|
|
3287
|
+
if idx + 1 < len(self.messages):
|
|
3288
|
+
next_m = self.messages[idx + 1]
|
|
3289
|
+
if next_m.role == Role.tool:
|
|
3290
|
+
to_drop.add(idx + 1)
|
|
3291
|
+
kept = [
|
|
3292
|
+
m for i, m in enumerate(self.messages)
|
|
3293
|
+
if i not in to_drop
|
|
3294
|
+
]
|
|
3295
|
+
self.messages.reset(kept)
|
|
3296
|
+
logger.warning(
|
|
3297
|
+
"[PREFLIGHT-WRITE-DUP] pruned %d duplicate "
|
|
3298
|
+
"write_file calls to %r (%d identical "
|
|
3299
|
+
"attempts in history)",
|
|
3300
|
+
len(to_drop), cur_path, dup_count,
|
|
3301
|
+
)
|
|
3302
|
+
except Exception as _e:
|
|
3303
|
+
logger.debug("[PREFLIGHT-WRITE-DUP] failed: %s", _e)
|
|
3304
|
+
|
|
3245
3305
|
# 2026-06-05 Pre-flight path validation. Operator: "why can't tool
|
|
3246
3306
|
# calls check the right pathing BEFORE doing it?" Right answer.
|
|
3247
3307
|
# For file tools that REQUIRE a path arg, validate before dispatch.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
You are DryDock, a CLI coding agent. You write code, fix bugs, and build projects.
|
|
2
2
|
|
|
3
|
-
ACT IMMEDIATELY. For a user coding request (fix, add, implement, build, change, update): begin with a tool call (read_file, write_file,
|
|
3
|
+
ACT IMMEDIATELY. For a user coding request (fix, add, implement, build, change, update): begin with a tool call (read_file, write_file, bash with a real command, etc.) — not a planning paragraph. Do NOT explain or ask first when the next step is clear. Call a tool NOW. This applies to EVERY new user message that asks for code work.
|
|
4
4
|
|
|
5
|
-
EXCEPTION: if you genuinely do not know which tool to use, emit a SHORT (1-2 line) text response — NEVER a bash call containing only a comment
|
|
5
|
+
EXCEPTION: if you genuinely do not know which tool to use, emit a SHORT (1-2 line) text response — NEVER a bash call containing only a comment. A comment-as-bash is worse than a sentence of text. When in doubt: write one sentence of text, then call the right tool on the next turn.
|
|
6
6
|
|
|
7
7
|
When ANY bash command (including `python3 -c` inline scripts) returns IDENTICAL output 3 or more times in a row: STOP repeating it. Switch tools: use read_file to read file contents, grep to search for symbols, write_file to create missing files. Repeating the same bash command will never produce a different result.
|
|
8
8
|
|
|
9
9
|
When running tests (pytest, unittest, cargo test, go test, npm test) and you see IDENTICAL failure output 3 or more times in a row: STOP re-running. Identical failures mean the bug is in your source code — the test will not pass on its own. (1) read the failure message and locate the specific file+line, (2) use grep or cat to inspect the failing code, (3) fix the root cause in the source file, (4) then run once to verify.
|
|
10
10
|
|
|
11
|
-
Your tools: read_file, write_file,
|
|
11
|
+
Your tools: read_file, write_file, mechanical_rename, grep, glob, bash, lsp, web_search, web_fetch, retrieve, math, verify, count, logic, algebra, number_theory, set, linear_algebra, stats, units, chemistry, solve, prolog.
|
|
12
12
|
|
|
13
|
-
For renaming an identifier across multiple files (e.g. "rename `units` to `quantity` everywhere", "introduce a Backend ABC and have both backends inherit"), prefer `mechanical_rename(old_name, new_name, scope, kind)` over
|
|
13
|
+
For renaming an identifier across multiple files (e.g. "rename `units` to `quantity` everywhere", "introduce a Backend ABC and have both backends inherit"), prefer `mechanical_rename(old_name, new_name, scope, kind)` over manual edits — it applies the rename atomically across all .py files in scope, runs pytest, and rolls back if the suite goes red. `kind` is one of: `function`, `class`, `field` (field also rewrites dict-key string literals), or `auto`.
|
|
14
14
|
|
|
15
15
|
CURIOSITY — default posture is "investigate, then assert":
|
|
16
16
|
- If the user message names a thing you don't have context for (paper title, library, API, identifier, project-specific term), your FIRST tool call is `retrieve(query="<the term>")`. Not text. Not web_search. Retrieve.
|
|
@@ -18,10 +18,10 @@ CURIOSITY — default posture is "investigate, then assert":
|
|
|
18
18
|
- When retrieved evidence contradicts what you were about to say, prefer the evidence and say so.
|
|
19
19
|
- Don't ask the user to clarify before you've tried one investigation pass. Read the obvious files; retrieve the obvious terms.
|
|
20
20
|
- NEVER say "X is already implemented" without first calling read_file or bash ls to confirm.
|
|
21
|
-
- Writing "I created/wrote/implemented X" in text does NOT create any file. Only a write_file
|
|
21
|
+
- Writing "I created/wrote/implemented X" in text does NOT create any file. Only a write_file tool call does.
|
|
22
22
|
- NEVER announce "Task complete", "I have completed", or "Done" before running the verification command.
|
|
23
23
|
- If ANY tool returns `<tool_error>` (glob failed, read_file failed, file not found), that step FAILED. Adjust and retry, do not declare success.
|
|
24
|
-
- When asked to add MULTIPLE items, work through EACH one with a write_file
|
|
24
|
+
- When asked to add MULTIPLE items, work through EACH one with a write_file call.
|
|
25
25
|
- NEVER write "✅ Verified" or any checkmark for a file or test you have not actually run/read in this session.
|
|
26
26
|
|
|
27
27
|
WHEN TO USE retrieve (project's GraphRAG index):
|
|
@@ -38,15 +38,6 @@ WHEN TO USE WEB TOOLS (sparingly):
|
|
|
38
38
|
- Found a URL to a relevant SO post or doc: `web_fetch`
|
|
39
39
|
- DO NOT web-search for things you already know how to do. Write the code first.
|
|
40
40
|
|
|
41
|
-
DELEGATION (only for genuinely large tasks):
|
|
42
|
-
- 1-8 files → BUILD INLINE. Do not call task.
|
|
43
|
-
- 9+ files with multiple subdirectories → DELEGATE to builder.
|
|
44
|
-
- Editing an existing file or fixing a known bug → BUILD INLINE.
|
|
45
|
-
- "Where does function X live?" → DELEGATE to explore.
|
|
46
|
-
- If the user asks you to PLAN or EXPLAIN → respond with text. Do not delegate.
|
|
47
|
-
|
|
48
|
-
When in doubt, build inline. A wasted delegation costs 60-90 seconds.
|
|
49
|
-
|
|
50
41
|
Workflow for building from a PRD or spec:
|
|
51
42
|
1. Read the spec file
|
|
52
43
|
2. Create each file with write_file — start with __init__.py and __main__.py
|
|
@@ -58,15 +49,8 @@ Workflow for building from a PRD or spec:
|
|
|
58
49
|
Workflow for fixing bugs:
|
|
59
50
|
1. Grep for the function/class mentioned
|
|
60
51
|
2. Read the source file
|
|
61
|
-
3. Fix with
|
|
62
|
-
4. Verify the fix
|
|
63
|
-
|
|
64
|
-
search_replace rules:
|
|
65
|
-
- Always read_file the target file IMMEDIATELY BEFORE the search_replace. Stale memory is the #1 cause of "Search text not found" failures.
|
|
66
|
-
- The SEARCH block must be EXACT — same whitespace, indentation, quote style, variable names — as the file's current state.
|
|
67
|
-
- If you edited the file earlier this session, read it AGAIN before the next search_replace; your earlier edits changed the content.
|
|
68
|
-
- After a search_replace lands cleanly, do NOT search_replace the same file again without re-reading.
|
|
69
|
-
- If search_replace fails with "Search text not found", call read_file BEFORE retrying — do NOT retry with the same SEARCH block.
|
|
52
|
+
3. Fix with a new write_file of the corrected file
|
|
53
|
+
4. Verify the fix with bash
|
|
70
54
|
|
|
71
55
|
CORE PRINCIPLES:
|
|
72
56
|
1. Don't assume. Don't hide confusion. Surface tradeoffs.
|
|
@@ -113,6 +113,102 @@ class TestSubagentSkipsAdaptiveBudget:
|
|
|
113
113
|
# task is now disabled for Gemma 4 in v2.9.97).
|
|
114
114
|
# ===========================================================================
|
|
115
115
|
|
|
116
|
+
class TestConsecutiveWriteDuplicatePreflight:
|
|
117
|
+
"""v2.9.104: 5+ identical write_file calls to the same path get
|
|
118
|
+
pruned at preflight. User session 2026-06-06 v2.9.95 batch
|
|
119
|
+
`sam-cell-seg` trial: 22 identical writes to
|
|
120
|
+
/app/conversation_summary.smd, sha8=d3bedbf3. The tool-level dedup
|
|
121
|
+
is advisory-only by design (feedback_no_tool_errors_for_loop_...)
|
|
122
|
+
and Gemma 4 ignored the advisory. The preflight prunes the
|
|
123
|
+
duplicates from history so the model's next turn sees a clean
|
|
124
|
+
context."""
|
|
125
|
+
|
|
126
|
+
def test_preflight_marker_present_in_agent_loop(self):
|
|
127
|
+
text = open(
|
|
128
|
+
"/data3/drydock/drydock/core/agent_loop.py"
|
|
129
|
+
).read()
|
|
130
|
+
assert "PREFLIGHT-WRITE-DUP" in text, (
|
|
131
|
+
"consecutive-write preflight was removed from agent_loop.py"
|
|
132
|
+
)
|
|
133
|
+
assert "dup_count >= 5" in text, (
|
|
134
|
+
"duplicate-write threshold changed; update test"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
def test_preflight_prunes_history_to_most_recent_attempt(self):
|
|
138
|
+
"""Behavioral: 7 identical writes + tool results -> 2 messages
|
|
139
|
+
remain after the preflight logic runs (most recent write + its
|
|
140
|
+
result). Replicates the sam-cell-seg pattern."""
|
|
141
|
+
import json as _json
|
|
142
|
+
from drydock.core.agent_loop import AgentLoop
|
|
143
|
+
from drydock.core.types import (
|
|
144
|
+
FunctionCall,
|
|
145
|
+
LLMMessage,
|
|
146
|
+
MessageList,
|
|
147
|
+
Role,
|
|
148
|
+
ToolCall,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
msgs = MessageList()
|
|
152
|
+
identical_args = _json.dumps(
|
|
153
|
+
{"path": "/app/foo.smd", "content": "out0 = out0\nout1 = out1\n"}
|
|
154
|
+
)
|
|
155
|
+
for i in range(7):
|
|
156
|
+
msgs.append(LLMMessage(
|
|
157
|
+
role=Role.assistant,
|
|
158
|
+
content="",
|
|
159
|
+
tool_calls=[ToolCall(
|
|
160
|
+
id=f"call_{i}",
|
|
161
|
+
function=FunctionCall(
|
|
162
|
+
name="write_file", arguments=identical_args
|
|
163
|
+
),
|
|
164
|
+
)],
|
|
165
|
+
))
|
|
166
|
+
msgs.append(LLMMessage(
|
|
167
|
+
role=Role.tool,
|
|
168
|
+
content="advisory no-op",
|
|
169
|
+
tool_call_id=f"call_{i}",
|
|
170
|
+
))
|
|
171
|
+
|
|
172
|
+
al = object.__new__(AgentLoop)
|
|
173
|
+
al.messages = msgs
|
|
174
|
+
|
|
175
|
+
# Reproduce the inline preflight logic exactly
|
|
176
|
+
cur_path = "/app/foo.smd"
|
|
177
|
+
cur_content = "out0 = out0\nout1 = out1\n"
|
|
178
|
+
dup_indices = []
|
|
179
|
+
for i, m in enumerate(al.messages):
|
|
180
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
181
|
+
continue
|
|
182
|
+
for tc in m.tool_calls:
|
|
183
|
+
if tc.function.name != "write_file":
|
|
184
|
+
continue
|
|
185
|
+
try:
|
|
186
|
+
a = _json.loads(tc.function.arguments or "{}")
|
|
187
|
+
except Exception:
|
|
188
|
+
continue
|
|
189
|
+
ap = a.get("path") or a.get("file_path") or ""
|
|
190
|
+
ac = a.get("content", "")
|
|
191
|
+
if ap == cur_path and ac == cur_content:
|
|
192
|
+
dup_indices.append(i)
|
|
193
|
+
break
|
|
194
|
+
dup_count = len(dup_indices)
|
|
195
|
+
assert dup_count == 7
|
|
196
|
+
|
|
197
|
+
to_drop = set()
|
|
198
|
+
for idx in dup_indices[:-1]:
|
|
199
|
+
to_drop.add(idx)
|
|
200
|
+
if idx + 1 < len(al.messages):
|
|
201
|
+
next_m = al.messages[idx + 1]
|
|
202
|
+
if next_m.role == Role.tool:
|
|
203
|
+
to_drop.add(idx + 1)
|
|
204
|
+
kept = [m for i, m in enumerate(al.messages) if i not in to_drop]
|
|
205
|
+
al.messages.reset(kept)
|
|
206
|
+
assert len(al.messages) == 2, (
|
|
207
|
+
f"expected 2 messages remaining (last write + result), "
|
|
208
|
+
f"got {len(al.messages)}"
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
116
212
|
class TestConsecutiveTaskBlockPreflight:
|
|
117
213
|
"""When a model emits `task` two turns in a row, the second call must
|
|
118
214
|
be blocked at preflight (drop from history + emit advisory). The
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/handlers/event_handler.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/body.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/chat_input/text_area.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/checkpoint_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/context_progress.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/no_markup_static.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/proxy_setup_app.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/session_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/status_message.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/widgets/teleport_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/textual_ui/windowing/history_windowing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/cli/update_notifier/ports/update_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/ignore_rules.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/indexer.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/store.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/file_indexer/watcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.103 → drydock_cli-2.9.107}/drydock/core/autocompletion/path_prompt_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|