drydock-cli 2.7.36__tar.gz → 2.7.38__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- drydock_cli-2.7.38/.auto_release.lock +1 -0
- drydock_cli-2.7.38/.claude/scheduled_tasks.lock +1 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.gitignore +4 -0
- drydock_cli-2.7.38/HLE_PRD.md +193 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/PKG-INFO +1 -1
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/rules.py +2 -2
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/bash.py +110 -1
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/pyproject.toml +1 -1
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/autonomous_review_prompt.md +4 -0
- drydock_cli-2.7.38/scripts/consume_retrieval_queue.py +214 -0
- drydock_cli-2.7.38/scripts/hle_eval.py +526 -0
- drydock_cli-2.7.38/scripts/hle_eval_seed.jsonl +11 -0
- drydock_cli-2.7.38/tests/test_retrieval_consumer.py +178 -0
- drydock_cli-2.7.38/tests/tools/test_bash_consec_empty_search.py +81 -0
- drydock_cli-2.7.38/tests/tools/test_bash_empty_search_loop_breaker.py +77 -0
- drydock_cli-2.7.38/tests/tools/test_bash_heredoc_confirmation.py +76 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/trip_log.md +193 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/uv.lock +1 -1
- drydock_cli-2.7.36/.auto_release.lock +0 -1
- drydock_cli-2.7.36/.claude/scheduled_tasks.lock +0 -1
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.perf_baseline_done +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.python-version +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.typos.toml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/AGENTS.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/Admiral.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/CLAUDE.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/JETSON_BENCH.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/LICENSE +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/NOTICE +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/PERF_SWEEP_PLAN.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/PRD.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/SOVEREIGN_PRD.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/TRIAGE_v1.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/action.yml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/docs/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/config.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/drydock_terms.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/flake.lock +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/flake.nix +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/nohup.out +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777672181.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777672218.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777672322.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777732278.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777811293.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/perf_results/baseline_1777811401.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/config_base.toml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/config_best.toml +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/experimenter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/kernel.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/proposer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/research/results.tsv +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/resume.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/classify_pulse.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/install.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/perf_baseline_when_idle.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/perf_sweep.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/queue_top.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/test/project/dummy +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/conftest.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_classifier.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_steering.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.36 → drydock_cli-2.7.38}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2617636
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"sessionId":"31dea7d6-a654-4ba3-b084-169d213e9f36","pid":2530054,"procStart":"433206217","acquiredAt":1777842734259}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# HLE PRD — drydock + GraphRAG + Deep Noir vs Humanity's Last Exam
|
|
2
|
+
|
|
3
|
+
**Status as of 2026-05-04 00:40 UTC.** Update on resume.
|
|
4
|
+
|
|
5
|
+
## Thesis
|
|
6
|
+
|
|
7
|
+
> drydock + GraphRAG + Deep Noir working together should be able to solve
|
|
8
|
+
> any problem.
|
|
9
|
+
|
|
10
|
+
HLE is the hardest possible PRD — explicitly designed to defeat frontier
|
|
11
|
+
models. Reaching a defensible local-26B score against it validates that
|
|
12
|
+
the three-leg architecture generalizes. Failures expose which leg is weak.
|
|
13
|
+
|
|
14
|
+
**Critical rule:** drydock IS the harness. Eval drives questions through
|
|
15
|
+
the real TUI. Never wrap the model directly. Every failure is a drydock-
|
|
16
|
+
or-leg bug to fix, not a harness limitation. See
|
|
17
|
+
`memory/feedback_drydock_is_the_harness.md`.
|
|
18
|
+
|
|
19
|
+
## The three legs and their current strength
|
|
20
|
+
|
|
21
|
+
| Leg | What it owns | State | Evidence |
|
|
22
|
+
|-----|--------------|-------|----------|
|
|
23
|
+
| **drydock** | agent loop, tool use, prompts, harness fixes | **strongest** | 70% SWE-bench file match; 49/52 PRD functional tests; 16K+ harness queue actively drained |
|
|
24
|
+
| **GraphRAG** | factual recall over indexed code/text | **medium** | infra works (1842 symbols, 75 chunks); only cwd source ingested; **no general knowledge corpus** |
|
|
25
|
+
| **Deep Noir** | reasoning-mode steering | **weakest** | scaffolding shipped (`drydock/steering/`), `LogitBiasSteeringApplier` wired, hook in agent_loop; **zero vectors trained** — hook is a no-op |
|
|
26
|
+
|
|
27
|
+
## Phase plan
|
|
28
|
+
|
|
29
|
+
### Phase 1 — baseline (in flight)
|
|
30
|
+
|
|
31
|
+
Goal: bare drydock + bare GraphRAG (cwd only) + zero Deep Noir vs HLE.
|
|
32
|
+
This number is the floor.
|
|
33
|
+
|
|
34
|
+
- ✅ `scripts/hle_eval.py` — single-file orchestrator
|
|
35
|
+
- ✅ `scripts/hle_eval_seed.jsonl` — 7 undergrad questions for pipeline validation
|
|
36
|
+
- ✅ Pipeline validated: 7/7 = 100% on seed (commit 7c3a2d9 + earlier)
|
|
37
|
+
- ✅ HF token landed at `~/.config/drydock/hf_token` (chmod 600)
|
|
38
|
+
- ✅ HLE accessible: 2500 questions total, 2158 text-only, 342 multimodal (skipped)
|
|
39
|
+
- 🟡 **N=200 overnight baseline running** (PID in `/tmp/hle_overnight.pid`,
|
|
40
|
+
log `/tmp/hle_overnight.log`, results dir under `/data3/drydock/hle_results/`).
|
|
41
|
+
Started 2026-05-04 00:46 UTC (restarted with Telegram wiring).
|
|
42
|
+
Expected runtime ~10-16h based on q1's 6 min pace. Each question
|
|
43
|
+
writes a line to `results.jsonl` incrementally — partial progress
|
|
44
|
+
is always visible mid-run.
|
|
45
|
+
- 🟡 **Telegram pings configured** (commit ed7f6de, SOTA ref 45.9%):
|
|
46
|
+
start ping fired; milestone every 50 completions; final + breakdown
|
|
47
|
+
on completion; crash + resume command on error.
|
|
48
|
+
- ⏳ Phase 1 deliverable: a number — Gemma 4 + bare drydock baseline on HLE
|
|
49
|
+
|
|
50
|
+
Realistic baseline expectation per pre-run analysis:
|
|
51
|
+
- Bare 26B-A4B without retrieval/steering: ~5–10% on HLE
|
|
52
|
+
- Reaching ~22–25% would be defensible vs ~25–30% frontier scores
|
|
53
|
+
|
|
54
|
+
### Phase 2 — GraphRAG with knowledge corpus
|
|
55
|
+
|
|
56
|
+
Goal: ingest enough general knowledge that retrieve answers fact-recall
|
|
57
|
+
questions. Re-run, measure delta.
|
|
58
|
+
|
|
59
|
+
- ⏳ Identify corpus (Wikipedia subset / arXiv abstracts / textbook chunks)
|
|
60
|
+
- ⏳ Extend `drydock/graphrag/code_indexer.py` ingest path for non-code text
|
|
61
|
+
(it already supports text via `text_indexer.py`; just needs corpus)
|
|
62
|
+
- ⏳ Bulk ingest into `~/.drydock/graphrag.sqlite`
|
|
63
|
+
- ⏳ Re-run HLE Phase 1 with corpus loaded; measure delta
|
|
64
|
+
- Expected delta: +3 to +7 points if corpus is good, +0 if not
|
|
65
|
+
|
|
66
|
+
### Phase 3 — Deep Noir reasoning vectors
|
|
67
|
+
|
|
68
|
+
Goal: train activation-steering vectors on reasoning-failure pairs from
|
|
69
|
+
admiral_history; deposit into `~/.drydock/steering/vectors/`; the
|
|
70
|
+
existing hook applies them. This is the user's research domain.
|
|
71
|
+
|
|
72
|
+
- ⏳ Extract pairs from admiral_history (model-output / correct-intervention)
|
|
73
|
+
- ⏳ Train vectors per direction: "verify-before-answer", "show-work-explicitly",
|
|
74
|
+
"consider-units", "minimal-patch"
|
|
75
|
+
- ⏳ Deposit `.npy + .toml` per mode under `~/.drydock/steering/vectors/<mode>/`
|
|
76
|
+
- ⏳ Set `DRYDOCK_STEERING_MODES=<mode1>,<mode2>` env at TUI launch
|
|
77
|
+
- ⏳ Re-run HLE; measure delta vs Phase 2
|
|
78
|
+
- Expected delta: 0 to +3 points; high variance, open research
|
|
79
|
+
|
|
80
|
+
## Currently running / in flight
|
|
81
|
+
|
|
82
|
+
| Thing | PID | Log | Notes |
|
|
83
|
+
|-------|-----|-----|-------|
|
|
84
|
+
| stress harness | `/tmp/stress_pid.txt` (was 2219727) | `/tmp/stress_*.log` | 1d 9h+ uptime, ~76% through 1658-prompt suite |
|
|
85
|
+
| llm_balancer | 2462362 (rotates) | `/data3/drydock/logs/balancer.log` | :8001, ~10h uptime |
|
|
86
|
+
| HLE N=200 overnight | `/tmp/hle_overnight.pid` (was 2567027) | `/tmp/hle_overnight.log` | output `/data3/drydock/hle_results/run_*/`; expected 10-16h |
|
|
87
|
+
|
|
88
|
+
## Resume checklist (if connection dropped)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# 1. Where are we?
|
|
92
|
+
date -u
|
|
93
|
+
git -C /data3/drydock log --oneline --since="6 hours ago"
|
|
94
|
+
git -C /data3/drydock describe --tags --abbrev=0 # current PyPI tag
|
|
95
|
+
|
|
96
|
+
# 2. HLE run status
|
|
97
|
+
ps -p $(cat /tmp/hle_overnight.pid 2>/dev/null) -o pid,etime,comm
|
|
98
|
+
ls /data3/drydock/hle_results/
|
|
99
|
+
tail -50 /tmp/hle_overnight.log
|
|
100
|
+
n_done=$(wc -l < /data3/drydock/hle_results/run_*/results.jsonl 2>/dev/null)
|
|
101
|
+
echo "completed: $n_done / 200"
|
|
102
|
+
|
|
103
|
+
# 3. If HLE crashed mid-flight, RESUME (skip already-done IDs)
|
|
104
|
+
RUN_DIR=$(ls -td /data3/drydock/hle_results/run_* | head -1)
|
|
105
|
+
nohup /home/bobef/miniconda3/bin/python3 /data3/drydock/scripts/hle_eval.py \
|
|
106
|
+
--source hle --limit 200 --shuffle --seed 42 --resume "$RUN_DIR" \
|
|
107
|
+
> /tmp/hle_resume.log 2>&1 &
|
|
108
|
+
|
|
109
|
+
# 4. If complete, see the score
|
|
110
|
+
cat /data3/drydock/hle_results/run_*/summary.json | python3 -m json.tool
|
|
111
|
+
|
|
112
|
+
# 5. Infra health
|
|
113
|
+
ps -p 2462362 -o pid,etime
|
|
114
|
+
curl -s --max-time 3 http://localhost:8001/v1/models | head -1
|
|
115
|
+
gh issue list --repo fbobe321/drydock --state open --limit 5
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Known issues + workarounds
|
|
119
|
+
|
|
120
|
+
1. **`web_search` tool requires permission approval** by default
|
|
121
|
+
(`ToolPermission.ASK`). In batch eval the harness can't see/respond
|
|
122
|
+
to the prompt → session stalls. **Workaround:**
|
|
123
|
+
`--dangerously-skip-permissions` flag passed by `hle_eval.py`.
|
|
124
|
+
**Real fix:** auto-approve read-only tools when stdin is non-TTY
|
|
125
|
+
or `DRYDOCK_BATCH_MODE=1`. Memory:
|
|
126
|
+
`memory/project_hle_phase1_findings.md`.
|
|
127
|
+
|
|
128
|
+
2. **TUI input handler corrupts rapid char-by-char multi-line pexpect
|
|
129
|
+
input.** Internal `\n` chars get partially eaten + spurious newlines
|
|
130
|
+
inserted on long prompts. **Workaround:** single-line prompts in
|
|
131
|
+
`hle_eval.py`. **Real fix:** debug `drydock/cli/textual_ui/` input
|
|
132
|
+
buffer.
|
|
133
|
+
|
|
134
|
+
3. **Auto_release at 06:00/12:00/18:00/00:00 UTC overwrites site-packages.**
|
|
135
|
+
In-flight HLE runs survive (each new question is a fresh TUI spawn that
|
|
136
|
+
picks up the new binary), but if you direct-edit site-packages your
|
|
137
|
+
changes vanish. Always commit to source. Pause via:
|
|
138
|
+
`touch /data3/drydock/.pause_auto_release`.
|
|
139
|
+
|
|
140
|
+
4. **PRD contamination: model edits `PRD.md` mid-session.** HLE doesn't
|
|
141
|
+
touch this — every HLE question gets a fresh empty cwd. Not a concern
|
|
142
|
+
for HLE; relevant for shakedown PRD runs.
|
|
143
|
+
|
|
144
|
+
5. **Sessions take real time.** HLE questions involve web_search +
|
|
145
|
+
multi-step reasoning. Seed q's took 30-60s; HLE q's appear to take
|
|
146
|
+
5+ min each (q1: 5 min in and still working). Expect N=20 to take
|
|
147
|
+
1-2 hours, N=100 overnight.
|
|
148
|
+
|
|
149
|
+
## Sentinels currently set
|
|
150
|
+
|
|
151
|
+
- `/data3/drydock_test_projects/.pause_watchdog` — watchdog cron paused
|
|
152
|
+
- `/data3/drydock/.pause_auto_release` — NOT set (auto_release is active)
|
|
153
|
+
- `/data3/drydock/research/STOP` — research loop sentinel (per gitignore)
|
|
154
|
+
|
|
155
|
+
## Tomorrow morning's first action
|
|
156
|
+
|
|
157
|
+
If overnight run completed:
|
|
158
|
+
1. `cat /data3/drydock/hle_results/run_*/summary.json` for the baseline number
|
|
159
|
+
2. If <10%, the diagnosis is in the per-question `verdict` and `judge_reasoning`
|
|
160
|
+
fields. Sort by category to see if math/physics/CS dominate the failures.
|
|
161
|
+
3. Commit the results JSON (with HLE content redacted to just IDs+verdicts —
|
|
162
|
+
never commit the question text per HLE license).
|
|
163
|
+
4. Decide Phase 2 corpus based on category distribution of failures.
|
|
164
|
+
|
|
165
|
+
If overnight run crashed:
|
|
166
|
+
1. `--resume` flag re-enters where it stopped (skip-by-id from results.jsonl).
|
|
167
|
+
2. Likely failure modes: vLLM OOM on a long-thinking question, balancer
|
|
168
|
+
crash from a port conflict, drydock TUI hang on a tool error.
|
|
169
|
+
Investigate via the per-question `tui_logs/<id>.tui.log` files.
|
|
170
|
+
|
|
171
|
+
## File map
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
/data3/drydock/
|
|
175
|
+
├── scripts/
|
|
176
|
+
│ ├── hle_eval.py # the orchestrator (this PRD's main artifact)
|
|
177
|
+
│ ├── hle_eval_seed.jsonl # 7 hand-crafted seed questions
|
|
178
|
+
│ └── consume_retrieval_queue.py # GraphRAG-leg autonomy (28× perf-fixed)
|
|
179
|
+
├── hle_results/ # gitignored — per-run outputs
|
|
180
|
+
│ └── run_<ts>/
|
|
181
|
+
│ ├── config.json
|
|
182
|
+
│ ├── results.jsonl
|
|
183
|
+
│ ├── summary.json
|
|
184
|
+
│ ├── tui_logs/<id>.tui.log
|
|
185
|
+
│ └── work/<id>/ # per-question fresh cwd
|
|
186
|
+
├── HLE_PRD.md # this file
|
|
187
|
+
└── ~/.config/drydock/hf_token # gated cais/hle access
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## What "done" looks like for Phase 1
|
|
191
|
+
|
|
192
|
+
A number. With distribution. Per-category and overall. Writeup in this
|
|
193
|
+
PRD. Commit the writeup, not the questions. Decide Phase 2 from there.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.38
|
|
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
|
|
@@ -71,7 +71,7 @@ RULES: tuple[ClassificationRule, ...] = (
|
|
|
71
71
|
),
|
|
72
72
|
ClassificationRule(
|
|
73
73
|
pattern_id="harness:tool:hallucinated_name",
|
|
74
|
-
regex=_r(r"(unknown\s+tool|
|
|
74
|
+
regex=_r(r"(unknown\s+tool|hallucinated.*tool)"),
|
|
75
75
|
bucket=Bucket.HARNESS,
|
|
76
76
|
suggested_action="Add the hallucinated tool name to _IGNORE_TOOLS suppression list.",
|
|
77
77
|
),
|
|
@@ -84,7 +84,7 @@ RULES: tuple[ClassificationRule, ...] = (
|
|
|
84
84
|
),
|
|
85
85
|
ClassificationRule(
|
|
86
86
|
pattern_id="harness:thinking_stall",
|
|
87
|
-
regex=_r(r"(empty[-\s]*response|thinking[-\s]*stall|empty\s+assistant\s+message)"),
|
|
87
|
+
regex=_r(r"(empty[-\s]*response|thinking[-\s]*stall|empty\s+assistant\s+message|empty_after_tool[:\s]*\w+)"),
|
|
88
88
|
bucket=Bucket.HARNESS,
|
|
89
89
|
suggested_action="Pop empty message and inject 'Continue working' nudge.",
|
|
90
90
|
),
|
|
@@ -550,6 +550,31 @@ class Bash(
|
|
|
550
550
|
|
|
551
551
|
returncode = proc.returncode or 0
|
|
552
552
|
|
|
553
|
+
# Proactive heredoc-write confirmation. When `cat <<EOF > file`
|
|
554
|
+
# succeeds silently (empty stdout, rc=0), the model can't tell the
|
|
555
|
+
# file landed and re-runs the same heredoc. Check the file on disk
|
|
556
|
+
# and confirm immediately so the model moves on without a retry.
|
|
557
|
+
import re as _re_hd
|
|
558
|
+
import os as _os_hd
|
|
559
|
+
_hd_match = _re_hd.search(
|
|
560
|
+
r"cat\s+<<\s*['\"]?[A-Za-z_]*['\"]?\s+>+\s*(\S+)", args.command
|
|
561
|
+
)
|
|
562
|
+
if _hd_match and returncode == 0 and not stdout.strip():
|
|
563
|
+
_hd_path = _hd_match.group(1).strip().rstrip(";")
|
|
564
|
+
if _os_hd.path.exists(_hd_path):
|
|
565
|
+
_hd_size = _os_hd.path.getsize(_hd_path)
|
|
566
|
+
_hd_lines = 0
|
|
567
|
+
try:
|
|
568
|
+
with open(_hd_path, "r", errors="replace") as _hdf:
|
|
569
|
+
_hd_lines = sum(1 for _ in _hdf)
|
|
570
|
+
except Exception:
|
|
571
|
+
pass
|
|
572
|
+
stdout = (
|
|
573
|
+
f"[File written: {_hd_path} ({_hd_lines} lines, "
|
|
574
|
+
f"{_hd_size} bytes). "
|
|
575
|
+
f"The file is on disk — do not re-run this command.]"
|
|
576
|
+
)
|
|
577
|
+
|
|
553
578
|
# Mechanical loop-breaker (ADVISORY ONLY — never raise
|
|
554
579
|
# ToolError; see feedback_no_tool_errors_for_loop_detection.md).
|
|
555
580
|
# Two complementary checks:
|
|
@@ -561,6 +586,15 @@ class Bash(
|
|
|
561
586
|
state = self.state.__dict__.setdefault("_bash_history", {})
|
|
562
587
|
# Track total error-exit calls per command (regardless of output).
|
|
563
588
|
err_state = self.state.__dict__.setdefault("_bash_err_count", {})
|
|
589
|
+
# Track consecutive empty-stdout search commands (any command, not
|
|
590
|
+
# just identical ones). The model semantic-loops by trying different
|
|
591
|
+
# search terms for a non-existent target:
|
|
592
|
+
# ls | grep "test_cli" → empty → ls | grep "test_race" → empty → ...
|
|
593
|
+
# Each command is unique so the identical-hash check never fires.
|
|
594
|
+
# After 5 consecutive empty searches reset is_search → nudge.
|
|
595
|
+
_consec_empty_search_state = self.state.__dict__.setdefault(
|
|
596
|
+
"_consec_empty_searches", {"count": 0}
|
|
597
|
+
)
|
|
564
598
|
if returncode != 0:
|
|
565
599
|
err_count = err_state.get(args.command, 0) + 1
|
|
566
600
|
err_state[args.command] = err_count
|
|
@@ -597,6 +631,22 @@ class Bash(
|
|
|
597
631
|
_is_heredoc_write = bool(_re.search(
|
|
598
632
|
r"cat\s+<<\s*['\"]?EOF['\"]?\s+>", args.command
|
|
599
633
|
))
|
|
634
|
+
# Detect ls/grep/find search that returned empty output.
|
|
635
|
+
# The model runs `ls -F | grep "test_cli"` repeatedly when
|
|
636
|
+
# the file doesn't exist — each run returns empty stdout.
|
|
637
|
+
# Generic "EDIT SOURCE CODE" is confusing; tell it to
|
|
638
|
+
# stop searching and create the file instead.
|
|
639
|
+
# grep/rg return rc=1 when no matches found; ls returns 0.
|
|
640
|
+
# Accept both as "empty search" since the key signal is
|
|
641
|
+
# empty stdout on a repeated search command.
|
|
642
|
+
_is_empty_search = (
|
|
643
|
+
not stdout.strip()
|
|
644
|
+
and returncode in (0, 1)
|
|
645
|
+
and bool(_re.search(
|
|
646
|
+
r'(?:^|\|)\s*(?:ls\b|grep\b|find\b|rg\b)',
|
|
647
|
+
args.command,
|
|
648
|
+
))
|
|
649
|
+
)
|
|
600
650
|
# Detect echo -e / printf with \n or \t escape sequences.
|
|
601
651
|
# These loops when the shell doesn't interpret the escapes
|
|
602
652
|
# (e.g. dash ignores echo -e; backslash doubling in quoting
|
|
@@ -606,7 +656,27 @@ class Bash(
|
|
|
606
656
|
_is_echo_escape = bool(_re.search(
|
|
607
657
|
r'(?:echo\s+.*-[eE]|printf)\b', args.command
|
|
608
658
|
) and _re.search(r'\\[nt]', args.command))
|
|
609
|
-
|
|
659
|
+
# Detect sed -i with \n or \t in substitution patterns.
|
|
660
|
+
# GNU sed interprets \n in replacement strings but the shell
|
|
661
|
+
# may swallow the backslash before sed sees it (depends on
|
|
662
|
+
# quote style). The model loops retrying the same sed
|
|
663
|
+
# command when the substitution silently fails.
|
|
664
|
+
_is_sed_escape = bool(_re.search(
|
|
665
|
+
r"\bsed\b.*-i\b", args.command
|
|
666
|
+
) and _re.search(r"\\[nt\\]", args.command))
|
|
667
|
+
if _is_empty_search:
|
|
668
|
+
notice = (
|
|
669
|
+
f"[NOTICE: this is the #{entry['count']}th identical "
|
|
670
|
+
f"run of `{cmd_preview}` — it returned empty output "
|
|
671
|
+
f"every time. The file, symbol, or pattern you are "
|
|
672
|
+
f"searching for does not exist yet. "
|
|
673
|
+
f"STOP searching — you will keep getting empty results. "
|
|
674
|
+
f"Either CREATE the missing file/function with "
|
|
675
|
+
f"write_file or search_replace, or ask the user what "
|
|
676
|
+
f"'{cmd_preview[:40]}' refers to. "
|
|
677
|
+
f"Do NOT re-run this search unchanged.]"
|
|
678
|
+
)
|
|
679
|
+
elif _is_heredoc_write:
|
|
610
680
|
notice = (
|
|
611
681
|
f"[NOTICE: this is the #{entry['count']}th identical "
|
|
612
682
|
f"heredoc write of `{cmd_preview}`. "
|
|
@@ -630,6 +700,18 @@ class Bash(
|
|
|
630
700
|
f"OR use write_file to create the test file directly. "
|
|
631
701
|
f"Do NOT re-run this command unchanged.]"
|
|
632
702
|
)
|
|
703
|
+
elif _is_sed_escape:
|
|
704
|
+
notice = (
|
|
705
|
+
f"[NOTICE: this is the #{entry['count']}th identical "
|
|
706
|
+
f"run of `{cmd_preview}` — the sed substitution with "
|
|
707
|
+
f"\\n / \\t escape sequences is a no-op. Shell quoting "
|
|
708
|
+
f"may have consumed the backslash before sed sees it, "
|
|
709
|
+
f"or the search pattern doesn't match any line. "
|
|
710
|
+
f"Use search_replace with a proper SEARCH/REPLACE block "
|
|
711
|
+
f"to make exact text edits, or use write_file to "
|
|
712
|
+
f"rewrite the file with the corrected content. "
|
|
713
|
+
f"Do NOT re-run this sed command unchanged.]"
|
|
714
|
+
)
|
|
633
715
|
else:
|
|
634
716
|
notice = (
|
|
635
717
|
f"[NOTICE: this is the #{entry['count']} identical "
|
|
@@ -649,6 +731,33 @@ class Bash(
|
|
|
649
731
|
else:
|
|
650
732
|
state[args.command] = {"hash": out_hash, "count": 1}
|
|
651
733
|
|
|
734
|
+
# Consecutive-empty-search cross-command check (C). Tracks any
|
|
735
|
+
# ls/grep/find/rg that returned empty stdout, regardless of command
|
|
736
|
+
# text. Resets on any search with non-empty output. After 5
|
|
737
|
+
# consecutive empty searches, injects a clarification nudge.
|
|
738
|
+
import re as _re2
|
|
739
|
+
_is_any_search = bool(_re2.search(
|
|
740
|
+
r'(?:^|\|)\s*(?:ls\b|grep\b|find\b|rg\b)', args.command
|
|
741
|
+
))
|
|
742
|
+
if _is_any_search:
|
|
743
|
+
if not stdout.strip() and returncode in (0, 1):
|
|
744
|
+
_consec_empty_search_state["count"] += 1
|
|
745
|
+
else:
|
|
746
|
+
_consec_empty_search_state["count"] = 0
|
|
747
|
+
_consec = _consec_empty_search_state["count"]
|
|
748
|
+
if _is_any_search and _consec >= 5 and not stdout.strip():
|
|
749
|
+
cmd_preview2 = args.command[:80]
|
|
750
|
+
stdout = (
|
|
751
|
+
f"[LOOP-BREAKER: {_consec} consecutive search commands have "
|
|
752
|
+
f"all returned empty results (most recent: `{cmd_preview2}`). "
|
|
753
|
+
f"The thing you are looking for does NOT exist in this project. "
|
|
754
|
+
f"STOP searching. Either (a) CREATE the missing file/function "
|
|
755
|
+
f"with write_file or search_replace, or (b) ask the user to "
|
|
756
|
+
f"clarify what they meant — e.g. 'I don't see any test for "
|
|
757
|
+
f"\"bug B\" — can you clarify what component you mean?'. "
|
|
758
|
+
f"Do NOT run another search command.]"
|
|
759
|
+
)
|
|
760
|
+
|
|
652
761
|
yield self._build_result(
|
|
653
762
|
command=args.command,
|
|
654
763
|
stdout=stdout,
|
|
@@ -12,6 +12,10 @@ without them.
|
|
|
12
12
|
- Group by `pattern_id`, sort by recent `ts`. Pick the most-fired recent pattern that is NOT already addressed by a commit in the last 24h (`git log --since="24 hours ago" --oneline`).
|
|
13
13
|
- The `suggested_action` is your starting hypothesis — verify against current source before implementing.
|
|
14
14
|
- If you fix a queued pattern, mention `addresses pattern <pattern_id>` in the commit message so future ticks can dedup.
|
|
15
|
+
2a. **Drain the RETRIEVAL bucket**: run `/home/bobef/miniconda3/bin/python3 /data3/drydock/scripts/consume_retrieval_queue.py --apply`
|
|
16
|
+
- This is non-source-fix work: it reads `~/.drydock/dispatch/retrieval.jsonl`, finds the affected project for each entry, and ingests it into GraphRAG so the retrieve tool can answer cross-package symbol queries on the next session.
|
|
17
|
+
- Idempotent + dedup'd via `~/.drydock/dispatch/.retrieval_consumed.json` (7-day re-ingest window). Cheap, ~20s per project.
|
|
18
|
+
- If it ingests anything, note it in the trip_log line as `retrieval-drain: N project(s) ingested`.
|
|
15
19
|
3. Run the STATUS COMMANDS block from resume.md to check stress run health.
|
|
16
20
|
4. Scan for new failure patterns NOT in the dispatch queue:
|
|
17
21
|
- Has the stress harness died? (PID in `/tmp/stress_pid.txt`)
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Consume the RETRIEVAL bucket from the classifier dispatch queue.
|
|
3
|
+
|
|
4
|
+
For each fresh entry in ~/.drydock/dispatch/retrieval.jsonl:
|
|
5
|
+
- parse the evidence-row timestamp
|
|
6
|
+
- find the session whose start_time is within +/-1h of it
|
|
7
|
+
- read the session's working_directory
|
|
8
|
+
- if that project hasn't been ingested into GraphRAG in the last 7 days,
|
|
9
|
+
run `python -m drydock.graphrag ingest <project>`
|
|
10
|
+
|
|
11
|
+
State is tracked in ~/.drydock/dispatch/.retrieval_consumed.json so reruns
|
|
12
|
+
are idempotent and cheap.
|
|
13
|
+
|
|
14
|
+
This is the closing-the-loop step the framework was missing: the classifier
|
|
15
|
+
flagged 12+ retrieval-pattern hits but no consumer was actually ingesting
|
|
16
|
+
the affected projects' source into GraphRAG.
|
|
17
|
+
|
|
18
|
+
Usage:
|
|
19
|
+
python3 scripts/consume_retrieval_queue.py # dry run
|
|
20
|
+
python3 scripts/consume_retrieval_queue.py --apply # do the ingest
|
|
21
|
+
"""
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import argparse
|
|
25
|
+
import json
|
|
26
|
+
import re
|
|
27
|
+
import subprocess
|
|
28
|
+
import sys
|
|
29
|
+
from datetime import datetime, timedelta, timezone
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
|
|
32
|
+
DISPATCH_DIR = Path.home() / ".drydock" / "dispatch"
|
|
33
|
+
QUEUE = DISPATCH_DIR / "retrieval.jsonl"
|
|
34
|
+
STATE = DISPATCH_DIR / ".retrieval_consumed.json"
|
|
35
|
+
SESSION_ROOT = Path.home() / ".vibe" / "logs" / "session"
|
|
36
|
+
|
|
37
|
+
REINGEST_AFTER_DAYS = 7
|
|
38
|
+
SESSION_MATCH_WINDOW = timedelta(hours=1)
|
|
39
|
+
EVIDENCE_TS = re.compile(r"^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[+-]\d{2}:\d{2}|Z))")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _parse_iso(s: str) -> datetime | None:
|
|
43
|
+
try:
|
|
44
|
+
return datetime.fromisoformat(s.replace("Z", "+00:00"))
|
|
45
|
+
except Exception:
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _load_state() -> dict[str, str]:
|
|
50
|
+
if not STATE.exists():
|
|
51
|
+
return {}
|
|
52
|
+
try:
|
|
53
|
+
return json.loads(STATE.read_text())
|
|
54
|
+
except Exception:
|
|
55
|
+
return {}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _save_state(state: dict[str, str]) -> None:
|
|
59
|
+
STATE.parent.mkdir(parents=True, exist_ok=True)
|
|
60
|
+
STATE.write_text(json.dumps(state, indent=2, sort_keys=True))
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _evidence_timestamp(evidence: str) -> datetime | None:
|
|
64
|
+
m = EVIDENCE_TS.match(evidence or "")
|
|
65
|
+
return _parse_iso(m.group(1)) if m else None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _read_queue() -> list[dict]:
|
|
69
|
+
if not QUEUE.exists():
|
|
70
|
+
return []
|
|
71
|
+
out: list[dict] = []
|
|
72
|
+
for line in QUEUE.read_text().splitlines():
|
|
73
|
+
if not line.strip():
|
|
74
|
+
continue
|
|
75
|
+
try:
|
|
76
|
+
out.append(json.loads(line))
|
|
77
|
+
except Exception:
|
|
78
|
+
continue
|
|
79
|
+
return out
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
_DIRNAME_TS = re.compile(r"^session_(\d{8})_(\d{6})_")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _dirname_to_dt(name: str) -> datetime | None:
|
|
86
|
+
"""Parse a session directory name into a UTC datetime without reading
|
|
87
|
+
meta.json. Drydock encodes start time in the dir name as
|
|
88
|
+
`session_YYYYMMDD_HHMMSS_<id>`."""
|
|
89
|
+
m = _DIRNAME_TS.match(name)
|
|
90
|
+
if not m:
|
|
91
|
+
return None
|
|
92
|
+
try:
|
|
93
|
+
return datetime.strptime(m.group(1) + m.group(2),
|
|
94
|
+
"%Y%m%d%H%M%S").replace(tzinfo=timezone.utc)
|
|
95
|
+
except Exception:
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _find_session_cwd(target: datetime) -> Path | None:
|
|
100
|
+
"""Find the session whose start_time is closest to `target` and within
|
|
101
|
+
SESSION_MATCH_WINDOW.
|
|
102
|
+
|
|
103
|
+
Two-stage filter: we used to read every meta.json under SESSION_ROOT
|
|
104
|
+
(10K+ files, ~40s wall) which made autonomous_review's per-bash
|
|
105
|
+
timeout abandon this consumer every tick. Now we filter on the
|
|
106
|
+
directory-name timestamp first (zero I/O), then only read meta.json
|
|
107
|
+
for the handful of candidates within the time window.
|
|
108
|
+
"""
|
|
109
|
+
if not SESSION_ROOT.exists():
|
|
110
|
+
return None
|
|
111
|
+
window_s = SESSION_MATCH_WINDOW.total_seconds()
|
|
112
|
+
candidates: list[tuple[float, Path]] = []
|
|
113
|
+
for entry in SESSION_ROOT.iterdir():
|
|
114
|
+
if not entry.is_dir():
|
|
115
|
+
continue
|
|
116
|
+
dt = _dirname_to_dt(entry.name)
|
|
117
|
+
if dt is None:
|
|
118
|
+
continue
|
|
119
|
+
if abs((dt - target).total_seconds()) > window_s:
|
|
120
|
+
continue
|
|
121
|
+
meta = entry / "meta.json"
|
|
122
|
+
try:
|
|
123
|
+
data = json.loads(meta.read_text())
|
|
124
|
+
except Exception:
|
|
125
|
+
continue
|
|
126
|
+
start = _parse_iso(data.get("start_time", "")) or dt
|
|
127
|
+
delta = abs((start - target).total_seconds())
|
|
128
|
+
if delta > window_s:
|
|
129
|
+
continue
|
|
130
|
+
cwd = (data.get("environment") or {}).get("working_directory")
|
|
131
|
+
if cwd:
|
|
132
|
+
candidates.append((delta, Path(cwd)))
|
|
133
|
+
if not candidates:
|
|
134
|
+
return None
|
|
135
|
+
candidates.sort()
|
|
136
|
+
return candidates[0][1]
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _stale(state: dict[str, str], project: Path) -> bool:
|
|
140
|
+
last = _parse_iso(state.get(str(project), ""))
|
|
141
|
+
if last is None:
|
|
142
|
+
return True
|
|
143
|
+
return datetime.now(timezone.utc) - last > timedelta(days=REINGEST_AFTER_DAYS)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def _ingest(project: Path) -> tuple[int, str]:
|
|
147
|
+
cmd = [sys.executable, "-m", "drydock.graphrag", "ingest", str(project)]
|
|
148
|
+
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=180)
|
|
149
|
+
return proc.returncode, (proc.stdout + proc.stderr).strip()
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def main() -> int:
|
|
153
|
+
ap = argparse.ArgumentParser()
|
|
154
|
+
ap.add_argument("--apply", action="store_true",
|
|
155
|
+
help="actually run graphrag ingest (default is dry-run)")
|
|
156
|
+
ap.add_argument("--limit", type=int, default=20,
|
|
157
|
+
help="max projects to ingest per run")
|
|
158
|
+
args = ap.parse_args()
|
|
159
|
+
|
|
160
|
+
entries = _read_queue()
|
|
161
|
+
if not entries:
|
|
162
|
+
print("[retrieval-consumer] queue empty, nothing to do")
|
|
163
|
+
return 0
|
|
164
|
+
|
|
165
|
+
state = _load_state()
|
|
166
|
+
targets: dict[str, datetime] = {}
|
|
167
|
+
skipped_no_session = 0
|
|
168
|
+
skipped_no_ts = 0
|
|
169
|
+
|
|
170
|
+
for e in entries:
|
|
171
|
+
ts = _evidence_timestamp(e.get("evidence", ""))
|
|
172
|
+
if ts is None:
|
|
173
|
+
skipped_no_ts += 1
|
|
174
|
+
continue
|
|
175
|
+
cwd = _find_session_cwd(ts)
|
|
176
|
+
if cwd is None:
|
|
177
|
+
skipped_no_session += 1
|
|
178
|
+
continue
|
|
179
|
+
if not cwd.exists():
|
|
180
|
+
continue
|
|
181
|
+
key = str(cwd)
|
|
182
|
+
if not _stale(state, cwd):
|
|
183
|
+
continue
|
|
184
|
+
prior = targets.get(key)
|
|
185
|
+
if prior is None or ts > prior:
|
|
186
|
+
targets[key] = ts
|
|
187
|
+
|
|
188
|
+
if not targets:
|
|
189
|
+
print(f"[retrieval-consumer] {len(entries)} queue entries, "
|
|
190
|
+
f"0 actionable (skipped: no_ts={skipped_no_ts}, "
|
|
191
|
+
f"no_session={skipped_no_session}, all already ingested recently)")
|
|
192
|
+
return 0
|
|
193
|
+
|
|
194
|
+
items = list(targets.items())[: args.limit]
|
|
195
|
+
print(f"[retrieval-consumer] {len(entries)} queue entries → "
|
|
196
|
+
f"{len(items)} project(s) to ingest"
|
|
197
|
+
f"{' (DRY RUN — pass --apply to execute)' if not args.apply else ''}")
|
|
198
|
+
|
|
199
|
+
for project, ts in items:
|
|
200
|
+
print(f" {project} (evidence ts {ts.isoformat()})")
|
|
201
|
+
if not args.apply:
|
|
202
|
+
continue
|
|
203
|
+
rc, out = _ingest(Path(project))
|
|
204
|
+
snippet = (out[-300:] if out else "").replace("\n", " | ")
|
|
205
|
+
print(f" rc={rc} {snippet}")
|
|
206
|
+
if rc == 0:
|
|
207
|
+
state[project] = datetime.now(timezone.utc).isoformat()
|
|
208
|
+
_save_state(state)
|
|
209
|
+
|
|
210
|
+
return 0
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
if __name__ == "__main__":
|
|
214
|
+
raise SystemExit(main())
|