drydock-cli 2.9.57__tar.gz → 2.9.61__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.57 → drydock_cli-2.9.61}/PKG-INFO +1 -1
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/llm_analyzer.py +5 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/opus_escalator.py +17 -1
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/agent_loop.py +148 -1
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/write_file.py +64 -16
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/pyproject.toml +1 -1
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/.gitignore +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/LICENSE +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/NOTICE +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/docs/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/__main__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/auto_solve.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/constraint_extract.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/constraint_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/goal.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/logger.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/gemma4_math.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/gemma4_slim.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/slug.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/spec_check.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/algebra_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/count_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/logic_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/math_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/memory_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prolog_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/set_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/solve_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/stats_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/units_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/verify_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/types.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/core/utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/__main__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/gap_detector.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/ingest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/item.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/queue.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/curiosity/surprise.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/checklist/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/logic/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/prove/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/config.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/train/scan_sessions.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/whats_new.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/install_tests/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/install_tests/publish/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/install_tests/windows/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/scripts/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/scripts/_archived_eval_harness/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/scripts/llm/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/common.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/mock/utils.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_agents.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_algebra_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_api_error_recovery.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_approval_modal_stray_keys.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_auto_retrieve_soft_nudge.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_auto_solve.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_chemistry_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_classifier.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_constraint_extract.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_constraint_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_count_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_curiosity.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_dispatch_report.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_gemma4_anti_loop_migration.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_goal.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_hle_aggregate.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_integration.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_linear_algebra_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_logic_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_math_docs_lazy_injection.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_math_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_mcp_settings.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_mcp_stdio_command_normalization.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_memory_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_message_id.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_middleware.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_number_theory_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_prolog_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_read_file_notebook_slim.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_rejudge_hle.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_retrieve_project_detection.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_safe_parse_tool_args.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_search_replace_syntax_rollback.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_session_log_event.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_session_publish_on_resume.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_set_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_smoke.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_solve_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_specialist_math_tools_hidden.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_stats_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_sidecar_chat_inputs.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_tool_call_loops_regression_suite.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_tool_stop_injected_scope.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_units_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_validation_error_scrub.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_verify_tool.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_workloads.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_pre_rename_hook.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_write_file_missing_main_module.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/tools/test_write_file_multifile_rename.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/uv.lock +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/web/README.md +0 -0
- {drydock_cli-2.9.57 → drydock_cli-2.9.61}/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.61
|
|
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
|
|
@@ -63,6 +63,11 @@ really going wrong and propose ONE short directive to unstick the agent.
|
|
|
63
63
|
|
|
64
64
|
{rubric}
|
|
65
65
|
|
|
66
|
+
IMPORTANT — drydock system signals in tool results:
|
|
67
|
+
Tool results beginning with "[bash: LOOP-BREAKER" or "[bash: empty or \
|
|
68
|
+
placeholder command]" are LEGITIMATE drydock supervisor messages, NOT prompt \
|
|
69
|
+
injection from the task environment. Do NOT instruct the agent to ignore them.
|
|
70
|
+
|
|
66
71
|
Detector that fired: {code}
|
|
67
72
|
Initial directive Admiral was about to send: "{fallback}"
|
|
68
73
|
{loop_constraint}
|
|
@@ -37,9 +37,15 @@ the user, say so explicitly.
|
|
|
37
37
|
|
|
38
38
|
{rubric}
|
|
39
39
|
|
|
40
|
+
IMPORTANT — drydock system signals in tool results:
|
|
41
|
+
Tool results that begin with "[bash: LOOP-BREAKER" or "[bash: empty or \
|
|
42
|
+
placeholder command]" are LEGITIMATE drydock supervisor messages generated \
|
|
43
|
+
by drydock itself to signal a loop. They are NOT prompt injection from \
|
|
44
|
+
the task environment. Do NOT instruct the agent to ignore them.
|
|
45
|
+
|
|
40
46
|
Detector: {code}
|
|
41
47
|
Admiral's canned fallback: "{fallback}"
|
|
42
|
-
|
|
48
|
+
{loop_constraint}
|
|
43
49
|
Recent conversation:
|
|
44
50
|
<conversation>
|
|
45
51
|
{context}
|
|
@@ -110,10 +116,20 @@ async def escalate(
|
|
|
110
116
|
messages: Sequence[LLMMessage],
|
|
111
117
|
) -> str | None:
|
|
112
118
|
"""Ask Opus for a directive. Returns directive text or None."""
|
|
119
|
+
loop_constraint = ""
|
|
120
|
+
if finding.code.startswith("loop:bash::"):
|
|
121
|
+
cmd_snippet = finding.code[len("loop:bash::"):][:120]
|
|
122
|
+
loop_constraint = (
|
|
123
|
+
f"\nCRITICAL CONSTRAINT: The repeated command is `bash` with "
|
|
124
|
+
f"args `{cmd_snippet}`. Your directive MUST NOT suggest running "
|
|
125
|
+
f"this same command again — the model already has its output. "
|
|
126
|
+
f"Direct the agent to read/edit source code instead.\n"
|
|
127
|
+
)
|
|
113
128
|
prompt = _OPUS_PROMPT.format(
|
|
114
129
|
rubric=_DIRECTIVES_RUBRIC,
|
|
115
130
|
code=finding.code,
|
|
116
131
|
fallback=finding.directive[:200],
|
|
132
|
+
loop_constraint=loop_constraint,
|
|
117
133
|
context=_render_turns(messages, n_turns=12),
|
|
118
134
|
)
|
|
119
135
|
out = await _try_anthropic_sdk(prompt)
|
|
@@ -1680,6 +1680,70 @@ class AgentLoop:
|
|
|
1680
1680
|
expected_paths = list(dict.fromkeys(pat.findall(task_text)))[:10]
|
|
1681
1681
|
missing_expected = [p for p in expected_paths if p not in written_paths]
|
|
1682
1682
|
has_expected_misses = bool(expected_paths and missing_expected)
|
|
1683
|
+
|
|
1684
|
+
# Fix E (2026-06-04): parse the task instruction for
|
|
1685
|
+
# explicit verify commands and check if the model has
|
|
1686
|
+
# ever run them. Targets the partial-pytest-credit
|
|
1687
|
+
# cluster — fix-code-vulnerability scored 5/6 pytest
|
|
1688
|
+
# but never ran the explicit `pytest -rA` the task
|
|
1689
|
+
# named. Same shape across 14 trials in v2.9.55 batch.
|
|
1690
|
+
expected_verifies: list[str] = []
|
|
1691
|
+
if len(self.messages) >= 2:
|
|
1692
|
+
task_text = (self.messages[1].content or "")
|
|
1693
|
+
import re as _re2
|
|
1694
|
+
# Patterns the model should run before exit:
|
|
1695
|
+
# - "you can run: `pytest -rA`"
|
|
1696
|
+
# - "verify by running `bash test.sh`"
|
|
1697
|
+
# - "to test, run `python test.py`"
|
|
1698
|
+
# - bare `pytest` mentions in instructions
|
|
1699
|
+
# Capture the command text (inside backticks first).
|
|
1700
|
+
cmd_patterns = [
|
|
1701
|
+
r"(?:you can run|verify by running|to test,?\s*run|"
|
|
1702
|
+
r"to verify,?\s*run|run the tests? with|tests? are run with|"
|
|
1703
|
+
r"verifier runs?|you may run|run\s+the\s+command|"
|
|
1704
|
+
r"to evaluate|evaluation command):\s*`([^`]+)`",
|
|
1705
|
+
r"verify by:?\s*`([^`]+)`",
|
|
1706
|
+
# bare backtick commands containing pytest/bash/make
|
|
1707
|
+
r"`(pytest\s[^`]*|bash\s+[^`]*\.sh[^`]*|make\s+test[^`]*|"
|
|
1708
|
+
r"npm\s+test[^`]*|cargo\s+test[^`]*|go\s+test[^`]*)`",
|
|
1709
|
+
]
|
|
1710
|
+
for p in cmd_patterns:
|
|
1711
|
+
for m in _re2.finditer(p, task_text, _re2.IGNORECASE):
|
|
1712
|
+
cmd = m.group(1).strip()
|
|
1713
|
+
if cmd and cmd not in expected_verifies:
|
|
1714
|
+
expected_verifies.append(cmd)
|
|
1715
|
+
if len(expected_verifies) >= 5:
|
|
1716
|
+
break
|
|
1717
|
+
if len(expected_verifies) >= 5:
|
|
1718
|
+
break
|
|
1719
|
+
# Did the model run any matching command via bash?
|
|
1720
|
+
ran_verify_cmds: list[str] = []
|
|
1721
|
+
if expected_verifies:
|
|
1722
|
+
bash_cmds: list[str] = []
|
|
1723
|
+
for msg in self.messages:
|
|
1724
|
+
for tc in (msg.tool_calls or []):
|
|
1725
|
+
fn_obj = tc.function
|
|
1726
|
+
if not fn_obj or fn_obj.name != "bash":
|
|
1727
|
+
continue
|
|
1728
|
+
try:
|
|
1729
|
+
import json as _json2
|
|
1730
|
+
a = _json2.loads(fn_obj.arguments or "{}")
|
|
1731
|
+
c = a.get("command") or ""
|
|
1732
|
+
if c:
|
|
1733
|
+
bash_cmds.append(c)
|
|
1734
|
+
except Exception:
|
|
1735
|
+
pass
|
|
1736
|
+
# Match: any token of the expected command appears in
|
|
1737
|
+
# any of the model's bash commands. Lenient match
|
|
1738
|
+
# (model might add extra flags or paths).
|
|
1739
|
+
for ev in expected_verifies:
|
|
1740
|
+
first_token = ev.split()[0] if ev.split() else ev
|
|
1741
|
+
if any(first_token in bc for bc in bash_cmds):
|
|
1742
|
+
ran_verify_cmds.append(ev)
|
|
1743
|
+
missing_verify_cmds = [
|
|
1744
|
+
ev for ev in expected_verifies if ev not in ran_verify_cmds
|
|
1745
|
+
]
|
|
1746
|
+
has_missing_verify = bool(missing_verify_cmds)
|
|
1683
1747
|
# Cap raised 5 → 10 nudges per session. Removed tool_turns
|
|
1684
1748
|
# gate entirely — the 2026-06-03 v2948 batch showed that
|
|
1685
1749
|
# most "engaged but failed" trials (bucket D, 26/50 fails)
|
|
@@ -1748,6 +1812,26 @@ class AgentLoop:
|
|
|
1748
1812
|
f"no file, and partial-credit verifiers reward "
|
|
1749
1813
|
f"format correctness even when content is off."
|
|
1750
1814
|
)
|
|
1815
|
+
elif has_missing_verify:
|
|
1816
|
+
# Fix E (2026-06-04): task explicitly names a
|
|
1817
|
+
# verify command (e.g. "you can run: `pytest -rA`")
|
|
1818
|
+
# and the model never executed it. 14 of 37 fails
|
|
1819
|
+
# in v2.9.55 had partial pytest credit (one named
|
|
1820
|
+
# 5/6, another 4/5) — they were ONE iteration away
|
|
1821
|
+
# from passing but never ran the verifier to see.
|
|
1822
|
+
note = (
|
|
1823
|
+
f"⚠ PREMATURE EXIT BLOCK #{nudges + 1}/10. "
|
|
1824
|
+
f"The task explicitly names this verify "
|
|
1825
|
+
f"command: `{missing_verify_cmds[0]}`"
|
|
1826
|
+
f"{' (+%d more)' % (len(missing_verify_cmds)-1) if len(missing_verify_cmds) > 1 else ''}"
|
|
1827
|
+
f". You have NOT run it. The external "
|
|
1828
|
+
f"verifier will use that exact command (or "
|
|
1829
|
+
f"equivalent) after you exit — run it NOW "
|
|
1830
|
+
f"yourself via `bash`, READ every failure "
|
|
1831
|
+
f"line, FIX what it reports, then rerun "
|
|
1832
|
+
f"until 0 failures. Your self-`verify` tool "
|
|
1833
|
+
f"checks YOUR criterion, not this command."
|
|
1834
|
+
)
|
|
1751
1835
|
elif last_verify_passed:
|
|
1752
1836
|
# 2026-06-04: model self-verified with its OWN
|
|
1753
1837
|
# criterion. Real tbench/pytest verifier runs
|
|
@@ -1782,6 +1866,63 @@ class AgentLoop:
|
|
|
1782
1866
|
"the source, then run it again. Don't stop "
|
|
1783
1867
|
"until verify returns passed=True."
|
|
1784
1868
|
)
|
|
1869
|
+
# Fix N (2026-06-05): when a verify-command is named
|
|
1870
|
+
# and the model has written files but hasn't run it,
|
|
1871
|
+
# drydock runs the verifier in a subprocess and
|
|
1872
|
+
# APPENDS the output to the nudge. The model sees
|
|
1873
|
+
# real ground-truth feedback instead of just being
|
|
1874
|
+
# asked to run it. Cap at 3 auto-runs per session.
|
|
1875
|
+
auto_run_count = getattr(self, "_auto_verifier_runs", 0)
|
|
1876
|
+
if (has_missing_verify and writes_so_far > 0
|
|
1877
|
+
and auto_run_count < 3):
|
|
1878
|
+
cmd = missing_verify_cmds[0]
|
|
1879
|
+
# Sanity-check the command — only allow pytest /
|
|
1880
|
+
# bash / make / npm / cargo / go / python invocations.
|
|
1881
|
+
# Refuse anything else for safety.
|
|
1882
|
+
safe_prefixes = (
|
|
1883
|
+
"pytest", "python -m pytest", "python3 -m pytest",
|
|
1884
|
+
"bash ", "sh ", "make ", "npm ", "cargo ",
|
|
1885
|
+
"go test", "python ", "python3 ",
|
|
1886
|
+
)
|
|
1887
|
+
if any(cmd.strip().startswith(p) for p in safe_prefixes):
|
|
1888
|
+
try:
|
|
1889
|
+
import subprocess as _sub
|
|
1890
|
+
import shlex as _sx
|
|
1891
|
+
_proc = _sub.run(
|
|
1892
|
+
cmd, shell=True, capture_output=True,
|
|
1893
|
+
timeout=45, text=True,
|
|
1894
|
+
cwd=str(Path.cwd()),
|
|
1895
|
+
)
|
|
1896
|
+
out = (_proc.stdout or "") + (_proc.stderr or "")
|
|
1897
|
+
if len(out) > 2000:
|
|
1898
|
+
out = out[:2000] + (
|
|
1899
|
+
f"\n...[truncated, {len(out)} bytes total]"
|
|
1900
|
+
)
|
|
1901
|
+
rc = _proc.returncode
|
|
1902
|
+
self._auto_verifier_runs = auto_run_count + 1
|
|
1903
|
+
note += (
|
|
1904
|
+
f"\n\n[AUTO-VERIFIER RAN] I ran `{cmd}` "
|
|
1905
|
+
f"for you. Exit code: {rc}. Output:\n"
|
|
1906
|
+
f"-----VERIFIER OUTPUT-----\n{out}\n"
|
|
1907
|
+
f"-----END VERIFIER OUTPUT-----\n"
|
|
1908
|
+
f"{'PASSED — you can exit if everything looks correct.' if rc == 0 else 'FAILED — read the failures above, fix the source, then run it again.'}"
|
|
1909
|
+
)
|
|
1910
|
+
logger.warning(
|
|
1911
|
+
"[AUTO-VERIFIER] ran `%s` rc=%d "
|
|
1912
|
+
"(auto-run #%d/3)",
|
|
1913
|
+
cmd, rc, self._auto_verifier_runs,
|
|
1914
|
+
)
|
|
1915
|
+
except _sub.TimeoutExpired:
|
|
1916
|
+
note += (
|
|
1917
|
+
f"\n\n[AUTO-VERIFIER TIMED OUT after 45s] "
|
|
1918
|
+
f"`{cmd}` didn't finish in time. Try a "
|
|
1919
|
+
f"narrower test (e.g. `pytest -x` to stop "
|
|
1920
|
+
f"at first fail) or skip this check."
|
|
1921
|
+
)
|
|
1922
|
+
except Exception as _e:
|
|
1923
|
+
logger.warning(
|
|
1924
|
+
"[AUTO-VERIFIER] failed: %s", _e
|
|
1925
|
+
)
|
|
1785
1926
|
self._inject_system_note(note)
|
|
1786
1927
|
should_break_loop = False
|
|
1787
1928
|
logger.warning(
|
|
@@ -2576,7 +2717,13 @@ class AgentLoop:
|
|
|
2576
2717
|
# Read-only checks (ls, pwd, git status) get a higher threshold.
|
|
2577
2718
|
tool_name = tool_call.tool_name
|
|
2578
2719
|
is_readonly = tool_name in ("grep", "read_file", "glob", "ls")
|
|
2579
|
-
|
|
2720
|
+
# 2026-06-04: lowered read-only success threshold 6 → 3 after
|
|
2721
|
+
# operator TUI session showed read_file looping 7× on the same
|
|
2722
|
+
# file before circuit breaker fired. The tool already injects a
|
|
2723
|
+
# "2nd identical read" header; if the model hasn't pivoted by
|
|
2724
|
+
# the 3rd call, it never will. Cuts wasted-turn cost on stuck
|
|
2725
|
+
# models from ~6 to ~3 per loop.
|
|
2726
|
+
success_threshold = 3 if is_readonly else 4
|
|
2580
2727
|
|
|
2581
2728
|
if is_failed and count >= 2:
|
|
2582
2729
|
pass # will be blocked below
|
|
@@ -451,6 +451,27 @@ class WriteFile(
|
|
|
451
451
|
# triggers panic-retry loops (feedback_no_tool_errors_for_loop_detection).
|
|
452
452
|
if not args.path.strip():
|
|
453
453
|
cwd = Path.cwd()
|
|
454
|
+
# Track consecutive missing-path attempts so the advisory can
|
|
455
|
+
# escalate from gentle → concrete-suggestion → hard-block.
|
|
456
|
+
# 2026-06-04: operator reported 3+ identical missing-path
|
|
457
|
+
# attempts in TUI session — the soft advisory wasn't enough.
|
|
458
|
+
miss_state = self.state.__dict__.setdefault(
|
|
459
|
+
"_write_file_missing_path_streak", 0
|
|
460
|
+
)
|
|
461
|
+
miss_state += 1
|
|
462
|
+
self.state.__dict__["_write_file_missing_path_streak"] = miss_state
|
|
463
|
+
|
|
464
|
+
# Pull last-read paths from the read-file state for concrete
|
|
465
|
+
# suggestions on retry.
|
|
466
|
+
read_state = ctx.read_file_state if ctx else None
|
|
467
|
+
recent_reads: list[str] = []
|
|
468
|
+
if read_state:
|
|
469
|
+
try:
|
|
470
|
+
# read_file_state is keyed by path; pull a stable list
|
|
471
|
+
recent_reads = list(read_state.keys())[-3:]
|
|
472
|
+
except Exception:
|
|
473
|
+
pass
|
|
474
|
+
|
|
454
475
|
try:
|
|
455
476
|
pkg_dirs = [
|
|
456
477
|
d.name for d in sorted(cwd.iterdir())
|
|
@@ -459,29 +480,56 @@ class WriteFile(
|
|
|
459
480
|
hint = f"Package dirs in {cwd.name}/: {', '.join(pkg_dirs)}" if pkg_dirs else f"cwd: {cwd}"
|
|
460
481
|
except OSError:
|
|
461
482
|
hint = f"cwd: {cwd}"
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
# root-cause as the search_replace empty-call loop fixed
|
|
471
|
-
# via dedup-strip in commit dee310a.
|
|
472
|
-
yield WriteFileResult(
|
|
473
|
-
path="(missing)",
|
|
474
|
-
bytes_written=0,
|
|
475
|
-
file_existed=False,
|
|
476
|
-
content=(
|
|
483
|
+
|
|
484
|
+
if miss_state == 1:
|
|
485
|
+
# 2026-05-31: do NOT echo a sample call shape in the
|
|
486
|
+
# error content. Gemma 4 copies whatever it sees from
|
|
487
|
+
# prior tool results as the next call's args — a
|
|
488
|
+
# literal call-syntax template in the error message
|
|
489
|
+
# gets re-emitted as the next call. Keep terse.
|
|
490
|
+
msg = (
|
|
477
491
|
f"NO path supplied. Pick a concrete file path "
|
|
478
492
|
f"under the current project (e.g. one of the "
|
|
479
493
|
f"existing source files you just read), then "
|
|
480
494
|
f"re-emit the call with that path and the full "
|
|
481
495
|
f"file content. {hint}."
|
|
482
|
-
)
|
|
496
|
+
)
|
|
497
|
+
elif miss_state == 2 and recent_reads:
|
|
498
|
+
# Escalate: name the actual recently-read files so the
|
|
499
|
+
# model has a concrete target. Removes ambiguity that
|
|
500
|
+
# caused the model to retry with the same empty args.
|
|
501
|
+
msg = (
|
|
502
|
+
f"[REPEAT #{miss_state}] write_file STILL called with "
|
|
503
|
+
f"NO path. Stop guessing — pick ONE of these files "
|
|
504
|
+
f"you just read and pass its FULL absolute path as "
|
|
505
|
+
f"`path`: {', '.join(recent_reads[:3])}. If none "
|
|
506
|
+
f"of these is right, call read_file on the file "
|
|
507
|
+
f"you intend to edit FIRST, then write_file with "
|
|
508
|
+
f"that exact path."
|
|
509
|
+
)
|
|
510
|
+
else:
|
|
511
|
+
# 3rd+ miss with no recoverable suggestion. Block harder
|
|
512
|
+
# so the agent loop's "no progress" detector kicks in.
|
|
513
|
+
msg = (
|
|
514
|
+
f"[HARD-BLOCK] write_file called with NO path "
|
|
515
|
+
f"{miss_state} times in a row. STOP calling "
|
|
516
|
+
f"write_file. Do one of: (1) call read_file on the "
|
|
517
|
+
f"file you intend to edit so its path enters my "
|
|
518
|
+
f"context, (2) call bash with `ls` or `find` to "
|
|
519
|
+
f"locate the target file, (3) end your turn with a "
|
|
520
|
+
f"text summary if you're stuck. Continuing to call "
|
|
521
|
+
f"write_file without a path will produce this same "
|
|
522
|
+
f"block — it is not progress."
|
|
523
|
+
)
|
|
524
|
+
yield WriteFileResult(
|
|
525
|
+
path="(missing)",
|
|
526
|
+
bytes_written=0,
|
|
527
|
+
file_existed=False,
|
|
528
|
+
content=msg,
|
|
483
529
|
)
|
|
484
530
|
return
|
|
531
|
+
# Reset the missing-path streak on a successful path arg.
|
|
532
|
+
self.state.__dict__["_write_file_missing_path_streak"] = 0
|
|
485
533
|
file_path, file_existed, content_bytes = self._prepare_and_validate_path(args)
|
|
486
534
|
|
|
487
535
|
# Read-before-Write enforcement (Claude Code tool contract).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.57 → drydock_cli-2.9.61}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/chat_input/text_area.py
RENAMED
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/checkpoint_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/drydock/cli/textual_ui/widgets/no_markup_static.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.9.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/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.57 → drydock_cli-2.9.61}/drydock/cli/update_notifier/ports/update_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|