drydock-cli 2.7.27__tar.gz → 2.7.28__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.28/.auto_release.lock +1 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/PKG-INFO +1 -1
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/agent_loop.py +46 -2
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/pyproject.toml +1 -1
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_loop_detection.py +90 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/trip_log.md +71 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/uv.lock +1 -1
- drydock_cli-2.7.27/.auto_release.lock +0 -1
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.gitignore +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.python-version +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.typos.toml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/AGENTS.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/Admiral.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/CLAUDE.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/LICENSE +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/NOTICE +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/PRD.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/action.yml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/docs/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock_terms.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/flake.lock +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/flake.nix +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/nohup.out +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/config_base.toml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/config_best.toml +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/experimenter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/kernel.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/proposer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/research/results.tsv +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/resume.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/install.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/test/project/dummy +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/conftest.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/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.27 → drydock_cli-2.7.28}/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.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.27 → drydock_cli-2.7.28}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2010664
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.28
|
|
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
|
|
@@ -2414,7 +2414,8 @@ class AgentLoop:
|
|
|
2414
2414
|
# edit that already succeeded or that keeps failing with the same
|
|
2415
2415
|
# "not found" error. Nudge after just 2 identical attempts.
|
|
2416
2416
|
recent_sr: list[str] = []
|
|
2417
|
-
|
|
2417
|
+
recent_sr_files: list[str] = []
|
|
2418
|
+
for msg in reversed(self.messages[-30:]):
|
|
2418
2419
|
if msg.role == Role.assistant and msg.tool_calls:
|
|
2419
2420
|
for tc in msg.tool_calls:
|
|
2420
2421
|
if tc.function and tc.function.name == "search_replace":
|
|
@@ -2423,12 +2424,27 @@ class AgentLoop:
|
|
|
2423
2424
|
# Build a key from file_path + old_string (content block)
|
|
2424
2425
|
key = f"{args.get('file_path', '')}:{args.get('content', '')}"
|
|
2425
2426
|
recent_sr.append(key)
|
|
2427
|
+
recent_sr_files.append(args.get("file_path", ""))
|
|
2426
2428
|
except (json.JSONDecodeError, AttributeError):
|
|
2427
2429
|
pass
|
|
2428
|
-
if len(recent_sr) >=
|
|
2430
|
+
if len(recent_sr) >= 6:
|
|
2429
2431
|
break
|
|
2430
2432
|
if len(recent_sr) >= 2 and recent_sr[0] == recent_sr[1]:
|
|
2431
2433
|
return "WARNING|search_replace"
|
|
2434
|
+
# Detect when 5+ search_replace calls target the same file with
|
|
2435
|
+
# varying search text (model adapts after HARD-STOP but still
|
|
2436
|
+
# cannot find the right text). The per-file fail counter in
|
|
2437
|
+
# search_replace.py escalates at count 3 — this adds a
|
|
2438
|
+
# loop-detection layer that fires FORCE_STOP when the same file
|
|
2439
|
+
# dominates 5 of the last 6 search_replace calls.
|
|
2440
|
+
if len(recent_sr_files) >= 5:
|
|
2441
|
+
from collections import Counter as _SRCounter
|
|
2442
|
+
_sr_counts = _SRCounter(f for f in recent_sr_files if f)
|
|
2443
|
+
if _sr_counts:
|
|
2444
|
+
_top_sr_file, _top_sr_count = _sr_counts.most_common(1)[0]
|
|
2445
|
+
if _top_sr_count >= 5:
|
|
2446
|
+
self._hot_tool_path = ("search_replace", _top_sr_file)
|
|
2447
|
+
return "FORCE_STOP"
|
|
2432
2448
|
|
|
2433
2449
|
# Early check: write_file with _truncated args twice in a row for the
|
|
2434
2450
|
# same path. format.py already embeds the file content in the error,
|
|
@@ -2454,6 +2470,34 @@ class AgentLoop:
|
|
|
2454
2470
|
self._hot_tool_path = ("write_file", recent_wf_truncated[0])
|
|
2455
2471
|
return "FORCE_STOP"
|
|
2456
2472
|
|
|
2473
|
+
# Early check: same bash command 5+ times across last 20 tool calls.
|
|
2474
|
+
# Catches alternating bash/read_file exploration loops where neither
|
|
2475
|
+
# the consecutive-N check nor the 9/12 path-dominance check fires
|
|
2476
|
+
# (because bash and read_file alternate, keeping bash below 9/12).
|
|
2477
|
+
_bash_cmds: list[str] = []
|
|
2478
|
+
_total_tc = 0
|
|
2479
|
+
for _msg in reversed(self.messages[-40:]):
|
|
2480
|
+
if _msg.role == Role.assistant and _msg.tool_calls:
|
|
2481
|
+
for _tc in _msg.tool_calls:
|
|
2482
|
+
_total_tc += 1
|
|
2483
|
+
if _tc.function and _tc.function.name == "bash":
|
|
2484
|
+
try:
|
|
2485
|
+
_a = json.loads(_tc.function.arguments or "{}")
|
|
2486
|
+
_cmd = _a.get("command", "")
|
|
2487
|
+
if _cmd:
|
|
2488
|
+
_bash_cmds.append(_cmd)
|
|
2489
|
+
except (json.JSONDecodeError, AttributeError):
|
|
2490
|
+
pass
|
|
2491
|
+
if _total_tc >= 20:
|
|
2492
|
+
break
|
|
2493
|
+
if len(_bash_cmds) >= 5:
|
|
2494
|
+
from collections import Counter as _Counter
|
|
2495
|
+
_cmd_counts = _Counter(_bash_cmds)
|
|
2496
|
+
_top_cmd, _top_count = _cmd_counts.most_common(1)[0]
|
|
2497
|
+
if _top_count >= 5:
|
|
2498
|
+
self._hot_tool_path = ("bash", _top_cmd)
|
|
2499
|
+
return "FORCE_STOP"
|
|
2500
|
+
|
|
2457
2501
|
sigs: list[str] = []
|
|
2458
2502
|
tool_names: list[str] = []
|
|
2459
2503
|
lookback = 0
|
|
@@ -347,6 +347,96 @@ class TestAlternatingPattern:
|
|
|
347
347
|
assert result is None or "FORCE_STOP" not in result
|
|
348
348
|
|
|
349
349
|
|
|
350
|
+
# ============================================================================
|
|
351
|
+
# Bash Exploration Loop (same command alternating with other tools)
|
|
352
|
+
# ============================================================================
|
|
353
|
+
|
|
354
|
+
class TestBashExplorationLoop:
|
|
355
|
+
"""Same bash command 5+ times across 20 tool calls triggers FORCE_STOP."""
|
|
356
|
+
|
|
357
|
+
def test_alternating_bash_read_triggers(self):
|
|
358
|
+
"""bash(same_cmd) + read_file(different) alternating 10x → FORCE_STOP."""
|
|
359
|
+
al = _make_agent()
|
|
360
|
+
cmd = "python3 -m tool_agent --list-tools"
|
|
361
|
+
for i in range(10):
|
|
362
|
+
if i % 2 == 0:
|
|
363
|
+
_add_tool_call(al, "bash", json.dumps({"command": cmd}))
|
|
364
|
+
else:
|
|
365
|
+
_add_tool_call(al, "read_file", json.dumps({"path": f"file_{i}.py"}))
|
|
366
|
+
result = al._check_tool_call_repetition()
|
|
367
|
+
assert result == "FORCE_STOP"
|
|
368
|
+
assert getattr(al, "_hot_tool_path", None) == ("bash", cmd)
|
|
369
|
+
|
|
370
|
+
def test_5_identical_bash_triggers(self):
|
|
371
|
+
"""5 identical bash calls in a row → FORCE_STOP."""
|
|
372
|
+
al = _make_agent()
|
|
373
|
+
cmd = "python3 -m tool_agent --list-tools"
|
|
374
|
+
for _ in range(5):
|
|
375
|
+
_add_tool_call(al, "bash", json.dumps({"command": cmd}))
|
|
376
|
+
result = al._check_tool_call_repetition()
|
|
377
|
+
assert result == "FORCE_STOP"
|
|
378
|
+
|
|
379
|
+
def test_4_identical_bash_no_trigger(self):
|
|
380
|
+
"""4 identical bash calls should not trigger (below threshold)."""
|
|
381
|
+
al = _make_agent()
|
|
382
|
+
cmd = "python3 app.py"
|
|
383
|
+
for _ in range(4):
|
|
384
|
+
_add_tool_call(al, "bash", json.dumps({"command": cmd}))
|
|
385
|
+
result = al._check_tool_call_repetition()
|
|
386
|
+
# Should not trigger the bash-exploration check
|
|
387
|
+
assert result != "FORCE_STOP"
|
|
388
|
+
|
|
389
|
+
def test_varied_bash_no_trigger(self):
|
|
390
|
+
"""Different bash commands should not trigger."""
|
|
391
|
+
al = _make_agent()
|
|
392
|
+
cmds = ["ls -la", "cat README.md", "python3 app.py", "pwd", "echo hi"]
|
|
393
|
+
for cmd in cmds:
|
|
394
|
+
_add_tool_call(al, "bash", json.dumps({"command": cmd}))
|
|
395
|
+
result = al._check_tool_call_repetition()
|
|
396
|
+
assert result != "FORCE_STOP"
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
# ============================================================================
|
|
400
|
+
# Search/Replace File-Dominance Loop Detection
|
|
401
|
+
# ============================================================================
|
|
402
|
+
|
|
403
|
+
class TestSearchReplaceFileDominance:
|
|
404
|
+
"""search_replace on same file 5+ times with varying content → FORCE_STOP."""
|
|
405
|
+
|
|
406
|
+
def test_five_sr_same_file_triggers(self):
|
|
407
|
+
"""5 search_replace calls on same file (different search text) → FORCE_STOP."""
|
|
408
|
+
al = _make_agent()
|
|
409
|
+
for i in range(5):
|
|
410
|
+
_add_tool_call(
|
|
411
|
+
al, "search_replace",
|
|
412
|
+
json.dumps({"file_path": "tool_agent/cli.py", "content": f"text{i}"})
|
|
413
|
+
)
|
|
414
|
+
result = al._check_tool_call_repetition()
|
|
415
|
+
assert result == "FORCE_STOP"
|
|
416
|
+
|
|
417
|
+
def test_four_sr_same_file_no_trigger(self):
|
|
418
|
+
"""4 search_replace on same file should not trigger."""
|
|
419
|
+
al = _make_agent()
|
|
420
|
+
for i in range(4):
|
|
421
|
+
_add_tool_call(
|
|
422
|
+
al, "search_replace",
|
|
423
|
+
json.dumps({"file_path": "tool_agent/cli.py", "content": f"text{i}"})
|
|
424
|
+
)
|
|
425
|
+
result = al._check_tool_call_repetition()
|
|
426
|
+
assert result != "FORCE_STOP"
|
|
427
|
+
|
|
428
|
+
def test_sr_different_files_no_trigger(self):
|
|
429
|
+
"""search_replace spread across different files should not trigger."""
|
|
430
|
+
al = _make_agent()
|
|
431
|
+
for i in range(5):
|
|
432
|
+
_add_tool_call(
|
|
433
|
+
al, "search_replace",
|
|
434
|
+
json.dumps({"file_path": f"tool_agent/file{i}.py", "content": "text"})
|
|
435
|
+
)
|
|
436
|
+
result = al._check_tool_call_repetition()
|
|
437
|
+
assert result != "FORCE_STOP"
|
|
438
|
+
|
|
439
|
+
|
|
350
440
|
# ============================================================================
|
|
351
441
|
# Threshold Constants
|
|
352
442
|
# ============================================================================
|
|
@@ -3,6 +3,16 @@
|
|
|
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-05-01 12:34 UTC tick
|
|
7
|
+
- Stress: 1020/1658 (PID 675181, alive 21h25m, log stress_2000_v10_restart_1777561483.log; write rate 10% last 100 prompts — all current prompts are "Test: unit/fuzz/property/golden" type; model runs bash tests and reports, not creating new files; overall 20% write rate for this restart run)
|
|
8
|
+
- Write rate: 10% last 100 (expected for test-running block; 20% overall for this restart)
|
|
9
|
+
- Skip rate: 109 total skips (babysitter confirmed skip=76 at 12:00 UTC); FORCE-RESET recovering normally
|
|
10
|
+
- Admiral last 30 min: struggle:none firing every 60s (12:00-12:08 UTC) during "add storage backend" explore-without-write block (36-45 tool calls, model not responding to directives — known Gemma 4 limitation); also struggle:search_replace at 12:28-12:30; empty_after_tool:ralph_repo_index at 11:33 (one-off, model moved on); retry_after_error:write_file:truncated-history at 08:19 (model re-used truncated args, known pattern)
|
|
11
|
+
- vLLM 400s: 0
|
|
12
|
+
- GH issues: 0 open
|
|
13
|
+
- Services: llm_balancer PID 713929 on :8001 healthy; vLLM gemma4 on :8000 healthy; admiral_probe PID 4075121 on :8878 healthy; harness RSS 7-8GB (harness TUI terminal log at 608MB, not a drydock leak); v2.7.27 is latest tag
|
|
14
|
+
- Action this tick: no fix committed — system healthy; all observed admiral patterns are known (struggle:none is advisory-only limitation, retry_after_error handled by existing code, truncated-history errors expected from context compaction); no new actionable drydock bugs found
|
|
15
|
+
|
|
6
16
|
## 2026-05-01 11:33 UTC tick
|
|
7
17
|
- Stress: 990/1658 (PID 675181, alive 19h26m, log stress_2000_v10_restart_1777561483.log; 311 entries this restart; block is "Test: unit/integration" prompts)
|
|
8
18
|
- Write rate: 17% last 100 prompts (expected — current block is "Test: X" prompts; model runs bash tests and reports, not writing files; matches 09:33 and 07:31 ticks)
|
|
@@ -1350,3 +1360,64 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
1350
1360
|
- vLLM 400s: 0; llm_balancer healthy (PID 713929 on :8001, forwarding confirmed); GH issues: 0 open
|
|
1351
1361
|
- TUI session session_20260501_093430_40e5bc06 stuck in search_replace struggle loop for ~30min; harness FORCE-RESET (ESC+/clear) cycling; session last modified 09:58 UTC so still alive; harness will auto-recover
|
|
1352
1362
|
- Action this tick: no actionable drydock bugs found; all failure patterns are known model-behavior (struggle:search_replace, empty_after_tool); no commits
|
|
1363
|
+
|
|
1364
|
+
## 2026-05-01 11:01 UTC tick
|
|
1365
|
+
- Stress: 998/1658 (60% complete), PID 675181 alive ~20h, log /tmp/stress_2000_v10_restart_1777561483.log, progressing on "Test:" prompt cluster
|
|
1366
|
+
- Write rate: 17% last 100 prompts (expected — test prompts where model reads/runs bash rather than writing files)
|
|
1367
|
+
- Admiral last 30 min: loop:bash (k_anonymity_golden_test.py repeated 3x, 10:28-10:30), struggle:none (22 tool calls w/o write, 7 interventions 10:54-11:01); all canned interventions firing; patterns are known model-behavior
|
|
1368
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy; vLLM gemma4 container up; GH issues: 0 open
|
|
1369
|
+
- Action this tick: no new drydock bugs found; all services healthy; no commits
|
|
1370
|
+
|
|
1371
|
+
## 2026-05-01 11:30 UTC tick
|
|
1372
|
+
- Stress: 1006/1658 (61% complete), PID 675181 alive 20h+ (--resume-from-step 679 active restart log /tmp/stress_2000_v10_restart_1777561483.log)
|
|
1373
|
+
- Write rate: 14% last 100 prompts (expected — model in "Test:" prompt block; running bash for test prompts, no file writes)
|
|
1374
|
+
- Admiral last 30 min: 20x struggle:none (model making bash calls for test prompts without writing, each turn 30+ tool calls), 1x empty_after_tool:ralph_repo_index (hallucinated tool, already handled); all known patterns, no new types
|
|
1375
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy (verified via /v1/models); vLLM gemma4 container up; GH issues: 0 open
|
|
1376
|
+
- Action this tick: no actionable drydock bugs found; system healthy; no commits
|
|
1377
|
+
|
|
1378
|
+
## 2026-05-01 13:03 UTC tick
|
|
1379
|
+
- Stress: 1027/1658 (62% complete), PID 675181 alive ~27h, writing to /tmp/stress_2000_v10_restart_1777561483.log (stress_log_path.txt is stale — still points to old Apr 26 log, not a drydock bug)
|
|
1380
|
+
- Write rate: 10% last 100 prompts (expected — harness in "Test:" prompt cluster; model runs bash to verify code rather than writing files)
|
|
1381
|
+
- Admiral last 2h: 19 interventions, all known patterns (struggle:none, struggle:search_replace, retry_after_error:search_replace, empty_after_tool:bash); no new unknown types
|
|
1382
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy (verified /v1/models); vLLM gemma4 container up; GH issues: 0 open
|
|
1383
|
+
- Action this tick: no actionable drydock bugs found; all services healthy; no commits
|
|
1384
|
+
|
|
1385
|
+
## 2026-05-01 14:30 UTC tick
|
|
1386
|
+
- Stress: 1041/1658 (62.8%), PID 675181 alive ~23h, idx at 1041 per babysitter; 280 done, 78 skip, 4 timeout
|
|
1387
|
+
- Write rate: 10% last 100 (expected — harness deep in "Test:" prompt cluster; these prompts run tests not build files); 18% overall in current log
|
|
1388
|
+
- Admiral last 30 min: 29 interventions, all struggle:none (model repeatedly making 30-42 bash calls without writing on test prompts; loop_detection nudges but doesn't stop — expected behavior); 1x loop:bash at 13:56 UTC (python3 race_condition_test.py repeated 3x)
|
|
1389
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy; vLLM gemma4 container up; GH issues: 0 open
|
|
1390
|
+
- Action this tick: committed fix(loop-detection): new bash exploration loop check catches same bash command 5+ times in last 20 tool calls (alternating bash/read_file pattern). 4 regression tests pass; 40 total tests pass. Will ship in next auto-release.
|
|
1391
|
+
|
|
1392
|
+
## 2026-05-01 14:31 UTC tick
|
|
1393
|
+
- Stress: 1051/1658 (63.4%), PID 675181 alive ~23.5h, log /tmp/stress_2000_v10_restart_1777561483.log; harness in "Test:" prompt cluster (Test: concurrency/race-condition/idempotency/rollback/snapshot prompts)
|
|
1394
|
+
- Write rate: 9% last 100 prompts (expected — model runs bash to execute existing test code rather than write new files; same test-prompt behavior as prior ticks)
|
|
1395
|
+
- Admiral last 5 min: continuous struggle:none starting 14:12 UTC; model at 36 bash calls on single session with 0 writes; canned interventions firing every ~1 min; no new unknown patterns
|
|
1396
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy; vLLM gemma4 container up 7 days; GH issues: 0 open
|
|
1397
|
+
- Action this tick: no new drydock bugs; 1 pending commit (cc0c467 loop-detection bash/read pattern) will ship at 18:00 UTC auto-release as v2.7.28; all services healthy
|
|
1398
|
+
|
|
1399
|
+
## 2026-05-01 15:20 UTC tick
|
|
1400
|
+
- Stress: 1057/1658 (PID 675181, alive 23h55m, log stress_2000_v10_restart_1777561483.log)
|
|
1401
|
+
- Write rate: 11% last 100 prompts — current block is test-analysis prompts ("Test: snapshot/race-condition/idempotency for X"); model correctly runs existing tests and summarizes without writing; expected for this prompt type
|
|
1402
|
+
- SKIPs: 78 total (7.4% skip rate); concentrated in steps 800-899 (42 SKIPs); FORCE-RESET handling working; skip rate improved to 3/50 in steps 1000-1049
|
|
1403
|
+
- Admiral last 2h: 53 struggle:none (model exploring 35+ calls before analyzing test prompts — expected), 11 struggle:write_file (search_replace retry loops), 1 retry_after_error:bash; all known patterns, no new unrecognized patterns
|
|
1404
|
+
- vLLM 400s: 0
|
|
1405
|
+
- GH issues: 0 open
|
|
1406
|
+
- cc0c467 unreleased (bash-exploration loop detection); auto_release will ship as v2.7.28 at 18:00 UTC
|
|
1407
|
+
- Notable observation: "progressive grep funnel" pattern in session — model runs same grep 7-8 times with incremental | grep -v additions; not caught by cc0c467 (requires exact match); minor inefficiency, not blocking
|
|
1408
|
+
- Action this tick: no action — healthy. Low write rate is prompt-type artifact, not a drydock regression. Stress progressing normally.
|
|
1409
|
+
|
|
1410
|
+
## 2026-05-01 15:32 UTC tick
|
|
1411
|
+
- Stress: 1066/1658 (64.3%), PID 675181 alive ~24h30m; log /tmp/stress_2000_v10_restart_1777561483.log; active prompt "Doc: changelog entry for E"; harness self-restored after brief v8/v9 internal restarts (false alarm — main process never died)
|
|
1412
|
+
- Write rate: 11% last 100 prompts (expected — in "Doc:" prompt block; model responds to documentation prompts with text or raw_md, not file writes)
|
|
1413
|
+
- Admiral last 30 min: continuous struggle:write_file (15:06–15:25 UTC), 59 tool calls without write, same directive firing every 60s — model ignoring advisory nudges; known model behavior per CLAUDE.md #2, not a new drydock bug
|
|
1414
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy (verified /v1/models); vLLM gemma4 container up; GH issues: 0 open
|
|
1415
|
+
- Action this tick: no actionable drydock bugs found; 1 unreleased commit (cc0c467 bash/read loop detection) will ship as v2.7.28 at 18:00 UTC auto-release; all services healthy; no commits
|
|
1416
|
+
|
|
1417
|
+
## 2026-05-01 16:33 UTC tick
|
|
1418
|
+
- Stress: 1083/1658 (65.3% complete), PID 675181 alive 25h+, log /tmp/stress_2000_v10_restart_1777561483.log; harness in "Doc:" prompt block (Doc: changelog/release-notes/architecture-diagram/README prompts)
|
|
1419
|
+
- Write rate: 8% last 100 prompts (expected — model responds with text to documentation prompts; after session reset at step 1080 writes resumed at +5 and +7 per prompt; prompt-type artifact not regression)
|
|
1420
|
+
- Admiral last hour: 0 new interventions since 15:25 UTC; admiral probe confirmed alive (PID 4075121, 4+ days uptime; resume.md had stale PID 2251231); current sessions not triggering patterns
|
|
1421
|
+
- vLLM 400s: 0; llm_balancer PID 713929 on :8001 healthy; vLLM gemma4 container up; GH issues: 0 open
|
|
1422
|
+
- 2 unreleased commits (8ddf09d search_replace-dominates-file FORCE_STOP, cc0c467 bash/read alternating loop) will ship as v2.7.28 at 17:00 UTC auto_release
|
|
1423
|
+
- Action this tick: no new drydock bugs found; all services healthy; no commits
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1632550
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.27 → drydock_cli-2.7.28}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|