drydock-cli 2.7.35__tar.gz → 2.7.37__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.37/.auto_release.lock +1 -0
- drydock_cli-2.7.37/.claude/scheduled_tasks.lock +1 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.gitignore +4 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/CLAUDE.md +51 -0
- drydock_cli-2.7.37/JETSON_BENCH.md +99 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/PKG-INFO +1 -1
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/SOVEREIGN_PRD.md +43 -25
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/commands.py +14 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/app.py +181 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/agent_loop.py +45 -7
- drydock_cli-2.7.37/drydock/core/classifier/__init__.py +50 -0
- drydock_cli-2.7.37/drydock/core/classifier/__main__.py +108 -0
- drydock_cli-2.7.37/drydock/core/classifier/classifier.py +116 -0
- drydock_cli-2.7.37/drydock/core/classifier/dispatcher.py +156 -0
- drydock_cli-2.7.37/drydock/core/classifier/rules.py +182 -0
- drydock_cli-2.7.37/drydock/core/classifier/signal.py +53 -0
- drydock_cli-2.7.37/drydock/core/context_recovery.py +191 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/format.py +27 -7
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/gemma4.md +8 -1
- drydock_cli-2.7.37/drydock/core/steering_hook.py +140 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/bash.py +129 -4
- drydock_cli-2.7.37/drydock/core/tools/builtins/prompts/retrieve.md +22 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/read_file.py +18 -6
- drydock_cli-2.7.37/drydock/core/tools/builtins/retrieve.py +221 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/search_replace.py +25 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/__init__.py +8 -0
- drydock_cli-2.7.37/drydock/steering/applier.py +299 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/vectors.py +20 -1
- drydock_cli-2.7.37/perf_results/baseline_1777811293.json +96 -0
- drydock_cli-2.7.37/perf_results/baseline_1777811401.json +112 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/pyproject.toml +1 -1
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/autonomous_review_prompt.md +17 -6
- drydock_cli-2.7.37/scripts/classify_pulse.sh +58 -0
- drydock_cli-2.7.37/scripts/consume_retrieval_queue.py +214 -0
- drydock_cli-2.7.37/scripts/hle_eval.py +441 -0
- drydock_cli-2.7.37/scripts/hle_eval_seed.jsonl +11 -0
- drydock_cli-2.7.37/scripts/llm_balancer.py +146 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/perf_sweep.py +10 -1
- drydock_cli-2.7.37/scripts/queue_top.py +191 -0
- drydock_cli-2.7.37/tests/test_classifier.py +176 -0
- drydock_cli-2.7.37/tests/test_context_recovery.py +123 -0
- drydock_cli-2.7.37/tests/test_dispatcher.py +146 -0
- drydock_cli-2.7.37/tests/test_retrieval_consumer.py +178 -0
- drydock_cli-2.7.37/tests/test_retrieve_tool.py +130 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_steering.py +101 -1
- drydock_cli-2.7.37/tests/test_steering_hook.py +125 -0
- drydock_cli-2.7.37/tests/tools/test_bash_consec_empty_search.py +81 -0
- drydock_cli-2.7.37/tests/tools/test_bash_empty_search_loop_breaker.py +77 -0
- drydock_cli-2.7.37/tests/tools/test_bash_error_loop_breaker.py +87 -0
- drydock_cli-2.7.37/tests/tools/test_bash_kill_exit1_annotation.py +45 -0
- drydock_cli-2.7.37/tests/tools/test_hallucinated_retrieval_redirect.py +88 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/trip_log.md +172 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/uv.lock +1 -1
- drydock_cli-2.7.35/.auto_release.lock +0 -1
- drydock_cli-2.7.35/.claude/scheduled_tasks.lock +0 -1
- drydock_cli-2.7.35/drydock/steering/applier.py +0 -157
- drydock_cli-2.7.35/scripts/llm_balancer.py +0 -83
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.perf_baseline_done +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.python-version +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.typos.toml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.vscode/extensions.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.vscode/launch.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/.vscode/settings.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/AGENTS.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/Admiral.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/BASELINE_412.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/CHANGELOG.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/LICENSE +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/NOTICE +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/PERF_SWEEP_PLAN.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/PRD.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/TRIAGE_v1.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/action.yml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/docs/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/docs/acp-setup.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/logger.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/slug.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/types.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/core/utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/config.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock/whats_new.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock-acp.spec +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/drydock_terms.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/flake.lock +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/flake.nix +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/nohup.out +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/perf_results/baseline_1777672181.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/perf_results/baseline_1777672218.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/perf_results/baseline_1777672322.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/perf_results/baseline_1777732278.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/config_base.toml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/config_best.toml +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/domain_spec.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/experimenter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/kernel.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/mini_prd.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/proposer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/research/results.tsv +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/resume.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/backup.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/bump_version.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/install.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/notify_release.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/perf_baseline_when_idle.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/port_task.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/shakedown.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/test_full.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/tui_test.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/test/project/dummy +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/conftest.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/common.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/mock/utils.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/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.35 → drydock_cli-2.7.37}/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.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_admiral.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_agents.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_integration.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_message_id.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_middleware.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_smoke.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_workloads.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/worked_examples/README.md +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.7.35 → drydock_cli-2.7.37}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2549736
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"sessionId":"31dea7d6-a654-4ba3-b084-169d213e9f36","pid":2530054,"procStart":"433206217","acquiredAt":1777842734259}
|
|
@@ -200,6 +200,57 @@ v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files,
|
|
|
200
200
|
└── start_gemma4.sh ← Docker startup (vLLM + Gemma 4)
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
+
## Sovereign v2 framework (active as of v2.7.36)
|
|
204
|
+
|
|
205
|
+
The Sovereign Stack v2 deliverables (per `SOVEREIGN_PRD.md` and
|
|
206
|
+
`TRIAGE_v1.md`) are now shipping. The framework is a **living loop**:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
observation (logs)
|
|
210
|
+
→ drydock.core.classifier (rule-based, 5 buckets)
|
|
211
|
+
→ drydock.core.classifier.dispatcher (~/.drydock/dispatch/<bucket>.jsonl)
|
|
212
|
+
→ autonomous_review.sh (consumes harness.jsonl as primary signal)
|
|
213
|
+
→ harness fix shipped via auto_release
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Cron wiring:
|
|
217
|
+
|
|
218
|
+
| Cron | Cadence | Purpose |
|
|
219
|
+
| ---- | ------- | ------- |
|
|
220
|
+
| `scripts/classify_pulse.sh` | `*/10` | Classifies recent log activity, fills queues |
|
|
221
|
+
| `scripts/autonomous_review.sh` | `*/30` | Reads queue, picks highest-priority unhandled, fixes |
|
|
222
|
+
| `scripts/auto_release.sh` | `0 0,6,12,18 * * *` (CDT) | Tags + publishes to PyPI |
|
|
223
|
+
| `scripts/stress_babysitter.sh` | `0 * * * *` | Restarts stress run if dead |
|
|
224
|
+
| `scripts/llm_balancer.py` keepalive | `*/5` | Resurrects balancer if killed |
|
|
225
|
+
| `scripts/telegram_bot.py --daemon` | `*/2` | Resurrects telegram daemon |
|
|
226
|
+
|
|
227
|
+
Per-fix convention: when an autonomous fix addresses a queued classifier
|
|
228
|
+
pattern, the commit subject prefixes `addresses pattern <pattern_id>:`
|
|
229
|
+
so subsequent ticks dedup naturally via 24h git log.
|
|
230
|
+
|
|
231
|
+
### Modules added in v2.7.34–v2.7.36
|
|
232
|
+
|
|
233
|
+
| Path | Purpose |
|
|
234
|
+
| ---- | ------- |
|
|
235
|
+
| `drydock/graphrag/` | GraphRAG: AST symbol indexer + cross-package alias resolution + TF-IDF text retriever + SQLite storage. CLI: `python -m drydock.graphrag {ingest,query,symbol,chain,stats}` |
|
|
236
|
+
| `drydock/steering/` | Deep Noir scaffolding: vector format (.npy + .toml manifest with sha256), registry, SteeringConfig, applier protocol. CLI: `python -m drydock.steering {list,inspect,sha256,eval}` |
|
|
237
|
+
| `drydock/core/classifier/` | Rule-based failure classifier + Dispatcher. CLI: `python -m drydock.core.classifier <log> [--dispatch]` |
|
|
238
|
+
| `drydock/core/tools/builtins/retrieve.py` | Agent-facing `retrieve` tool. Auto-discovered. Auto-ingests cwd on first call when project markers are present. |
|
|
239
|
+
| `drydock/core/steering_hook.py` | Pre-`backend.complete()` hook in agent_loop. Env-gated (`DRYDOCK_STEERING_MODES=...`), log-only by default. |
|
|
240
|
+
| `drydock/core/config/local_detect.py` | First-launch local-LLM autodetection (vLLM/Ollama/llama.cpp/LM Studio). Skips Mistral API-key prompt. |
|
|
241
|
+
|
|
242
|
+
### Slash commands (live operator control)
|
|
243
|
+
|
|
244
|
+
- `/graphrag stats|ingest <path>|query <text>` — index control + ad-hoc retrieval
|
|
245
|
+
- `/steering status|on <mode>|off|list` — Deep Noir mode toggle (no-op until vectors land)
|
|
246
|
+
|
|
247
|
+
### Where signal lives
|
|
248
|
+
|
|
249
|
+
- Classifier rules: `drydock/core/classifier/rules.py`
|
|
250
|
+
- Bucket taxonomy validated against MODEL_SHORTCOMINGS.md + TRIAGE_v1.md (5 buckets, no `OTHER` matches in v0)
|
|
251
|
+
- Dispatcher queues: `~/.drydock/dispatch/<bucket>.jsonl` — append-only, dedup-aware, structured records
|
|
252
|
+
- Live first pulse produced 211 signals (210 harness, 1 retrieval) — distribution matches the framework's prediction
|
|
253
|
+
|
|
203
254
|
## Configuration Management
|
|
204
255
|
|
|
205
256
|
**All scripts use explicit Python path:** `/home/bobef/miniconda3/bin/python3`
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Jetson AGX Orin vs Local vLLM — gemma-4-26b Benchmark
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-05-03 12:30 UTC
|
|
4
|
+
**Jetson endpoint:** `http://192.168.50.19:8080` (llama.cpp / llama-server, GGUF)
|
|
5
|
+
**Local vLLM:** `http://localhost:8001` (vLLM Docker, AWQ-4bit, 2× RTX 4060 Ti)
|
|
6
|
+
**Model:** Both serve `gemma-4-26b` (26B MoE, ~4B active params)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Headline numbers
|
|
11
|
+
|
|
12
|
+
| Workload | Jetson e2e | vLLM e2e | Speedup | Jetson TTFT | vLLM TTFT |
|
|
13
|
+
|----------|------------|----------|---------|-------------|-----------|
|
|
14
|
+
| short (~50 in, 64 out) | **14.5 tok/s** | 61.5 tok/s | vLLM 4.2× | 0.72 s | 0.53 s |
|
|
15
|
+
| medium (~2 K in, 256 out) | **15.1 tok/s** | 46.6 tok/s | vLLM 3.1× | **0.30 s** | 1.47 s |
|
|
16
|
+
|
|
17
|
+
Jetson decode-only rate (measurable because llama.cpp actually streams):
|
|
18
|
+
**15–17 tok/s** sustained.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## What's surprising
|
|
23
|
+
|
|
24
|
+
1. **Jetson wins TTFT on the medium workload** (0.30 s vs 1.47 s). Two
|
|
25
|
+
plausible reasons:
|
|
26
|
+
- The local-vLLM medium TTFT was captured during the active stress
|
|
27
|
+
run (queue contention). The "uncontested" baseline run earlier
|
|
28
|
+
showed similar 1.47 s — but that was also during the stress
|
|
29
|
+
wind-down. Worth re-measuring vLLM TTFT on a fully idle box.
|
|
30
|
+
- llama.cpp's GGUF prefill on the Jetson AGX Orin's tensor cores
|
|
31
|
+
may be more efficient than vLLM's AWQ-4bit dequantize-then-prefill
|
|
32
|
+
pass on Ada-Lovelace cards for moderate prompt sizes.
|
|
33
|
+
2. **Decode rate is where vLLM crushes Jetson** — 3–4× faster sustained
|
|
34
|
+
token generation. The 4060 Ti's higher memory bandwidth (288 GB/s × 2)
|
|
35
|
+
beats the AGX Orin's unified 204 GB/s for transformer decode.
|
|
36
|
+
3. **Jetson llama-server returns `reasoning_content` by default** — the
|
|
37
|
+
model is in thinking mode out of the box. Affects how the harness
|
|
38
|
+
counts content chunks; `perf_sweep.py` was patched to track both
|
|
39
|
+
`delta.content` and `delta.reasoning_content` (see
|
|
40
|
+
commit accompanying this doc).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Practical implications for "Jetson testing for a label"
|
|
45
|
+
|
|
46
|
+
- **Single-user inference, short responses (≤256 tokens):** Jetson is
|
|
47
|
+
fine. ~17 s for a 256-token response is acceptable for a real-time
|
|
48
|
+
coding-assistant turn that includes some thinking.
|
|
49
|
+
- **Long-context analysis (10K+ input):** Jetson degrades. Was queue-
|
|
50
|
+
blocked for 7+ minutes on a 64K xlong workload during the initial run
|
|
51
|
+
— had to abort. vLLM handles the same in seconds.
|
|
52
|
+
- **Stress harness / batch evaluation:** Use vLLM. Jetson would take
|
|
53
|
+
~5× the wall-clock time for the 1658-prompt PRD suite.
|
|
54
|
+
- **Air-gapped / edge deployments where Jetson is the *only* option:**
|
|
55
|
+
Defensible. ~15 tok/s is bearable; just budget 10–60 s response times
|
|
56
|
+
in the UX.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## How to reproduce
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Foreground, both workloads, fixed harness
|
|
64
|
+
PYTHONUNBUFFERED=1 /home/bobef/miniconda3/bin/python3 -u \
|
|
65
|
+
/data3/drydock/scripts/perf_sweep.py baseline \
|
|
66
|
+
--base-url http://192.168.50.19:8080/v1 \
|
|
67
|
+
--model gemma-4-26b \
|
|
68
|
+
--workloads short,medium \
|
|
69
|
+
--iters 5
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
DO NOT run `--workloads short,medium,long,xlong` against the Jetson
|
|
73
|
+
without watching the wall clock — xlong (64 K input tokens) appears to
|
|
74
|
+
queue-block llama-server for several minutes on this hardware.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## What changed in `perf_sweep.py`
|
|
79
|
+
|
|
80
|
+
- `delta.reasoning_content` is now treated as content for TTFT and
|
|
81
|
+
chunk-counting. Without this, the Jetson's thinking-mode output
|
|
82
|
+
registered as 0 chunks → harness reported "all errored" even on
|
|
83
|
+
successful runs. Fix is forward-compatible with vLLM (which emits
|
|
84
|
+
`delta.content` exclusively).
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Operator notes
|
|
89
|
+
|
|
90
|
+
- **Jetson endpoint is read-only from drydock's perspective.** Per the
|
|
91
|
+
long-standing rule (see project memory), drydock does not admin the
|
|
92
|
+
Jetson. The benchmark only hits the OpenAI-compatible API.
|
|
93
|
+
- **`stream=true` is the default on llama-server.** Streaming worked
|
|
94
|
+
cleanly through the openai client.
|
|
95
|
+
- **Reasoning mode:** on this Jetson build (`b1-e5f070a`), the default
|
|
96
|
+
chat format is "Content-only" but the model still emits reasoning. To
|
|
97
|
+
disable thinking-mode emission, the operator would set
|
|
98
|
+
`reasoning_format: "none"` and `reasoning_in_content: true` per
|
|
99
|
+
request. Not done in this benchmark — measured the as-shipped behavior.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.37
|
|
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
|
|
@@ -480,34 +480,52 @@ mitigates several of the failure classes already in `MODEL_SHORTCOMINGS.md`.
|
|
|
480
480
|
- ✅ Drydock harness (v2 TUI + v3 rewrite)
|
|
481
481
|
- ✅ Coding workflows + 370-PRD benchmark
|
|
482
482
|
- ✅ Admiral, stress harness, autonomous review
|
|
483
|
-
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
- ▢
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
-
|
|
497
|
-
-
|
|
483
|
+
- ✅ **Hosting performance sweep** — clean baseline captured 2026-05-02
|
|
484
|
+
(44–62 tok/s e2e, `perf_results/baseline_1777732278.json`)
|
|
485
|
+
- ✅ **Manual failure triage** — `TRIAGE_v1.md`, 11 patterns mapped,
|
|
486
|
+
GraphRAG + Deep Noir justified by data
|
|
487
|
+
- ✅ **Read-before-write enforcement** — shipped in `write_file.py` +
|
|
488
|
+
`search_replace.py` advisory paths (already in v2.7.30+)
|
|
489
|
+
- ✅ **Install auto-detect** — fresh installs detect local vLLM/Ollama/
|
|
490
|
+
llama.cpp/LM Studio and skip the Mistral API-key prompt (v2.7.34)
|
|
491
|
+
- ▢ Customer-hardware portability bring-up (llama.cpp + Ollama backends
|
|
492
|
+
beyond detection — full provider configs)
|
|
493
|
+
|
|
494
|
+
### Phase 2 — 60 days (Classifier + GraphRAG) *— shipping live as of v2.7.36*
|
|
495
|
+
|
|
496
|
+
- ✅ **Failure classifier** — `drydock.core.classifier`, rule-based v0
|
|
497
|
+
(LLM swap-in is v1). 5-bucket taxonomy: harness / retrieval / steering /
|
|
498
|
+
model_prior / ambiguous_input. CLI + `--dispatch` flag.
|
|
499
|
+
- ✅ **Per-bucket Dispatcher** — routes signals to
|
|
500
|
+
`~/.drydock/dispatch/<bucket>.jsonl` queues, dedup, error isolation,
|
|
501
|
+
pluggable handlers
|
|
502
|
+
- ✅ **Periodic pulse** — `*/10` cron classifies + dispatches recent log
|
|
503
|
+
activity; live pulse produced 211 signals (210 harness, 1 retrieval —
|
|
504
|
+
matches predicted distribution exactly)
|
|
505
|
+
- ✅ **GraphRAG first cut** — `drydock.graphrag`, AST symbol indexer
|
|
506
|
+
with cross-package alias resolution + TF-IDF text retriever + SQLite
|
|
507
|
+
storage + CLI (v2.7.34)
|
|
508
|
+
- ✅ **Retriever interface in Drydock** — `retrieve` builtin tool,
|
|
509
|
+
auto-discovered, auto-ingest on first call when cwd looks like a project
|
|
510
|
+
- ✅ `/graphrag` slash command (stats / ingest / query)
|
|
511
|
+
- ✅ autonomous_review consumes dispatch queue as primary signal
|
|
512
|
+
- ▢ Embeddings backend (sentence-transformers) behind same Retriever protocol
|
|
498
513
|
- ▢ Citation-mode prompt templates + grounding eval
|
|
499
|
-
- ▢ Operator dashboards (per-class failure rates over time)
|
|
500
514
|
|
|
501
|
-
### Phase 3 — 90 days (Deep Noir
|
|
502
|
-
|
|
503
|
-
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
-
|
|
507
|
-
|
|
508
|
-
|
|
515
|
+
### Phase 3 — 90 days (Deep Noir + self-improvement) *— scaffolding shipping as of v2.7.36*
|
|
516
|
+
|
|
517
|
+
- ✅ **Deep Noir scaffolding** — `drydock.steering`, vector format
|
|
518
|
+
(.npy + .toml manifest with sha256), registry, SteeringConfig, three
|
|
519
|
+
applier implementations (Null/LogOnly/sidecar-stub), sandbox eval
|
|
520
|
+
- ✅ **Steering hook in agent_loop** — env-gated, log-only by default,
|
|
521
|
+
zero behavior change until DRYDOCK_STEERING_MODES is set
|
|
522
|
+
- ✅ `/steering` slash command (status / on / off / list)
|
|
523
|
+
- ▢ Real vLLM sidecar applier — drops in as a single class behind the
|
|
524
|
+
existing SteeringApplier protocol when vectors arrive
|
|
525
|
+
- ▢ Initial vectors (operator's Deep Noir research output)
|
|
526
|
+
- ▢ Per-vector sandbox eval gating — auto-promote if zero regressions on
|
|
527
|
+
the regression suite
|
|
509
528
|
- ▢ Execution trace logging (full prompts + tool calls per task)
|
|
510
|
-
- ▢ Autonomous upgrade loop (**local-only** proposer)
|
|
511
529
|
- ▢ First paid pilot ($5–25K, defense-adjacent)
|
|
512
530
|
|
|
513
531
|
### Phase 4 — 120 days (Hardening + verticals)
|
|
@@ -111,6 +111,20 @@ class CommandRegistry:
|
|
|
111
111
|
"proposals.",
|
|
112
112
|
handler="_admiral_status_command",
|
|
113
113
|
),
|
|
114
|
+
"graphrag": Command(
|
|
115
|
+
aliases=frozenset(["/graphrag", "/rag"]),
|
|
116
|
+
description="GraphRAG index control "
|
|
117
|
+
"(usage: /graphrag stats | ingest <path> | "
|
|
118
|
+
"query <text>). No arg shows stats + path.",
|
|
119
|
+
handler="_graphrag_command",
|
|
120
|
+
),
|
|
121
|
+
"steering": Command(
|
|
122
|
+
aliases=frozenset(["/steering", "/noir"]),
|
|
123
|
+
description="Deep Noir steering control "
|
|
124
|
+
"(usage: /steering | /steering on <mode> | "
|
|
125
|
+
"/steering off | /steering list).",
|
|
126
|
+
handler="_steering_command",
|
|
127
|
+
),
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
for command in excluded_commands:
|
|
@@ -1573,6 +1573,187 @@ class DrydockApp(App): # noqa: PLR0904
|
|
|
1573
1573
|
except Exception as e:
|
|
1574
1574
|
await self._mount_and_scroll(UserCommandMessage(f"Error: {e}"))
|
|
1575
1575
|
|
|
1576
|
+
async def _graphrag_command(self, args: str = "") -> None:
|
|
1577
|
+
"""GraphRAG index control: stats / ingest <path> / query <text>."""
|
|
1578
|
+
from pathlib import Path
|
|
1579
|
+
try:
|
|
1580
|
+
from drydock.graphrag import Index
|
|
1581
|
+
from drydock.core.tools.builtins.retrieve import _resolve_db_path
|
|
1582
|
+
except Exception as e:
|
|
1583
|
+
await self._mount_and_scroll(
|
|
1584
|
+
UserCommandMessage(f"GraphRAG module unavailable: {e}")
|
|
1585
|
+
)
|
|
1586
|
+
return
|
|
1587
|
+
|
|
1588
|
+
parts = args.strip().split(None, 1)
|
|
1589
|
+
sub = parts[0].lower() if parts else "stats"
|
|
1590
|
+
rest = parts[1] if len(parts) > 1 else ""
|
|
1591
|
+
db_path = _resolve_db_path("")
|
|
1592
|
+
|
|
1593
|
+
if sub in ("stats", ""):
|
|
1594
|
+
if not db_path.is_file():
|
|
1595
|
+
msg = (
|
|
1596
|
+
f"### GraphRAG\n\n"
|
|
1597
|
+
f"No index at `{db_path}`.\n\n"
|
|
1598
|
+
f"Create one: `/graphrag ingest .` or "
|
|
1599
|
+
f"`python -m drydock.graphrag ingest .`"
|
|
1600
|
+
)
|
|
1601
|
+
else:
|
|
1602
|
+
idx = Index(db_path)
|
|
1603
|
+
s = idx.stats()
|
|
1604
|
+
msg = (
|
|
1605
|
+
f"### GraphRAG\n\n"
|
|
1606
|
+
f"- DB: `{db_path}`\n"
|
|
1607
|
+
f"- Symbols: **{s['symbols']}**\n"
|
|
1608
|
+
f"- Text chunks: **{s['chunks']}**\n"
|
|
1609
|
+
f"- Unique terms: **{s['unique_terms']}**\n\n"
|
|
1610
|
+
f"`/graphrag query <text>` to search · "
|
|
1611
|
+
f"`/graphrag ingest <path>` to refresh."
|
|
1612
|
+
)
|
|
1613
|
+
await self._mount_and_scroll(UserCommandMessage(msg))
|
|
1614
|
+
return
|
|
1615
|
+
|
|
1616
|
+
if sub == "ingest":
|
|
1617
|
+
target = Path(rest or ".").expanduser().resolve()
|
|
1618
|
+
if not target.exists():
|
|
1619
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1620
|
+
f"Path not found: `{target}`"
|
|
1621
|
+
))
|
|
1622
|
+
return
|
|
1623
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1624
|
+
f"Ingesting `{target}` into `{db_path}`..."
|
|
1625
|
+
))
|
|
1626
|
+
try:
|
|
1627
|
+
idx = Index(db_path)
|
|
1628
|
+
counts = idx.ingest_path(target)
|
|
1629
|
+
except Exception as e:
|
|
1630
|
+
await self._mount_and_scroll(
|
|
1631
|
+
UserCommandMessage(f"Ingest failed: {e}")
|
|
1632
|
+
)
|
|
1633
|
+
return
|
|
1634
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1635
|
+
f"### GraphRAG ingest complete\n\n"
|
|
1636
|
+
f"- Files: **{counts['files']}**\n"
|
|
1637
|
+
f"- Symbols: **{counts['symbols']}**\n"
|
|
1638
|
+
f"- Text chunks: **{counts['chunks']}**\n"
|
|
1639
|
+
f"- DB: `{db_path}`"
|
|
1640
|
+
))
|
|
1641
|
+
return
|
|
1642
|
+
|
|
1643
|
+
if sub == "query":
|
|
1644
|
+
if not rest:
|
|
1645
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1646
|
+
"Usage: `/graphrag query <text>`"
|
|
1647
|
+
))
|
|
1648
|
+
return
|
|
1649
|
+
if not db_path.is_file():
|
|
1650
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1651
|
+
f"No index at `{db_path}`. Run `/graphrag ingest .` first."
|
|
1652
|
+
))
|
|
1653
|
+
return
|
|
1654
|
+
try:
|
|
1655
|
+
idx = Index(db_path)
|
|
1656
|
+
result = idx.retrieve(rest, symbol_limit=5, text_limit=3)
|
|
1657
|
+
except Exception as e:
|
|
1658
|
+
await self._mount_and_scroll(
|
|
1659
|
+
UserCommandMessage(f"Query failed: {e}")
|
|
1660
|
+
)
|
|
1661
|
+
return
|
|
1662
|
+
formatted = result.format()
|
|
1663
|
+
if len(formatted) > 4000:
|
|
1664
|
+
formatted = formatted[:4000] + "\n... (truncated)"
|
|
1665
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1666
|
+
f"### GraphRAG: `{rest}`\n\n```\n{formatted}\n```"
|
|
1667
|
+
))
|
|
1668
|
+
return
|
|
1669
|
+
|
|
1670
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1671
|
+
"Usage: `/graphrag {stats | ingest <path> | query <text>}`"
|
|
1672
|
+
))
|
|
1673
|
+
|
|
1674
|
+
async def _steering_command(self, args: str = "") -> None:
|
|
1675
|
+
"""Deep Noir steering control: status / on <mode> / off / list."""
|
|
1676
|
+
import os
|
|
1677
|
+
try:
|
|
1678
|
+
from drydock.steering import load_registry
|
|
1679
|
+
from drydock.core import steering_hook
|
|
1680
|
+
except Exception as e:
|
|
1681
|
+
await self._mount_and_scroll(
|
|
1682
|
+
UserCommandMessage(f"Steering module unavailable: {e}")
|
|
1683
|
+
)
|
|
1684
|
+
return
|
|
1685
|
+
|
|
1686
|
+
parts = args.strip().split(None, 1)
|
|
1687
|
+
sub = parts[0].lower() if parts else "status"
|
|
1688
|
+
rest = parts[1].strip() if len(parts) > 1 else ""
|
|
1689
|
+
|
|
1690
|
+
registry = load_registry(os.environ.get("DRYDOCK_STEERING_ROOT"))
|
|
1691
|
+
active_modes = os.environ.get("DRYDOCK_STEERING_MODES", "").strip()
|
|
1692
|
+
|
|
1693
|
+
if sub in ("status", ""):
|
|
1694
|
+
modes_list = registry.list_modes()
|
|
1695
|
+
lines = [
|
|
1696
|
+
"### Deep Noir steering",
|
|
1697
|
+
"",
|
|
1698
|
+
f"- Active modes: **{active_modes or '(none)'}**",
|
|
1699
|
+
f"- Registry root: `{registry.root}`",
|
|
1700
|
+
f"- Discovered modes: **{len(modes_list)}**",
|
|
1701
|
+
]
|
|
1702
|
+
for mode in modes_list:
|
|
1703
|
+
vectors = registry.vectors_for_mode(mode)
|
|
1704
|
+
lines.append(f" - `{mode}` ({len(vectors)} vector(s))")
|
|
1705
|
+
lines += [
|
|
1706
|
+
"",
|
|
1707
|
+
"`/steering on <mode>` to enable · `/steering off` to disable · "
|
|
1708
|
+
"`/steering list` for full vector inspection.",
|
|
1709
|
+
]
|
|
1710
|
+
await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
|
|
1711
|
+
return
|
|
1712
|
+
|
|
1713
|
+
if sub == "on":
|
|
1714
|
+
if not rest:
|
|
1715
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1716
|
+
"Usage: `/steering on <mode>` (or comma list)"
|
|
1717
|
+
))
|
|
1718
|
+
return
|
|
1719
|
+
os.environ["DRYDOCK_STEERING_MODES"] = rest
|
|
1720
|
+
steering_hook.reset_cache_for_tests()
|
|
1721
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1722
|
+
f"Steering enabled: **{rest}** (active for this session). "
|
|
1723
|
+
f"Applier is log-only until real Deep Noir vectors land."
|
|
1724
|
+
))
|
|
1725
|
+
return
|
|
1726
|
+
|
|
1727
|
+
if sub == "off":
|
|
1728
|
+
os.environ.pop("DRYDOCK_STEERING_MODES", None)
|
|
1729
|
+
steering_hook.reset_cache_for_tests()
|
|
1730
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1731
|
+
"Steering disabled."
|
|
1732
|
+
))
|
|
1733
|
+
return
|
|
1734
|
+
|
|
1735
|
+
if sub == "list":
|
|
1736
|
+
modes_list = registry.list_modes()
|
|
1737
|
+
if not modes_list:
|
|
1738
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1739
|
+
f"No vectors discovered under `{registry.root}`."
|
|
1740
|
+
))
|
|
1741
|
+
return
|
|
1742
|
+
lines = ["### Discovered steering vectors", ""]
|
|
1743
|
+
for mode in modes_list:
|
|
1744
|
+
lines.append(f"#### `{mode}`")
|
|
1745
|
+
for v in registry.vectors_for_mode(mode):
|
|
1746
|
+
lines.append(
|
|
1747
|
+
f"- `{v.name}` — layer {v.layer}, scale {v.scale}, "
|
|
1748
|
+
f"target `{v.target_model}`"
|
|
1749
|
+
)
|
|
1750
|
+
await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
|
|
1751
|
+
return
|
|
1752
|
+
|
|
1753
|
+
await self._mount_and_scroll(UserCommandMessage(
|
|
1754
|
+
"Usage: `/steering {status | on <mode> | off | list}`"
|
|
1755
|
+
))
|
|
1756
|
+
|
|
1576
1757
|
async def _show_config(self) -> None:
|
|
1577
1758
|
"""Switch to the configuration app in the bottom panel."""
|
|
1578
1759
|
if self._current_bottom_app == BottomApp.Config:
|
|
@@ -1547,13 +1547,21 @@ class AgentLoop:
|
|
|
1547
1547
|
self.format_handler.create_failed_tool_response_message(failed, error_msg)
|
|
1548
1548
|
)
|
|
1549
1549
|
self.stats.tool_calls_failed += 1
|
|
1550
|
-
# Inject a [SYSTEM: ...] note
|
|
1551
|
-
#
|
|
1552
|
-
#
|
|
1553
|
-
self.
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1550
|
+
# Inject a [SYSTEM: ...] note so the model is more likely to break
|
|
1551
|
+
# out of the empty-response loop that often follows a suppressed
|
|
1552
|
+
# hallucinated-tool call.
|
|
1553
|
+
if "retrieve" in {t for t in self.tool_manager.available_tools}:
|
|
1554
|
+
note = (
|
|
1555
|
+
f"'{failed.tool_name}' does not exist — do NOT call it again. "
|
|
1556
|
+
"Call `retrieve(query='<terms>')` to search the project index, "
|
|
1557
|
+
"or glob/grep/read_file for direct file access. Act NOW."
|
|
1558
|
+
)
|
|
1559
|
+
else:
|
|
1560
|
+
note = (
|
|
1561
|
+
f"'{failed.tool_name}' does not exist — do NOT call it again. "
|
|
1562
|
+
"Call glob, grep, or read_file NOW to make progress."
|
|
1563
|
+
)
|
|
1564
|
+
self._inject_system_note(note)
|
|
1557
1565
|
|
|
1558
1566
|
async def _handle_tool_calls(
|
|
1559
1567
|
self, resolved: ResolvedMessage
|
|
@@ -2056,6 +2064,28 @@ class AgentLoop:
|
|
|
2056
2064
|
self._loop_detected = False
|
|
2057
2065
|
self._loop_signal = None
|
|
2058
2066
|
|
|
2067
|
+
# Deep Noir steering hook — env-gated, log-only by default.
|
|
2068
|
+
# No-op unless DRYDOCK_STEERING_MODES is set; never raises.
|
|
2069
|
+
steering_logit_bias: dict[int, float] | None = None
|
|
2070
|
+
try:
|
|
2071
|
+
from drydock.core.steering_hook import (
|
|
2072
|
+
decide_for_request,
|
|
2073
|
+
logit_bias_for_request,
|
|
2074
|
+
)
|
|
2075
|
+
steering_decision = decide_for_request(active_model.name)
|
|
2076
|
+
if steering_decision is not None:
|
|
2077
|
+
logger.info("[STEERING] %s", steering_decision.summary())
|
|
2078
|
+
if steering_decision.applier_kind == "logit_bias":
|
|
2079
|
+
bias = logit_bias_for_request(active_model.name)
|
|
2080
|
+
if bias:
|
|
2081
|
+
steering_logit_bias = bias
|
|
2082
|
+
logger.info(
|
|
2083
|
+
"[STEERING] logit_bias entries: %d",
|
|
2084
|
+
len(bias),
|
|
2085
|
+
)
|
|
2086
|
+
except Exception as _e: # defense in depth
|
|
2087
|
+
logger.debug("steering hook bypassed: %s", _e)
|
|
2088
|
+
|
|
2059
2089
|
complete_kwargs = dict(
|
|
2060
2090
|
model=active_model,
|
|
2061
2091
|
messages=self.messages,
|
|
@@ -2070,6 +2100,14 @@ class AgentLoop:
|
|
|
2070
2100
|
)
|
|
2071
2101
|
if extra_sampling:
|
|
2072
2102
|
complete_kwargs["extra_sampling"] = extra_sampling
|
|
2103
|
+
if steering_logit_bias:
|
|
2104
|
+
# Merge into extra_sampling so vLLM/Mistral backends pick it up
|
|
2105
|
+
# via SamplingParams. Backends that don't understand logit_bias
|
|
2106
|
+
# will TypeError below and we'll retry without extra_sampling
|
|
2107
|
+
# (keeping inference behavior intact).
|
|
2108
|
+
merged = dict(extra_sampling) if extra_sampling else {}
|
|
2109
|
+
merged["logit_bias"] = steering_logit_bias
|
|
2110
|
+
complete_kwargs["extra_sampling"] = merged
|
|
2073
2111
|
try:
|
|
2074
2112
|
result = await self.backend.complete(**complete_kwargs)
|
|
2075
2113
|
except TypeError:
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Failure classifier — Phase 2 keystone of the Sovereign v2 framework.
|
|
2
|
+
|
|
3
|
+
The classifier is the bridge between **observation** (admiral fires,
|
|
4
|
+
tool errors, loop-detection signals, session log patterns) and
|
|
5
|
+
**action** (harness PR, GraphRAG corpus tweak, Deep Noir vector
|
|
6
|
+
candidate, LoRA training data).
|
|
7
|
+
|
|
8
|
+
Without this layer the v2 modules (harness / GraphRAG / Deep Noir) are
|
|
9
|
+
isolated levers a human pulls. With it, every failure produces a
|
|
10
|
+
structured signal — `{bucket, evidence, suggested_action}` — that the
|
|
11
|
+
dispatchers can route to the right module automatically.
|
|
12
|
+
|
|
13
|
+
For v0 the classifier is rule-based: a registry of regex patterns,
|
|
14
|
+
each tagged with a bucket and an evidence-extraction template. v1+ can
|
|
15
|
+
swap to an LLM classifier behind the same `Classifier` interface; the
|
|
16
|
+
rest of the system never knows the difference.
|
|
17
|
+
|
|
18
|
+
Public surface:
|
|
19
|
+
from drydock.core.classifier import (
|
|
20
|
+
Bucket, FailureSignal, Classifier, classify_text, classify_lines,
|
|
21
|
+
)
|
|
22
|
+
"""
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from drydock.core.classifier.classifier import (
|
|
26
|
+
Classifier,
|
|
27
|
+
classify_lines,
|
|
28
|
+
classify_text,
|
|
29
|
+
)
|
|
30
|
+
from drydock.core.classifier.dispatcher import (
|
|
31
|
+
Dispatcher,
|
|
32
|
+
DispatchResult,
|
|
33
|
+
DispatchHandler,
|
|
34
|
+
default_handler_for,
|
|
35
|
+
make_jsonl_handler,
|
|
36
|
+
)
|
|
37
|
+
from drydock.core.classifier.signal import Bucket, FailureSignal
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"Bucket",
|
|
41
|
+
"Classifier",
|
|
42
|
+
"DispatchHandler",
|
|
43
|
+
"DispatchResult",
|
|
44
|
+
"Dispatcher",
|
|
45
|
+
"FailureSignal",
|
|
46
|
+
"classify_lines",
|
|
47
|
+
"classify_text",
|
|
48
|
+
"default_handler_for",
|
|
49
|
+
"make_jsonl_handler",
|
|
50
|
+
]
|