drydock-cli 2.7.18__tar.gz → 2.7.19__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.19/.auto_release.lock +1 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/PKG-INFO +1 -1
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/read_file.py +23 -11
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/pyproject.toml +1 -1
- drydock_cli-2.7.19/tests/tools/test_read_file_dedup_reembed.py +136 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/trip_log.md +35 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/uv.lock +1 -1
- drydock_cli-2.7.18/.auto_release.lock +0 -1
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.gitignore +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.python-version +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.typos.toml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/AGENTS.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/Admiral.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/CLAUDE.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/LICENSE +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/NOTICE +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/PRD.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/action.yml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/docs/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock_terms.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/flake.lock +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/flake.nix +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/nohup.out +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/config_base.toml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/config_best.toml +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/experimenter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/kernel.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/proposer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/research/results.tsv +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/resume.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/install.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/test/project/dummy +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/conftest.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/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.18 → drydock_cli-2.7.19}/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.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.18 → drydock_cli-2.7.19}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
361748
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.19
|
|
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
|
|
@@ -111,19 +111,29 @@ class ReadFile(
|
|
|
111
111
|
and prior.get("offset") == args.offset
|
|
112
112
|
and prior.get("limit") == args.limit
|
|
113
113
|
):
|
|
114
|
+
# Re-embed the cached content so the model has it even if the
|
|
115
|
+
# earlier tool_result was truncated by _truncate_old_tool_results.
|
|
116
|
+
# Pointing at a stale/truncated prior result causes re-read loops.
|
|
117
|
+
cached_content = prior.get("content", "")
|
|
118
|
+
prior_lines = prior.get("lines_read", 0)
|
|
119
|
+
dedup_count = prior.get("dedup_count", 0)
|
|
120
|
+
if dedup_count == 0:
|
|
121
|
+
header = "[Unchanged since last read — content re-embedded]\n"
|
|
122
|
+
else:
|
|
123
|
+
header = (
|
|
124
|
+
f"[REPEATED READ #{dedup_count + 1}: file has not changed across your last "
|
|
125
|
+
f"{dedup_count + 1} reads with these exact arguments. "
|
|
126
|
+
f"Reading again will produce this same result. "
|
|
127
|
+
f"To make progress: write or edit a file, use offset= to read a different section, "
|
|
128
|
+
f"or move on to the next task.]\n"
|
|
129
|
+
)
|
|
130
|
+
if read_state is not None:
|
|
131
|
+
read_state[path_key] = {**prior, "dedup_count": dedup_count + 1}
|
|
114
132
|
yield ReadFileResult(
|
|
115
133
|
path=path_key,
|
|
116
|
-
content=
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
f"({file_path.name}, mtime unchanged, same offset/limit). "
|
|
120
|
-
"Use the content from the earlier Read tool_result — "
|
|
121
|
-
"do NOT re-read. If you need to take action, call "
|
|
122
|
-
"search_replace or write_file on what you already have.\n"
|
|
123
|
-
"</system-reminder>"
|
|
124
|
-
),
|
|
125
|
-
lines_read=0,
|
|
126
|
-
was_truncated=True,
|
|
134
|
+
content=f"{header}{cached_content}",
|
|
135
|
+
lines_read=prior_lines,
|
|
136
|
+
was_truncated=prior.get("was_truncated", False),
|
|
127
137
|
)
|
|
128
138
|
return
|
|
129
139
|
|
|
@@ -151,6 +161,8 @@ class ReadFile(
|
|
|
151
161
|
"timestamp": current_mtime,
|
|
152
162
|
"offset": args.offset,
|
|
153
163
|
"limit": args.limit,
|
|
164
|
+
"lines_read": len(read_result.lines),
|
|
165
|
+
"was_truncated": read_result.was_truncated,
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
yield ReadFileResult(
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Regression test: read_file dedup re-embeds cached content instead of pointing
|
|
2
|
+
at a possibly-truncated prior tool_result.
|
|
3
|
+
|
|
4
|
+
The model (Gemma 4) looped re-reading cli.py with limit=100 because:
|
|
5
|
+
1. First read: stored in read_state, returned truncated content.
|
|
6
|
+
2. _truncate_old_tool_results pruned that tool_result from message history.
|
|
7
|
+
3. Second read (same offset/limit/mtime): dedup fired with "use earlier result."
|
|
8
|
+
4. Model couldn't find the earlier result (truncated) and re-read again → loop.
|
|
9
|
+
|
|
10
|
+
Fix: when dedup fires, embed the cached content directly in the response
|
|
11
|
+
rather than pointing at the prior (possibly absent) tool_result.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import pytest
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from unittest.mock import MagicMock
|
|
18
|
+
|
|
19
|
+
from drydock.core.tools.base import BaseToolState
|
|
20
|
+
from drydock.core.tools.builtins.read_file import ReadFile, ReadFileArgs, ReadFileResult, ReadFileToolConfig
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def _run_result(tool, args, ctx) -> ReadFileResult:
|
|
24
|
+
async for event in tool.run(args, ctx):
|
|
25
|
+
if isinstance(event, ReadFileResult):
|
|
26
|
+
return event
|
|
27
|
+
raise AssertionError("no ReadFileResult yielded")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@pytest.mark.asyncio
|
|
31
|
+
async def test_dedup_reembeds_cached_content(tmp_path):
|
|
32
|
+
"""Second identical read returns cached content, not a pointer stub."""
|
|
33
|
+
f = tmp_path / "cli.py"
|
|
34
|
+
f.write_text("def main():\n pass\n")
|
|
35
|
+
|
|
36
|
+
tool = ReadFile(ReadFileToolConfig(), BaseToolState())
|
|
37
|
+
read_state: dict = {}
|
|
38
|
+
ctx = MagicMock()
|
|
39
|
+
ctx.read_file_state = read_state
|
|
40
|
+
|
|
41
|
+
args = ReadFileArgs(path=str(f), offset=0, limit=100)
|
|
42
|
+
|
|
43
|
+
# First read populates the cache.
|
|
44
|
+
result1 = await _run_result(tool, args, ctx)
|
|
45
|
+
assert "def main" in result1.content
|
|
46
|
+
|
|
47
|
+
# Second read with same args/mtime must return real content, not a pointer.
|
|
48
|
+
result2 = await _run_result(tool, args, ctx)
|
|
49
|
+
assert "def main" in result2.content, "dedup must re-embed content, not point at prior result"
|
|
50
|
+
assert "re-embedded" in result2.content
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@pytest.mark.asyncio
|
|
54
|
+
async def test_dedup_does_not_fire_after_file_changes(tmp_path):
|
|
55
|
+
"""Dedup must not fire if the file has been modified on disk."""
|
|
56
|
+
f = tmp_path / "cli.py"
|
|
57
|
+
f.write_text("version = 1\n")
|
|
58
|
+
|
|
59
|
+
tool = ReadFile(ReadFileToolConfig(), BaseToolState())
|
|
60
|
+
read_state: dict = {}
|
|
61
|
+
ctx = MagicMock()
|
|
62
|
+
ctx.read_file_state = read_state
|
|
63
|
+
|
|
64
|
+
args = ReadFileArgs(path=str(f), offset=0, limit=100)
|
|
65
|
+
|
|
66
|
+
result1 = await _run_result(tool, args, ctx)
|
|
67
|
+
assert "version = 1" in result1.content
|
|
68
|
+
|
|
69
|
+
# Modify the file (mtime changes).
|
|
70
|
+
import time; time.sleep(0.01)
|
|
71
|
+
f.write_text("version = 2\n")
|
|
72
|
+
|
|
73
|
+
result2 = await _run_result(tool, args, ctx)
|
|
74
|
+
assert "version = 2" in result2.content, "should read updated file, not cached content"
|
|
75
|
+
assert "re-embedded" not in result2.content
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@pytest.mark.asyncio
|
|
79
|
+
async def test_dedup_escalates_on_repeated_reads(tmp_path):
|
|
80
|
+
"""Third and later identical reads get an escalating REPEATED READ advisory."""
|
|
81
|
+
f = tmp_path / "cli.py"
|
|
82
|
+
f.write_text("def main():\n pass\n")
|
|
83
|
+
|
|
84
|
+
tool = ReadFile(ReadFileToolConfig(), BaseToolState())
|
|
85
|
+
read_state: dict = {}
|
|
86
|
+
ctx = MagicMock()
|
|
87
|
+
ctx.read_file_state = read_state
|
|
88
|
+
|
|
89
|
+
args = ReadFileArgs(path=str(f), offset=0, limit=100)
|
|
90
|
+
|
|
91
|
+
# First read: no dedup.
|
|
92
|
+
r1 = await _run_result(tool, args, ctx)
|
|
93
|
+
assert "re-embedded" not in r1.content
|
|
94
|
+
assert "REPEATED READ" not in r1.content
|
|
95
|
+
|
|
96
|
+
# Second read: first dedup hit — gentle re-embed message.
|
|
97
|
+
r2 = await _run_result(tool, args, ctx)
|
|
98
|
+
assert "re-embedded" in r2.content
|
|
99
|
+
assert "REPEATED READ" not in r2.content
|
|
100
|
+
assert read_state[str(f)]["dedup_count"] == 1
|
|
101
|
+
|
|
102
|
+
# Third read: second dedup hit — escalated advisory.
|
|
103
|
+
r3 = await _run_result(tool, args, ctx)
|
|
104
|
+
assert "REPEATED READ #2" in r3.content
|
|
105
|
+
assert "def main" in r3.content
|
|
106
|
+
assert read_state[str(f)]["dedup_count"] == 2
|
|
107
|
+
|
|
108
|
+
# Fourth read: third dedup hit — counter increments.
|
|
109
|
+
r4 = await _run_result(tool, args, ctx)
|
|
110
|
+
assert "REPEATED READ #3" in r4.content
|
|
111
|
+
assert read_state[str(f)]["dedup_count"] == 3
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@pytest.mark.asyncio
|
|
115
|
+
async def test_dedup_stores_lines_read_and_was_truncated(tmp_path):
|
|
116
|
+
"""read_state must record lines_read and was_truncated for correct dedup re-embedding."""
|
|
117
|
+
f = tmp_path / "big.py"
|
|
118
|
+
f.write_text("\n".join(f"line{i}" for i in range(1, 201))) # 200 lines
|
|
119
|
+
|
|
120
|
+
tool = ReadFile(ReadFileToolConfig(), BaseToolState())
|
|
121
|
+
read_state: dict = {}
|
|
122
|
+
ctx = MagicMock()
|
|
123
|
+
ctx.read_file_state = read_state
|
|
124
|
+
|
|
125
|
+
args = ReadFileArgs(path=str(f), offset=0, limit=50)
|
|
126
|
+
await _run_result(tool, args, ctx)
|
|
127
|
+
|
|
128
|
+
path_key = str(f)
|
|
129
|
+
assert "lines_read" in read_state[path_key]
|
|
130
|
+
assert read_state[path_key]["lines_read"] == 50
|
|
131
|
+
assert read_state[path_key]["was_truncated"] is True
|
|
132
|
+
|
|
133
|
+
# Second read: dedup fires, re-embeds with correct metadata.
|
|
134
|
+
result2 = await _run_result(tool, args, ctx)
|
|
135
|
+
assert result2.lines_read == 50
|
|
136
|
+
assert result2.was_truncated is True
|
|
@@ -3,6 +3,22 @@
|
|
|
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-29 06:10 UTC tick
|
|
7
|
+
- Stress: 141/1658 (PID 270529, new run started by babysitter; prior run PID 3713698 dead)
|
|
8
|
+
- Write rate: 38% (significant regression from 74% sustained — SKIP rate 44% vs 13% baseline in prior run)
|
|
9
|
+
- Admiral last 30 min: loop:bash, loop:search_replace, loop:read_file, struggle:search_replace all firing — normal model-behavior noise
|
|
10
|
+
- vLLM 400s: 0
|
|
11
|
+
- GH issues: 0 open
|
|
12
|
+
- Action this tick: No fix committed. Investigated SKIP regression: 62/141 prompts skipped with "TUI did not accept after 3 retries". SKIPs began at prompt 10 in the very first session. Pattern suggests TUI is busy processing previous turn output when harness sends next prompt; watcher times out after 3×120s without seeing new user message in session log. v2.7.18 read_file escalation changes (2nd+ identical dedup escalates with full context) may be causing model to stay in extended tool-call loops after each turn "completes", keeping the session non-quiet. No actionable drydock source fix identified within budget — flagged for user to investigate on return (2026-05-01).
|
|
13
|
+
|
|
14
|
+
## 2026-04-29 04:35 UTC tick
|
|
15
|
+
- Stress: 128/1658 (new run restarted by babysitter; prior run PID 3713698 dead at 680/1658)
|
|
16
|
+
- Write rate: 39% (was 74% sustained — SKIP rate elevated at ~30% vs 8% baseline)
|
|
17
|
+
- Admiral last 30 min: active — loop:read_file(tool_agent/cli.py, limit=100) firing repeatedly; struggle:search_replace counts reaching 30-36 per prompt
|
|
18
|
+
- vLLM 400s: 0
|
|
19
|
+
- GH issues: 0 open
|
|
20
|
+
- Action this tick: triggered manual auto_release to ship v2.7.18 early (tagged, PyPI upload confirmed). The 4 unreleased commits (read_file pagination hint, search_replace empty-content soft advisory, write_file dir-path detection, write_file path inference) directly address the read_file loop pattern visible in admiral logs: model reads cli.py with limit=100, gets no truncation hint, retries identically 3+ times, then struggles with search_replace on text it couldn't see. v2.7.18 adds the pagination hint that breaks this cycle. Stress run is live at 128/1658 and will pick up v2.7.18 at next session reset.
|
|
21
|
+
|
|
6
22
|
**Pause loop:** `touch /data3/drydock/.pause_autonomous_loop`
|
|
7
23
|
**Resume loop:** `rm /data3/drydock/.pause_autonomous_loop`
|
|
8
24
|
**Live log:** `/data3/drydock/logs/autonomous_review.log` (full Claude output + errors)
|
|
@@ -466,3 +482,22 @@ restarted, cron self-match bug fixed in this same session).
|
|
|
466
482
|
- GH issues: 0 open
|
|
467
483
|
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 up, balancer curl verified
|
|
468
484
|
- Action this tick: committed fix (11f1752) — search_replace empty-content ToolError converted to soft advisory SearchReplaceResult; tracks consecutive empty-content calls per file and escalates with project file listing on 2nd+ offense; 3 regression tests added; auto-ships as v2.7.18 at next 06:00 UTC cron tick
|
|
485
|
+
|
|
486
|
+
## 2026-04-29 05:10 UTC tick
|
|
487
|
+
- Stress: 132/1658 (new run, PID 270529, log /tmp/stress_2000_1777408317.log, 8.5h elapsed)
|
|
488
|
+
- Write rate: 40% (last 65 prompts)
|
|
489
|
+
- SKIP rate: 55/132 (42%) — TUI queuing stress prompts while busy; harness detection mismatch, not a drydock bug
|
|
490
|
+
- Admiral last 30 min: loop:read_file (cli.py, limit=100) ~6 fires, struggle:search_replace ~10 fires, empty_after_tool 2 fires
|
|
491
|
+
- vLLM 400s: 0
|
|
492
|
+
- GH issues: 0 open
|
|
493
|
+
- Action this tick: committed fix(read_file): re-embed cached content on dedup — when _truncate_old_tool_results pruned the earlier tool_result, the dedup stub pointed at absent content causing re-read loops; now embeds cached content directly. 3 regression tests added. Will ship at next 0/6/12/18 UTC auto-release tick.
|
|
494
|
+
|
|
495
|
+
## 2026-04-29 05:50 UTC tick
|
|
496
|
+
- Stress: 137/1658 (PID 270529 alive, new run restarted from 0 since previous tick; babysitter keeps it alive)
|
|
497
|
+
- Write rate: 32% (last 50 completed prompts; low due to high SKIP rate and lightweight utility prompts)
|
|
498
|
+
- SKIP rate: 66/137 = 48% (elevated; concentrated in timezone/date-util prompts where TUI is busy with prior session)
|
|
499
|
+
- Admiral last 30 min: 25 fires — loop:read_file::cli.py(limit=100) dominant (30+ occurrences across session), struggle:search_replace, empty_after_tool all known patterns
|
|
500
|
+
- vLLM 400s: 0
|
|
501
|
+
- GH issues: 0 open
|
|
502
|
+
- Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 container up, stress harness PID 270529 running
|
|
503
|
+
- Action this tick: committed fix(read_file) ff5217d — escalating REPEATED READ #N advisory on 2nd+ identical dedup read; 1 new regression test (4 total in test file pass); auto-ships at next 0/6/12/18 UTC tick
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
341821
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.18 → drydock_cli-2.7.19}/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.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/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.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/banner/petit_chat.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/braille_renderer.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/chat_input/text_area.py
RENAMED
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/checkpoint_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/context_progress.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.7.18 → drydock_cli-2.7.19}/drydock/cli/textual_ui/widgets/no_markup_static.py
RENAMED
|
File without changes
|
|
File without changes
|