drydock-cli 2.7.34__tar.gz → 2.7.36__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.
Files changed (737) hide show
  1. drydock_cli-2.7.36/.auto_release.lock +1 -0
  2. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/CLAUDE.md +51 -0
  3. drydock_cli-2.7.36/JETSON_BENCH.md +99 -0
  4. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/PKG-INFO +1 -1
  5. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/SOVEREIGN_PRD.md +43 -25
  6. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/commands.py +14 -0
  7. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/app.py +181 -0
  8. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/agent_loop.py +45 -7
  9. drydock_cli-2.7.36/drydock/core/classifier/__init__.py +50 -0
  10. drydock_cli-2.7.36/drydock/core/classifier/__main__.py +108 -0
  11. drydock_cli-2.7.36/drydock/core/classifier/classifier.py +116 -0
  12. drydock_cli-2.7.36/drydock/core/classifier/dispatcher.py +156 -0
  13. drydock_cli-2.7.36/drydock/core/classifier/rules.py +182 -0
  14. drydock_cli-2.7.36/drydock/core/classifier/signal.py +53 -0
  15. drydock_cli-2.7.36/drydock/core/context_recovery.py +191 -0
  16. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/format.py +27 -7
  17. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/gemma4.md +8 -1
  18. drydock_cli-2.7.36/drydock/core/steering_hook.py +140 -0
  19. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/bash.py +53 -3
  20. drydock_cli-2.7.36/drydock/core/tools/builtins/prompts/retrieve.md +22 -0
  21. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/read_file.py +18 -6
  22. drydock_cli-2.7.36/drydock/core/tools/builtins/retrieve.py +221 -0
  23. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/search_replace.py +25 -0
  24. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/__init__.py +8 -0
  25. drydock_cli-2.7.36/drydock/steering/applier.py +299 -0
  26. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/vectors.py +20 -1
  27. drydock_cli-2.7.36/perf_results/baseline_1777811293.json +96 -0
  28. drydock_cli-2.7.36/perf_results/baseline_1777811401.json +112 -0
  29. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/pyproject.toml +1 -1
  30. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/autonomous_review_prompt.md +13 -6
  31. drydock_cli-2.7.36/scripts/classify_pulse.sh +58 -0
  32. drydock_cli-2.7.36/scripts/llm_balancer.py +146 -0
  33. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/perf_sweep.py +10 -1
  34. drydock_cli-2.7.36/scripts/queue_top.py +191 -0
  35. drydock_cli-2.7.36/tests/test_classifier.py +176 -0
  36. drydock_cli-2.7.36/tests/test_context_recovery.py +123 -0
  37. drydock_cli-2.7.36/tests/test_dispatcher.py +146 -0
  38. drydock_cli-2.7.36/tests/test_retrieve_tool.py +130 -0
  39. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_steering.py +101 -1
  40. drydock_cli-2.7.36/tests/test_steering_hook.py +125 -0
  41. drydock_cli-2.7.36/tests/tools/test_bash_binary_grep_hint.py +45 -0
  42. drydock_cli-2.7.36/tests/tools/test_bash_error_loop_breaker.py +87 -0
  43. drydock_cli-2.7.36/tests/tools/test_bash_kill_exit1_annotation.py +45 -0
  44. drydock_cli-2.7.36/tests/tools/test_hallucinated_retrieval_redirect.py +88 -0
  45. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/trip_log.md +180 -0
  46. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/uv.lock +1 -1
  47. drydock_cli-2.7.34/.auto_release.lock +0 -1
  48. drydock_cli-2.7.34/drydock/steering/applier.py +0 -157
  49. drydock_cli-2.7.34/scripts/llm_balancer.py +0 -83
  50. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.claude/scheduled_tasks.lock +0 -0
  51. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/CODEOWNERS +0 -0
  52. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  53. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  54. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  55. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/workflows/build-and-upload.yml +0 -0
  56. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/workflows/ci.yml +0 -0
  57. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/workflows/issue-labeler.yml +0 -0
  58. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.github/workflows/release.yml +0 -0
  59. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.gitignore +0 -0
  60. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.perf_baseline_done +0 -0
  61. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.pre-commit-config.yaml +0 -0
  62. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.python-version +0 -0
  63. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.typos.toml +0 -0
  64. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.vscode/extensions.json +0 -0
  65. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.vscode/launch.json +0 -0
  66. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/.vscode/settings.json +0 -0
  67. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/AGENTS.md +0 -0
  68. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/Admiral.md +0 -0
  69. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/BASELINE_412.md +0 -0
  70. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/CHANGELOG.md +0 -0
  71. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/CONTRIBUTING.md +0 -0
  72. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/DEPLOYMENT.md +0 -0
  73. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/Drydock_rebrand.md +0 -0
  74. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/LICENSE +0 -0
  75. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/MODEL_SHORTCOMINGS.md +0 -0
  76. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/NOTICE +0 -0
  77. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/OVERNIGHT_PROGRESS.md +0 -0
  78. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  79. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/PERF_SWEEP_PLAN.md +0 -0
  80. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/PRD.md +0 -0
  81. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/README.md +0 -0
  82. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/TRIAGE_v1.md +0 -0
  83. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/action.yml +0 -0
  84. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/README.md +0 -0
  85. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results1.tsv +0 -0
  86. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results13.tsv +0 -0
  87. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results14.tsv +0 -0
  88. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results15.tsv +0 -0
  89. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results16.tsv +0 -0
  90. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results17.tsv +0 -0
  91. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results18.tsv +0 -0
  92. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results19.tsv +0 -0
  93. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results2.tsv +0 -0
  94. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results20.tsv +0 -0
  95. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results3.tsv +0 -0
  96. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results4.tsv +0 -0
  97. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results5.tsv +0 -0
  98. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results6.tsv +0 -0
  99. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results7.tsv +0 -0
  100. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results8.tsv +0 -0
  101. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results9.tsv +0 -0
  102. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/baseline_history/results_evolved_v1.tsv +0 -0
  103. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/distribution/zed/LICENSE +0 -0
  104. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/distribution/zed/extension.toml +0 -0
  105. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/distribution/zed/icons/mistral_vibe.svg +0 -0
  106. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/docs/README.md +0 -0
  107. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/docs/acp-setup.md +0 -0
  108. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/docs/proxy-setup.md +0 -0
  109. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/__init__.py +0 -0
  110. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/__init__.py +0 -0
  111. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/acp_agent_loop.py +0 -0
  112. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/acp_logger.py +0 -0
  113. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/entrypoint.py +0 -0
  114. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/__init__.py +0 -0
  115. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/base.py +0 -0
  116. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/builtins/bash.py +0 -0
  117. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/builtins/read_file.py +0 -0
  118. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/builtins/search_replace.py +0 -0
  119. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/builtins/todo.py +0 -0
  120. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/builtins/write_file.py +0 -0
  121. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/tools/session_update.py +0 -0
  122. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/acp/utils.py +0 -0
  123. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/__init__.py +0 -0
  124. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/detectors.py +0 -0
  125. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/detectors_proposed.py +0 -0
  126. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/history.py +0 -0
  127. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/interventions.py +0 -0
  128. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/llm_analyzer.py +0 -0
  129. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/metrics.py +0 -0
  130. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/opus_escalator.py +0 -0
  131. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/persistence.py +0 -0
  132. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/policy.py +0 -0
  133. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/proposer.py +0 -0
  134. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/stager.py +0 -0
  135. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/task_classifier.py +0 -0
  136. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/tuning.py +0 -0
  137. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/validator.py +0 -0
  138. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/admiral/worker.py +0 -0
  139. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/__init__.py +0 -0
  140. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/autocompletion/__init__.py +0 -0
  141. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/autocompletion/base.py +0 -0
  142. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/autocompletion/path_completion.py +0 -0
  143. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/autocompletion/slash_command.py +0 -0
  144. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/cli.py +0 -0
  145. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/clipboard.py +0 -0
  146. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/entrypoint.py +0 -0
  147. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/history_manager.py +0 -0
  148. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  149. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  150. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  151. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/terminal_setup.py +0 -0
  152. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/__init__.py +0 -0
  153. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  154. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/app.tcss +0 -0
  155. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/external_editor.py +0 -0
  156. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  157. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  158. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  159. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  160. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  161. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  162. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  163. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  164. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  165. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  166. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  167. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  168. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  169. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  170. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  171. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  172. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  173. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  174. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  175. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  176. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  177. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  178. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  179. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  180. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  181. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  182. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  183. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  184. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  185. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  186. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  187. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  188. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  189. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  190. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  191. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  192. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  193. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/windowing/history.py +0 -0
  194. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  195. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/textual_ui/windowing/state.py +0 -0
  196. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/__init__.py +0 -0
  197. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  198. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  199. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  200. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  201. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  202. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/update.py +0 -0
  203. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/cli/update_notifier/whats_new.py +0 -0
  204. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/__init__.py +0 -0
  205. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/agents/__init__.py +0 -0
  206. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/agents/manager.py +0 -0
  207. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/agents/models.py +0 -0
  208. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/auth/__init__.py +0 -0
  209. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/auth/crypto.py +0 -0
  210. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/auth/github.py +0 -0
  211. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/__init__.py +0 -0
  212. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/completers.py +0 -0
  213. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  214. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  215. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  216. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  217. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  218. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/fuzzy.py +0 -0
  219. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/path_prompt.py +0 -0
  220. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  221. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/build_orchestrator.py +0 -0
  222. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/checkpoint.py +0 -0
  223. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/__init__.py +0 -0
  224. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/_settings.py +0 -0
  225. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/doctor.py +0 -0
  226. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/harness_files/__init__.py +0 -0
  227. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  228. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/harness_files/_paths.py +0 -0
  229. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/config/local_detect.py +0 -0
  230. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/consultant.py +0 -0
  231. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/drydock_states.py +0 -0
  232. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/hooks.py +0 -0
  233. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/__init__.py +0 -0
  234. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/anthropic.py +0 -0
  235. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/base.py +0 -0
  236. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/factory.py +0 -0
  237. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/generic.py +0 -0
  238. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/mistral.py +0 -0
  239. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  240. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/backend/vertex.py +0 -0
  241. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/exceptions.py +0 -0
  242. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/message_utils.py +0 -0
  243. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/llm/types.py +0 -0
  244. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/logger.py +0 -0
  245. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/middleware.py +0 -0
  246. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/output_formatters.py +0 -0
  247. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/paths/__init__.py +0 -0
  248. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/paths/_drydock_home.py +0 -0
  249. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/paths/_local_config_walk.py +0 -0
  250. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/paths/conventions.py +0 -0
  251. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/plan_session.py +0 -0
  252. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/plugins.py +0 -0
  253. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/programmatic.py +0 -0
  254. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/__init__.py +0 -0
  255. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/builder.md +0 -0
  256. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/cli.md +0 -0
  257. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/compact.md +0 -0
  258. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/dangerous_directory.md +0 -0
  259. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/diagnostic.md +0 -0
  260. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/explore.md +0 -0
  261. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/planner.md +0 -0
  262. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/project_context.md +0 -0
  263. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/prompts/tests.md +0 -0
  264. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/proxy_setup.py +0 -0
  265. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/agent_memory.py +0 -0
  266. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/checkpoints.py +0 -0
  267. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/session_loader.py +0 -0
  268. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/session_logger.py +0 -0
  269. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/session_migration.py +0 -0
  270. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session/state_file.py +0 -0
  271. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/session_checker.py +0 -0
  272. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/skills/__init__.py +0 -0
  273. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/skills/manager.py +0 -0
  274. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/skills/models.py +0 -0
  275. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/skills/parser.py +0 -0
  276. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/slug.py +0 -0
  277. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/system_prompt.py +0 -0
  278. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/telemetry/__init__.py +0 -0
  279. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/telemetry/send.py +0 -0
  280. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/teleport/errors.py +0 -0
  281. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/teleport/git.py +0 -0
  282. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/teleport/nuage.py +0 -0
  283. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/teleport/teleport.py +0 -0
  284. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/teleport/types.py +0 -0
  285. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/base.py +0 -0
  286. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/_task_manager.py +0 -0
  287. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  288. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/cron.py +0 -0
  289. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  290. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/glob_tool.py +0 -0
  291. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/grep.py +0 -0
  292. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  293. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/lsp.py +0 -0
  294. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  295. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  296. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/powershell.py +0 -0
  297. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  298. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  299. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  300. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  301. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  302. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  303. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  304. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  305. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  306. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  307. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  308. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  309. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  310. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  311. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/task.md +0 -0
  312. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  313. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  314. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  315. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  316. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  317. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  318. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  319. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/task.py +0 -0
  320. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/todo.py +0 -0
  321. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/tool_search.py +0 -0
  322. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/webfetch.py +0 -0
  323. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/websearch.py +0 -0
  324. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/worktree.py +0 -0
  325. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/builtins/write_file.py +0 -0
  326. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/injection_guard.py +0 -0
  327. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/manager.py +0 -0
  328. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/mcp/__init__.py +0 -0
  329. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/mcp/registry.py +0 -0
  330. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/mcp/tools.py +0 -0
  331. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/mcp_sampling.py +0 -0
  332. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/ui.py +0 -0
  333. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/tools/utils.py +0 -0
  334. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/trusted_folders.py +0 -0
  335. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/types.py +0 -0
  336. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/core/utils.py +0 -0
  337. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/__init__.py +0 -0
  338. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/__main__.py +0 -0
  339. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/code_indexer.py +0 -0
  340. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/retriever.py +0 -0
  341. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/storage.py +0 -0
  342. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/graphrag/text_indexer.py +0 -0
  343. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/__init__.py +0 -0
  344. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/base.py +0 -0
  345. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/onboarding.tcss +0 -0
  346. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/screens/__init__.py +0 -0
  347. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/screens/api_key.py +0 -0
  348. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/screens/choice.py +0 -0
  349. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/screens/local_model.py +0 -0
  350. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/onboarding/screens/welcome.py +0 -0
  351. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  352. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  353. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/__init__.py +0 -0
  354. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/api-design/SKILL.md +0 -0
  355. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/audit-tests/SKILL.md +0 -0
  356. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/batch/SKILL.md +0 -0
  357. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/commit-code/SKILL.md +0 -0
  358. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/context-summary/SKILL.md +0 -0
  359. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/create-presentation/SKILL.md +0 -0
  360. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/deep-research/SKILL.md +0 -0
  361. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/deploy/SKILL.md +0 -0
  362. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/diff-review/SKILL.md +0 -0
  363. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/doc-gen/SKILL.md +0 -0
  364. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/explain-code/SKILL.md +0 -0
  365. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/explore-code/SKILL.md +0 -0
  366. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/fix-issue/SKILL.md +0 -0
  367. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/git-ops/SKILL.md +0 -0
  368. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/init-project/SKILL.md +0 -0
  369. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/investigate/SKILL.md +0 -0
  370. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/loop/SKILL.md +0 -0
  371. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/migrate/SKILL.md +0 -0
  372. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/perf-analyze/SKILL.md +0 -0
  373. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/plan-impl/SKILL.md +0 -0
  374. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/pr-review/SKILL.md +0 -0
  375. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/refactor/SKILL.md +0 -0
  376. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/regex-help/SKILL.md +0 -0
  377. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/review/SKILL.md +0 -0
  378. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/security-review/SKILL.md +0 -0
  379. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/ship/SKILL.md +0 -0
  380. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/simplify/SKILL.md +0 -0
  381. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/strong-tests/SKILL.md +0 -0
  382. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/skills/test-verify/SKILL.md +0 -0
  383. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/__main__.py +0 -0
  384. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/config.py +0 -0
  385. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/registry.py +0 -0
  386. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/steering/sandbox.py +0 -0
  387. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock/whats_new.md +0 -0
  388. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock-acp.spec +0 -0
  389. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/drydock_terms.md +0 -0
  390. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/flake.lock +0 -0
  391. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/flake.nix +0 -0
  392. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/nohup.out +0 -0
  393. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/perf_results/baseline_1777672181.json +0 -0
  394. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/perf_results/baseline_1777672218.json +0 -0
  395. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/perf_results/baseline_1777672322.json +0 -0
  396. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/perf_results/baseline_1777732278.json +0 -0
  397. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/README.md +0 -0
  398. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/config_base.toml +0 -0
  399. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/config_best.toml +0 -0
  400. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/domain_spec.md +0 -0
  401. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/experimenter.py +0 -0
  402. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/kernel.py +0 -0
  403. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/mini_prd.md +0 -0
  404. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/mini_prompts.txt +0 -0
  405. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/proposer.py +0 -0
  406. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/research/results.tsv +0 -0
  407. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/resume.md +0 -0
  408. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/README.md +0 -0
  409. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/admiral_probe.py +0 -0
  410. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/audit_sampler.py +0 -0
  411. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/auto_generate_tests.py +0 -0
  412. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/auto_release.sh +0 -0
  413. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/auto_test_loop.sh +0 -0
  414. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/autonomous_review.sh +0 -0
  415. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/backup.sh +0 -0
  416. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/bump_version.py +0 -0
  417. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/comprehensive_loop.py +0 -0
  418. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/deploy_to_github.sh +0 -0
  419. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/discover_cli_tools.sh +0 -0
  420. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/evolve_tests.py +0 -0
  421. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/gen_2000_prompts.py +0 -0
  422. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/install.sh +0 -0
  423. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/mega_loop.py +0 -0
  424. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/meta_ralph_loop.py +0 -0
  425. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/monitor_swebench.sh +0 -0
  426. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/monitor_test_battery.sh +0 -0
  427. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/notify_release.py +0 -0
  428. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/oss_task_harness.py +0 -0
  429. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/overnight_agents_test.sh +0 -0
  430. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/perf_baseline_when_idle.sh +0 -0
  431. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/poll_issues.sh +0 -0
  432. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/port_task.py +0 -0
  433. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/prepare_release.py +0 -0
  434. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/publish_to_pypi.sh +0 -0
  435. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/ralph_loop.py +0 -0
  436. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/research_babysitter.sh +0 -0
  437. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/session_loop_audit.py +0 -0
  438. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/shakedown.py +0 -0
  439. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/shakedown_interactive.py +0 -0
  440. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/shakedown_regression.sh +0 -0
  441. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/shakedown_suite.sh +0 -0
  442. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/shakedown_variance.sh +0 -0
  443. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_babysitter.sh +0 -0
  444. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_prompts_50.txt +0 -0
  445. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_prompts_realuser.txt +0 -0
  446. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_prompts_tool_agent.txt +0 -0
  447. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  448. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_shakedown.py +0 -0
  449. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_telegram_status.py +0 -0
  450. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/stress_watcher.py +0 -0
  451. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/telegram_bot.py +0 -0
  452. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/test_bank.sh +0 -0
  453. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/test_full.sh +0 -0
  454. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/test_smoke.sh +0 -0
  455. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/test_tui_path.py +0 -0
  456. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/tui_test.py +0 -0
  457. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/scripts/vllm_failover.sh +0 -0
  458. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/test/project/dummy +0 -0
  459. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/__init__.py +0 -0
  460. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/conftest.py +0 -0
  461. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_acp.py +0 -0
  462. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_agent_thought.py +0 -0
  463. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_bash.py +0 -0
  464. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_compact_session_updates.py +0 -0
  465. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_content.py +0 -0
  466. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_initialize.py +0 -0
  467. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_list_sessions.py +0 -0
  468. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_load_session.py +0 -0
  469. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_multi_session.py +0 -0
  470. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_new_session.py +0 -0
  471. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_proxy_setup_acp.py +0 -0
  472. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_read_file.py +0 -0
  473. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_search_replace.py +0 -0
  474. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_set_config_option.py +0 -0
  475. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_set_mode.py +0 -0
  476. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_set_model.py +0 -0
  477. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_tool_call_session_update.py +0 -0
  478. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_utils.py +0 -0
  479. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/acp/test_write_file.py +0 -0
  480. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_file_indexer.py +0 -0
  481. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_fuzzy.py +0 -0
  482. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  483. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  484. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_path_completion_controller.py +0 -0
  485. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  486. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_slash_command_controller.py +0 -0
  487. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  488. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/__init__.py +0 -0
  489. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/data/__init__.py +0 -0
  490. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/data/fireworks.py +0 -0
  491. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/data/mistral.py +0 -0
  492. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/test_anthropic_adapter.py +0 -0
  493. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/test_backend.py +0 -0
  494. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  495. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/test_reasoning_adapter.py +0 -0
  496. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  497. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  498. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  499. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  500. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_bell_notifications.py +0 -0
  501. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_braille_renderer.py +0 -0
  502. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_clipboard.py +0 -0
  503. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_commands.py +0 -0
  504. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_copy_shortcuts.py +0 -0
  505. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_external_editor.py +0 -0
  506. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_no_markup_static.py +0 -0
  507. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_question_app.py +0 -0
  508. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_spinner.py +0 -0
  509. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_switching_mode.py +0 -0
  510. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  511. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  512. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_ui_session_resume.py +0 -0
  513. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/test_ui_skill_dispatch.py +0 -0
  514. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/textual_ui/__init__.py +0 -0
  515. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/cli/textual_ui/test_session_picker.py +0 -0
  516. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/conftest.py +0 -0
  517. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_agents.py +0 -0
  518. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_auth_crypto.py +0 -0
  519. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_auth_github.py +0 -0
  520. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  521. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  522. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_config_load_dotenv.py +0 -0
  523. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_config_paths.py +0 -0
  524. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_config_resolution.py +0 -0
  525. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_file_logging.py +0 -0
  526. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_plan_session.py +0 -0
  527. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_proxy_setup.py +0 -0
  528. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_slug.py +0 -0
  529. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_telemetry_send.py +0 -0
  530. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_teleport_git.py +0 -0
  531. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_teleport_nuage.py +0 -0
  532. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_teleport_service.py +0 -0
  533. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_trusted_folders.py +0 -0
  534. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/core/test_utils.py +0 -0
  535. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/common.py +0 -0
  536. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/conftest.py +0 -0
  537. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/mock_server.py +0 -0
  538. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  539. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/test_cli_tui_streaming.py +0 -0
  540. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  541. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/fixtures/doc_qa_system_prd.md +0 -0
  542. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/mock/__init__.py +0 -0
  543. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/mock/mock_backend_factory.py +0 -0
  544. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/mock/mock_entrypoint.py +0 -0
  545. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/mock/utils.py +0 -0
  546. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/onboarding/test_run_onboarding.py +0 -0
  547. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/onboarding/test_ui_onboarding.py +0 -0
  548. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/session/test_session_loader.py +0 -0
  549. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/session/test_session_logger.py +0 -0
  550. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/session/test_session_migration.py +0 -0
  551. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/skills/conftest.py +0 -0
  552. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/skills/test_manager.py +0 -0
  553. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/skills/test_models.py +0 -0
  554. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/skills/test_parser.py +0 -0
  555. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  556. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  557. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  558. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  559. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  560. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  561. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  562. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  563. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  564. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  565. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  566. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  567. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  568. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  569. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  570. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  571. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  572. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  573. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  574. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  575. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  576. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  577. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  578. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  579. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  580. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  581. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  582. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  583. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  584. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  585. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  586. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  587. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  588. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  589. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  590. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  591. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  592. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  593. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  594. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  595. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  596. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  597. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  598. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  599. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  600. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  601. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  602. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  603. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  604. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  605. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  606. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  607. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  608. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  609. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  610. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  611. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  612. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  613. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  614. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  615. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/base_snapshot_test_app.py +0 -0
  616. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/conftest.py +0 -0
  617. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/snap_compare.py +0 -0
  618. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  619. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  620. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  621. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  622. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  623. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  624. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  625. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  626. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  627. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  628. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  629. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  630. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  631. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  632. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/stubs/fake_backend.py +0 -0
  633. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/stubs/fake_client.py +0 -0
  634. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/stubs/fake_tool.py +0 -0
  635. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_admiral.py +0 -0
  636. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_admiral_phase3.py +0 -0
  637. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_admiral_proposed.py +0 -0
  638. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_admiral_struggle_dedup.py +0 -0
  639. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_auto_compact.py +0 -0
  640. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_backend.py +0 -0
  641. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_observer_streaming.py +0 -0
  642. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_stats.py +0 -0
  643. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_tasks.py +0 -0
  644. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agent_tool_call.py +0 -0
  645. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_agents.py +0 -0
  646. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_build.py +0 -0
  647. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_debug.py +0 -0
  648. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_multiagent.py +0 -0
  649. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_prd.py +0 -0
  650. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_prd_extended.py +0 -0
  651. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_tools.py +0 -0
  652. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_bank_update.py +0 -0
  653. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_build_projects.py +0 -0
  654. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_checkpoint.py +0 -0
  655. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_cli_programmatic_preload.py +0 -0
  656. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_current_bugs.py +0 -0
  657. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_drydock_regression.py +0 -0
  658. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_drydock_tasks.py +0 -0
  659. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  660. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_full_regression.py +0 -0
  661. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_graphrag.py +0 -0
  662. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_hallucinated_tool_suppression.py +0 -0
  663. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_history_manager.py +0 -0
  664. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_integration.py +0 -0
  665. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_issue_fixes.py +0 -0
  666. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_local_detect.py +0 -0
  667. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_loop_detection.py +0 -0
  668. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_message_id.py +0 -0
  669. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_message_merging.py +0 -0
  670. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_middleware.py +0 -0
  671. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_multi_agent.py +0 -0
  672. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_read_file_not_found_listing.py +0 -0
  673. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_real_failures.py +0 -0
  674. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_real_issues.py +0 -0
  675. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_real_workflow.py +0 -0
  676. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_reasoning_content.py +0 -0
  677. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_search_replace_args_not_truncated.py +0 -0
  678. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_smoke.py +0 -0
  679. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_system_prompt.py +0 -0
  680. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_tagged_text.py +0 -0
  681. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_task_complete_nudge.py +0 -0
  682. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_tool_args.py +0 -0
  683. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_truncate_args_valid_json.py +0 -0
  684. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_truncated_arg_path_hint.py +0 -0
  685. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_truncated_search_replace_escalation.py +0 -0
  686. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_truncated_write_escalation.py +0 -0
  687. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_ui_external_editor.py +0 -0
  688. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_ui_input_history.py +0 -0
  689. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_user_issues.py +0 -0
  690. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_wall_of_text_rescue.py +0 -0
  691. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_workloads.py +0 -0
  692. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/test_write_file_missing_path.py +0 -0
  693. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/testbank_helpers.py +0 -0
  694. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_ask_user_question.py +0 -0
  695. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_bash.py +0 -0
  696. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  697. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_exit_plan_mode.py +0 -0
  698. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_grep.py +0 -0
  699. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_invoke_context.py +0 -0
  700. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  701. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_manager_get_tool_config.py +0 -0
  702. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_mcp.py +0 -0
  703. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_mcp_sampling.py +0 -0
  704. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  705. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  706. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_read_file_directory.py +0 -0
  707. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_read_file_limit_truncation.py +0 -0
  708. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_append_fallback.py +0 -0
  709. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_dir_path.py +0 -0
  710. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_empty_content.py +0 -0
  711. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_file_not_found.py +0 -0
  712. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  713. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_hard_stop.py +0 -0
  714. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_malformed_block.py +0 -0
  715. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  716. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_placeholder.py +0 -0
  717. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  718. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_task.py +0 -0
  719. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_ui_bash_execution.py +0 -0
  720. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_webfetch.py +0 -0
  721. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_websearch.py +0 -0
  722. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  723. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  724. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  725. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  726. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_do_update.py +0 -0
  727. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  728. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_github_update_gateway.py +0 -0
  729. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  730. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_ui_update_notification.py +0 -0
  731. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_update_use_case.py +0 -0
  732. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/tests/update_notifier/test_whats_new.py +0 -0
  733. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/worked_examples/README.md +0 -0
  734. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/worked_examples/cli_subcommand_dispatch.py +0 -0
  735. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/worked_examples/lookup.json +0 -0
  736. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/worked_examples/sql_parser.py +0 -0
  737. {drydock_cli-2.7.34 → drydock_cli-2.7.36}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 2485580
@@ -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.34
3
+ Version: 2.7.36
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
- - **Hosting performance sweep** — lock the inference floor (`PERF_SWEEP_PLAN.md`)
484
- - **Manual failure triage** — seed the classifier taxonomy from existing
485
- diagnostic data (`MODEL_SHORTCOMINGS.md`, `BASELINE_412.md`, Admiral logs)
486
- - **Read-before-write enforcement** in the harness
487
- - Customer-hardware portability bring-up (llama.cpp + Ollama backends)
488
-
489
- ### Phase 260 days (Classifier + GraphRAG first cut)
490
-
491
- - ▢ **Failure classifier** extends Admiral / runs as a sibling; emits
492
- structured signals tagged harness-class / retrieval-class / steering-class /
493
- model-prior / ambiguous-input
494
- - **GraphRAG ingestion pipeline** (PDFs, code, markdown) first cut, ships
495
- as a deployable module
496
- - **Pluggable retriever interface** in Drydock (vector + graph backends)
497
- - Memory routing (when to retrieve, when not to)
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 first cut + self-improvement)
502
-
503
- - **Deep Noir steering** — first cut, ships as a deployable module;
504
- initial vectors for reduced-hallucination, secure-coding, citation modes
505
- - Steering hook in the harness; sandbox eval per new vector
506
- - Classifier-driven dispatch: harness-class signals open auto-PRs to
507
- drydock; retrieval-class signals queue corpus gaps; steering-class signals
508
- queue vector candidates
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 (the format admiral uses) so the model
1551
- # is more likely to break out of the empty-response loop that often
1552
- # follows a suppressed hallucinated-tool call.
1553
- self._inject_system_note(
1554
- f"'{failed.tool_name}' does not exist — do NOT call it again. "
1555
- "Call glob, grep, or read_file NOW to make progress."
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
+ ]