drydock-cli 2.8.19__tar.gz → 2.8.21__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.8.21/.auto_release.lock +1 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/PKG-INFO +30 -1
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/README.md +29 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/SOVEREIGN_PRD.md +67 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/commands.py +7 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/app.py +106 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/agent_loop.py +108 -3
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/gemma4.md +14 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/mcp_resources.py +4 -4
- drydock_cli-2.8.21/drydock/curiosity/__init__.py +40 -0
- drydock_cli-2.8.21/drydock/curiosity/__main__.py +183 -0
- drydock_cli-2.8.21/drydock/curiosity/gap_detector.py +128 -0
- drydock_cli-2.8.21/drydock/curiosity/item.py +58 -0
- drydock_cli-2.8.21/drydock/curiosity/queue.py +112 -0
- drydock_cli-2.8.21/drydock/curiosity/surprise.py +112 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/pyproject.toml +1 -1
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/autonomous_review_prompt.md +9 -1
- drydock_cli-2.8.21/scripts/backfill_hle_curiosity.py +118 -0
- drydock_cli-2.8.21/scripts/curiosity_idle_cycle.sh +145 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/deploy_to_github.sh +1 -1
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/hle_eval.py +42 -1
- drydock_cli-2.8.21/tests/test_curiosity.py +266 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_loop_detection.py +129 -0
- drydock_cli-2.8.21/tests/test_mcp_settings.py +18 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/trip_log.md +230 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/uv.lock +1 -1
- drydock_cli-2.8.19/.auto_release.lock +0 -1
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.gitignore +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.python-version +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.typos.toml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.vscode/extensions.json +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.vscode/launch.json +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/.vscode/settings.json +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/AGENTS.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/Admiral.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/CHANGELOG.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/CLAUDE.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/DEEP_NOIR_PRD.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/HLE_PRD.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/JETSON_BENCH.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/LICENSE +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/NOTICE +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/TRIAGE_v1.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/action.yml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/README.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/README.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/acp-setup.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/BASELINE_412.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/Drydock_rebrand.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/PRD.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/drydock_terms.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/archive/resume.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/__main__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/logger.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/slug.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/types.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/core/utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/config.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock/whats_new.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/drydock-acp.spec +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/flake.lock +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/flake.nix +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/outlook_draft_assistant.tar.gz +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/README.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/config_base.toml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/config_best.toml +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/domain_spec.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/experimenter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/kernel.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/mini_prd.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/proposer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/research/results.tsv +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/README.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/auto_test_loop.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/monitor_test_battery.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/overnight_agents_test.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/test_bank.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/test_full.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/test_smoke.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/archive/tui_test.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/backup.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/bump_version.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/classify_pulse.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/consume_retrieval_queue.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/fetch_arxiv_abstracts.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/hle_eval_seed.jsonl +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/notify_release.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/perf_baseline_when_idle.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/perf_sweep.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/queue_top.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/shakedown.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/start_steering_sidecar.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/conftest.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/common.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/mock/utils.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/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.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_agents.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_classifier.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_hle_typing.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_integration.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_message_id.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_middleware.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_smoke.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_workloads.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/worked_examples/README.md +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.8.19 → drydock_cli-2.8.21}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
933241
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.21
|
|
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
|
|
@@ -285,6 +285,7 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
|
|
|
285
285
|
- **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
|
|
286
286
|
- **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
|
|
287
287
|
- **MCP Support**: Connect Model Context Protocol servers via the `/mcp` slash command or `~/.drydock/config.toml`. See [MCP Servers](#mcp-servers).
|
|
288
|
+
- **Curiosity Layer**: Engineered intellectual drive (SOVEREIGN_PRD §5.7). Auto-prefetches GraphRAG evidence before the first LLM turn so models retrieve before asserting; detects unfamiliar terms in every user message and enqueues them as learning signals; surfaces a learning queue via `/curiosity`; HLE failures and tool-result surprises automatically feed the queue. `autonomous_review` consumes top items per tick to ship corpus/prompt updates.
|
|
288
289
|
- **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
|
|
289
290
|
|
|
290
291
|
### Built-in Agents
|
|
@@ -435,6 +436,34 @@ headers = { "X-Tenant" = "drydock" }
|
|
|
435
436
|
|
|
436
437
|
Verify a server loaded by running `/help` inside the TUI and checking for `<name>__*` prefixed tools. Server errors show up in `~/.drydock/logs/`.
|
|
437
438
|
|
|
439
|
+
### Curiosity Layer
|
|
440
|
+
|
|
441
|
+
DryDock has an engineered curiosity subsystem (SOVEREIGN_PRD §5.7) that turns "investigate before asserting" from a prompt suggestion into a structural feature:
|
|
442
|
+
|
|
443
|
+
- **Auto-retrieve before first turn**: when a project has a GraphRAG index at `~/.drydock/graphrag.sqlite`, every user message triggers a retrieve pass; high-quality hits get injected as a synthetic tool result before the LLM sees the message. Opt out with `DRYDOCK_AUTO_RETRIEVE=0`.
|
|
444
|
+
- **Gap detection**: every user message also runs through a heuristic that extracts candidate unfamiliar terms (paper titles, library names, dotted identifiers, ALL-CAPS acronyms, snake_case symbols, versioned packages, filesystem paths). Each becomes an `UNKNOWN_TERM` entry in the learning queue.
|
|
445
|
+
- **Surprise scoring**: when a tool result contradicts a confident assistant claim (e.g. "all tests pass" right before a Traceback), the conflict is logged as `EVIDENCE_CONFLICT` for review.
|
|
446
|
+
- **HLE feedback**: every failed HLE answer auto-enqueues an `HLE_FAILURE` item — the eval becomes a learning signal, not just a scoreboard.
|
|
447
|
+
|
|
448
|
+
Inspect from the TUI:
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
/curiosity # counts by kind: HLE_FAILURE, EVIDENCE_CONFLICT, UNKNOWN_TERM, IDLE_EXPLORATION
|
|
452
|
+
/curiosity top 5 # top 5 highest-priority pending items
|
|
453
|
+
/curiosity consume <fingerprint> # mark an item handled
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Or from the shell:
|
|
457
|
+
|
|
458
|
+
```
|
|
459
|
+
python -m drydock.curiosity stats
|
|
460
|
+
python -m drydock.curiosity top --limit 10
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
The queue lives at `~/.drydock/dispatch/curiosity.jsonl`. `autonomous_review` (cron-launched every 30 min) reads the top items and ships corpus ingests, prompt rules, or AGENTS.md hints from them, tagging commits with `addresses curiosity:<id>:`.
|
|
464
|
+
|
|
465
|
+
Disable the entire layer with `DRYDOCK_CURIOSITY=0`.
|
|
466
|
+
|
|
438
467
|
## Testing
|
|
439
468
|
|
|
440
469
|
DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
|
|
@@ -230,6 +230,7 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
|
|
|
230
230
|
- **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
|
|
231
231
|
- **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
|
|
232
232
|
- **MCP Support**: Connect Model Context Protocol servers via the `/mcp` slash command or `~/.drydock/config.toml`. See [MCP Servers](#mcp-servers).
|
|
233
|
+
- **Curiosity Layer**: Engineered intellectual drive (SOVEREIGN_PRD §5.7). Auto-prefetches GraphRAG evidence before the first LLM turn so models retrieve before asserting; detects unfamiliar terms in every user message and enqueues them as learning signals; surfaces a learning queue via `/curiosity`; HLE failures and tool-result surprises automatically feed the queue. `autonomous_review` consumes top items per tick to ship corpus/prompt updates.
|
|
233
234
|
- **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
|
|
234
235
|
|
|
235
236
|
### Built-in Agents
|
|
@@ -380,6 +381,34 @@ headers = { "X-Tenant" = "drydock" }
|
|
|
380
381
|
|
|
381
382
|
Verify a server loaded by running `/help` inside the TUI and checking for `<name>__*` prefixed tools. Server errors show up in `~/.drydock/logs/`.
|
|
382
383
|
|
|
384
|
+
### Curiosity Layer
|
|
385
|
+
|
|
386
|
+
DryDock has an engineered curiosity subsystem (SOVEREIGN_PRD §5.7) that turns "investigate before asserting" from a prompt suggestion into a structural feature:
|
|
387
|
+
|
|
388
|
+
- **Auto-retrieve before first turn**: when a project has a GraphRAG index at `~/.drydock/graphrag.sqlite`, every user message triggers a retrieve pass; high-quality hits get injected as a synthetic tool result before the LLM sees the message. Opt out with `DRYDOCK_AUTO_RETRIEVE=0`.
|
|
389
|
+
- **Gap detection**: every user message also runs through a heuristic that extracts candidate unfamiliar terms (paper titles, library names, dotted identifiers, ALL-CAPS acronyms, snake_case symbols, versioned packages, filesystem paths). Each becomes an `UNKNOWN_TERM` entry in the learning queue.
|
|
390
|
+
- **Surprise scoring**: when a tool result contradicts a confident assistant claim (e.g. "all tests pass" right before a Traceback), the conflict is logged as `EVIDENCE_CONFLICT` for review.
|
|
391
|
+
- **HLE feedback**: every failed HLE answer auto-enqueues an `HLE_FAILURE` item — the eval becomes a learning signal, not just a scoreboard.
|
|
392
|
+
|
|
393
|
+
Inspect from the TUI:
|
|
394
|
+
|
|
395
|
+
```
|
|
396
|
+
/curiosity # counts by kind: HLE_FAILURE, EVIDENCE_CONFLICT, UNKNOWN_TERM, IDLE_EXPLORATION
|
|
397
|
+
/curiosity top 5 # top 5 highest-priority pending items
|
|
398
|
+
/curiosity consume <fingerprint> # mark an item handled
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Or from the shell:
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
python -m drydock.curiosity stats
|
|
405
|
+
python -m drydock.curiosity top --limit 10
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
The queue lives at `~/.drydock/dispatch/curiosity.jsonl`. `autonomous_review` (cron-launched every 30 min) reads the top items and ships corpus ingests, prompt rules, or AGENTS.md hints from them, tagging commits with `addresses curiosity:<id>:`.
|
|
409
|
+
|
|
410
|
+
Disable the entire layer with `DRYDOCK_CURIOSITY=0`.
|
|
411
|
+
|
|
383
412
|
## Testing
|
|
384
413
|
|
|
385
414
|
DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
|
|
@@ -457,6 +457,73 @@ candidate + tool wiring):**
|
|
|
457
457
|
May 2026 baseline (1/20 = 5 %, 18/20 "empty"); target ≥ 25 %
|
|
458
458
|
in Phase 3, ≥ 40 % in Phase 4.
|
|
459
459
|
|
|
460
|
+
**Implementation plan (tiered for ROI per engineering hour):**
|
|
461
|
+
|
|
462
|
+
### Tier 1 — prompt-level + signal plumbing — *shipped 2026-05-12 (v2.8.20)*
|
|
463
|
+
|
|
464
|
+
The cheapest, highest-leverage cut. Lands the §5.7 directive as
|
|
465
|
+
observable model behavior and starts populating the queue immediately
|
|
466
|
+
without waiting on consumer infrastructure.
|
|
467
|
+
|
|
468
|
+
- ✅ `drydock.curiosity` module — `CuriosityItem` + `CuriosityKind`
|
|
469
|
+
enum, append-only JSONL queue at `~/.drydock/dispatch/curiosity.jsonl`
|
|
470
|
+
with 7-day fingerprint dedup, `detect_gaps()` heuristic extractor for
|
|
471
|
+
unfamiliar-term candidates, `score_surprise()` across three evidence
|
|
472
|
+
kinds (judge_verdict, retrieve, tool_result)
|
|
473
|
+
- ✅ Prompt directive in `gemma4.md` — six lines telling the model its
|
|
474
|
+
default posture is "investigate, then assert": first tool call on a
|
|
475
|
+
named-thing user message is `retrieve`, prefer evidence on conflict,
|
|
476
|
+
investigate before asking for clarification
|
|
477
|
+
- ✅ HLE → curiosity feedback loop — `scripts/hle_eval.py` enqueues a
|
|
478
|
+
`CuriosityItem` on every NO outcome (kind=`HLE_FAILURE`, high
|
|
479
|
+
confidence when `method=empty` — the GraphRAG-underused failure
|
|
480
|
+
mode), so every eval run produces ≥10 learning signals
|
|
481
|
+
- ✅ 26 unit tests in `tests/test_curiosity.py` added to the deploy gate
|
|
482
|
+
|
|
483
|
+
### Tier 2 — consumer side + forcing function — *next week*
|
|
484
|
+
|
|
485
|
+
The prompt rule alone gets the model to retrieve more, but Gemma 4 will
|
|
486
|
+
still default to prior under context pressure (per
|
|
487
|
+
`project_graphrag_underused.md`). Tier 2 closes that gap and starts
|
|
488
|
+
shipping fixes from the queue.
|
|
489
|
+
|
|
490
|
+
- ▢ `agent_loop.py` first-turn hook — call `detect_gaps(user_msg)`
|
|
491
|
+
before the first LLM call; if any candidates returned, automatically
|
|
492
|
+
invoke `retrieve` on the top 2–3 and inject results onto the user
|
|
493
|
+
message as `[CURIOSITY PREFETCH]` context. Forces evidence into the
|
|
494
|
+
window before the model can answer from prior. ~40 lines.
|
|
495
|
+
- ▢ `autonomous_review.sh` curiosity consumer — read
|
|
496
|
+
`~/.drydock/dispatch/curiosity.jsonl`, pick highest-confidence
|
|
497
|
+
unconsumed item, generate a fix proposal (AGENTS.md hint / prompt
|
|
498
|
+
rule / GraphRAG ingest plan), commit with subject prefix
|
|
499
|
+
`addresses curiosity:<fingerprint>:`. Mirrors the existing harness
|
|
500
|
+
bucket consumer. ~80 lines.
|
|
501
|
+
- ▢ Surprise-on-tool-result scoring inside `_handle_tool_response` —
|
|
502
|
+
when `score_surprise()` exceeds threshold, enqueue an
|
|
503
|
+
`EVIDENCE_CONFLICT` item automatically. Catches confident-but-wrong
|
|
504
|
+
claims without operator priming.
|
|
505
|
+
- ▢ HLE re-run with the tier-1 prompt to measure adherence — the
|
|
506
|
+
`retrieve called on ≥80% of HLE Q` criterion needs an actual
|
|
507
|
+
measurement to confirm the prompt rule moves the needle.
|
|
508
|
+
|
|
509
|
+
### Tier 3 — Phase 3 proper — *after Deep Noir vectors land*
|
|
510
|
+
|
|
511
|
+
The advanced layer that depends on infrastructure not yet in place.
|
|
512
|
+
|
|
513
|
+
- ▢ Deep Noir "exploration" mode vector candidate — train from
|
|
514
|
+
curiosity-log traces (retrieve calls, hypothesis enumeration,
|
|
515
|
+
reading-before-writing). Becomes the steerable behavioral prior
|
|
516
|
+
for curiosity once `drydock.steering` has real vectors.
|
|
517
|
+
- ▢ Idle-cycle exploration worker — when drydock is idle > N minutes
|
|
518
|
+
and the classifier dispatch queues are non-empty, run one bounded
|
|
519
|
+
exploratory cycle (pick highest-priority pattern, ingest fresh logs,
|
|
520
|
+
generate hypothesis, log to `~/.drydock/curiosity_log.md`). Bounded
|
|
521
|
+
by a tokens-per-day budget so curiosity does not starve user work.
|
|
522
|
+
- ▢ Frustration / surprise detection across the full session, not
|
|
523
|
+
just single turns — when the operator repeatedly redirects on the
|
|
524
|
+
same topic, treat it as a high-confidence curiosity signal even if
|
|
525
|
+
no individual turn tripped the per-turn detectors.
|
|
526
|
+
|
|
460
527
|
---
|
|
461
528
|
|
|
462
529
|
# 6. Adaptive Failure Logic
|
|
@@ -134,6 +134,13 @@ class CommandRegistry:
|
|
|
134
134
|
"/mcp remove <name> | /mcp examples).",
|
|
135
135
|
handler="_mcp_command",
|
|
136
136
|
),
|
|
137
|
+
"curiosity": Command(
|
|
138
|
+
aliases=frozenset(["/curiosity"]),
|
|
139
|
+
description="Inspect the curiosity learning queue "
|
|
140
|
+
"(usage: /curiosity | /curiosity top | "
|
|
141
|
+
"/curiosity stats | /curiosity consume <id>).",
|
|
142
|
+
handler="_curiosity_command",
|
|
143
|
+
),
|
|
137
144
|
}
|
|
138
145
|
|
|
139
146
|
for command in excluded_commands:
|
|
@@ -1658,6 +1658,112 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1658
1658
|
"remove <name> | examples}`"
|
|
1659
1659
|
))
|
|
1660
1660
|
|
|
1661
|
+
async def _curiosity_command(self, args: str = "") -> None:
|
|
1662
|
+
"""Inspect the curiosity learning queue (SOVEREIGN_PRD §5.7)."""
|
|
1663
|
+
try:
|
|
1664
|
+
from drydock.curiosity.queue import queue_path, read_recent
|
|
1665
|
+
from drydock.curiosity.__main__ import (
|
|
1666
|
+
_KIND_PRIORITY, _load_consumed,
|
|
1667
|
+
)
|
|
1668
|
+
except Exception as e:
|
|
1669
|
+
await self._mount_and_scroll(
|
|
1670
|
+
UserCommandMessage(f"Curiosity module unavailable: {e}")
|
|
1671
|
+
)
|
|
1672
|
+
return
|
|
1673
|
+
|
|
1674
|
+
parts = args.strip().split(None, 1)
|
|
1675
|
+
sub = parts[0].lower() if parts else "stats"
|
|
1676
|
+
rest = parts[1].strip() if len(parts) > 1 else ""
|
|
1677
|
+
|
|
1678
|
+
consumed = _load_consumed()
|
|
1679
|
+
items = list(reversed(read_recent(limit=10_000)))
|
|
1680
|
+
pending = [i for i in items if i.get("id") not in consumed]
|
|
1681
|
+
|
|
1682
|
+
if sub in ("", "stats", "status"):
|
|
1683
|
+
if not items:
|
|
1684
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1685
|
+
f"### Curiosity queue\n\n_Empty._\n\n"
|
|
1686
|
+
f"Queue: `{queue_path()}`\n\n"
|
|
1687
|
+
"Items land here when the agent detects unfamiliar terms "
|
|
1688
|
+
"(SOVEREIGN_PRD §5.7), when tool results contradict the "
|
|
1689
|
+
"model's assertions, or when an HLE answer scores NO. "
|
|
1690
|
+
"`autonomous_review` consumes the top items per tick."
|
|
1691
|
+
))
|
|
1692
|
+
return
|
|
1693
|
+
by_kind: dict[str, dict[str, int]] = {}
|
|
1694
|
+
for it in items:
|
|
1695
|
+
k = it.get("kind", "?")
|
|
1696
|
+
b = by_kind.setdefault(k, {"total": 0, "pending": 0})
|
|
1697
|
+
b["total"] += 1
|
|
1698
|
+
if it.get("id") not in consumed:
|
|
1699
|
+
b["pending"] += 1
|
|
1700
|
+
lines = [
|
|
1701
|
+
"### Curiosity queue",
|
|
1702
|
+
"",
|
|
1703
|
+
f"Queue: `{queue_path()}`",
|
|
1704
|
+
f"Total: **{len(items)}** items "
|
|
1705
|
+
f"({len(pending)} pending, {len(consumed)} consumed)",
|
|
1706
|
+
"",
|
|
1707
|
+
"| kind | total | pending |",
|
|
1708
|
+
"|---|---:|---:|",
|
|
1709
|
+
]
|
|
1710
|
+
for k in sorted(by_kind, key=lambda x: _KIND_PRIORITY.get(x, 99)):
|
|
1711
|
+
b = by_kind[k]
|
|
1712
|
+
lines.append(f"| `{k}` | {b['total']} | {b['pending']} |")
|
|
1713
|
+
lines.append("")
|
|
1714
|
+
lines.append("`/curiosity top` for the highest-priority pending items.")
|
|
1715
|
+
await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
|
|
1716
|
+
return
|
|
1717
|
+
|
|
1718
|
+
if sub == "top":
|
|
1719
|
+
limit = 5
|
|
1720
|
+
if rest.isdigit():
|
|
1721
|
+
limit = max(1, min(20, int(rest)))
|
|
1722
|
+
ranked = sorted(pending, key=lambda x: (
|
|
1723
|
+
_KIND_PRIORITY.get(x.get("kind", ""), 99),
|
|
1724
|
+
-float(x.get("confidence", 0.0)),
|
|
1725
|
+
x.get("ts", ""),
|
|
1726
|
+
))[:limit]
|
|
1727
|
+
if not ranked:
|
|
1728
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1729
|
+
"_No pending curiosity items._"
|
|
1730
|
+
))
|
|
1731
|
+
return
|
|
1732
|
+
lines = [f"### Top {len(ranked)} pending curiosity items", ""]
|
|
1733
|
+
for i, it in enumerate(ranked, 1):
|
|
1734
|
+
term = it.get("term", "")[:140]
|
|
1735
|
+
ctx = it.get("context", "")[:200].replace("\n", " ")
|
|
1736
|
+
fp = it.get("id", "?")
|
|
1737
|
+
kind = it.get("kind", "?")
|
|
1738
|
+
conf = it.get("confidence", 0.0)
|
|
1739
|
+
lines.append(
|
|
1740
|
+
f"**{i}. `{kind}`** · conf={conf} · `{fp}`"
|
|
1741
|
+
)
|
|
1742
|
+
lines.append(f"- term: {term}")
|
|
1743
|
+
if ctx:
|
|
1744
|
+
lines.append(f"- context: {ctx}")
|
|
1745
|
+
lines.append("")
|
|
1746
|
+
await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
|
|
1747
|
+
return
|
|
1748
|
+
|
|
1749
|
+
if sub == "consume":
|
|
1750
|
+
if not rest:
|
|
1751
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1752
|
+
"Usage: `/curiosity consume <fingerprint>`"
|
|
1753
|
+
))
|
|
1754
|
+
return
|
|
1755
|
+
consumed.add(rest)
|
|
1756
|
+
from drydock.curiosity.__main__ import _save_consumed
|
|
1757
|
+
_save_consumed(consumed)
|
|
1758
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1759
|
+
f"Marked `{rest}` consumed. Total: {len(consumed)}."
|
|
1760
|
+
))
|
|
1761
|
+
return
|
|
1762
|
+
|
|
1763
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1764
|
+
"Usage: `/curiosity {stats | top [N] | consume <id>}`"
|
|
1765
|
+
))
|
|
1766
|
+
|
|
1661
1767
|
async def _admiral_apply_command(self, args: str = "") -> None:
|
|
1662
1768
|
"""Merge an Admiral-staged proposal branch into main."""
|
|
1663
1769
|
import subprocess
|
|
@@ -747,15 +747,29 @@ class AgentLoop:
|
|
|
747
747
|
# as a system note BEFORE the first LLM call. Zero behavior change
|
|
748
748
|
# when the index has nothing relevant; pure lift when it does.
|
|
749
749
|
#
|
|
750
|
-
#
|
|
751
|
-
#
|
|
752
|
-
|
|
750
|
+
# SOVEREIGN_PRD §5.7 acceptance #1: "retrieve called on ≥80% of HLE
|
|
751
|
+
# questions before any content token". Default ON now — the
|
|
752
|
+
# prefetch is a no-op when no GraphRAG db exists (early return),
|
|
753
|
+
# so users without a corpus are unaffected. Opt out with
|
|
754
|
+
# DRYDOCK_AUTO_RETRIEVE=0.
|
|
755
|
+
if os.environ.get("DRYDOCK_AUTO_RETRIEVE", "1").strip().lower() not in ("0", "false", "no"):
|
|
753
756
|
logger.warning("[AUTO-RETRIEVE] hook entry, query=%r", (user_msg or "")[:80])
|
|
754
757
|
try:
|
|
755
758
|
self._auto_prefetch_retrieve(user_msg)
|
|
756
759
|
except Exception as _e:
|
|
757
760
|
logger.warning("auto-prefetch retrieve failed (skipped): %s", _e, exc_info=True)
|
|
758
761
|
|
|
762
|
+
# === CURIOSITY GAP LOGGING ===
|
|
763
|
+
# SOVEREIGN_PRD §5.7 tier-2: extract candidate unfamiliar terms from
|
|
764
|
+
# the user message and enqueue UNKNOWN_TERM curiosity items. The
|
|
765
|
+
# queue is dedup'd by fingerprint over 7 days so the same recurring
|
|
766
|
+
# term doesn't flood it. Disabled by setting DRYDOCK_CURIOSITY=0.
|
|
767
|
+
if os.environ.get("DRYDOCK_CURIOSITY", "1").strip().lower() not in ("0", "false", "no"):
|
|
768
|
+
try:
|
|
769
|
+
self._log_curiosity_gaps(user_msg)
|
|
770
|
+
except Exception as _e:
|
|
771
|
+
logger.warning("curiosity gap logging failed (skipped): %s", _e)
|
|
772
|
+
|
|
759
773
|
try:
|
|
760
774
|
should_break_loop = False
|
|
761
775
|
tool_turns = 0
|
|
@@ -1965,6 +1979,65 @@ class AgentLoop:
|
|
|
1965
1979
|
result=result,
|
|
1966
1980
|
)
|
|
1967
1981
|
|
|
1982
|
+
# === CURIOSITY: SURPRISE-ON-TOOL-RESULT ===
|
|
1983
|
+
# SOVEREIGN_PRD §5.7: when a tool result contradicts a confident
|
|
1984
|
+
# assertion the model just made (e.g., "All tests pass" right before
|
|
1985
|
+
# a Traceback), score the surprise and enqueue an EVIDENCE_CONFLICT
|
|
1986
|
+
# item for autonomous_review. Gated by DRYDOCK_CURIOSITY=1 (default).
|
|
1987
|
+
if status == "failure" and os.environ.get(
|
|
1988
|
+
"DRYDOCK_CURIOSITY", "1"
|
|
1989
|
+
).strip().lower() not in ("0", "false", "no"):
|
|
1990
|
+
try:
|
|
1991
|
+
self._maybe_log_surprise(tool_call, text)
|
|
1992
|
+
except Exception as _e:
|
|
1993
|
+
logger.debug("surprise scoring skipped: %s", _e)
|
|
1994
|
+
|
|
1995
|
+
def _maybe_log_surprise(self, tool_call: Any, tool_text: str) -> None:
|
|
1996
|
+
"""Score the last assistant assertion against this tool result;
|
|
1997
|
+
enqueue an EVIDENCE_CONFLICT curiosity item if surprise is high."""
|
|
1998
|
+
try:
|
|
1999
|
+
from drydock.curiosity import (
|
|
2000
|
+
CuriosityItem, CuriosityKind, enqueue, score_surprise,
|
|
2001
|
+
)
|
|
2002
|
+
from drydock.curiosity.surprise import SURPRISE_THRESHOLD
|
|
2003
|
+
except Exception:
|
|
2004
|
+
return
|
|
2005
|
+
|
|
2006
|
+
# Walk backward to find the most recent assistant CONTENT (not a
|
|
2007
|
+
# bare tool-call message). That's the assertion to compare against.
|
|
2008
|
+
prior_assertion = ""
|
|
2009
|
+
for msg in reversed(self.messages):
|
|
2010
|
+
if msg.role == Role.assistant and (msg.content or "").strip():
|
|
2011
|
+
prior_assertion = (msg.content or "").strip()
|
|
2012
|
+
break
|
|
2013
|
+
if not prior_assertion:
|
|
2014
|
+
return
|
|
2015
|
+
|
|
2016
|
+
score = score_surprise(prior_assertion, tool_text, kind="tool_result")
|
|
2017
|
+
if score < SURPRISE_THRESHOLD:
|
|
2018
|
+
return
|
|
2019
|
+
|
|
2020
|
+
tool_name = ""
|
|
2021
|
+
try:
|
|
2022
|
+
tool_name = getattr(tool_call.function, "name", "") or ""
|
|
2023
|
+
except Exception:
|
|
2024
|
+
pass
|
|
2025
|
+
|
|
2026
|
+
enqueue(CuriosityItem(
|
|
2027
|
+
kind=CuriosityKind.EVIDENCE_CONFLICT,
|
|
2028
|
+
term=f"{tool_name} contradicted assistant claim",
|
|
2029
|
+
context=(
|
|
2030
|
+
f"Assistant said: {prior_assertion[:200]}\n"
|
|
2031
|
+
f"Tool {tool_name} returned: {tool_text[:200]}"
|
|
2032
|
+
),
|
|
2033
|
+
source=f"session:{getattr(self, 'session_id', '?')}",
|
|
2034
|
+
suggested_action=(
|
|
2035
|
+
"Investigate whether this is a recurring model bias; "
|
|
2036
|
+
"consider a one-line AGENTS.md hint or sharpened prompt rule."
|
|
2037
|
+
),
|
|
2038
|
+
confidence=float(score),
|
|
2039
|
+
))
|
|
2040
|
+
|
|
1968
2041
|
# _build_repetition_nudge REMOVED (2026-04-13): advisory nudges had
|
|
1969
2042
|
# 0% effect on Gemma 4 — fired 4 times while model made 8 identical
|
|
1970
2043
|
# calls. Replaced by token-level sampling bumps (see agent_loop's
|
|
@@ -3209,6 +3282,38 @@ class AgentLoop:
|
|
|
3209
3282
|
|
|
3210
3283
|
return None
|
|
3211
3284
|
|
|
3285
|
+
def _log_curiosity_gaps(self, user_msg: str) -> None:
|
|
3286
|
+
"""Detect unfamiliar-term candidates in the user message and enqueue
|
|
3287
|
+
them as UNKNOWN_TERM curiosity items.
|
|
3288
|
+
|
|
3289
|
+
Best-effort: any exception is caught at the call site so a curiosity
|
|
3290
|
+
failure never breaks a real user turn. Dedup is handled inside the
|
|
3291
|
+
queue (7-day fingerprint window), so calling this on every user
|
|
3292
|
+
message is safe.
|
|
3293
|
+
"""
|
|
3294
|
+
try:
|
|
3295
|
+
from drydock.curiosity import (
|
|
3296
|
+
CuriosityItem, CuriosityKind, detect_gaps, enqueue,
|
|
3297
|
+
)
|
|
3298
|
+
except Exception:
|
|
3299
|
+
return # module not installed (e.g. minimal test env)
|
|
3300
|
+
gaps = detect_gaps(user_msg or "")
|
|
3301
|
+
if not gaps:
|
|
3302
|
+
return
|
|
3303
|
+
session_src = f"session:{getattr(self, 'session_id', '?')}"
|
|
3304
|
+
for term in gaps:
|
|
3305
|
+
enqueue(CuriosityItem(
|
|
3306
|
+
kind=CuriosityKind.UNKNOWN_TERM,
|
|
3307
|
+
term=term,
|
|
3308
|
+
context=(user_msg or "")[:300],
|
|
3309
|
+
source=session_src,
|
|
3310
|
+
suggested_action=(
|
|
3311
|
+
"Check whether the project's GraphRAG corpus covers "
|
|
3312
|
+
f"`{term[:80]}`; if not, ingest the relevant path."
|
|
3313
|
+
),
|
|
3314
|
+
confidence=0.7,
|
|
3315
|
+
))
|
|
3316
|
+
|
|
3212
3317
|
def _auto_prefetch_retrieve(self, user_msg: str) -> None:
|
|
3213
3318
|
"""Auto-fetch relevant chunks from GraphRAG and inject as system note.
|
|
3214
3319
|
|
|
@@ -2,10 +2,24 @@ You are DryDock, a CLI coding agent. You write code, fix bugs, and build project
|
|
|
2
2
|
|
|
3
3
|
ACT IMMEDIATELY. Your FIRST response must be a tool call — not text. Do NOT explain, plan, or ask. Call a tool NOW.
|
|
4
4
|
|
|
5
|
+
When answering a direct factual or math question (not writing code), you MUST write visible text — never produce a response with only thinking tokens and no visible content. End your response with "FINAL ANSWER: <your answer>" on its own line so the judge can extract it.
|
|
6
|
+
|
|
5
7
|
Your tools: read_file, write_file, search_replace, grep, glob, bash, task, web_search, web_fetch, retrieve.
|
|
6
8
|
|
|
9
|
+
CURIOSITY — default posture is "investigate, then assert" (SOVEREIGN_PRD §5.7):
|
|
10
|
+
- If the user message names a thing you don't have context for (paper title,
|
|
11
|
+
library, API, identifier, project-specific term), your FIRST tool call is
|
|
12
|
+
`retrieve(query="<the term>")`. Not text. Not web_search. Retrieve.
|
|
13
|
+
- "I think it's X" is not an answer when retrieve costs one tool call. Look it up.
|
|
14
|
+
- When retrieved evidence contradicts what you were about to say, prefer the
|
|
15
|
+
evidence and say so. Don't quietly drop the contradiction.
|
|
16
|
+
- Don't ask the user to clarify before you've tried one investigation pass.
|
|
17
|
+
Read the obvious files; retrieve the obvious terms; ask only if both come up empty.
|
|
18
|
+
|
|
7
19
|
WHEN TO USE retrieve (project's GraphRAG index):
|
|
8
20
|
- BEFORE editing a file you haven't read in an unfamiliar codebase
|
|
21
|
+
- BEFORE answering a general-knowledge question that names a specific entity —
|
|
22
|
+
retrieve first; web_search only if retrieve returns low confidence
|
|
9
23
|
- "Where is <Class> defined?" — `retrieve(query="ClassName")` returns the definition site directly
|
|
10
24
|
- Cross-package symbol lookup: parent classes in OTHER packages are indexed too (a `is_json` defined on werkzeug's `Request` shows up when looking up Flask's `Request`)
|
|
11
25
|
- "What does the project doc say about X?" — `retrieve(query="<topic>")` searches markdown / READMEs / PRDs
|
|
@@ -83,13 +83,13 @@ class ListMcpResources(
|
|
|
83
83
|
tasks.append(list_resources_http(
|
|
84
84
|
srv.url,
|
|
85
85
|
headers=srv.headers,
|
|
86
|
-
startup_timeout_sec=srv.
|
|
86
|
+
startup_timeout_sec=srv.startup_timeout_sec,
|
|
87
87
|
))
|
|
88
88
|
elif isinstance(srv, MCPStdio):
|
|
89
89
|
tasks.append(list_resources_stdio(
|
|
90
90
|
srv.command,
|
|
91
91
|
env=srv.env,
|
|
92
|
-
startup_timeout_sec=srv.
|
|
92
|
+
startup_timeout_sec=srv.startup_timeout_sec,
|
|
93
93
|
))
|
|
94
94
|
|
|
95
95
|
if tasks:
|
|
@@ -167,13 +167,13 @@ class ReadMcpResource(
|
|
|
167
167
|
content = await read_resource_http(
|
|
168
168
|
srv.url, args.uri,
|
|
169
169
|
headers=srv.headers,
|
|
170
|
-
startup_timeout_sec=srv.
|
|
170
|
+
startup_timeout_sec=srv.startup_timeout_sec,
|
|
171
171
|
)
|
|
172
172
|
elif isinstance(srv, MCPStdio):
|
|
173
173
|
content = await read_resource_stdio(
|
|
174
174
|
srv.command, args.uri,
|
|
175
175
|
env=srv.env,
|
|
176
|
-
startup_timeout_sec=srv.
|
|
176
|
+
startup_timeout_sec=srv.startup_timeout_sec,
|
|
177
177
|
)
|
|
178
178
|
else:
|
|
179
179
|
continue
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Curiosity Layer — engineered intellectual drive for drydock.
|
|
2
|
+
|
|
3
|
+
This module turns the SOVEREIGN_PRD §5.7 directive ("when you notice a gap,
|
|
4
|
+
you close it; when you encounter something unfamiliar, you investigate
|
|
5
|
+
before asserting") into observable signals + a feedback queue.
|
|
6
|
+
|
|
7
|
+
The classifier framework in `drydock.core.classifier` covers FAILURE
|
|
8
|
+
signals routed to fix-this-thing handlers. Curiosity is the complement:
|
|
9
|
+
LEARNING signals — gaps, surprises, and idle-exploration candidates that
|
|
10
|
+
deserve attention even when nothing has technically failed.
|
|
11
|
+
|
|
12
|
+
Public surface:
|
|
13
|
+
|
|
14
|
+
from drydock.curiosity import (
|
|
15
|
+
CuriosityItem, CuriosityKind,
|
|
16
|
+
detect_gaps, score_surprise,
|
|
17
|
+
enqueue, queue_path,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
Phase 1 (now): gap detection, surprise scoring stub, JSONL queue.
|
|
21
|
+
Phase 2 (next): consumer hook in autonomous_review.sh, retrieve auto-prefetch
|
|
22
|
+
in agent_loop, system-prompt directive (already in gemma4.md).
|
|
23
|
+
Phase 3 (later): Deep Noir "exploration" vector candidate, idle-cycle worker.
|
|
24
|
+
"""
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from drydock.curiosity.item import CuriosityItem, CuriosityKind
|
|
28
|
+
from drydock.curiosity.queue import enqueue, queue_path, read_recent
|
|
29
|
+
from drydock.curiosity.gap_detector import detect_gaps
|
|
30
|
+
from drydock.curiosity.surprise import score_surprise
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
"CuriosityItem",
|
|
34
|
+
"CuriosityKind",
|
|
35
|
+
"detect_gaps",
|
|
36
|
+
"score_surprise",
|
|
37
|
+
"enqueue",
|
|
38
|
+
"queue_path",
|
|
39
|
+
"read_recent",
|
|
40
|
+
]
|