drydock-cli 2.7.23__tar.gz → 2.7.25__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.25/.auto_release.lock +1 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/PKG-INFO +1 -1
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/agent_loop.py +17 -2
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/format.py +5 -3
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/search_replace.py +24 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/pyproject.toml +1 -1
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_loop_detection.py +23 -4
- drydock_cli-2.7.25/tests/tools/test_search_replace_malformed_block.py +131 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/trip_log.md +260 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/uv.lock +1 -1
- drydock_cli-2.7.23/.auto_release.lock +0 -1
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.gitignore +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.python-version +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.typos.toml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/AGENTS.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/Admiral.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/CLAUDE.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/LICENSE +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/NOTICE +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/PRD.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/action.yml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/docs/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/drydock_terms.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/flake.lock +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/flake.nix +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/nohup.out +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/config_base.toml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/config_best.toml +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/experimenter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/kernel.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/proposer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/research/results.tsv +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/resume.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/install.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/test/project/dummy +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/conftest.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/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.23 → drydock_cli-2.7.25}/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.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.23 → drydock_cli-2.7.25}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
691415
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.25
|
|
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
|
|
@@ -1152,10 +1152,13 @@ class AgentLoop:
|
|
|
1152
1152
|
# model a growing signal that nothing has changed. Preserve last_result
|
|
1153
1153
|
# so the message always shows the real bash/tool output, not a prior NOTE.
|
|
1154
1154
|
self._tool_call_history[sig] = (count + 1, last_result)
|
|
1155
|
+
# For read-only tools include the full cached content so the model
|
|
1156
|
+
# has the data it needs and doesn't retry just to see more output.
|
|
1157
|
+
result_preview = last_result if is_readonly else last_result[:200]
|
|
1155
1158
|
return (
|
|
1156
1159
|
f"NOTE: this exact call to `{tool_name}` has been made "
|
|
1157
1160
|
f"{count} times this session with identical arguments. "
|
|
1158
|
-
f"Last result
|
|
1161
|
+
f"Last result:\n{result_preview}\n\n"
|
|
1159
1162
|
f"The result will not change on a {count + 1}th attempt. "
|
|
1160
1163
|
f"Move on — call a DIFFERENT tool, use DIFFERENT arguments, "
|
|
1161
1164
|
f"or end your turn with a text summary so the user can "
|
|
@@ -1227,7 +1230,12 @@ class AgentLoop:
|
|
|
1227
1230
|
f"{tool_call.tool_name}:{args_str}".encode()
|
|
1228
1231
|
).hexdigest()
|
|
1229
1232
|
count, _ = self._tool_call_history.get(sig, (0, ""))
|
|
1230
|
-
|
|
1233
|
+
# Store more content for read-only tools so the NOTE advisory
|
|
1234
|
+
# can include enough context for the model to act on it.
|
|
1235
|
+
tool_name = tool_call.tool_name
|
|
1236
|
+
is_readonly = tool_name in ("grep", "read_file", "glob", "ls")
|
|
1237
|
+
store_limit = 2000 if is_readonly else 500
|
|
1238
|
+
self._tool_call_history[sig] = (count + 1, result_text[:store_limit])
|
|
1231
1239
|
|
|
1232
1240
|
async def _process_one_tool_call(
|
|
1233
1241
|
self, tool_call: ResolvedToolCall
|
|
@@ -1523,6 +1531,13 @@ class AgentLoop:
|
|
|
1523
1531
|
self.format_handler.create_failed_tool_response_message(failed, error_msg)
|
|
1524
1532
|
)
|
|
1525
1533
|
self.stats.tool_calls_failed += 1
|
|
1534
|
+
# Inject a [SYSTEM: ...] note (the format admiral uses) so the model
|
|
1535
|
+
# is more likely to break out of the empty-response loop that often
|
|
1536
|
+
# follows a suppressed hallucinated-tool call.
|
|
1537
|
+
self._inject_system_note(
|
|
1538
|
+
f"'{failed.tool_name}' does not exist — do NOT call it again. "
|
|
1539
|
+
"Call glob, grep, or read_file NOW to make progress."
|
|
1540
|
+
)
|
|
1526
1541
|
|
|
1527
1542
|
async def _handle_tool_calls(
|
|
1528
1543
|
self, resolved: ResolvedMessage
|
|
@@ -368,9 +368,11 @@ class APIToolFormatHandler:
|
|
|
368
368
|
tool_name=parsed_call.tool_name,
|
|
369
369
|
call_id=parsed_call.call_id,
|
|
370
370
|
error=(
|
|
371
|
-
f"'{parsed_call.tool_name}'
|
|
372
|
-
f"Use
|
|
373
|
-
f"
|
|
371
|
+
f"'{parsed_call.tool_name}' does not exist — stop calling it. "
|
|
372
|
+
f"Use glob/grep/read_file to explore the project instead. "
|
|
373
|
+
f"Available tools: "
|
|
374
|
+
f"{', '.join(sorted(active_tools.keys())[:8])}. "
|
|
375
|
+
f"Call one of these NOW."
|
|
374
376
|
),
|
|
375
377
|
)
|
|
376
378
|
)
|
|
@@ -236,6 +236,30 @@ class SearchReplace(
|
|
|
236
236
|
# (would be catastrophic data loss). See CLAUDE.md learning
|
|
237
237
|
# #39: drydock nuked a 5171-char cli.py with a 16-line fragment.
|
|
238
238
|
raw_content = err_msg[len("NO_BLOCKS:"):]
|
|
239
|
+
# Guard: if the raw content contains SEARCH/REPLACE markers, it's
|
|
240
|
+
# a malformed block (e.g. missing >>>>>>> REPLACE closer). Writing
|
|
241
|
+
# it verbatim would corrupt the file with conflict markers, causing
|
|
242
|
+
# a retry loop. Return an error instead.
|
|
243
|
+
if "<<<<<<<" in raw_content or ">>>>>>>" in raw_content:
|
|
244
|
+
yield SearchReplaceResult(
|
|
245
|
+
file=args.file_path.strip() or "(unknown)",
|
|
246
|
+
blocks_applied=0,
|
|
247
|
+
lines_changed=0,
|
|
248
|
+
warnings=[],
|
|
249
|
+
content=(
|
|
250
|
+
"PARSE ERROR: your search_replace content looks like a "
|
|
251
|
+
"SEARCH/REPLACE block but it could not be parsed — likely "
|
|
252
|
+
"the >>>>>>> REPLACE closer is missing or the markers are "
|
|
253
|
+
"malformed. Fix the format:\n"
|
|
254
|
+
"<<<<<<< SEARCH\n"
|
|
255
|
+
"[exact text to find]\n"
|
|
256
|
+
"=======\n"
|
|
257
|
+
"[replacement text]\n"
|
|
258
|
+
">>>>>>> REPLACE\n"
|
|
259
|
+
"Do NOT send conflict markers as literal file content."
|
|
260
|
+
),
|
|
261
|
+
)
|
|
262
|
+
return
|
|
239
263
|
file_path_str = args.file_path.strip()
|
|
240
264
|
if file_path_str and len(raw_content) > 20:
|
|
241
265
|
target = Path(file_path_str).expanduser()
|
|
@@ -95,13 +95,19 @@ class TestCircuitBreaker:
|
|
|
95
95
|
al._circuit_breaker_record(tc, "output ok")
|
|
96
96
|
assert al._circuit_breaker_check(tc) is None
|
|
97
97
|
|
|
98
|
-
def
|
|
99
|
-
"""Read-only
|
|
98
|
+
def test_readonly_note_includes_full_result(self):
|
|
99
|
+
"""Read-only tools that repeat 5+ times get a NOTE that includes the
|
|
100
|
+
full cached result so the model can act on it without retrying."""
|
|
100
101
|
al = _make_agent()
|
|
101
102
|
tc = SimpleNamespace(tool_name="grep", args_dict={"pattern":"foo"})
|
|
103
|
+
content = "match.py:10:foo"
|
|
102
104
|
for _ in range(10):
|
|
103
|
-
al._circuit_breaker_record(tc,
|
|
104
|
-
|
|
105
|
+
al._circuit_breaker_record(tc, content)
|
|
106
|
+
result = al._circuit_breaker_check(tc)
|
|
107
|
+
assert result is not None
|
|
108
|
+
# The full cached content must appear in the NOTE (not just 200 chars)
|
|
109
|
+
assert content in result
|
|
110
|
+
assert "NOTE:" in result
|
|
105
111
|
|
|
106
112
|
def test_disabled_returns_none_even_for_failed(self):
|
|
107
113
|
"""CB disabled — returns None even for commands that would have been blocked."""
|
|
@@ -148,6 +154,19 @@ class TestCircuitBreaker:
|
|
|
148
154
|
al._circuit_breaker_record(tc, "output ok")
|
|
149
155
|
assert al._circuit_breaker_check(tc) is None
|
|
150
156
|
|
|
157
|
+
def test_read_file_note_stores_2000_chars(self):
|
|
158
|
+
"""read_file NOTE stores up to 2000 chars of content so large files are
|
|
159
|
+
visible in the advisory — not truncated to 500 like bash results."""
|
|
160
|
+
al = _make_agent()
|
|
161
|
+
tc = SimpleNamespace(tool_name="read_file", args_dict={"path": "foo.py"})
|
|
162
|
+
long_content = "x" * 1800 # within 2000-char limit
|
|
163
|
+
for _ in range(6):
|
|
164
|
+
al._circuit_breaker_record(tc, long_content)
|
|
165
|
+
result = al._circuit_breaker_check(tc)
|
|
166
|
+
assert result is not None
|
|
167
|
+
# The full 1800-char content must be present in the NOTE
|
|
168
|
+
assert long_content in result
|
|
169
|
+
|
|
151
170
|
|
|
152
171
|
# ============================================================================
|
|
153
172
|
# Check 1: Exact Same Tool Call Repeated (REPEAT_WARNING_THRESHOLD)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"""Regression test: search_replace must not write conflict markers to files.
|
|
2
|
+
|
|
3
|
+
Observed in stress run 2026-04-30: when the model sends a truncated
|
|
4
|
+
SEARCH/REPLACE block (e.g. missing >>>>>>> REPLACE closer), the regex fails
|
|
5
|
+
to parse it, and the NO_BLOCKS fallback wrote the raw content — including
|
|
6
|
+
'<<<<<<< SEARCH' markers — directly to the file. On the next turn the model
|
|
7
|
+
found markers in the file and entered a retry loop trying to find original
|
|
8
|
+
code that no longer existed.
|
|
9
|
+
|
|
10
|
+
Fix: in NO_BLOCKS path, detect SEARCH/REPLACE marker characters in raw_content
|
|
11
|
+
and return an error instead of writing the content to disk.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from drydock.core.tools.base import BaseToolState, InvokeContext
|
|
20
|
+
from drydock.core.tools.builtins.search_replace import (
|
|
21
|
+
SearchReplace,
|
|
22
|
+
SearchReplaceArgs,
|
|
23
|
+
SearchReplaceConfig,
|
|
24
|
+
SearchReplaceResult,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.fixture
|
|
29
|
+
def tool():
|
|
30
|
+
return SearchReplace(SearchReplaceConfig(), BaseToolState())
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@pytest.fixture
|
|
34
|
+
def ctx() -> InvokeContext:
|
|
35
|
+
return InvokeContext(tool_call_id="tc_1", read_file_state={})
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def _call(tool, args: SearchReplaceArgs, ctx: InvokeContext) -> SearchReplaceResult:
|
|
39
|
+
results = []
|
|
40
|
+
async for r in tool.run(args, ctx):
|
|
41
|
+
if isinstance(r, SearchReplaceResult):
|
|
42
|
+
results.append(r)
|
|
43
|
+
assert results, "Tool produced no output"
|
|
44
|
+
return results[-1]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pytest.mark.asyncio
|
|
48
|
+
async def test_truncated_block_no_replace_closer(tmp_path: Path, tool, ctx):
|
|
49
|
+
"""Malformed block missing >>>>>>> REPLACE must NOT be written to disk."""
|
|
50
|
+
target = tmp_path / "cli.py"
|
|
51
|
+
target.write_text("def main():\n print('hello')\n")
|
|
52
|
+
|
|
53
|
+
# Simulate: model sends SEARCH/REPLACE without the closing >>>>>>> REPLACE
|
|
54
|
+
malformed = (
|
|
55
|
+
"<<<<<<< SEARCH\n"
|
|
56
|
+
"def main():\n"
|
|
57
|
+
" print('hello')\n"
|
|
58
|
+
"=======\n"
|
|
59
|
+
"def main():\n"
|
|
60
|
+
" print('world')\n"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
ctx.read_file_state[str(target)] = {
|
|
64
|
+
"content": target.read_text(),
|
|
65
|
+
"timestamp": target.stat().st_mtime_ns,
|
|
66
|
+
"offset": 0,
|
|
67
|
+
"limit": None,
|
|
68
|
+
}
|
|
69
|
+
result = await _call(
|
|
70
|
+
tool,
|
|
71
|
+
SearchReplaceArgs(file_path=str(target), content=malformed),
|
|
72
|
+
ctx,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Must not write anything — the malformed block is rejected
|
|
76
|
+
assert result.blocks_applied == 0
|
|
77
|
+
# The file must be unchanged regardless of the error path taken
|
|
78
|
+
assert target.read_text() == "def main():\n print('hello')\n"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@pytest.mark.asyncio
|
|
82
|
+
async def test_content_with_only_open_marker(tmp_path: Path, tool, ctx):
|
|
83
|
+
"""Content containing only '<<<<<<< SEARCH' (no equals/close) must not write."""
|
|
84
|
+
target = tmp_path / "server.py"
|
|
85
|
+
target.write_text("class Server:\n pass\n")
|
|
86
|
+
|
|
87
|
+
ctx.read_file_state[str(target)] = {
|
|
88
|
+
"content": target.read_text(),
|
|
89
|
+
"timestamp": target.stat().st_mtime_ns,
|
|
90
|
+
"offset": 0,
|
|
91
|
+
"limit": None,
|
|
92
|
+
}
|
|
93
|
+
result = await _call(
|
|
94
|
+
tool,
|
|
95
|
+
SearchReplaceArgs(file_path=str(target), content="<<<<<<< SEARCH\nclass Server:\n pass\n"),
|
|
96
|
+
ctx,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
assert result.blocks_applied == 0
|
|
100
|
+
assert target.read_text() == "class Server:\n pass\n"
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@pytest.mark.asyncio
|
|
104
|
+
async def test_valid_block_still_works(tmp_path: Path, tool, ctx):
|
|
105
|
+
"""A well-formed SEARCH/REPLACE block must still apply correctly."""
|
|
106
|
+
target = tmp_path / "app.py"
|
|
107
|
+
target.write_text("def greet():\n return 'hello'\n")
|
|
108
|
+
|
|
109
|
+
ctx.read_file_state[str(target)] = {
|
|
110
|
+
"content": target.read_text(),
|
|
111
|
+
"timestamp": target.stat().st_mtime_ns,
|
|
112
|
+
"offset": 0,
|
|
113
|
+
"limit": None,
|
|
114
|
+
}
|
|
115
|
+
valid_block = (
|
|
116
|
+
"<<<<<<< SEARCH\n"
|
|
117
|
+
"def greet():\n"
|
|
118
|
+
" return 'hello'\n"
|
|
119
|
+
"=======\n"
|
|
120
|
+
"def greet():\n"
|
|
121
|
+
" return 'world'\n"
|
|
122
|
+
">>>>>>> REPLACE\n"
|
|
123
|
+
)
|
|
124
|
+
result = await _call(
|
|
125
|
+
tool,
|
|
126
|
+
SearchReplaceArgs(file_path=str(target), content=valid_block),
|
|
127
|
+
ctx,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
assert result.blocks_applied == 1
|
|
131
|
+
assert "world" in target.read_text()
|
|
@@ -3,6 +3,97 @@
|
|
|
3
3
|
Autonomous Claude Code review ticks while the user is away. Each tick appended
|
|
4
4
|
chronologically. Cron-driven every 30 min from `/data3/drydock/scripts/autonomous_review.sh`.
|
|
5
5
|
|
|
6
|
+
## 2026-04-30 14:04 UTC tick
|
|
7
|
+
- Stress: 1228/1658 (PID 599513, alive 6h57m, resumed_v2 log; write rate 19% last 100 — lower than peak 74% but prompt mix shifted to "add NLP/barcode tool" prompts that produce fewer writes per turn, not a regression)
|
|
8
|
+
- vLLM 400s: 0
|
|
9
|
+
- GH issues: 0 open
|
|
10
|
+
- Admiral last 30 min: 2 empty_after_tool:ralph_repo_index fires (expected — fix 674b76c committed but not yet released; auto-release at 18:00 UTC will ship v2.7.25); raw-markdown-leakage 91% (confirmed false positive by previous ticks — Python comments `#` in tool output match heading regex, not TUI rendering failure; raw_md=0 in current PTY window); no new patterns
|
|
11
|
+
- Action this tick: no fix committed — system healthy; 674b76c pending auto-release; no new drydock bugs found
|
|
12
|
+
|
|
13
|
+
## 2026-04-30 13:37 UTC tick
|
|
14
|
+
- Stress: 622/1658 (PID 599513, alive 6h27m, v10_restart log; babysitter restarted at 07:03 from step 357 after prior PID 459183 died)
|
|
15
|
+
- Write rate: 42% last 100 prompts (44% overall this restart; variable 34-56% by 50-prompt chunk — natural for "Add storage backend: X" prompts that produce 0 writes under context pressure, 1 write after session reset)
|
|
16
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index firing repeatedly (9+ times 11:30–13:26 UTC); stall retry loop exhausts 3 retries each time then admiral handles recovery; raw-markdown-leakage alert at 63-66% (consistent across all 244 prompts in this run, not a new regression — PTY log contains markdown-like patterns in code outputs)
|
|
17
|
+
- vLLM 400s: 0
|
|
18
|
+
- GH issues: 0 open
|
|
19
|
+
- Action this tick: no fix committed — system healthy, repeated empty_after_tool:ralph_repo_index is model behavior the admiral is managing (already improved by 674b76c last tick), raw-markdown-leakage is advisory noise at consistent baseline level
|
|
20
|
+
|
|
21
|
+
## 2026-04-30 13:04 UTC tick
|
|
22
|
+
- Stress: 585/1658 (PID 599513, current log v10_restart, 233 entries in this run; stress progress since restart at step 357 → now ~590)
|
|
23
|
+
- Write rate: 44% last 100 prompts (down from 74% sustained; "Add storage backend: samba/ftp" prompts producing few writes, model pattern-matching not coding)
|
|
24
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index fired 9 times (11:50–12:59); raw-markdown-leakage 66% (false positive: Python code in tool outputs contains markdown-like patterns; not a rendering regression); loop:bash and loop:search_replace each 1 fire
|
|
25
|
+
- vLLM 400s: 0
|
|
26
|
+
- GH issues: 0 open
|
|
27
|
+
- Action this tick: committed fix (674b76c) — _silence_suppressed_failures now injects [SYSTEM:] note immediately after suppressed hallucinated-tool message. The <tool_error> tag alone wasn't breaking the empty-response loop; [SYSTEM: ...] format is the one Gemma 4 responds to (same as admiral). Will ship at next 0/6/12/18 UTC auto-release.
|
|
28
|
+
|
|
29
|
+
## 2026-04-30 12:05 UTC tick
|
|
30
|
+
- Stress: 680/1658 (PID 599513 alive, --resume-from-step 357 at 07:03 UTC, making steady progress)
|
|
31
|
+
- Write rate: 50% last 50 prompts (up from 28% at 10:30 tick; "API: JSON-RPC/SSE" prompts produce actual file writes)
|
|
32
|
+
- Admiral last 30 min: struggle:search_replace (4 fires at 11:45-11:48, each ~60s apart matching DEDUP_WINDOW_SEC — model stuck for 3min, working as designed); loop:search_replace (1 fire); empty_after_tool:ralph_repo_index (multiple, continuing expected model behavior post-v2.7.24); empty_after_tool:web_search (1 fire, one-off); raw-markdown-leakage 66% (same false-positive pattern from Python code comments confirmed at 03:40 UTC tick); retry_after_error:write_file:tool/temp_ (bad path from model, 1 fire)
|
|
33
|
+
- vLLM 400s: 0
|
|
34
|
+
- GH issues: 0 open
|
|
35
|
+
- Services: llm_balancer PID 24354 on :8001 healthy (verified /v1/models forwarding to gemma4), vLLM gemma4 on :8000 healthy, admiral_probe PID 4075121 on :8878 healthy; latest tag v2.7.24; no uncommitted changes
|
|
36
|
+
- Action this tick: no new actionable drydock bugs found. All patterns are known categories. Struggle dedup timing (60s window, fires every ~60s during prolonged stall) is expected design behavior. No commit.
|
|
37
|
+
|
|
38
|
+
## 2026-04-30 11:35 UTC tick
|
|
39
|
+
- Stress: 506/1658 (PID 599513, --resume-from-step 357, running 4h27m; harness alive and making progress)
|
|
40
|
+
- Write rate: 48% last 100 prompts (up from 28% at 10:30 tick; current prompts are "Add a --X CLI flag" type — lower write rate expected as model often reports flag already exists or writes no new file)
|
|
41
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (multiple fires, source=opus; v2.7.24 fix shipped but model keeps hallucinating tool — model behavior, not a drydock bug); struggle:write_file; loop:bash (IndexError retry); raw-markdown-leakage advisory at 21% (harness scanning PTY log, advisory only); SKIP cluster: 3 TUI-recycles triggered by consecutive SKIPs
|
|
42
|
+
- vLLM 400s: 0
|
|
43
|
+
- GH issues: 0 open
|
|
44
|
+
- Services: llm_balancer and vLLM gemma4 healthy; no port squatting detected
|
|
45
|
+
- Action this tick: no new drydock bugs found. ralph_repo_index loops are model behavior — suppression + directive already in v2.7.24. Write rate drop from 74% to 48% is prompt-class driven (incremental flag additions vs full builds), not a regression. No code changes committed.
|
|
46
|
+
|
|
47
|
+
## 2026-04-30 10:30 UTC tick
|
|
48
|
+
- Stress: 441/1658 (PID 599513, --resume-from-step 357, running 3h27m; harness alive and making progress)
|
|
49
|
+
- Write rate: 28% last 83 prompts (down from 47% at 07:03 tick; high SKIP rate of 18% — 15 SKIPs out of 83 prompts — due to TUI not accepting prompts during long LLM responses; the RECYCLE-TUI mechanism triggers every ~36-39 prompts)
|
|
50
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (multiple fires, fix in 5bbbb23 not yet deployed — ships at 12 UTC as v2.7.24); retry_after_error:read_file (circuit breaker firing, fix in f611100 not yet deployed); struggle:search_replace; loop:write_file — all existing categories
|
|
51
|
+
- vLLM 400s: 0
|
|
52
|
+
- GH issues: 0 open
|
|
53
|
+
- Services: llm_balancer PID 1230765 on :8001 healthy, vLLM gemma4 on :8000 healthy, admiral_probe PID 2251231 on :8878 healthy
|
|
54
|
+
- Latest tag: v2.7.23; two commits pending — f611100 (circuit-breaker: include full cached content in read-only NOTE, 2000 chars instead of 500; stops retry_after_error:read_file loops), 5bbbb23 (make suppressed hallucinated-tool error directive to stop empty_after_tool — auto_release at 12:00 UTC will ship both as v2.7.24
|
|
55
|
+
- Action this tick: no new bugs found. Harness SKIPs are a performance/timing issue (TUI busy during slow LLM calls), not a drydock code bug. Two solid fixes queue to ship at 12:00 UTC. No code changes committed.
|
|
56
|
+
|
|
57
|
+
## 2026-04-30 07:03 UTC tick
|
|
58
|
+
- Stress: 633/1658 at restart (PID 459183 → killed, new PID 599513 resuming step 358 "keyword_extract")
|
|
59
|
+
- Write rate: 47% last 100 prompts (down from 74% peak; "Add storage backend" prompts for cloud targets drive 0-write sessions)
|
|
60
|
+
- Admiral last 30 min: retry_after_error:write_file (3 fires — model copying truncated args from history, escalation messaging present but insufficient), loop:search_replace (5 fires), empty_after_tool:ralph_repo_index/web_search, retry_after_error:search_replace — all existing categories
|
|
61
|
+
- vLLM 400s: 0
|
|
62
|
+
- GH issues: 0 open
|
|
63
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy
|
|
64
|
+
- Action this tick: harness PID 459183 was stuck for 5+ hours with no log progress (last update 02:00 UTC); stress_watcher had empty log and was not running. Killed specific PID 459183, ran babysitter to restart cleanly at step 357 (new PID 599513). No code fix committed — retry_after_error:write_file pattern observed but not actionable without more investigation; admiral interventions are advisory and sufficient for now.
|
|
65
|
+
|
|
66
|
+
## 2026-04-30 06:01 UTC tick
|
|
67
|
+
- Stress: 621/1658 (PID 459183, alive 13h25m, "Add storage backend: X" prompts 600-621)
|
|
68
|
+
- Write rate: 48% last 100 prompts (choppy: chunks range 28-72%, variance is model behavior)
|
|
69
|
+
- SKIP/TIMEOUT count: 59/621 = 9.5%, within expected range
|
|
70
|
+
- Admiral last 30 min: `empty_after_tool:ralph_repo_index` dominates (20+ fires — still v2.7.23 installed; fix in commit 5bbbb23 pending release); `struggle:search_replace` (1 fire), `loop:ralph_repo_index` (3 fires); `empty_after_tool:web_search` (2 fires, isolated, not a new pattern)
|
|
71
|
+
- vLLM 400s: 0
|
|
72
|
+
- GH issues: 0 open
|
|
73
|
+
- Latest tag: v2.7.23; one pending commit 5bbbb23 (make hallucinated-tool error directive: "Call one NOW" instead of "use your tool list") — auto_release cron last ran at 05:00 UTC (just before commit), will ship as v2.7.24 at 11:00 UTC today
|
|
74
|
+
- Action this tick: no new bugs found. Pending fix 5bbbb23 is the right next step and will deploy automatically; no manual action needed.
|
|
75
|
+
|
|
76
|
+
## 2026-04-30 04:10 UTC tick
|
|
77
|
+
- Stress: 495/1658 (PID 459183, --resume-from-step 216; +47 prompts since last tick)
|
|
78
|
+
- Write rate: 44% last 100 prompts (unchanged; "Add storage backend: X" prompts for cloud/network targets like s3/gcs/azure-blob get 0 writes — model behavior, not a bug)
|
|
79
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (5 fires), loop:bash (2 fires), struggle:search_replace — all existing categories, no new patterns
|
|
80
|
+
- vLLM 400s: 0
|
|
81
|
+
- GH issues: 0 open
|
|
82
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy, admiral_probe on :8878 healthy; v2.7.23 latest tag; no uncommitted changes
|
|
83
|
+
- Action this tick: no fix committed. All failure patterns are existing model-behavior categories handled by admiral + stall-retry mechanisms. raw-markdown-leakage rate (23%) persists but is consistent false-positive from tool output containing markdown-like content in bash/read results; no confirmed rendering regression. System healthy.
|
|
84
|
+
|
|
85
|
+
## 2026-04-30 02:34 UTC tick
|
|
86
|
+
- Stress: 448/1658 (new run, PID 459183, ~10h elapsed, resuming from step 216)
|
|
87
|
+
- Write rate: 44% last 100 prompts (consistent with prior runs at this prompt section — "Plugin feature:" prompts have lower write density than feature-build prompts)
|
|
88
|
+
- SKIP rate: 13% (31/232), within expected range; RECYCLE-TUI handling wedged sessions
|
|
89
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (5 fires — model produces empty response after suppressed hallucinated tool call), retry_after_error:search_replace (2 fires), loop:bash (2 fires), struggle patterns — all existing categories
|
|
90
|
+
- vLLM 400s: 0
|
|
91
|
+
- GH issues: 0 open
|
|
92
|
+
- Services: llm_balancer PID 24354 on :8001 healthy (resume.md had stale PID 1230765 but real PID confirmed), vLLM gemma4 on :8000 healthy; admiral_probe on :8878 healthy
|
|
93
|
+
- Latest release: v2.7.23 (two recent commits: fix(hallucinated-tools) cc9e474 and fix(truncate-args) a7eb3ec, both shipped)
|
|
94
|
+
- raw-markdown-leakage stress alert at 01:58 UTC: 9/34 rec-checks fired (26%, 128 raw patterns); investigated — likely false positives from model outputting markdown syntax in bash tool output or code context (prior ticks saw same pattern at 5-69% with no confirmed rendering regression); no fix warranted
|
|
95
|
+
- Action this tick: no fix committed. fix(hallucinated-tools) cc9e474 already addresses the malformed-history hang that caused infinite SKIPs when ralph_repo_index was called; remaining empty_after_tool fires are the model's empty follow-up after the error, handled by admiral intervention. All systems healthy.
|
|
96
|
+
|
|
6
97
|
## 2026-04-29 08:34 UTC tick
|
|
7
98
|
- Stress: 229/1658 (PID 270529, new run started ~Apr 29 03:26 UTC; progressing)
|
|
8
99
|
- Write rate: 19% (last 100 prompts) — early in sequence; previous run was at 73% at prompts 1550-1650, not a fair comparison; new run at prompt 225 already has 52 writes vs 0 in prev run at same point, so actually running better
|
|
@@ -792,3 +883,172 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
792
883
|
- 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
884
|
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up; GH issues: 0 open
|
|
794
885
|
- 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
|
|
886
|
+
|
|
887
|
+
## 2026-04-30 01:05 UTC tick
|
|
888
|
+
- Stress: 419/1658 (PID 459183 alive, 8h26m elapsed; restarted from step 216; harness in new log /tmp/stress_2000_v10_restart_1777480477.log)
|
|
889
|
+
- Write rate: 36% last 100 prompts (down from 74% peak; expected low for plugin-feature prompts in steps 216-420 range where features already exist in context; 23/203 SKIPs = 11% skip rate from ralph_repo_index hallucination hang)
|
|
890
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index firing (3 times since midnight UTC) — cc9e474 fix not yet deployed was root cause of TUI hangs → SKIP clusters; loop:bash and struggle:none patterns also active (known model-behavior, admiral handles correctly)
|
|
891
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; GH issues: 0 open
|
|
892
|
+
- Action this tick: triggered early release of v2.7.23 (2 pending commits: cc9e474 hallucinated-tools early-return guard fix + a7eb3ec skip search_replace arg truncation); installed into user env; next recycle will pick up the fix and reduce SKIP cluster rate
|
|
893
|
+
|
|
894
|
+
## 2026-04-30 02:30 UTC tick
|
|
895
|
+
- Stress: 432/1658 (PID 459183 alive, 8h56m uptime; restarted batch from step 216; cumulative done=168, skip=25, timeout=11, recycle=19 as of 01:00 UTC babysitter)
|
|
896
|
+
- Write rate: 40% last 100 prompts (expected low; "Plugin feature: X" prompts in steps 216-432 range hit already-built features; 29 total SKIPs, concentrated in steps 396-420 cluster; last 12 prompts (421-432) show 0 SKIPs — recovery working)
|
|
897
|
+
- Admiral last 30 min: no new patterns observed; SKIP cluster in steps 396-420 consistent with ralph_repo_index hallucination hang (fixed in v2.7.23 cc9e474); steps post-420 clean
|
|
898
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up; GH issues: 0 open
|
|
899
|
+
- Action this tick: no fix committed — v2.7.23 installed and deployed; skip cluster clearing post step 420; no new drydock bugs found; system healthy
|
|
900
|
+
|
|
901
|
+
## 2026-04-30 09:25 UTC tick
|
|
902
|
+
- Stress: 441/1658 (PID 459183 alive, 9h26m elapsed; harness log /tmp/stress_2000_v10_restart_1777480477.log; cumulative done=185, skip=28, timeout=11, recycle=24 as of 02:00 UTC babysitter)
|
|
903
|
+
- Write rate: 43% last 100 prompts (lower than 74% peak; "Plugin feature:" prompts in 216-441 range hitting features already built; SKIPs are 28 total = 7% skip rate; recycles at 24 = ~1 per 18 prompts; harness managing via TUI recycle strategy)
|
|
904
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index still firing post-v2.7.23 (cc9e474 fixed the TUI hang but model still calls hallucinated tool and produces empty follow-up; inline stall retries handle it; admiral advisory interventions redirecting model); loop:bash, struggle:none, retry_after_error:search_replace also active — all known patterns; raw-markdown-leakage detected at 01:58 (26% of rec-checks showing unrendered markdown in TUI terminal output; non-critical cosmetic issue, TUI still functional)
|
|
905
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker (gemma4) on :8000 healthy; GH issues: 0 open
|
|
906
|
+
- Action this tick: no fix committed — investigated TUI SKIP cluster (root: model entering states where TUI processes but does not respond, harness recycles correctly; no drydock source bug identified); raw-markdown-leakage is TUI rendering cosmetic issue (not blocking functional work); all infrastructure healthy; no actionable drydock bug found this tick
|
|
907
|
+
|
|
908
|
+
## 2026-04-30 03:05 UTC tick
|
|
909
|
+
- Stress: 454/1658 (harness PID 459183, alive, 10h26m elapsed)
|
|
910
|
+
- Write rate: 19% last 99 prompts (down from 74% previously)
|
|
911
|
+
- Admiral last 30 min: multiple skip-cluster and retry-spike alerts; 28 TUI recycles total
|
|
912
|
+
- vLLM 400s: 0
|
|
913
|
+
- GH issues: 0 open
|
|
914
|
+
- Action this tick: investigated write rate drop — skip rate accelerating since idx~380; sessions accumulate ~291MB messages.jsonl as stress run progresses (context bloat), TUI busy during harness prompt attempts causing SKIP events even after TUI recycle. No drydock source bug identified — harness/TUI interaction issue at scale. No commit.
|
|
915
|
+
|
|
916
|
+
## 2026-04-30 03:40 UTC tick
|
|
917
|
+
- Stress: 466/1658 (PID 459183, alive, resumed from step 216 after babysitter restart)
|
|
918
|
+
- Write rate: 47% last 100 prompts
|
|
919
|
+
- Admiral last 30 min: ralph_repo_index hallucinations (suppressed, known), raw-markdown-leakage alert (false positive — Python comments like `# Initialize backend` matching heading regex, not a rendering bug)
|
|
920
|
+
- vLLM 400s: 0
|
|
921
|
+
- GH issues: 0 open
|
|
922
|
+
- Action this tick: investigated markdown leakage alert — confirmed false positive from Python code comments in TUI output. Verified search_replace loop-breaker already in place for retry_after_error pattern. Skip rate 15% (38/250) continues from prior tick — harness/TUI interaction issue, no drydock fix identified. No commit.
|
|
923
|
+
|
|
924
|
+
## 2026-04-30 04:32 UTC tick
|
|
925
|
+
- Stress: 531/1658 (PID 459183, alive 11h57m; resumed from step 216 after babysitter restart at 16:34 Apr 29)
|
|
926
|
+
- Write rate: 44% last 100 prompts (up from 19% at 03:05 tick; recovery after skip cluster at 03:15-03:45)
|
|
927
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (6 fires, suppressed per normal flow); skip-cluster and retry-spike alerts during 03:15-03:45 window (resolved by harness TUI recycles); all patterns known
|
|
928
|
+
- vLLM 400s: 0; balancer PID 24354 healthy; vLLM Docker healthy
|
|
929
|
+
- GH issues: 0 open
|
|
930
|
+
- Action this tick: investigated empty_after_tool:ralph_repo_index — stall debug log shows model is producing tool_calls (content_len=0, has_tool_calls=True) after suppressed ralph_repo_index, which is productive behavior; stall retry not needed (tool_calls=True passes the stall check). Skip clusters at 03:15-03:45 recovered after harness recycles. No drydock source bug identified; no commit.
|
|
931
|
+
|
|
932
|
+
## 2026-04-30 05:05 UTC tick
|
|
933
|
+
- Stress: 233/1658 (new run, babysitter restarted; old run reached 680/1658)
|
|
934
|
+
- Write rate: 19% (down from 74%; high SKIP rate ~30% due to context bloat on long prompts)
|
|
935
|
+
- Admiral last 30 min: 20+ empty_after_tool:ralph_repo_index fires (most common pattern)
|
|
936
|
+
- vLLM 400s: 0
|
|
937
|
+
- GH issues: 0 open
|
|
938
|
+
- Action this tick: committed fix(hallucinated-tools): made suppressed-failure error for IGNORE_TOOLS (ralph_repo_index etc.) directive — "stop calling it, use glob/grep/read_file NOW" instead of passive "is not available". Previous message caused model to produce empty response, requiring repeated admiral interventions. llm_balancer healthy (PID rotated to 24354 via keepalive cron). No new GitHub issues.
|
|
939
|
+
|
|
940
|
+
## 2026-04-30 05:31 UTC tick
|
|
941
|
+
- Stress: 600/1658 (PID 459183 alive, 13h uptime; resumed from step 216 after babysitter restart at 16:34 Apr 29; cumulative done=342, skip=42, timeout=11, recycle=~33 as of last PROGRESS)
|
|
942
|
+
- Write rate: 45% last 100 prompts (stable; "Add storage backend: X" prompts after session resets produce 0 writes because model has no project context on fresh start — expected pattern; writes recover after model reads project on 4th+ prompt per session)
|
|
943
|
+
- Admiral last 30 min: empty stall retries for fresh-session "Add storage backend: X" prompts (model sends empty response → drydock stall retry → user_cancellation after MAX_STALL_RETRIES; harness records as +2 msgs, 0 writes; not a drydock bug — model behavior on context-free prompts)
|
|
944
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
945
|
+
- GH issues: 0 open
|
|
946
|
+
- Action this tick: no fix committed — system healthy; 1 commit (5bbbb23 hallucinated-tools directive fix) pending auto_release at 06:00 UTC; write rate stable at 45%; investigated 0-write pattern after session resets and confirmed it is expected model behavior (no project context on fresh session), not a drydock bug
|
|
947
|
+
|
|
948
|
+
## 2026-04-30 06:32 UTC tick
|
|
949
|
+
- Stress: 680/1658 (PID 459183 alive ~14h; consecutive SKIPs at 677-679 due to TUI wedge after API-prompt batch, harness force-reset and continued)
|
|
950
|
+
- Write rate: 32% last 100 prompts (lower than prior ticks; prompts 663-675 were API-variant prompts returning +0 writes because tool_agent already has those endpoints — expected pattern after multi-session accumulation)
|
|
951
|
+
- Admiral last 30 min: loop:search_replace (4 fires), retry_after_error:write_file/truncated-history (3 fires) — both known existing patterns; empty_after_tool:ralph_repo_index stopped firing after ~06:00 UTC (cc9e474 early-return guard effective in v2.7.23)
|
|
952
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
953
|
+
- GH issues: 0 open
|
|
954
|
+
- Action this tick: 5bbbb23 (hallucinated-tools directive fix) is committed ahead of v2.7.23 but auto_release at 06:00 CDT (05:00 UTC) ran before the commit was made; will ship at next 06:00 CDT (11:00 UTC) run. No new bugs identified; no commit this tick.
|
|
955
|
+
|
|
956
|
+
## 2026-04-30 07:34 UTC tick
|
|
957
|
+
- Stress: 374/1658 (babysitter restarted harness at 07:03 UTC; old PID 459183 died after ~14.5h; new PID 599513 resumed from step 357)
|
|
958
|
+
- Write rate: 7% last 14 prompts (expected — prompts 357-374 are CLI-flag variants that return text-only answers, 0 writes is normal)
|
|
959
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (1 fire at 07:24; 5bbbb23 directive fix not yet installed, ships as v2.7.24 at 11:00 UTC); retry_after_error:write_file/truncated-history (3 fires, known Gemma 4 model behavior); loop:search_replace (1 fire, known pattern)
|
|
960
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
961
|
+
- GH issues: 0 open
|
|
962
|
+
- Action this tick: no fix committed — system healthy; investigated write_file truncated-history retry pattern (format.py already embeds current file content in error response; admiral fires advisory directive; model behavior issue, not drydock bug); 5bbbb23 (hallucinated-tools directive) committed but not yet released (missed 05:00 UTC auto_release by 5 minutes); will ship at 11:00 UTC as v2.7.24
|
|
963
|
+
|
|
964
|
+
## 2026-04-30 08:35 UTC tick
|
|
965
|
+
- Stress: 381/1658 (PID 599513 alive ~6.5h since babysitter restart at 02:03 UTC; resumed from step 357; prior run reached 680/1658 before dying)
|
|
966
|
+
- Write rate: 6% last 24 prompts in current restart log (expected — prompts 357-381 are plugin-feature variants that produce mostly text answers on a fresh session context); v10 base run was 42% last 100
|
|
967
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (1 fire at 07:24, 5bbbb23 directive fix pending release); struggle:none (3 rapid fires at 07:45-07:47, model made 20+ tool calls without writing during telemetry.py sys.path debugging — model behavior, not drydock bug); loop:search_replace (1 fire at 07:51, SEARCH text mismatch — existing handling); raw-markdown-leakage alert fired once at 07:26 but rec-check shows raw_md=0 now (transient)
|
|
968
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
969
|
+
- GH issues: 0 open
|
|
970
|
+
- Action this tick: no fix committed — all admiral patterns are known; 5bbbb23 (hallucinated-tools directive fix) is committed and will ship as v2.7.24 at 12:00 UTC auto_release; dist/ still shows 2.7.23; system healthy
|
|
971
|
+
|
|
972
|
+
## 2026-04-30 08:31 UTC tick
|
|
973
|
+
- Stress: ~386/1658 (PID 599513, alive ~1.5h since babysitter restart at 07:03, resuming from step 357)
|
|
974
|
+
- Write rate: 6% per harness counter (measurement artifact — actual sessions show 8-54 writes each; session-tracker loses the new session dir after TUI recycles because meta.json isn't written until session exit, so the harness watches the old session and counts 0 writes for accepted prompts)
|
|
975
|
+
- Admiral last 30 min: n/a (not checked — no new patterns visible from session inspection)
|
|
976
|
+
- vLLM 400s: 0
|
|
977
|
+
- GH issues: 0 open
|
|
978
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy, babysitter ran at 07:03 and 08:00
|
|
979
|
+
- Latest tag: v2.7.23; one commit ahead (5bbbb23, hallucinated-tool fix) pending auto_release (next tick: 12:00 UTC)
|
|
980
|
+
- Action this tick: no drydock bugs found. Low harness write-rate is a measurement artifact not a regression. System healthy.
|
|
981
|
+
|
|
982
|
+
## 2026-04-30 09:10 UTC tick
|
|
983
|
+
- Stress: 404/1658 (PID 599513 alive, etime=01:57, resumed from step 357 at 07:03 restart)
|
|
984
|
+
- Write rate: 21% last 47 prompts (plugin-feature prompts are text-heavy; expected low)
|
|
985
|
+
- Admiral last 30 min: retry-spike alert (65% retry rate, 22 retries in 34 prompts), skip-cluster (8 SKIPs), retry_after_error:search_replace (2 fires), empty_after_tool:ralph_repo_index (1 fire) — all existing categories; ralph_repo_index fix (5bbbb23) ships at 12:00 UTC auto_release
|
|
986
|
+
- vLLM 400s: 0
|
|
987
|
+
- GH issues: 0 open
|
|
988
|
+
- Services: balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy (CPU 372%, 8GB RAM), active session 20260430_085922 making file writes
|
|
989
|
+
- Action this tick: no new drydock bugs found. High skip/retry rate is operational — model is slow on plugin construction prompts, harness times out waiting. Not a source bug. No commits.
|
|
990
|
+
|
|
991
|
+
## 2026-04-30 09:45 UTC tick
|
|
992
|
+
- Stress: 680/1658 (PID 599513 alive, etime=02:26, resumed from step 357)
|
|
993
|
+
- Write rate: 25% overall in resumed run (prompts at this stage are "Add a --flag CLI flag that controls behavior" — low-write by nature)
|
|
994
|
+
- Admiral last 30 min: retry_after_error:read_file (fired at 6 and 8 identical calls), loop:search_replace (1), loop:bash (1), struggle:none (1) — known categories, but read_file retry loop is a drydock bug
|
|
995
|
+
- vLLM 400s: 0
|
|
996
|
+
- GH issues: 0 open
|
|
997
|
+
- Services: llm_balancer PID 24354 on :8001 healthy (original PID 1230765 was replaced by keepalive cron), vLLM gemma4 on :8000 healthy
|
|
998
|
+
- Action this tick: committed fix f611100 — circuit-breaker NOTE for read-only tools (read_file/grep/glob) now stores 2000 chars and shows all of it instead of just 200 chars. Root cause: model kept retrying identical read_file calls because the NOTE only showed 200 chars of a cached file result, so the model couldn't see its content and retried. Ships as v2.7.24 or later at next auto_release (12:00 or 18:00 UTC).
|
|
999
|
+
|
|
1000
|
+
## 2026-04-30 10:01 UTC tick
|
|
1001
|
+
- Stress: 432/1658 (PID 599513 alive, etime=02:56; babysitter restarted at 07:03 UTC from step 357; prior run reached 680/1658 before dying)
|
|
1002
|
+
- Write rate: 29% last 54 prompts (plugin-feature text-heavy prompts, expected; prior base run was 42-74%)
|
|
1003
|
+
- Admiral last 30 min: loop:read_file (3 fires), loop:write_file (1 fire, canned circuit-breaker), empty_after_tool:ralph_repo_index (3 fires), struggle:search_replace (2 fires), retry_after_error:bash (1 fire), tui-recycle-requested (3 times for skip-clusters) — all known categories
|
|
1004
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
1005
|
+
- GH issues: 0 open
|
|
1006
|
+
- Action this tick: no fix committed — 2 commits ahead of v2.7.23 (5bbbb23 hallucinated-tools directive, f611100 circuit-breaker read-only content expansion) pending auto_release at 11:00 UTC; all admiral patterns are known; no new drydock bugs surfaced
|
|
1007
|
+
|
|
1008
|
+
## 2026-04-30 11:02 UTC tick
|
|
1009
|
+
- Stress: 471/1658 (PID 599513 alive, etime=03:56; restart from step 357 at 07:03 UTC; making steady progress)
|
|
1010
|
+
- Write rate: 28% last 87 prompts (storage-backend section — complex, low-write prompts expected; skip rate ~17%)
|
|
1011
|
+
- Admiral last 30 min: empty_after_tool:ralph_repo_index (multiple, model hallucinating non-existent tool; directive fix in v2.7.24); retry_after_error:write_file truncated-history (3 fires pre-v2.7.24); empty_after_tool:web_search (model behavior, web_search is a real tool, not a bug); struggle/loop — all known
|
|
1012
|
+
- vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 healthy
|
|
1013
|
+
- GH issues: 0 open
|
|
1014
|
+
- Action this tick: v2.7.24 auto_release ran at 11:00 UTC (uploaded to PyPI, pushed to GitHub) but pip install to user env silently failed (PyPI propagation lag). Manually force-reinstalled v2.7.24 from local wheel to /home/bobef/miniforge3/envs/drydock/. Next TUI recycle in stress run will pick up hallucinated-tool directive fix and circuit-breaker full-content fix. No new drydock bugs found this tick.
|
|
1015
|
+
|
|
1016
|
+
## 2026-04-30 12:30 UTC tick
|
|
1017
|
+
- Stress: 560/1658 (PID 599513 alive, etime=05:30; babysitter restarted from step 357 at 07:03 UTC after PID 459183 died at prompt 633)
|
|
1018
|
+
- Write rate: 53% last 100 prompts (storage-backend section — improved vs prior tick as session reset cleared context bloat)
|
|
1019
|
+
- Admiral last 30 min: 4 fires — loop:search_replace (model retrying same edit twice; tool's 2nd-failure LOOP-BREAKER already fires), empty_after_tool:ralph_repo_index (model behavior), struggle:search_replace (model behavior) — all known categories; search_replace already has consecutive-failure countermeasures (shows file head on 2nd fail, full file + HARD-STOP on 3rd)
|
|
1020
|
+
- vLLM 400s: 0; llm_balancer healthy; vLLM gemma4 healthy
|
|
1021
|
+
- GH issues: 0 open
|
|
1022
|
+
- Action this tick: investigated recurring raw-markdown-leakage stress-alert (peaked 66% at 11:59 UTC) — confirmed FALSE POSITIVE. The `(?m)^#{1,6}\s+\w` pattern matches Python comments (`# Save data`, `# Load data`) in tool output (bash/read_file showing Python files), not failed markdown renders. The TUI is rendering correctly; the detection pattern is too broad. No fix committed (harness detection code, not drydock source). Latest release is v2.7.24 (06:02 CDT auto_release). No new drydock source bugs found.
|
|
1023
|
+
|
|
1024
|
+
## 2026-04-30 14:45 UTC tick
|
|
1025
|
+
- Stress: 654/1658 (PID 599513 alive, etime=07:26, resumed from step 357 at 07:03 restart)
|
|
1026
|
+
- Write rate: 53% last 100 prompts (storage-backend prompts, moderate)
|
|
1027
|
+
- Admiral last 30 min: 69 empty_after_tool fires today (mostly ralph_repo_index hallucination), skip-clusters at 13:54 and 14:25 UTC (3 TUI recycles triggered; run recovered); vLLM 400s: 0
|
|
1028
|
+
- GH issues: 0 open
|
|
1029
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy
|
|
1030
|
+
- Action this tick: no new drydock bugs found. One commit ahead of v2.7.24 (674b76c: inject [SYSTEM:] note after suppressed hallucinated-tool failure) — pending auto_release at 18:00 UTC. This fix should reduce empty_after_tool fires and skip-cluster severity by giving the model explicit guidance to call a real tool after ralph_repo_index is suppressed. Skip-clusters at 13:54/14:25 appear correlated with the ralph_repo_index empty-output loop; expect improvement after 18:00 UTC release.
|
|
1031
|
+
|
|
1032
|
+
## 2026-04-30 15:05 UTC tick
|
|
1033
|
+
- Stress: 679/1658 (harness PID 599513 was frozen since 10:03 UTC — log stale 5h; TUI had exited but pexpect held the process alive; babysitter only restarts dead PIDs, not wedged ones; killed PID 599513, restarted as PID 675181 resuming from step 680)
|
|
1034
|
+
- Write rate: 45% last 100 prompts (storage-backend section — moderate; prior high-rate period was 74% in earlier sessions)
|
|
1035
|
+
- Admiral last 30 min: 8 fires — mostly empty_after_tool:ralph_repo_index (fix 674b76c committed, pending v2.7.25 at 17:00 UTC CDT); skip-clusters resolved after TUI recycles; source=opus fires observed (admiral using Claude API fallback up to MAX_ESCALATIONS_PER_SESSION=3 per worker restart, by design)
|
|
1036
|
+
- vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
|
|
1037
|
+
- GH issues: 0 open
|
|
1038
|
+
- Action this tick: killed frozen harness PID 599513 (no new bugs to fix — 674b76c already committed and pending auto_release at 17:00 UTC); restarted harness at PID 675181 from step 680; 1 commit ahead of v2.7.24 (674b76c: inject [SYSTEM:] note after hallucinated-tool suppression)
|
|
1039
|
+
|
|
1040
|
+
## 2026-04-30 15:35 UTC tick
|
|
1041
|
+
- Stress: 689/1658 (PID 675181 alive, etime=27min; restarted from step 679 at 15:05 UTC by prior tick; babysitter log shows PID 599513 was frozen since 10:03 UTC with log stale 5h, killed and restarted)
|
|
1042
|
+
- Write rate: 60% last 5 completed prompts (REST/API section, new run too fresh for reliable rate estimate)
|
|
1043
|
+
- Admiral last 30 min: loop:search_replace (canned), retry_after_error:search_replace (file had conflict markers from prior botched edit), empty_after_tool:write_file (model writing to wrong path "tool/cli/py"), loop:write_file (canned) — all known patterns; 674b76c fix (hallucinated-tool SYSTEM note) pending v2.7.25 at 12:02 PM CDT (17:02 UTC)
|
|
1044
|
+
- vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
|
|
1045
|
+
- GH issues: 0 open
|
|
1046
|
+
- Action this tick: no new drydock bugs found. Investigated conflict-marker-in-file pattern (model occasionally writes <<<<<<< SEARCH markers as literal file content, causing subsequent search_replace to fail); judged too infrequent and ambiguous to warrant a write_file guard this tick. Commit 674b76c pending auto_release; no new commits.
|
|
1047
|
+
|
|
1048
|
+
## 2026-04-30 16:35 UTC tick
|
|
1049
|
+
- Stress: 701/1658 (PID 675181 alive, etime=1h26m; resumed from step 679 at 15:05 UTC after frozen PID 599513 was killed by prior tick; babysitter log confirms continuous restarts since Apr-27)
|
|
1050
|
+
- Write rate: 60% last 12 completed prompts (API/gRPC/WebSocket section — typical for this section; skip rate 37% due to long TUI sessions blocking next prompt)
|
|
1051
|
+
- Admiral last 30 min: loop:search_replace (canned), retry_after_error:search_replace (conflict markers in file, addressed by ca76f5b), empty_after_tool:write_file and :ralph_repo_index (model behavior, 674b76c addresses the ralph_repo_index case) — all known patterns; no new categories
|
|
1052
|
+
- vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
|
|
1053
|
+
- GH issues: 0 open
|
|
1054
|
+
- Action this tick: no new drydock bugs found. 2 commits pending auto_release at 18:00 UTC today (674b76c: hallucinated-tool SYSTEM note; ca76f5b: conflict-marker guard in search_replace NO_BLOCKS path) — will ship as v2.7.25. Skip clusters in API section appear to be model-behavior timing (TUI processing a 21-msg gRPC session while harness waits for idle) rather than a drydock source bug.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
542815
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|