drydock-cli 2.7.22__tar.gz → 2.7.23__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.23/.auto_release.lock +1 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/PKG-INFO +1 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/agent_loop.py +6 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/pyproject.toml +1 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_hallucinated_tool_suppression.py +34 -0
- drydock_cli-2.7.23/tests/test_search_replace_args_not_truncated.py +181 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/trip_log.md +22 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/uv.lock +1 -1
- drydock_cli-2.7.22/.auto_release.lock +0 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.gitignore +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.python-version +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.typos.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/AGENTS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/Admiral.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/CLAUDE.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/LICENSE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/NOTICE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/PRD.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/action.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/docs/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock_terms.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/flake.lock +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/flake.nix +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/nohup.out +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/config_base.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/config_best.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/experimenter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/kernel.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/proposer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/research/results.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/resume.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/install.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/test/project/dummy +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/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.22 → drydock_cli-2.7.23}/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.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.23}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
542815
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.23
|
|
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
|
|
@@ -1032,7 +1032,7 @@ class AgentLoop:
|
|
|
1032
1032
|
parsed = self.format_handler.parse_message(last_message)
|
|
1033
1033
|
resolved = self.format_handler.resolve_tool_calls(parsed, self.tool_manager)
|
|
1034
1034
|
|
|
1035
|
-
if not resolved.tool_calls and not resolved.failed_calls:
|
|
1035
|
+
if not resolved.tool_calls and not resolved.failed_calls and not resolved.suppressed_failures:
|
|
1036
1036
|
return
|
|
1037
1037
|
|
|
1038
1038
|
async for event in self._handle_tool_calls(resolved):
|
|
@@ -1781,6 +1781,11 @@ class AgentLoop:
|
|
|
1781
1781
|
for tc in msg.tool_calls:
|
|
1782
1782
|
if not tc.function or not tc.function.arguments:
|
|
1783
1783
|
continue
|
|
1784
|
+
# search_replace args contain SEARCH/REPLACE blocks the model
|
|
1785
|
+
# NEEDS to see in history (to know what edits it already applied).
|
|
1786
|
+
# Only write_file carries full file content worth truncating.
|
|
1787
|
+
if tc.function.name == "search_replace":
|
|
1788
|
+
continue
|
|
1784
1789
|
args = tc.function.arguments
|
|
1785
1790
|
if len(args) <= SOFT_CAP_BYTES:
|
|
1786
1791
|
continue
|
|
@@ -85,3 +85,37 @@ def test_unknown_non_hallucinated_tool_goes_to_failed_calls():
|
|
|
85
85
|
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
86
86
|
assert any(fc.tool_name == "nonexistent_random_tool" for fc in resolved.failed_calls)
|
|
87
87
|
assert not resolved.suppressed_failures
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_suppressed_failures_not_bypassed_by_early_return():
|
|
91
|
+
"""Regression for agent_loop early-return bug: when only suppressed_failures
|
|
92
|
+
exist (no real tool_calls, no failed_calls), the condition
|
|
93
|
+
`not tool_calls and not failed_calls` was True and _handle_tool_calls was
|
|
94
|
+
skipped, so _silence_suppressed_failures was never called. The tool result
|
|
95
|
+
message for the hallucinated tool was never added, leaving the conversation
|
|
96
|
+
malformed (assistant tool_call with no paired tool result).
|
|
97
|
+
|
|
98
|
+
Fix: early-return also checks `not suppressed_failures`.
|
|
99
|
+
This test verifies that a ResolvedMessage with only suppressed_failures
|
|
100
|
+
is NOT considered empty by the fixed condition.
|
|
101
|
+
"""
|
|
102
|
+
handler = _make_handler()
|
|
103
|
+
tm = _make_tool_manager(["read_file"])
|
|
104
|
+
parsed = _parsed("ralph_repo_index")
|
|
105
|
+
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
106
|
+
|
|
107
|
+
# Preconditions: only suppressed_failures, nothing else
|
|
108
|
+
assert not resolved.tool_calls
|
|
109
|
+
assert not resolved.failed_calls
|
|
110
|
+
assert resolved.suppressed_failures
|
|
111
|
+
|
|
112
|
+
# The fixed early-return condition must NOT consider this "no work to do"
|
|
113
|
+
should_skip_early = (
|
|
114
|
+
not resolved.tool_calls
|
|
115
|
+
and not resolved.failed_calls
|
|
116
|
+
and not resolved.suppressed_failures # fixed: was missing this
|
|
117
|
+
)
|
|
118
|
+
assert not should_skip_early, (
|
|
119
|
+
"Bug regression: suppressed_failures were ignored by early-return, "
|
|
120
|
+
"leaving assistant tool_call with no paired tool result in history."
|
|
121
|
+
)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""Regression test: search_replace call args must NOT be truncated.
|
|
2
|
+
|
|
3
|
+
Repro: _truncate_old_tool_results truncated ALL large tool-call arguments,
|
|
4
|
+
including search_replace SEARCH/REPLACE blocks (~400-800 bytes). The model
|
|
5
|
+
then saw {_truncated: true, file_path: "..."} in its own history and copied
|
|
6
|
+
those truncated args as new call arguments. format.py detected this and
|
|
7
|
+
returned a FailedToolCall, but the model retried with the same truncated
|
|
8
|
+
args again and again, creating a retry_after_error:search_replace loop.
|
|
9
|
+
|
|
10
|
+
Fix (2026-04-29): skip the arg-truncation loop for search_replace tool
|
|
11
|
+
calls. Only write_file carries full file content worth truncating.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from drydock.core.types import (
|
|
20
|
+
FunctionCall,
|
|
21
|
+
LLMMessage,
|
|
22
|
+
Role,
|
|
23
|
+
ToolCall,
|
|
24
|
+
)
|
|
25
|
+
from tests.conftest import build_test_agent_loop
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _make_tc(name: str, arguments: str, idx: int = 0) -> ToolCall:
|
|
29
|
+
return ToolCall(
|
|
30
|
+
id=f"tc_{idx}",
|
|
31
|
+
index=idx,
|
|
32
|
+
function=FunctionCall(name=name, arguments=arguments),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _build_history_with_search_replace(num_old: int) -> list[LLMMessage]:
|
|
37
|
+
"""Build a conversation with `num_old` old search_replace messages
|
|
38
|
+
plus enough newer messages to exceed KEEP_RECENT."""
|
|
39
|
+
msgs: list[LLMMessage] = [
|
|
40
|
+
LLMMessage(role=Role.system, content="be helpful"),
|
|
41
|
+
LLMMessage(role=Role.user, content="please help"),
|
|
42
|
+
]
|
|
43
|
+
# search_replace calls with realistic 600+ byte args (exceeds SOFT_CAP=500)
|
|
44
|
+
search_block = " def run_tool(self, tool_name: str, args: dict) -> str:\n"
|
|
45
|
+
search_block += " # This is the old implementation that needs to be replaced\n"
|
|
46
|
+
search_block += " return ''\n"
|
|
47
|
+
replace_block = " def run_tool(self, tool_name: str, args: dict) -> str:\n"
|
|
48
|
+
replace_block += " plugin = self._load_plugin(tool_name)\n"
|
|
49
|
+
replace_block += " if plugin is None:\n"
|
|
50
|
+
replace_block += " raise ValueError(f'Unknown tool: {tool_name}')\n"
|
|
51
|
+
replace_block += " return plugin.execute(args)\n"
|
|
52
|
+
sr_args = json.dumps({
|
|
53
|
+
"file_path": "/data3/drydock_test_projects/403_tool_agent/tool_agent/cli.py",
|
|
54
|
+
"content": (
|
|
55
|
+
f"<<<<<<< SEARCH\n{search_block}=======\n{replace_block}>>>>>>> REPLACE"
|
|
56
|
+
),
|
|
57
|
+
})
|
|
58
|
+
assert len(sr_args) > 500, f"Test args must exceed SOFT_CAP_BYTES=500 to be meaningful, got {len(sr_args)}"
|
|
59
|
+
|
|
60
|
+
for i in range(num_old):
|
|
61
|
+
msgs.append(
|
|
62
|
+
LLMMessage(
|
|
63
|
+
role=Role.assistant,
|
|
64
|
+
content="",
|
|
65
|
+
tool_calls=[_make_tc("search_replace", sr_args, i)],
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
msgs.append(
|
|
69
|
+
LLMMessage(
|
|
70
|
+
role=Role.tool,
|
|
71
|
+
tool_call_id=f"tc_{i}",
|
|
72
|
+
name="search_replace",
|
|
73
|
+
content="Applied edit.",
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Add newer messages to exceed KEEP_RECENT (4) so truncation would trigger
|
|
78
|
+
# for write_file but should be skipped for search_replace.
|
|
79
|
+
for i in range(6):
|
|
80
|
+
msgs.append(
|
|
81
|
+
LLMMessage(
|
|
82
|
+
role=Role.assistant,
|
|
83
|
+
content="",
|
|
84
|
+
tool_calls=[_make_tc("read_file", '{"path":"/x"}', 100 + i)],
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
msgs.append(
|
|
88
|
+
LLMMessage(
|
|
89
|
+
role=Role.tool,
|
|
90
|
+
tool_call_id=f"tc_{100+i}",
|
|
91
|
+
name="read_file",
|
|
92
|
+
content="ok",
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
return msgs
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class TestSearchReplaceArgsNotTruncated:
|
|
99
|
+
def test_search_replace_args_preserved_after_truncation(self):
|
|
100
|
+
"""search_replace call args must not be replaced with {_truncated: true} stub."""
|
|
101
|
+
loop = build_test_agent_loop()
|
|
102
|
+
loop.messages.reset(_build_history_with_search_replace(num_old=10))
|
|
103
|
+
|
|
104
|
+
loop._truncate_old_tool_results()
|
|
105
|
+
|
|
106
|
+
for m in loop.messages:
|
|
107
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
108
|
+
continue
|
|
109
|
+
for tc in m.tool_calls:
|
|
110
|
+
if tc.function.name != "search_replace":
|
|
111
|
+
continue
|
|
112
|
+
args = tc.function.arguments or ""
|
|
113
|
+
parsed = json.loads(args)
|
|
114
|
+
assert not parsed.get("_truncated"), (
|
|
115
|
+
f"search_replace args were truncated — model will copy the stub "
|
|
116
|
+
f"and loop: {args[:120]}"
|
|
117
|
+
)
|
|
118
|
+
assert "content" in parsed, (
|
|
119
|
+
"search_replace args lost the 'content' field after truncation"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def test_write_file_still_truncated(self):
|
|
123
|
+
"""write_file args should still be truncated (they carry full file content)."""
|
|
124
|
+
msgs: list[LLMMessage] = [
|
|
125
|
+
LLMMessage(role=Role.system, content="be helpful"),
|
|
126
|
+
LLMMessage(role=Role.user, content="please help"),
|
|
127
|
+
]
|
|
128
|
+
big_args = json.dumps({
|
|
129
|
+
"file_path": "/data3/test/foo.py",
|
|
130
|
+
"content": "x" * 5000,
|
|
131
|
+
})
|
|
132
|
+
for i in range(10):
|
|
133
|
+
msgs.append(
|
|
134
|
+
LLMMessage(
|
|
135
|
+
role=Role.assistant,
|
|
136
|
+
content="",
|
|
137
|
+
tool_calls=[_make_tc("write_file", big_args, i)],
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
msgs.append(
|
|
141
|
+
LLMMessage(
|
|
142
|
+
role=Role.tool,
|
|
143
|
+
tool_call_id=f"tc_{i}",
|
|
144
|
+
name="write_file",
|
|
145
|
+
content=f"Wrote {i}",
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
for i in range(6):
|
|
149
|
+
msgs.append(
|
|
150
|
+
LLMMessage(
|
|
151
|
+
role=Role.assistant,
|
|
152
|
+
content="",
|
|
153
|
+
tool_calls=[_make_tc("read_file", '{"path":"/x"}', 100 + i)],
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
msgs.append(
|
|
157
|
+
LLMMessage(
|
|
158
|
+
role=Role.tool,
|
|
159
|
+
tool_call_id=f"tc_{100+i}",
|
|
160
|
+
name="read_file",
|
|
161
|
+
content="ok",
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
loop = build_test_agent_loop()
|
|
166
|
+
loop.messages.reset(msgs)
|
|
167
|
+
loop._truncate_old_tool_results()
|
|
168
|
+
|
|
169
|
+
truncated_count = 0
|
|
170
|
+
for m in loop.messages:
|
|
171
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
172
|
+
continue
|
|
173
|
+
for tc in m.tool_calls:
|
|
174
|
+
if tc.function.name != "write_file":
|
|
175
|
+
continue
|
|
176
|
+
args = tc.function.arguments or ""
|
|
177
|
+
parsed = json.loads(args)
|
|
178
|
+
if parsed.get("_truncated"):
|
|
179
|
+
truncated_count += 1
|
|
180
|
+
|
|
181
|
+
assert truncated_count > 0, "write_file args should still be truncated"
|
|
@@ -770,3 +770,25 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
770
770
|
- vLLM 400s: 0
|
|
771
771
|
- GH issues: 0 open
|
|
772
772
|
- Action this tick: committed fix (39515a1) — tool-aware escalation message for truncated args; search_replace now gets SEARCH/REPLACE recovery guidance instead of write_file advice; 3 new regression tests all pass; ships as v2.7.22 at next 0/6/12/18 auto-release tick
|
|
773
|
+
|
|
774
|
+
## 2026-04-29 23:15 UTC tick
|
|
775
|
+
- Stress: 384/1658 (current restart batch from step 216; harness alive, PID 459183, 6h25m uptime)
|
|
776
|
+
- Write rate: 40% last 100 prompts (down from 74% peak — traced to new bug)
|
|
777
|
+
- Admiral last 30 min: ~12 retry_after_error:search_replace fires + SKIP clusters
|
|
778
|
+
- vLLM 400s: 0
|
|
779
|
+
- GH issues: 0 open
|
|
780
|
+
- Action this tick: committed fix `a7eb3ec` — skip search_replace arg truncation in `_truncate_old_tool_results`. The 500-byte SOFT_CAP was hitting search_replace SEARCH/REPLACE blocks (600-800 bytes), replacing them with `{_truncated:true, file_path:...}` stubs. Model copied the stubs as new call args, triggering persistent retry_after_error loops. Only write_file (full file content) warrants truncation. Regression test added. Auto-release will ship at next 0/6/12/18 UTC tick.
|
|
781
|
+
|
|
782
|
+
## 2026-04-29 23:33 UTC tick
|
|
783
|
+
- Stress: 398/1658 (current restart batch from step 216, PID 459183 alive 6h58m; previous run died at step 422/1658 at 16:34 UTC and was restarted by babysitter)
|
|
784
|
+
- Write rate: 35% last 100 prompts (expected low for API-tool plugin prompts in steps 216-400 range — many features already implemented; peak 74% was during initial build phase)
|
|
785
|
+
- Admiral last 30 min: 2 interventions (struggle:none at 23:04 UTC source=opus, empty_after_tool:write_file at 23:28 UTC source=opus); skip-cluster stress-alert at 23:21; tui-recycle-requested at 23:28 — all known patterns, FORCE-RESET and recycle cycling correctly
|
|
786
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up 5 days; GH issues: 0 open
|
|
787
|
+
- Action this tick: no fix committed — system healthy; pending commit a7eb3ec (skip search_replace arg truncation) ships as v2.7.23 at 00:00 UTC auto-release (committed at 23:15 UTC, after the 18:00 UTC v2.7.22 release window)
|
|
788
|
+
|
|
789
|
+
## 2026-04-30 00:05 UTC tick
|
|
790
|
+
- Stress: 406/1658 (PID 459183 alive, 7h25m elapsed; cumulative done=160, skip=16, timeout=11, recycle=15)
|
|
791
|
+
- Write rate: 46% last 30 prompts (35% last 100; low expected for plugin-feature prompts where features already present in context)
|
|
792
|
+
- Admiral last 30 min: struggle:none firing repeatedly (model making 28-41 tool calls without writing on plugin prompts); one new empty_after_tool:ralph_repo_index (model hallucinated ralph_repo_index/ralph_file_summary tools — admiral injected recovery message, session continued); skip-cluster recycling working correctly; all patterns known
|
|
793
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up; GH issues: 0 open
|
|
794
|
+
- Action this tick: no fix committed — v2.7.22 installed; commit a7eb3ec (skip search_replace arg truncation) pending release at 00:00 CDT (~05:00 UTC); no new drydock bugs found; ralph_repo_index hallucination handled by existing FailedToolCall path and admiral recovery
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
522842
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.22 → drydock_cli-2.7.23}/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.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.22 → drydock_cli-2.7.23}/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.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.22 → drydock_cli-2.7.23}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|