drydock-cli 2.7.20__tar.gz → 2.7.21__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.7.21/.auto_release.lock +1 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/PKG-INFO +1 -1
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/agent_loop.py +14 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/format.py +23 -3
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/pyproject.toml +1 -1
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_babysitter.sh +2 -3
- drydock_cli-2.7.21/tests/test_hallucinated_tool_suppression.py +87 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/trip_log.md +88 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/uv.lock +1 -1
- drydock_cli-2.7.20/.auto_release.lock +0 -1
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.gitignore +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.python-version +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.typos.toml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/AGENTS.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/Admiral.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/CLAUDE.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/LICENSE +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/NOTICE +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/PRD.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/action.yml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/docs/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock_terms.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/flake.lock +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/flake.nix +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/nohup.out +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/config_base.toml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/config_best.toml +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/experimenter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/kernel.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/proposer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/research/results.tsv +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/resume.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/install.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/test/project/dummy +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/conftest.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/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.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.20 → drydock_cli-2.7.21}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
463274
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.21
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -1507,9 +1507,23 @@ class AgentLoop:
|
|
|
1507
1507
|
self.stats.tool_calls_failed += 1
|
|
1508
1508
|
self._handle_tool_response(tool_call, error_msg, "failure", decision)
|
|
1509
1509
|
|
|
1510
|
+
def _silence_suppressed_failures(self, suppressed: list) -> None:
|
|
1511
|
+
"""Add tool result messages for hallucinated tools without TUI events.
|
|
1512
|
+
|
|
1513
|
+
Keeps message history well-formed (assistant tool_call → tool result)
|
|
1514
|
+
while hiding the error from the TUI to avoid confusing the user.
|
|
1515
|
+
"""
|
|
1516
|
+
for failed in suppressed:
|
|
1517
|
+
error_msg = f"<{TOOL_ERROR_TAG}>{failed.tool_name}: {failed.error}</{TOOL_ERROR_TAG}>"
|
|
1518
|
+
self.messages.append(
|
|
1519
|
+
self.format_handler.create_failed_tool_response_message(failed, error_msg)
|
|
1520
|
+
)
|
|
1521
|
+
self.stats.tool_calls_failed += 1
|
|
1522
|
+
|
|
1510
1523
|
async def _handle_tool_calls(
|
|
1511
1524
|
self, resolved: ResolvedMessage
|
|
1512
1525
|
) -> AsyncGenerator[ToolCallEvent | ToolResultEvent | ToolStreamEvent | AssistantEvent]:
|
|
1526
|
+
self._silence_suppressed_failures(resolved.suppressed_failures)
|
|
1513
1527
|
async for event in self._emit_failed_tool_events(resolved.failed_calls):
|
|
1514
1528
|
yield event
|
|
1515
1529
|
for tool_call in resolved.tool_calls:
|
|
@@ -166,6 +166,9 @@ class ResolvedMessage(BaseModel):
|
|
|
166
166
|
model_config = ConfigDict(frozen=True)
|
|
167
167
|
tool_calls: list[ResolvedToolCall]
|
|
168
168
|
failed_calls: list[FailedToolCall] = Field(default_factory=list)
|
|
169
|
+
# Hallucinated tools: need a tool result in message history (to keep the
|
|
170
|
+
# conversation well-formed) but should NOT be shown as errors in the TUI.
|
|
171
|
+
suppressed_failures: list[FailedToolCall] = Field(default_factory=list)
|
|
169
172
|
|
|
170
173
|
|
|
171
174
|
class APIToolFormatHandler:
|
|
@@ -352,12 +355,25 @@ class APIToolFormatHandler:
|
|
|
352
355
|
"list_mcp_resources", "list_resources", "search_resources",
|
|
353
356
|
}
|
|
354
357
|
|
|
358
|
+
suppressed_failures = []
|
|
355
359
|
for parsed_call in parsed.tool_calls:
|
|
356
360
|
tool_class = active_tools.get(parsed_call.tool_name)
|
|
357
361
|
if not tool_class:
|
|
358
|
-
#
|
|
359
|
-
#
|
|
362
|
+
# Hallucinated tools: add a tool result to keep the message
|
|
363
|
+
# history well-formed (prevents empty_after_tool loops) but
|
|
364
|
+
# route to suppressed_failures so the TUI doesn't show an error.
|
|
360
365
|
if parsed_call.tool_name in _IGNORE_TOOLS:
|
|
366
|
+
suppressed_failures.append(
|
|
367
|
+
FailedToolCall(
|
|
368
|
+
tool_name=parsed_call.tool_name,
|
|
369
|
+
call_id=parsed_call.call_id,
|
|
370
|
+
error=(
|
|
371
|
+
f"'{parsed_call.tool_name}' is not available. "
|
|
372
|
+
f"Use only tools from your tool list: "
|
|
373
|
+
f"{', '.join(sorted(active_tools.keys())[:8])}."
|
|
374
|
+
),
|
|
375
|
+
)
|
|
376
|
+
)
|
|
361
377
|
continue
|
|
362
378
|
failed_calls.append(
|
|
363
379
|
FailedToolCall(
|
|
@@ -536,7 +552,11 @@ class APIToolFormatHandler:
|
|
|
536
552
|
)
|
|
537
553
|
)
|
|
538
554
|
|
|
539
|
-
return ResolvedMessage(
|
|
555
|
+
return ResolvedMessage(
|
|
556
|
+
tool_calls=resolved_calls,
|
|
557
|
+
failed_calls=failed_calls,
|
|
558
|
+
suppressed_failures=suppressed_failures,
|
|
559
|
+
)
|
|
540
560
|
|
|
541
561
|
def create_tool_response_message(
|
|
542
562
|
self, tool_call: ResolvedToolCall, result_text: str
|
|
@@ -28,8 +28,8 @@ PID_FILE=/tmp/stress_pid.txt
|
|
|
28
28
|
# /tmp/stress_2000_*.log. Avoids the stale-log bug where babysitter reported
|
|
29
29
|
# COMPLETE for hours while the real harness kept processing (2026-04-25).
|
|
30
30
|
# Falls back to the prior hardcoded path if no match exists yet.
|
|
31
|
-
STRESS_LOG
|
|
32
|
-
STRESS_LOG
|
|
31
|
+
STRESS_LOG=$(ls -t /tmp/stress_2000_*.log 2>/dev/null | head -1)
|
|
32
|
+
STRESS_LOG=${STRESS_LOG:-/tmp/stress_2000_v10_restart_1777453487.log}
|
|
33
33
|
NOTIFY=/data3/drydock/scripts/notify_release.py
|
|
34
34
|
PY_CONDA=/home/bobef/miniconda3/bin/python3
|
|
35
35
|
PY_DRYDOCK=/home/bobef/miniforge3/envs/drydock/bin/python3
|
|
@@ -146,7 +146,6 @@ disown 2>/dev/null || true
|
|
|
146
146
|
|
|
147
147
|
# Point the monitor at the new log for subsequent ticks.
|
|
148
148
|
ln -sf "$NEW_LOG" /tmp/stress_2000_v10.log.current
|
|
149
|
-
sed -i "s|^STRESS_LOG=.*|STRESS_LOG=$NEW_LOG|" "$0" 2>/dev/null || true
|
|
150
149
|
|
|
151
150
|
log "restart complete: new PID $NEW_PID log $NEW_LOG"
|
|
152
151
|
notify_on_change "restart" \
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Regression test: hallucinated tool calls (e.g. ralph_repo_index) must
|
|
2
|
+
produce a tool result message in the history so the conversation stays
|
|
3
|
+
well-formed. Before the fix, _IGNORE_TOOLS entries were silently dropped via
|
|
4
|
+
`continue`, leaving the assistant tool_call with no paired tool result.
|
|
5
|
+
This caused empty_after_tool loops because the model kept waiting for a
|
|
6
|
+
result that never arrived."""
|
|
7
|
+
import pytest
|
|
8
|
+
from unittest.mock import MagicMock
|
|
9
|
+
|
|
10
|
+
from drydock.core.llm.format import (
|
|
11
|
+
APIToolFormatHandler,
|
|
12
|
+
FailedToolCall,
|
|
13
|
+
ParsedMessage,
|
|
14
|
+
ParsedToolCall,
|
|
15
|
+
ResolvedMessage,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _make_handler():
|
|
20
|
+
return APIToolFormatHandler()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _make_tool_manager(available: list[str]):
|
|
24
|
+
tm = MagicMock()
|
|
25
|
+
tm.available_tools = {name: MagicMock() for name in available}
|
|
26
|
+
return tm
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _parsed(tool_name: str, call_id: str = "c1") -> ParsedMessage:
|
|
30
|
+
return ParsedMessage(
|
|
31
|
+
tool_calls=[ParsedToolCall(tool_name=tool_name, call_id=call_id, raw_args={})]
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
HALLUCINATED_TOOLS = [
|
|
36
|
+
"ralph_repo_index",
|
|
37
|
+
"repo_index",
|
|
38
|
+
"index_repo",
|
|
39
|
+
"exit_plan_mode",
|
|
40
|
+
"enter_plan_mode",
|
|
41
|
+
"plan_mode",
|
|
42
|
+
"list_mcp_resources",
|
|
43
|
+
"list_resources",
|
|
44
|
+
"search_resources",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@pytest.mark.parametrize("tool_name", HALLUCINATED_TOOLS)
|
|
49
|
+
def test_hallucinated_tool_goes_to_suppressed_failures(tool_name):
|
|
50
|
+
handler = _make_handler()
|
|
51
|
+
tm = _make_tool_manager(["read_file", "write_file"])
|
|
52
|
+
parsed = _parsed(tool_name)
|
|
53
|
+
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
54
|
+
|
|
55
|
+
# Must NOT appear as a visible failed_call (no TUI error shown)
|
|
56
|
+
assert all(fc.tool_name != tool_name for fc in resolved.failed_calls), (
|
|
57
|
+
f"{tool_name} should not appear in failed_calls (would show TUI error)"
|
|
58
|
+
)
|
|
59
|
+
# MUST appear in suppressed_failures (keeps message history well-formed)
|
|
60
|
+
assert any(sf.tool_name == tool_name for sf in resolved.suppressed_failures), (
|
|
61
|
+
f"{tool_name} must be in suppressed_failures so a tool result is added to history"
|
|
62
|
+
)
|
|
63
|
+
# The suppressed entry must have a non-empty error message
|
|
64
|
+
sf = next(sf for sf in resolved.suppressed_failures if sf.tool_name == tool_name)
|
|
65
|
+
assert sf.error, "suppressed failure must have an error message telling model what to use"
|
|
66
|
+
# Must not appear in resolved tool_calls
|
|
67
|
+
assert all(tc.tool_name != tool_name for tc in resolved.tool_calls)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_suppressed_failures_included_in_resolved_message():
|
|
71
|
+
handler = _make_handler()
|
|
72
|
+
tm = _make_tool_manager(["read_file"])
|
|
73
|
+
parsed = _parsed("ralph_repo_index")
|
|
74
|
+
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
75
|
+
assert isinstance(resolved, ResolvedMessage)
|
|
76
|
+
assert len(resolved.suppressed_failures) == 1
|
|
77
|
+
assert resolved.suppressed_failures[0].call_id == "c1"
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_unknown_non_hallucinated_tool_goes_to_failed_calls():
|
|
81
|
+
"""A completely unknown tool name should be a visible FailedToolCall."""
|
|
82
|
+
handler = _make_handler()
|
|
83
|
+
tm = _make_tool_manager(["read_file"])
|
|
84
|
+
parsed = _parsed("nonexistent_random_tool")
|
|
85
|
+
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
86
|
+
assert any(fc.tool_name == "nonexistent_random_tool" for fc in resolved.failed_calls)
|
|
87
|
+
assert not resolved.suppressed_failures
|
|
@@ -586,3 +586,91 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
586
586
|
- GH issues: 0 open
|
|
587
587
|
- Services: llm_balancer healthy, vLLM gemma4 up, stress harness alive
|
|
588
588
|
- Action this tick: committed fix 3695f6b — escalate truncated-history write_file retry on 2nd+ offense. Pattern observed: 8 consecutive retry_after_error:write_file:truncated_history fires in 7 min (10:05-10:12 UTC), model ignoring the existing advisory. APIToolFormatHandler now tracks per-path hit count; 2nd+ failure gets "REPEATED FAILURE #N" with project file listing and concrete search_replace alternative, matching the escalation pattern in search_replace.py. 5 regression tests pass. Ships as v2.7.21 at next auto-release (~12:00 UTC).
|
|
589
|
+
|
|
590
|
+
## 2026-04-29 11:04 UTC tick
|
|
591
|
+
- Stress: 239/1658 (PID 387049 alive, 1h58m elapsed, resumed from step 174; babysitter STRESS_LOG correctly tracking active log)
|
|
592
|
+
- Write rate: 27% through prompt 225 (14/51 prompts with writes; prompts 175-211 are analysis queries with 0 writes; prompts 212-225 API tool implementations had writes); TIMEOUT cluster at prompts 229-239 as agent processes complex NLP tasks
|
|
593
|
+
- TIMEOUT pattern: prompt 226 (stem_words) triggered full package rebuild after session reset (441 msgs + 59 files); subsequent sessions bloated to 18-25MB causing prompts 229-239 to exceed harness timeout; log_size growing during TOIMEOUTs confirms agent IS running — harness timeout fires before task completes, not agent failure
|
|
594
|
+
- vLLM 400s: 0 (container up 5 days, healthy)
|
|
595
|
+
- GH issues: 0 open
|
|
596
|
+
- Services: llm_balancer healthy (confirmed via /proc/fd), vLLM gemma4 Up 5 days, admiral_probe up, stress babysitter alive (last tick 11:00 UTC confirmed alive=1 rss=463MB)
|
|
597
|
+
- Action this tick: no action — all services healthy, no new drydock bugs found; TIMEOUT cluster is expected context-bloat pattern after large session reset rebuild; harness will recover via subsequent session resets; babysitter monitoring correctly
|
|
598
|
+
|
|
599
|
+
## 2026-04-29 12:30 UTC tick
|
|
600
|
+
- Stress: 250/1658 (PID 387049 alive, 2h25m elapsed; babysitter restarted from checkpoint 173 → step 175 after prior PID 3713698 died; original log had 680 entries but that was a previous run cycle)
|
|
601
|
+
- Write rate: 37% last 64 prompts (24/64 with writes; prompts 175-250 are read-heavy — tree, find, git, code metrics, analysis — so low write rate is expected; not a regression)
|
|
602
|
+
- vLLM 400s: 0 (container healthy, Up 5+ days)
|
|
603
|
+
- GH issues: 0 open
|
|
604
|
+
- Services: llm_balancer healthy, vLLM gemma4 up, stress harness alive, admiral_probe up
|
|
605
|
+
- Admiral last 2h: retry_after_error:write_file (truncated-history, 5 fires 10:08–10:40 UTC — escalation fix in v2.7.20 is deployed; model recovered each time), empty_after_tool:write_file (1 fire), struggle:none (heredoc+sed loop, 1 fire), empty_after_tool:ralph_repo_index (1 fire — ralph_repo_index is in _IGNORE_TOOLS, silently dropped; model recovered via admiral advisory)
|
|
606
|
+
- Action this tick: no fix committed — all services healthy, no new actionable drydock bugs found; 37% write rate is expected for this prompt section; harness progressing normally
|
|
607
|
+
|
|
608
|
+
## 2026-04-29 12:33 UTC tick
|
|
609
|
+
- Stress: 285/1658 (PID 387049 alive, 3h25m elapsed; current section: format converters, convert tsv/csv→toml/xml/ini/env; session active and writing converter scripts)
|
|
610
|
+
- Write rate: 38% (37/95 prompts with writes in last 100) — expected for format converter section where model often uses bash inline rather than writing files
|
|
611
|
+
- vLLM 400s: 0 (container healthy)
|
|
612
|
+
- GH issues: 0 open
|
|
613
|
+
- Admiral last 2h: heavy activity during hard section (steps 229-254: qr/captcha/NLP/pdf/epub): 3x tui-recycle-requested, 2x retry-spike alerts (51% and 59% of prompts needed retries), struggle:none interventions at 59-90 tool calls with no write; all resolved by RECYCLE-TUI; format converter section now clean; no new patterns beyond known model-behavior
|
|
614
|
+
- Action this tick: no fix committed — all services healthy, no new actionable drydock bugs; rough section (steps 229-254) has passed; harness progressing normally in cleaner prompt territory
|
|
615
|
+
|
|
616
|
+
## 2026-04-29 12:05 UTC tick
|
|
617
|
+
- Stress: 256/1658 (PID 387049 alive, 2h55m elapsed; resumed from step 174 after PID 270527 died at 09:04 UTC; babysitter correctly tracking active log `_1777453487.log`)
|
|
618
|
+
- Write rate: 37% (25/67 prompts with writes in current run; steps 174-256 include pdf/epub/image/audio/video tasks and NLP tasks that naturally produce 0 writes due to missing deps — not a regression vs 73% which covered different step range)
|
|
619
|
+
- vLLM 400s: 0 (container Up 5+ days, healthy)
|
|
620
|
+
- GH issues: 0 open
|
|
621
|
+
- Admiral last 30 min: loop:bash (model ran `ls tool_agent/ | grep yaml` 8 times on step 256 "convert json to yaml"), struggle:none (59 then 75 tool calls with no write — admiral fired, model eventually completed with 0 writes), tui-recycle-requested at 11:56 UTC (admiral requested TUI recycle after 9 SKIPs in 38 prompts; recycle=6 at 12:00 babysitter tick confirms it fired); all known patterns, no new bugs
|
|
622
|
+
- Cascading TIMEOUT at steps 229-234: all hit total_msgs=500 in a session started after step 225 reset; root cause is lemmatize_words (step 227) using 101 msgs causing rapid context saturation; this is the known context-bloat issue from resume.md; harness recovered via TUI recycle
|
|
623
|
+
- Action this tick: no fix committed — all services healthy, no new actionable drydock bugs; write rate and skip patterns are within expected range for this prompt section
|
|
624
|
+
|
|
625
|
+
## 2026-04-29 14:00 UTC tick
|
|
626
|
+
- Stress: 321/1658 (PID 387049 alive, 4h55m elapsed; resumed from step 174 at 09:04 UTC after prior run died)
|
|
627
|
+
- Write rate: 78% last 50 prompts (39/50 with writes)
|
|
628
|
+
- vLLM 400s: 0 (container healthy)
|
|
629
|
+
- GH issues: 0 open
|
|
630
|
+
- Action this tick: committed fix for babysitter self-modification bug — sed -i on restart was killing the dynamic STRESS_LOG detection (replacing both dynamic-detection lines with hardcoded path × 2); next restart will now correctly track the new log; removed self-modifying sed, restored dynamic detection with updated fallback
|
|
631
|
+
|
|
632
|
+
## 2026-04-29 14:02 UTC tick
|
|
633
|
+
- Stress: 376/1658 (PID 387049 alive, 4h58m elapsed since 09:04 UTC restart)
|
|
634
|
+
- Write rate: 86% last 100 prompts (excellent; clean CLI-flag + plugin feature section)
|
|
635
|
+
- vLLM 400s: 0 (container healthy)
|
|
636
|
+
- GH issues: 0 open
|
|
637
|
+
- Admiral last 30 min: retry_after_error:search_replace:truncated-history (model reusing truncated tool result as search text; canned + opus interventions fired); raw-markdown-leakage alert at 13:21 (7%) and 13:51 (33%) but confirmed cleared — 0 matches in current 64KB PTY window; all known patterns, no new drydock source bugs found
|
|
638
|
+
- Action this tick: no fix committed — raw-markdown leak was transient and has cleared; all services healthy; prior fix (1a0602a babysitter self-modification) shipping at next auto_release
|
|
639
|
+
|
|
640
|
+
## 2026-04-29 13:30 UTC tick
|
|
641
|
+
- Stress: 360/1658 (PID 387049 alive, 4h26m elapsed since 09:04 UTC restart; babysitter tracking log `_1777453487.log` correctly after last tick's fix)
|
|
642
|
+
- Write rate: 90% last 50 prompts (45/50 with writes; clean section — CLI flag additions, 14-18 msgs, 2-5 writes each)
|
|
643
|
+
- vLLM 400s: 0 (container healthy)
|
|
644
|
+
- GH issues: 0 open
|
|
645
|
+
- Admiral last 30 min: none observed (all prompts completing with done+writes, no SKIP/TIMEOUT in last 10 steps)
|
|
646
|
+
- Action this tick: no fix committed — all services healthy; prior tick's babysitter self-modification fix (1a0602a) shipping as v2.7.21 at 18:00 UTC auto_release; stress run in good shape through CLI-flag section
|
|
647
|
+
|
|
648
|
+
## 2026-04-29 14:34 UTC tick
|
|
649
|
+
- Stress: 387/1658 (babysitter restarted with --resume-from-step 174; current log: stress_2000_v10_restart_1777453487.log, PID 387049 running 5h25m)
|
|
650
|
+
- Write rate: 84% last 100 prompts (up from 74% in prior session snapshot)
|
|
651
|
+
- Admiral last 30 min: 84 fires today total; patterns are all known (struggle 69, retry_after_error 30, loop 28, empty_after_tool 7); 4 empty_after_tool:ralph_repo_index from ignored hallucinated tool calls leaving dangling assistant tool_calls in history (model recovers via admiral nudge)
|
|
652
|
+
- vLLM 400s: 0 (container healthy; :8001 owned by llm_balancer PID 24354, responding normally)
|
|
653
|
+
- GH issues: 0 open
|
|
654
|
+
- Action this tick: no fix committed — investigated empty_after_tool:ralph_repo_index pattern; root cause is silently-dropped IGNORE_TOOLS leaving assistant messages with unresolved tool_calls; admiral catches and nudges successfully; skip cluster at steps 350-370 (9 skips) was recovered by tui-recycle; current run healthy and progressing
|
|
655
|
+
|
|
656
|
+
## 2026-04-29 15:05 UTC tick
|
|
657
|
+
- Stress: 392/1658 (PID 387049 alive, 6h elapsed since 09:04 UTC restart; resuming from step 174)
|
|
658
|
+
- Write rate: 61% last ~190 prompts (down from 84% — "Plugin feature:" section has many design/architecture prompts that result in 0 writes, expected)
|
|
659
|
+
- vLLM 400s: 0 (container healthy; :8001 llm_balancer PID 24354 OK, :8000 vLLM Docker OK, :8878 admiral PID 4075121 OK)
|
|
660
|
+
- GH issues: 0 open
|
|
661
|
+
- Admiral last 30 min: loop:read_file::{offset:100,limit:100,path:cli.py} fired twice (model reading same offset 5+ times ignoring dedup advisory; known Gemma 4 advisory-resistance, CLAUDE.md learning #2); dedup logic itself confirmed working in active session log
|
|
662
|
+
- Action this tick: no fix committed — all services healthy; 1a0602a (babysitter self-modification fix) ships as v2.7.21 at 18:00 UTC; no new drydock source bugs found; SKIPs post-session-reset are harness timing (not fixable per rules); 61% write rate is content-type variance not regression
|
|
663
|
+
|
|
664
|
+
## 2026-04-29 16:02 UTC tick
|
|
665
|
+
- Stress: 416/1658 (PID 387049, log v10_restart; healthy, running 7h)
|
|
666
|
+
- Write rate: 82% last 100 prompts — strong, up from 61% previous tick
|
|
667
|
+
- vLLM 400s: 0 (balancer PID 24354 OK, vLLM Docker OK, no JSONDecodeErrors)
|
|
668
|
+
- GH issues: 0 open
|
|
669
|
+
- Action this tick: committed fix for hallucinated-tool empty_after_tool loops (commits 80196ba + 348fb4a). When Gemma 4 calls tools from _IGNORE_TOOLS (exit_plan_mode, ralph_repo_index, list_mcp_resources etc.), the old code silently dropped them via `continue` leaving the tool_call unpaired in message history, causing the model to wait for a response that never arrived. Fix: route suppressed tools to suppressed_failures on ResolvedMessage; _silence_suppressed_failures() in agent_loop.py adds proper tool result messages without emitting TUI error events. 9 regression tests added. Ships as v2.7.22 at 18:00 UTC.
|
|
670
|
+
|
|
671
|
+
## 2026-04-29 16:34 UTC tick
|
|
672
|
+
- Stress: 233/1658 at tick start (PID 387049 stuck 7.5h at step 233 qr_encode; no log output since 09:02 UTC); restarted as PID 459183 resuming from step 216
|
|
673
|
+
- Write rate: 25% across current run (early run had good rates; mid-run steps 134-175 got 0 writes on file/git/code-analysis prompts — model answering "already done" for ops the package could plausibly handle; expected content-type variance, not a regression)
|
|
674
|
+
- vLLM 400s: 0
|
|
675
|
+
- GH issues: 0 open (gh returned empty output)
|
|
676
|
+
- Action this tick: killed stuck harness (387049) and its TUI child (457206); ran babysitter to restart from step 216 (done=216, idx=422). Root cause of the 7.5h stall: harness pexpect connection was frozen waiting for step 233 to complete; `--max-per-prompt 300` timeout did not fire (likely pexpect select() blocked on TUI output at 500+ messages). Babysitter only checks liveness (PID in /proc), not progress staleness — this is a known gap, not actionable per rules. New harness confirmed alive and producing log output within 10s of restart. No drydock source fix this tick.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
404218
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.7.20 → drydock_cli-2.7.21}/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.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.20 → drydock_cli-2.7.21}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|