drydock-cli 2.8.18__tar.gz → 2.8.20__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.20/.auto_release.lock +1 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/PKG-INFO +79 -2
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/README.md +78 -1
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/SOVEREIGN_PRD.md +178 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/commands.py +7 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.py +149 -17
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agent_loop.py +163 -9
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/gemma4.md +14 -0
- drydock_cli-2.8.20/drydock/curiosity/__init__.py +40 -0
- drydock_cli-2.8.20/drydock/curiosity/__main__.py +183 -0
- drydock_cli-2.8.20/drydock/curiosity/gap_detector.py +128 -0
- drydock_cli-2.8.20/drydock/curiosity/item.py +58 -0
- drydock_cli-2.8.20/drydock/curiosity/queue.py +112 -0
- drydock_cli-2.8.20/drydock/curiosity/surprise.py +112 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/pyproject.toml +1 -1
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/auto_release.sh +18 -4
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/autonomous_review_prompt.md +9 -1
- drydock_cli-2.8.20/scripts/backfill_hle_curiosity.py +118 -0
- drydock_cli-2.8.20/scripts/curiosity_idle_cycle.sh +145 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/deploy_to_github.sh +1 -1
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/hle_eval.py +42 -1
- drydock_cli-2.8.20/tests/test_curiosity.py +266 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_integration.py +12 -4
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_loop_detection.py +200 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_issues.py +6 -1
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/trip_log.md +227 -0
- drydock_cli-2.8.18/.auto_release.lock +0 -1
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.gitignore +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.python-version +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.typos.toml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/extensions.json +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/launch.json +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/settings.json +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/AGENTS.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/Admiral.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CHANGELOG.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CLAUDE.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/DEEP_NOIR_PRD.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/HLE_PRD.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/JETSON_BENCH.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/LICENSE +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/NOTICE +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/TRIAGE_v1.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/action.yml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/README.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/README.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/acp-setup.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/BASELINE_412.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/Drydock_rebrand.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/PRD.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/drydock_terms.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/resume.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/__main__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/logger.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/slug.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/types.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/config.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/whats_new.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock-acp.spec +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/flake.lock +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/flake.nix +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/outlook_draft_assistant.tar.gz +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/README.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/config_base.toml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/config_best.toml +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/domain_spec.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/experimenter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/kernel.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/mini_prd.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/proposer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/results.tsv +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/README.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/auto_test_loop.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/monitor_test_battery.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/overnight_agents_test.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_bank.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_full.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_smoke.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/tui_test.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/backup.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/bump_version.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/classify_pulse.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/consume_retrieval_queue.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/fetch_arxiv_abstracts.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/hle_eval_seed.jsonl +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/notify_release.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/perf_baseline_when_idle.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/perf_sweep.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/queue_top.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/start_steering_sidecar.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/conftest.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/common.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/utils.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/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.18 → drydock_cli-2.8.20}/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.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agents.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_classifier.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_hle_typing.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_message_id.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_middleware.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_smoke.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_workloads.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/uv.lock +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/README.md +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
836886
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.20
|
|
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
|
|
@@ -284,7 +284,8 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
|
|
|
284
284
|
- **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
|
|
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
|
-
- **MCP Support**: Connect Model Context Protocol servers
|
|
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
|
|
@@ -379,13 +380,89 @@ DryDock discovers skills from:
|
|
|
379
380
|
|
|
380
381
|
### MCP Servers
|
|
381
382
|
|
|
383
|
+
DryDock can connect to any Model Context Protocol server. Tools from a server `foo` show up as `foo__<tool_name>` in the agent's tool list. Two ways to add one:
|
|
384
|
+
|
|
385
|
+
#### Option A — `/mcp` slash command (recommended)
|
|
386
|
+
|
|
387
|
+
Inside the TUI:
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
/mcp # list configured servers + usage
|
|
391
|
+
/mcp examples # ready-to-paste examples
|
|
392
|
+
/mcp add stdio fetch_server uvx mcp-server-fetch
|
|
393
|
+
/mcp add stdio filesystem npx -y @modelcontextprotocol/server-filesystem /data
|
|
394
|
+
/mcp add http weather https://mcp.example.com
|
|
395
|
+
/mcp add streamable-http myapi https://api.example.com/mcp
|
|
396
|
+
/mcp remove fetch_server
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
The command writes to `~/.drydock/config.toml`. Restart DryDock to load new servers.
|
|
400
|
+
|
|
401
|
+
#### Option B — edit `~/.drydock/config.toml` directly
|
|
402
|
+
|
|
403
|
+
Use this for advanced fields (auth headers, env-var API keys, custom timeouts, `sampling_enabled`). Three transports: `stdio`, `http`, `streamable-http`.
|
|
404
|
+
|
|
382
405
|
```toml
|
|
383
406
|
[[mcp_servers]]
|
|
384
407
|
name = "fetch_server"
|
|
385
408
|
transport = "stdio"
|
|
386
409
|
command = "uvx"
|
|
387
410
|
args = ["mcp-server-fetch"]
|
|
411
|
+
|
|
412
|
+
[[mcp_servers]]
|
|
413
|
+
name = "filesystem"
|
|
414
|
+
transport = "stdio"
|
|
415
|
+
command = "npx"
|
|
416
|
+
args = ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
|
|
417
|
+
env = { LOG_LEVEL = "info" }
|
|
418
|
+
startup_timeout_sec = 10.0
|
|
419
|
+
tool_timeout_sec = 60.0
|
|
420
|
+
sampling_enabled = true
|
|
421
|
+
|
|
422
|
+
[[mcp_servers]]
|
|
423
|
+
name = "github"
|
|
424
|
+
transport = "streamable-http"
|
|
425
|
+
url = "https://api.githubcopilot.com/mcp"
|
|
426
|
+
api_key_env = "GITHUB_TOKEN" # reads token from this env var
|
|
427
|
+
api_key_header = "Authorization"
|
|
428
|
+
api_key_format = "Bearer {token}"
|
|
429
|
+
|
|
430
|
+
[[mcp_servers]]
|
|
431
|
+
name = "weather"
|
|
432
|
+
transport = "http"
|
|
433
|
+
url = "https://mcp.weather.example.com"
|
|
434
|
+
headers = { "X-Tenant" = "drydock" }
|
|
435
|
+
```
|
|
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/`.
|
|
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
|
+
|
|
388
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`.
|
|
389
466
|
|
|
390
467
|
## Testing
|
|
391
468
|
|
|
@@ -229,7 +229,8 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
|
|
|
229
229
|
- **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
|
|
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
|
-
- **MCP Support**: Connect Model Context Protocol servers
|
|
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
|
|
@@ -324,13 +325,89 @@ DryDock discovers skills from:
|
|
|
324
325
|
|
|
325
326
|
### MCP Servers
|
|
326
327
|
|
|
328
|
+
DryDock can connect to any Model Context Protocol server. Tools from a server `foo` show up as `foo__<tool_name>` in the agent's tool list. Two ways to add one:
|
|
329
|
+
|
|
330
|
+
#### Option A — `/mcp` slash command (recommended)
|
|
331
|
+
|
|
332
|
+
Inside the TUI:
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
/mcp # list configured servers + usage
|
|
336
|
+
/mcp examples # ready-to-paste examples
|
|
337
|
+
/mcp add stdio fetch_server uvx mcp-server-fetch
|
|
338
|
+
/mcp add stdio filesystem npx -y @modelcontextprotocol/server-filesystem /data
|
|
339
|
+
/mcp add http weather https://mcp.example.com
|
|
340
|
+
/mcp add streamable-http myapi https://api.example.com/mcp
|
|
341
|
+
/mcp remove fetch_server
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
The command writes to `~/.drydock/config.toml`. Restart DryDock to load new servers.
|
|
345
|
+
|
|
346
|
+
#### Option B — edit `~/.drydock/config.toml` directly
|
|
347
|
+
|
|
348
|
+
Use this for advanced fields (auth headers, env-var API keys, custom timeouts, `sampling_enabled`). Three transports: `stdio`, `http`, `streamable-http`.
|
|
349
|
+
|
|
327
350
|
```toml
|
|
328
351
|
[[mcp_servers]]
|
|
329
352
|
name = "fetch_server"
|
|
330
353
|
transport = "stdio"
|
|
331
354
|
command = "uvx"
|
|
332
355
|
args = ["mcp-server-fetch"]
|
|
356
|
+
|
|
357
|
+
[[mcp_servers]]
|
|
358
|
+
name = "filesystem"
|
|
359
|
+
transport = "stdio"
|
|
360
|
+
command = "npx"
|
|
361
|
+
args = ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
|
|
362
|
+
env = { LOG_LEVEL = "info" }
|
|
363
|
+
startup_timeout_sec = 10.0
|
|
364
|
+
tool_timeout_sec = 60.0
|
|
365
|
+
sampling_enabled = true
|
|
366
|
+
|
|
367
|
+
[[mcp_servers]]
|
|
368
|
+
name = "github"
|
|
369
|
+
transport = "streamable-http"
|
|
370
|
+
url = "https://api.githubcopilot.com/mcp"
|
|
371
|
+
api_key_env = "GITHUB_TOKEN" # reads token from this env var
|
|
372
|
+
api_key_header = "Authorization"
|
|
373
|
+
api_key_format = "Bearer {token}"
|
|
374
|
+
|
|
375
|
+
[[mcp_servers]]
|
|
376
|
+
name = "weather"
|
|
377
|
+
transport = "http"
|
|
378
|
+
url = "https://mcp.weather.example.com"
|
|
379
|
+
headers = { "X-Tenant" = "drydock" }
|
|
380
|
+
```
|
|
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/`.
|
|
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
|
+
|
|
333
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`.
|
|
334
411
|
|
|
335
412
|
## Testing
|
|
336
413
|
|
|
@@ -80,6 +80,9 @@ A sovereign AI system that:
|
|
|
80
80
|
- Learns customer-specific knowledge
|
|
81
81
|
- Performs coding and reasoning tasks autonomously
|
|
82
82
|
- Self-diagnoses failures (Admiral) and self-improves (MetaHarness, evaluator)
|
|
83
|
+
- **Operates with engineered curiosity** — actively detects its own gaps,
|
|
84
|
+
retrieves before asserting, ingests unfamiliar context, and treats
|
|
85
|
+
surprise as signal worth chasing rather than noise to suppress
|
|
83
86
|
- Improves continuously without phoning home
|
|
84
87
|
|
|
85
88
|
---
|
|
@@ -363,6 +366,166 @@ Already partially shipped — the system already self-observes.
|
|
|
363
366
|
|
|
364
367
|
---
|
|
365
368
|
|
|
369
|
+
## 5.7 Curiosity Layer — engineered intellectual drive
|
|
370
|
+
|
|
371
|
+
GraphRAG, Deep Noir, and the HLE benchmark together expose a structural
|
|
372
|
+
weakness in Gemma 4 and most small local models: they answer from prior
|
|
373
|
+
when they should retrieve, plateau on familiar patterns, and treat
|
|
374
|
+
"unknown" as something to guess past rather than something to investigate.
|
|
375
|
+
The Curiosity Layer is a first-class drydock directive — both a guiding
|
|
376
|
+
principle in the system prompt and a concrete subsystem — that converts
|
|
377
|
+
that weakness into a feedback loop.
|
|
378
|
+
|
|
379
|
+
**Operating definition (carries into the system prompt):**
|
|
380
|
+
|
|
381
|
+
> Curiosity is an inquisitive, often insatiable desire to understand the
|
|
382
|
+
> unknown — from everyday questions to scientific discovery. In drydock
|
|
383
|
+
> this means: when you notice a gap, you close it; when you encounter
|
|
384
|
+
> something unfamiliar, you investigate before asserting; when you have
|
|
385
|
+
> spare cycles, you explore the corpus rather than idle.
|
|
386
|
+
|
|
387
|
+
**Behaviors required of the agent (enforced via prompt + Deep Noir vector
|
|
388
|
+
candidate + tool wiring):**
|
|
389
|
+
|
|
390
|
+
1. **Retrieve before answering on unfamiliar terms.** Any user message
|
|
391
|
+
containing a named entity, paper title, identifier, API, or symbol
|
|
392
|
+
not present in recent context triggers an automatic `retrieve` call
|
|
393
|
+
against GraphRAG before the first content token. Low-confidence
|
|
394
|
+
retrieval triggers a second pass against the arXiv corpus
|
|
395
|
+
(`/data3/arxiv_corpus/graphrag.sqlite`) instead of falling back to
|
|
396
|
+
`web_search`. Fixes the failure mode logged in
|
|
397
|
+
`project_graphrag_underused.md` (Gemma 4 defaults to web_search on
|
|
398
|
+
general-knowledge HLE questions).
|
|
399
|
+
2. **Treat surprise as signal, not noise.** When the model's own
|
|
400
|
+
probability estimate disagrees with retrieved evidence, with a tool
|
|
401
|
+
result, or with an HLE judge verdict, the disagreement is logged to
|
|
402
|
+
the curiosity queue (`~/.drydock/dispatch/curiosity.jsonl`) and
|
|
403
|
+
surfaces in the next overnight `autonomous_review` tick as a
|
|
404
|
+
candidate for: GraphRAG ingest, prompt refinement, Deep Noir vector
|
|
405
|
+
training data, or LoRA candidate.
|
|
406
|
+
3. **Investigate before asking.** When the user request is
|
|
407
|
+
under-specified, the agent first reads the project (Glob + Read on
|
|
408
|
+
plausible files, `retrieve` against GraphRAG) and proposes a
|
|
409
|
+
concrete interpretation. `ask_user_question` only fires after at
|
|
410
|
+
least one investigation pass — never as a first move on ambiguity.
|
|
411
|
+
4. **Explore on idle.** When drydock is idle for > N minutes and the
|
|
412
|
+
classifier dispatch queues are non-empty, the agent runs a single
|
|
413
|
+
exploratory cycle: pick the highest-priority pattern, ingest fresh
|
|
414
|
+
logs into GraphRAG, generate one hypothesis, log to
|
|
415
|
+
`~/.drydock/curiosity_log.md`. Bounded by a tokens-per-day budget
|
|
416
|
+
so curiosity does not starve user work.
|
|
417
|
+
5. **Open mindset on conflict.** When new evidence contradicts a
|
|
418
|
+
previously asserted answer, the agent prefers the new evidence and
|
|
419
|
+
issues a correction in the same turn. Extends the existing
|
|
420
|
+
"Retrieval vs. Prior" guidance in §10 into an active rule.
|
|
421
|
+
|
|
422
|
+
**Curiosity subsystem deliverables (Phase 3, alongside Deep Noir):**
|
|
423
|
+
|
|
424
|
+
- `drydock.curiosity` module — gap detector, surprise scorer, dispatch
|
|
425
|
+
writer. Reuses classifier infrastructure from §5.6.
|
|
426
|
+
- `~/.drydock/dispatch/curiosity.jsonl` queue + consumer wired into
|
|
427
|
+
`autonomous_review.sh`.
|
|
428
|
+
- System-prompt section embedding the five behaviors above, kept short
|
|
429
|
+
enough for Gemma 4's 20-line prompt budget (`gemma4.md`).
|
|
430
|
+
- Deep Noir vector candidate: "exploration" mode — bias toward retrieval,
|
|
431
|
+
hypothesis enumeration, and reading-before-writing. Trained from
|
|
432
|
+
curiosity-log traces once Deep Noir vector training lands.
|
|
433
|
+
- HLE/eval integration: every HLE failure where the judge reasoning
|
|
434
|
+
contains "no answer extracted" or "incorrect prior" is auto-enqueued
|
|
435
|
+
as a curiosity item — the eval becomes a growth signal, not just
|
|
436
|
+
a scoreboard.
|
|
437
|
+
|
|
438
|
+
**Anti-patterns explicitly forbidden:**
|
|
439
|
+
|
|
440
|
+
- Curiosity does **not** mean asking the user more questions. The
|
|
441
|
+
default is to investigate, not interrogate.
|
|
442
|
+
- Curiosity does **not** override the "advisory-only" rule. Exploration
|
|
443
|
+
cycles never block user work; they consume idle cycles only.
|
|
444
|
+
- Curiosity must **not** become rumination — the tokens-per-day budget
|
|
445
|
+
exists specifically to prevent endless exploration loops on a single
|
|
446
|
+
unfamiliar term.
|
|
447
|
+
|
|
448
|
+
**Acceptance criteria:**
|
|
449
|
+
|
|
450
|
+
- `retrieve` is called on ≥ 80 % of HLE questions before any content
|
|
451
|
+
token (measured via execution traces, Phase 3).
|
|
452
|
+
- `~/.drydock/dispatch/curiosity.jsonl` accumulates ≥ 10 items per
|
|
453
|
+
active week without operator priming.
|
|
454
|
+
- `autonomous_review` ships ≥ 1 prompt/AGENTS.md/vector update per week
|
|
455
|
+
that originated from a curiosity-queue item (not a stress-run signal).
|
|
456
|
+
- HLE general-knowledge category score lifts measurably vs. the
|
|
457
|
+
May 2026 baseline (1/20 = 5 %, 18/20 "empty"); target ≥ 25 %
|
|
458
|
+
in Phase 3, ≥ 40 % in Phase 4.
|
|
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
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
366
529
|
# 6. Adaptive Failure Logic
|
|
367
530
|
|
|
368
531
|
```text
|
|
@@ -383,6 +546,18 @@ If loops detected:
|
|
|
383
546
|
→ loop-break sampling (temp+0.3/0.5, freq_pen 0.4–0.7, fresh seed)
|
|
384
547
|
→ planner reset + diversity strategy
|
|
385
548
|
→ only escalates to FORCE_STOP on pure no-op duplicates
|
|
549
|
+
|
|
550
|
+
If unfamiliar term / named entity / identifier in user input:
|
|
551
|
+
→ mandatory retrieve pass (GraphRAG, then arXiv corpus)
|
|
552
|
+
→ web_search only after both local retrievers return low confidence
|
|
553
|
+
|
|
554
|
+
If model output contradicts retrieved evidence / tool result / judge verdict:
|
|
555
|
+
→ log to ~/.drydock/dispatch/curiosity.jsonl
|
|
556
|
+
→ autonomous_review picks it up next tick as ingest / prompt / vector candidate
|
|
557
|
+
|
|
558
|
+
If idle > N minutes AND classifier queues non-empty:
|
|
559
|
+
→ one exploratory cycle (bounded by tokens-per-day budget)
|
|
560
|
+
→ ingest, hypothesis, curiosity_log entry — never a user-visible action
|
|
386
561
|
```
|
|
387
562
|
|
|
388
563
|
All logic is **advisory-first**. Hard stops are reserved for objectively useless
|
|
@@ -551,6 +726,9 @@ mitigates several of the failure classes already in `MODEL_SHORTCOMINGS.md`.
|
|
|
551
726
|
| Customer cloud dependency | −70 % | Brand promise, qualitative |
|
|
552
727
|
| Task completion rate (interactive) | +35 % | Current shakedown baseline |
|
|
553
728
|
| SWE-bench file match | maintain ≥70 % | 70 % current |
|
|
729
|
+
| `retrieve` calls before content (HLE) | ≥80 % | <5 % observed May 2026 |
|
|
730
|
+
| Curiosity-queue items shipped / week | ≥1 | 0 — queue not built yet |
|
|
731
|
+
| HLE general-knowledge score | ≥25 % Phase 3, ≥40 % Phase 4 | 5 % (1/20 May 2026) |
|
|
554
732
|
|
|
555
733
|
Metrics with "TBD" baselines are explicitly required to be **measured** before
|
|
556
734
|
Phase 2 begins, not estimated.
|
|
@@ -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:
|
|
@@ -421,20 +421,46 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
421
421
|
input_widget.value = ""
|
|
422
422
|
|
|
423
423
|
if self._agent_running:
|
|
424
|
-
#
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
424
|
+
# Slash commands and bash escapes can't be folded into a running
|
|
425
|
+
# turn — they need their own worker. Keep the end-of-turn queue
|
|
426
|
+
# for those. Everything else (plain text) goes straight into the
|
|
427
|
+
# agent's context via `queue_user_injection`, matching Claude
|
|
428
|
+
# Code's "type while busy" behavior: the in-flight task keeps
|
|
429
|
+
# running, and the model sees the new message at the next turn
|
|
430
|
+
# boundary without restarting.
|
|
431
|
+
is_command = value.startswith("/") or value.startswith("!") or (
|
|
432
|
+
value.startswith("&") and self.config.nuage_enabled
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
if is_command:
|
|
436
|
+
if not hasattr(self, "_pending_messages"):
|
|
437
|
+
self._pending_messages: list[str] = []
|
|
438
|
+
import time
|
|
439
|
+
now = time.time()
|
|
440
|
+
last_queue_time = getattr(self, "_last_queue_time", 0)
|
|
441
|
+
if now - last_queue_time < 0.5 and self._pending_messages:
|
|
442
|
+
self._pending_messages[-1] += "\n" + value
|
|
443
|
+
else:
|
|
444
|
+
self._pending_messages.append(value)
|
|
445
|
+
self._last_queue_time = now
|
|
446
|
+
preview = value[:60] + "..." if len(value) > 60 else value
|
|
447
|
+
self.notify(
|
|
448
|
+
f"Queued for after current task: \"{preview}\" "
|
|
449
|
+
f"({len(self._pending_messages)} pending)"
|
|
450
|
+
)
|
|
451
|
+
return
|
|
452
|
+
|
|
453
|
+
# Plain text → inject into the running agent's context. Render
|
|
454
|
+
# a user-message bubble immediately so the UI shows what landed,
|
|
455
|
+
# and notify so the user knows it didn't displace the current
|
|
456
|
+
# work.
|
|
457
|
+
self.agent_loop.queue_user_injection(value)
|
|
458
|
+
await self._mount_and_scroll(UserMessage(value))
|
|
436
459
|
preview = value[:60] + "..." if len(value) > 60 else value
|
|
437
|
-
self.notify(
|
|
460
|
+
self.notify(
|
|
461
|
+
f"Sent to running agent: \"{preview}\" "
|
|
462
|
+
f"(will be picked up at the next turn)"
|
|
463
|
+
)
|
|
438
464
|
return
|
|
439
465
|
|
|
440
466
|
if value.startswith("!"):
|
|
@@ -1414,11 +1440,11 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1414
1440
|
pass
|
|
1415
1441
|
|
|
1416
1442
|
# Read existing config
|
|
1417
|
-
import
|
|
1443
|
+
import tomllib
|
|
1418
1444
|
existing = {}
|
|
1419
1445
|
if config_path.exists():
|
|
1420
1446
|
try:
|
|
1421
|
-
existing =
|
|
1447
|
+
existing = tomllib.loads(config_path.read_text())
|
|
1422
1448
|
except Exception:
|
|
1423
1449
|
pass
|
|
1424
1450
|
|
|
@@ -1465,7 +1491,7 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1465
1491
|
async def _mcp_command(self, args: str = "") -> None:
|
|
1466
1492
|
"""Configure MCP servers in ~/.drydock/config.toml."""
|
|
1467
1493
|
import shlex
|
|
1468
|
-
import
|
|
1494
|
+
import tomllib
|
|
1469
1495
|
import tomli_w
|
|
1470
1496
|
|
|
1471
1497
|
config_path = Path.home() / ".drydock" / "config.toml"
|
|
@@ -1475,7 +1501,7 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1475
1501
|
if not config_path.exists():
|
|
1476
1502
|
return {}
|
|
1477
1503
|
try:
|
|
1478
|
-
return
|
|
1504
|
+
return tomllib.loads(config_path.read_text())
|
|
1479
1505
|
except Exception:
|
|
1480
1506
|
return {}
|
|
1481
1507
|
|
|
@@ -1632,6 +1658,112 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1632
1658
|
"remove <name> | examples}`"
|
|
1633
1659
|
))
|
|
1634
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
|
+
|
|
1635
1767
|
async def _admiral_apply_command(self, args: str = "") -> None:
|
|
1636
1768
|
"""Merge an Admiral-staged proposal branch into main."""
|
|
1637
1769
|
import subprocess
|