drydock-cli 2.7.22__tar.gz → 2.7.24__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.24/.auto_release.lock +1 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/PKG-INFO +1 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/agent_loop.py +16 -3
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/format.py +5 -3
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/pyproject.toml +1 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_hallucinated_tool_suppression.py +34 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_loop_detection.py +23 -4
- drydock_cli-2.7.24/tests/test_search_replace_args_not_truncated.py +181 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/trip_log.md +193 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/uv.lock +1 -1
- drydock_cli-2.7.22/.auto_release.lock +0 -1
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.gitignore +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.python-version +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.typos.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/AGENTS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/Admiral.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/CLAUDE.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/LICENSE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/NOTICE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/PRD.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/action.yml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/docs/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/drydock_terms.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/flake.lock +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/flake.nix +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/nohup.out +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/config_base.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/config_best.toml +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/experimenter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/kernel.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/proposer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/research/results.tsv +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/resume.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/install.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/test/project/dummy +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.22 → drydock_cli-2.7.24}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
637382
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.24
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -1032,7 +1032,7 @@ class AgentLoop:
|
|
|
1032
1032
|
parsed = self.format_handler.parse_message(last_message)
|
|
1033
1033
|
resolved = self.format_handler.resolve_tool_calls(parsed, self.tool_manager)
|
|
1034
1034
|
|
|
1035
|
-
if not resolved.tool_calls and not resolved.failed_calls:
|
|
1035
|
+
if not resolved.tool_calls and not resolved.failed_calls and not resolved.suppressed_failures:
|
|
1036
1036
|
return
|
|
1037
1037
|
|
|
1038
1038
|
async for event in self._handle_tool_calls(resolved):
|
|
@@ -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
|
|
@@ -1781,6 +1789,11 @@ class AgentLoop:
|
|
|
1781
1789
|
for tc in msg.tool_calls:
|
|
1782
1790
|
if not tc.function or not tc.function.arguments:
|
|
1783
1791
|
continue
|
|
1792
|
+
# search_replace args contain SEARCH/REPLACE blocks the model
|
|
1793
|
+
# NEEDS to see in history (to know what edits it already applied).
|
|
1794
|
+
# Only write_file carries full file content worth truncating.
|
|
1795
|
+
if tc.function.name == "search_replace":
|
|
1796
|
+
continue
|
|
1784
1797
|
args = tc.function.arguments
|
|
1785
1798
|
if len(args) <= SOFT_CAP_BYTES:
|
|
1786
1799
|
continue
|
|
@@ -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
|
)
|
|
@@ -85,3 +85,37 @@ def test_unknown_non_hallucinated_tool_goes_to_failed_calls():
|
|
|
85
85
|
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
86
86
|
assert any(fc.tool_name == "nonexistent_random_tool" for fc in resolved.failed_calls)
|
|
87
87
|
assert not resolved.suppressed_failures
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_suppressed_failures_not_bypassed_by_early_return():
|
|
91
|
+
"""Regression for agent_loop early-return bug: when only suppressed_failures
|
|
92
|
+
exist (no real tool_calls, no failed_calls), the condition
|
|
93
|
+
`not tool_calls and not failed_calls` was True and _handle_tool_calls was
|
|
94
|
+
skipped, so _silence_suppressed_failures was never called. The tool result
|
|
95
|
+
message for the hallucinated tool was never added, leaving the conversation
|
|
96
|
+
malformed (assistant tool_call with no paired tool result).
|
|
97
|
+
|
|
98
|
+
Fix: early-return also checks `not suppressed_failures`.
|
|
99
|
+
This test verifies that a ResolvedMessage with only suppressed_failures
|
|
100
|
+
is NOT considered empty by the fixed condition.
|
|
101
|
+
"""
|
|
102
|
+
handler = _make_handler()
|
|
103
|
+
tm = _make_tool_manager(["read_file"])
|
|
104
|
+
parsed = _parsed("ralph_repo_index")
|
|
105
|
+
resolved = handler.resolve_tool_calls(parsed, tm)
|
|
106
|
+
|
|
107
|
+
# Preconditions: only suppressed_failures, nothing else
|
|
108
|
+
assert not resolved.tool_calls
|
|
109
|
+
assert not resolved.failed_calls
|
|
110
|
+
assert resolved.suppressed_failures
|
|
111
|
+
|
|
112
|
+
# The fixed early-return condition must NOT consider this "no work to do"
|
|
113
|
+
should_skip_early = (
|
|
114
|
+
not resolved.tool_calls
|
|
115
|
+
and not resolved.failed_calls
|
|
116
|
+
and not resolved.suppressed_failures # fixed: was missing this
|
|
117
|
+
)
|
|
118
|
+
assert not should_skip_early, (
|
|
119
|
+
"Bug regression: suppressed_failures were ignored by early-return, "
|
|
120
|
+
"leaving assistant tool_call with no paired tool result in history."
|
|
121
|
+
)
|
|
@@ -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,181 @@
|
|
|
1
|
+
"""Regression test: search_replace call args must NOT be truncated.
|
|
2
|
+
|
|
3
|
+
Repro: _truncate_old_tool_results truncated ALL large tool-call arguments,
|
|
4
|
+
including search_replace SEARCH/REPLACE blocks (~400-800 bytes). The model
|
|
5
|
+
then saw {_truncated: true, file_path: "..."} in its own history and copied
|
|
6
|
+
those truncated args as new call arguments. format.py detected this and
|
|
7
|
+
returned a FailedToolCall, but the model retried with the same truncated
|
|
8
|
+
args again and again, creating a retry_after_error:search_replace loop.
|
|
9
|
+
|
|
10
|
+
Fix (2026-04-29): skip the arg-truncation loop for search_replace tool
|
|
11
|
+
calls. Only write_file carries full file content worth truncating.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from drydock.core.types import (
|
|
20
|
+
FunctionCall,
|
|
21
|
+
LLMMessage,
|
|
22
|
+
Role,
|
|
23
|
+
ToolCall,
|
|
24
|
+
)
|
|
25
|
+
from tests.conftest import build_test_agent_loop
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _make_tc(name: str, arguments: str, idx: int = 0) -> ToolCall:
|
|
29
|
+
return ToolCall(
|
|
30
|
+
id=f"tc_{idx}",
|
|
31
|
+
index=idx,
|
|
32
|
+
function=FunctionCall(name=name, arguments=arguments),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _build_history_with_search_replace(num_old: int) -> list[LLMMessage]:
|
|
37
|
+
"""Build a conversation with `num_old` old search_replace messages
|
|
38
|
+
plus enough newer messages to exceed KEEP_RECENT."""
|
|
39
|
+
msgs: list[LLMMessage] = [
|
|
40
|
+
LLMMessage(role=Role.system, content="be helpful"),
|
|
41
|
+
LLMMessage(role=Role.user, content="please help"),
|
|
42
|
+
]
|
|
43
|
+
# search_replace calls with realistic 600+ byte args (exceeds SOFT_CAP=500)
|
|
44
|
+
search_block = " def run_tool(self, tool_name: str, args: dict) -> str:\n"
|
|
45
|
+
search_block += " # This is the old implementation that needs to be replaced\n"
|
|
46
|
+
search_block += " return ''\n"
|
|
47
|
+
replace_block = " def run_tool(self, tool_name: str, args: dict) -> str:\n"
|
|
48
|
+
replace_block += " plugin = self._load_plugin(tool_name)\n"
|
|
49
|
+
replace_block += " if plugin is None:\n"
|
|
50
|
+
replace_block += " raise ValueError(f'Unknown tool: {tool_name}')\n"
|
|
51
|
+
replace_block += " return plugin.execute(args)\n"
|
|
52
|
+
sr_args = json.dumps({
|
|
53
|
+
"file_path": "/data3/drydock_test_projects/403_tool_agent/tool_agent/cli.py",
|
|
54
|
+
"content": (
|
|
55
|
+
f"<<<<<<< SEARCH\n{search_block}=======\n{replace_block}>>>>>>> REPLACE"
|
|
56
|
+
),
|
|
57
|
+
})
|
|
58
|
+
assert len(sr_args) > 500, f"Test args must exceed SOFT_CAP_BYTES=500 to be meaningful, got {len(sr_args)}"
|
|
59
|
+
|
|
60
|
+
for i in range(num_old):
|
|
61
|
+
msgs.append(
|
|
62
|
+
LLMMessage(
|
|
63
|
+
role=Role.assistant,
|
|
64
|
+
content="",
|
|
65
|
+
tool_calls=[_make_tc("search_replace", sr_args, i)],
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
msgs.append(
|
|
69
|
+
LLMMessage(
|
|
70
|
+
role=Role.tool,
|
|
71
|
+
tool_call_id=f"tc_{i}",
|
|
72
|
+
name="search_replace",
|
|
73
|
+
content="Applied edit.",
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Add newer messages to exceed KEEP_RECENT (4) so truncation would trigger
|
|
78
|
+
# for write_file but should be skipped for search_replace.
|
|
79
|
+
for i in range(6):
|
|
80
|
+
msgs.append(
|
|
81
|
+
LLMMessage(
|
|
82
|
+
role=Role.assistant,
|
|
83
|
+
content="",
|
|
84
|
+
tool_calls=[_make_tc("read_file", '{"path":"/x"}', 100 + i)],
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
msgs.append(
|
|
88
|
+
LLMMessage(
|
|
89
|
+
role=Role.tool,
|
|
90
|
+
tool_call_id=f"tc_{100+i}",
|
|
91
|
+
name="read_file",
|
|
92
|
+
content="ok",
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
return msgs
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class TestSearchReplaceArgsNotTruncated:
|
|
99
|
+
def test_search_replace_args_preserved_after_truncation(self):
|
|
100
|
+
"""search_replace call args must not be replaced with {_truncated: true} stub."""
|
|
101
|
+
loop = build_test_agent_loop()
|
|
102
|
+
loop.messages.reset(_build_history_with_search_replace(num_old=10))
|
|
103
|
+
|
|
104
|
+
loop._truncate_old_tool_results()
|
|
105
|
+
|
|
106
|
+
for m in loop.messages:
|
|
107
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
108
|
+
continue
|
|
109
|
+
for tc in m.tool_calls:
|
|
110
|
+
if tc.function.name != "search_replace":
|
|
111
|
+
continue
|
|
112
|
+
args = tc.function.arguments or ""
|
|
113
|
+
parsed = json.loads(args)
|
|
114
|
+
assert not parsed.get("_truncated"), (
|
|
115
|
+
f"search_replace args were truncated — model will copy the stub "
|
|
116
|
+
f"and loop: {args[:120]}"
|
|
117
|
+
)
|
|
118
|
+
assert "content" in parsed, (
|
|
119
|
+
"search_replace args lost the 'content' field after truncation"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def test_write_file_still_truncated(self):
|
|
123
|
+
"""write_file args should still be truncated (they carry full file content)."""
|
|
124
|
+
msgs: list[LLMMessage] = [
|
|
125
|
+
LLMMessage(role=Role.system, content="be helpful"),
|
|
126
|
+
LLMMessage(role=Role.user, content="please help"),
|
|
127
|
+
]
|
|
128
|
+
big_args = json.dumps({
|
|
129
|
+
"file_path": "/data3/test/foo.py",
|
|
130
|
+
"content": "x" * 5000,
|
|
131
|
+
})
|
|
132
|
+
for i in range(10):
|
|
133
|
+
msgs.append(
|
|
134
|
+
LLMMessage(
|
|
135
|
+
role=Role.assistant,
|
|
136
|
+
content="",
|
|
137
|
+
tool_calls=[_make_tc("write_file", big_args, i)],
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
msgs.append(
|
|
141
|
+
LLMMessage(
|
|
142
|
+
role=Role.tool,
|
|
143
|
+
tool_call_id=f"tc_{i}",
|
|
144
|
+
name="write_file",
|
|
145
|
+
content=f"Wrote {i}",
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
for i in range(6):
|
|
149
|
+
msgs.append(
|
|
150
|
+
LLMMessage(
|
|
151
|
+
role=Role.assistant,
|
|
152
|
+
content="",
|
|
153
|
+
tool_calls=[_make_tc("read_file", '{"path":"/x"}', 100 + i)],
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
msgs.append(
|
|
157
|
+
LLMMessage(
|
|
158
|
+
role=Role.tool,
|
|
159
|
+
tool_call_id=f"tc_{100+i}",
|
|
160
|
+
name="read_file",
|
|
161
|
+
content="ok",
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
loop = build_test_agent_loop()
|
|
166
|
+
loop.messages.reset(msgs)
|
|
167
|
+
loop._truncate_old_tool_results()
|
|
168
|
+
|
|
169
|
+
truncated_count = 0
|
|
170
|
+
for m in loop.messages:
|
|
171
|
+
if m.role != Role.assistant or not m.tool_calls:
|
|
172
|
+
continue
|
|
173
|
+
for tc in m.tool_calls:
|
|
174
|
+
if tc.function.name != "write_file":
|
|
175
|
+
continue
|
|
176
|
+
args = tc.function.arguments or ""
|
|
177
|
+
parsed = json.loads(args)
|
|
178
|
+
if parsed.get("_truncated"):
|
|
179
|
+
truncated_count += 1
|
|
180
|
+
|
|
181
|
+
assert truncated_count > 0, "write_file args should still be truncated"
|
|
@@ -3,6 +3,56 @@
|
|
|
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 10:30 UTC tick
|
|
7
|
+
- Stress: 441/1658 (PID 599513, --resume-from-step 357, running 3h27m; harness alive and making progress)
|
|
8
|
+
- 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)
|
|
9
|
+
- 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
|
|
10
|
+
- vLLM 400s: 0
|
|
11
|
+
- GH issues: 0 open
|
|
12
|
+
- Services: llm_balancer PID 1230765 on :8001 healthy, vLLM gemma4 on :8000 healthy, admiral_probe PID 2251231 on :8878 healthy
|
|
13
|
+
- 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
|
|
14
|
+
- 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.
|
|
15
|
+
|
|
16
|
+
## 2026-04-30 07:03 UTC tick
|
|
17
|
+
- Stress: 633/1658 at restart (PID 459183 → killed, new PID 599513 resuming step 358 "keyword_extract")
|
|
18
|
+
- Write rate: 47% last 100 prompts (down from 74% peak; "Add storage backend" prompts for cloud targets drive 0-write sessions)
|
|
19
|
+
- 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
|
|
20
|
+
- vLLM 400s: 0
|
|
21
|
+
- GH issues: 0 open
|
|
22
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy
|
|
23
|
+
- 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.
|
|
24
|
+
|
|
25
|
+
## 2026-04-30 06:01 UTC tick
|
|
26
|
+
- Stress: 621/1658 (PID 459183, alive 13h25m, "Add storage backend: X" prompts 600-621)
|
|
27
|
+
- Write rate: 48% last 100 prompts (choppy: chunks range 28-72%, variance is model behavior)
|
|
28
|
+
- SKIP/TIMEOUT count: 59/621 = 9.5%, within expected range
|
|
29
|
+
- 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)
|
|
30
|
+
- vLLM 400s: 0
|
|
31
|
+
- GH issues: 0 open
|
|
32
|
+
- 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
|
|
33
|
+
- Action this tick: no new bugs found. Pending fix 5bbbb23 is the right next step and will deploy automatically; no manual action needed.
|
|
34
|
+
|
|
35
|
+
## 2026-04-30 04:10 UTC tick
|
|
36
|
+
- Stress: 495/1658 (PID 459183, --resume-from-step 216; +47 prompts since last tick)
|
|
37
|
+
- 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)
|
|
38
|
+
- 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
|
|
39
|
+
- vLLM 400s: 0
|
|
40
|
+
- GH issues: 0 open
|
|
41
|
+
- 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
|
|
42
|
+
- 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.
|
|
43
|
+
|
|
44
|
+
## 2026-04-30 02:34 UTC tick
|
|
45
|
+
- Stress: 448/1658 (new run, PID 459183, ~10h elapsed, resuming from step 216)
|
|
46
|
+
- 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)
|
|
47
|
+
- SKIP rate: 13% (31/232), within expected range; RECYCLE-TUI handling wedged sessions
|
|
48
|
+
- 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
|
|
49
|
+
- vLLM 400s: 0
|
|
50
|
+
- GH issues: 0 open
|
|
51
|
+
- 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
|
|
52
|
+
- Latest release: v2.7.23 (two recent commits: fix(hallucinated-tools) cc9e474 and fix(truncate-args) a7eb3ec, both shipped)
|
|
53
|
+
- 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
|
|
54
|
+
- 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.
|
|
55
|
+
|
|
6
56
|
## 2026-04-29 08:34 UTC tick
|
|
7
57
|
- Stress: 229/1658 (PID 270529, new run started ~Apr 29 03:26 UTC; progressing)
|
|
8
58
|
- 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
|
|
@@ -770,3 +820,146 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
770
820
|
- vLLM 400s: 0
|
|
771
821
|
- GH issues: 0 open
|
|
772
822
|
- Action this tick: committed fix (39515a1) — tool-aware escalation message for truncated args; search_replace now gets SEARCH/REPLACE recovery guidance instead of write_file advice; 3 new regression tests all pass; ships as v2.7.22 at next 0/6/12/18 auto-release tick
|
|
823
|
+
|
|
824
|
+
## 2026-04-29 23:15 UTC tick
|
|
825
|
+
- Stress: 384/1658 (current restart batch from step 216; harness alive, PID 459183, 6h25m uptime)
|
|
826
|
+
- Write rate: 40% last 100 prompts (down from 74% peak — traced to new bug)
|
|
827
|
+
- Admiral last 30 min: ~12 retry_after_error:search_replace fires + SKIP clusters
|
|
828
|
+
- vLLM 400s: 0
|
|
829
|
+
- GH issues: 0 open
|
|
830
|
+
- Action this tick: committed fix `a7eb3ec` — skip search_replace arg truncation in `_truncate_old_tool_results`. The 500-byte SOFT_CAP was hitting search_replace SEARCH/REPLACE blocks (600-800 bytes), replacing them with `{_truncated:true, file_path:...}` stubs. Model copied the stubs as new call args, triggering persistent retry_after_error loops. Only write_file (full file content) warrants truncation. Regression test added. Auto-release will ship at next 0/6/12/18 UTC tick.
|
|
831
|
+
|
|
832
|
+
## 2026-04-29 23:33 UTC tick
|
|
833
|
+
- Stress: 398/1658 (current restart batch from step 216, PID 459183 alive 6h58m; previous run died at step 422/1658 at 16:34 UTC and was restarted by babysitter)
|
|
834
|
+
- Write rate: 35% last 100 prompts (expected low for API-tool plugin prompts in steps 216-400 range — many features already implemented; peak 74% was during initial build phase)
|
|
835
|
+
- Admiral last 30 min: 2 interventions (struggle:none at 23:04 UTC source=opus, empty_after_tool:write_file at 23:28 UTC source=opus); skip-cluster stress-alert at 23:21; tui-recycle-requested at 23:28 — all known patterns, FORCE-RESET and recycle cycling correctly
|
|
836
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up 5 days; GH issues: 0 open
|
|
837
|
+
- Action this tick: no fix committed — system healthy; pending commit a7eb3ec (skip search_replace arg truncation) ships as v2.7.23 at 00:00 UTC auto-release (committed at 23:15 UTC, after the 18:00 UTC v2.7.22 release window)
|
|
838
|
+
|
|
839
|
+
## 2026-04-30 00:05 UTC tick
|
|
840
|
+
- Stress: 406/1658 (PID 459183 alive, 7h25m elapsed; cumulative done=160, skip=16, timeout=11, recycle=15)
|
|
841
|
+
- Write rate: 46% last 30 prompts (35% last 100; low expected for plugin-feature prompts where features already present in context)
|
|
842
|
+
- 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
|
|
843
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up; GH issues: 0 open
|
|
844
|
+
- 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
|
|
845
|
+
|
|
846
|
+
## 2026-04-30 01:05 UTC tick
|
|
847
|
+
- Stress: 419/1658 (PID 459183 alive, 8h26m elapsed; restarted from step 216; harness in new log /tmp/stress_2000_v10_restart_1777480477.log)
|
|
848
|
+
- 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)
|
|
849
|
+
- 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)
|
|
850
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; GH issues: 0 open
|
|
851
|
+
- 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
|
|
852
|
+
|
|
853
|
+
## 2026-04-30 02:30 UTC tick
|
|
854
|
+
- 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)
|
|
855
|
+
- 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)
|
|
856
|
+
- 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
|
|
857
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker up; GH issues: 0 open
|
|
858
|
+
- 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
|
|
859
|
+
|
|
860
|
+
## 2026-04-30 09:25 UTC tick
|
|
861
|
+
- 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)
|
|
862
|
+
- 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)
|
|
863
|
+
- 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)
|
|
864
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker (gemma4) on :8000 healthy; GH issues: 0 open
|
|
865
|
+
- 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
|
|
866
|
+
|
|
867
|
+
## 2026-04-30 03:05 UTC tick
|
|
868
|
+
- Stress: 454/1658 (harness PID 459183, alive, 10h26m elapsed)
|
|
869
|
+
- Write rate: 19% last 99 prompts (down from 74% previously)
|
|
870
|
+
- Admiral last 30 min: multiple skip-cluster and retry-spike alerts; 28 TUI recycles total
|
|
871
|
+
- vLLM 400s: 0
|
|
872
|
+
- GH issues: 0 open
|
|
873
|
+
- 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.
|
|
874
|
+
|
|
875
|
+
## 2026-04-30 03:40 UTC tick
|
|
876
|
+
- Stress: 466/1658 (PID 459183, alive, resumed from step 216 after babysitter restart)
|
|
877
|
+
- Write rate: 47% last 100 prompts
|
|
878
|
+
- 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)
|
|
879
|
+
- vLLM 400s: 0
|
|
880
|
+
- GH issues: 0 open
|
|
881
|
+
- 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.
|
|
882
|
+
|
|
883
|
+
## 2026-04-30 04:32 UTC tick
|
|
884
|
+
- Stress: 531/1658 (PID 459183, alive 11h57m; resumed from step 216 after babysitter restart at 16:34 Apr 29)
|
|
885
|
+
- Write rate: 44% last 100 prompts (up from 19% at 03:05 tick; recovery after skip cluster at 03:15-03:45)
|
|
886
|
+
- 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
|
|
887
|
+
- vLLM 400s: 0; balancer PID 24354 healthy; vLLM Docker healthy
|
|
888
|
+
- GH issues: 0 open
|
|
889
|
+
- 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.
|
|
890
|
+
|
|
891
|
+
## 2026-04-30 05:05 UTC tick
|
|
892
|
+
- Stress: 233/1658 (new run, babysitter restarted; old run reached 680/1658)
|
|
893
|
+
- Write rate: 19% (down from 74%; high SKIP rate ~30% due to context bloat on long prompts)
|
|
894
|
+
- Admiral last 30 min: 20+ empty_after_tool:ralph_repo_index fires (most common pattern)
|
|
895
|
+
- vLLM 400s: 0
|
|
896
|
+
- GH issues: 0 open
|
|
897
|
+
- 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.
|
|
898
|
+
|
|
899
|
+
## 2026-04-30 05:31 UTC tick
|
|
900
|
+
- 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)
|
|
901
|
+
- 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)
|
|
902
|
+
- 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)
|
|
903
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
904
|
+
- GH issues: 0 open
|
|
905
|
+
- 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
|
|
906
|
+
|
|
907
|
+
## 2026-04-30 06:32 UTC tick
|
|
908
|
+
- 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)
|
|
909
|
+
- 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)
|
|
910
|
+
- 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)
|
|
911
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
912
|
+
- GH issues: 0 open
|
|
913
|
+
- 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.
|
|
914
|
+
|
|
915
|
+
## 2026-04-30 07:34 UTC tick
|
|
916
|
+
- Stress: 374/1658 (babysitter restarted harness at 07:03 UTC; old PID 459183 died after ~14.5h; new PID 599513 resumed from step 357)
|
|
917
|
+
- Write rate: 7% last 14 prompts (expected — prompts 357-374 are CLI-flag variants that return text-only answers, 0 writes is normal)
|
|
918
|
+
- 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)
|
|
919
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
920
|
+
- GH issues: 0 open
|
|
921
|
+
- 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
|
|
922
|
+
|
|
923
|
+
## 2026-04-30 08:35 UTC tick
|
|
924
|
+
- 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)
|
|
925
|
+
- 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
|
|
926
|
+
- 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)
|
|
927
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
928
|
+
- GH issues: 0 open
|
|
929
|
+
- 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
|
|
930
|
+
|
|
931
|
+
## 2026-04-30 08:31 UTC tick
|
|
932
|
+
- Stress: ~386/1658 (PID 599513, alive ~1.5h since babysitter restart at 07:03, resuming from step 357)
|
|
933
|
+
- 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)
|
|
934
|
+
- Admiral last 30 min: n/a (not checked — no new patterns visible from session inspection)
|
|
935
|
+
- vLLM 400s: 0
|
|
936
|
+
- GH issues: 0 open
|
|
937
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy, babysitter ran at 07:03 and 08:00
|
|
938
|
+
- Latest tag: v2.7.23; one commit ahead (5bbbb23, hallucinated-tool fix) pending auto_release (next tick: 12:00 UTC)
|
|
939
|
+
- Action this tick: no drydock bugs found. Low harness write-rate is a measurement artifact not a regression. System healthy.
|
|
940
|
+
|
|
941
|
+
## 2026-04-30 09:10 UTC tick
|
|
942
|
+
- Stress: 404/1658 (PID 599513 alive, etime=01:57, resumed from step 357 at 07:03 restart)
|
|
943
|
+
- Write rate: 21% last 47 prompts (plugin-feature prompts are text-heavy; expected low)
|
|
944
|
+
- 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
|
|
945
|
+
- vLLM 400s: 0
|
|
946
|
+
- GH issues: 0 open
|
|
947
|
+
- Services: balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy (CPU 372%, 8GB RAM), active session 20260430_085922 making file writes
|
|
948
|
+
- 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.
|
|
949
|
+
|
|
950
|
+
## 2026-04-30 09:45 UTC tick
|
|
951
|
+
- Stress: 680/1658 (PID 599513 alive, etime=02:26, resumed from step 357)
|
|
952
|
+
- Write rate: 25% overall in resumed run (prompts at this stage are "Add a --flag CLI flag that controls behavior" — low-write by nature)
|
|
953
|
+
- 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
|
|
954
|
+
- vLLM 400s: 0
|
|
955
|
+
- GH issues: 0 open
|
|
956
|
+
- Services: llm_balancer PID 24354 on :8001 healthy (original PID 1230765 was replaced by keepalive cron), vLLM gemma4 on :8000 healthy
|
|
957
|
+
- 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).
|
|
958
|
+
|
|
959
|
+
## 2026-04-30 10:01 UTC tick
|
|
960
|
+
- 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)
|
|
961
|
+
- Write rate: 29% last 54 prompts (plugin-feature text-heavy prompts, expected; prior base run was 42-74%)
|
|
962
|
+
- 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
|
|
963
|
+
- vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
|
|
964
|
+
- GH issues: 0 open
|
|
965
|
+
- 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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
522842
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|