drydock-cli 2.8.23__tar.gz → 2.8.25__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 (770) hide show
  1. drydock_cli-2.8.25/.auto_release.lock +1 -0
  2. drydock_cli-2.8.25/DRYDOCK.md +149 -0
  3. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/PKG-INFO +1 -1
  4. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/SOVEREIGN_PRD.md +131 -39
  5. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/agent_loop.py +138 -4
  6. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/pyproject.toml +1 -1
  7. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/hle_eval.py +17 -1
  8. drydock_cli-2.8.25/scripts/tool_usage_report.py +148 -0
  9. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_cli_programmatic_preload.py +2 -2
  10. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_local_detect.py +8 -4
  11. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_loop_detection.py +80 -0
  12. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/trip_log.md +108 -0
  13. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/uv.lock +3 -1
  14. drydock_cli-2.8.23/.auto_release.lock +0 -1
  15. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/CODEOWNERS +0 -0
  16. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  17. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  18. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/workflows/build-and-upload.yml +0 -0
  20. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/workflows/ci.yml +0 -0
  21. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/workflows/issue-labeler.yml +0 -0
  22. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.github/workflows/release.yml +0 -0
  23. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.gitignore +0 -0
  24. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.pre-commit-config.yaml +0 -0
  25. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.python-version +0 -0
  26. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.typos.toml +0 -0
  27. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.vscode/extensions.json +0 -0
  28. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.vscode/launch.json +0 -0
  29. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/.vscode/settings.json +0 -0
  30. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/AGENTS.md +0 -0
  31. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/Admiral.md +0 -0
  32. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/CHANGELOG.md +0 -0
  33. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/CLAUDE.md +0 -0
  34. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/CONTRIBUTING.md +0 -0
  35. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/DEEP_NOIR_PRD.md +0 -0
  36. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/DEPLOYMENT.md +0 -0
  37. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/HLE_PRD.md +0 -0
  38. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/JETSON_BENCH.md +0 -0
  39. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/LICENSE +0 -0
  40. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/MODEL_SHORTCOMINGS.md +0 -0
  41. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/NOTICE +0 -0
  42. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/README.md +0 -0
  43. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/TRIAGE_v1.md +0 -0
  44. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/action.yml +0 -0
  45. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/README.md +0 -0
  46. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results1.tsv +0 -0
  47. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results13.tsv +0 -0
  48. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results14.tsv +0 -0
  49. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results15.tsv +0 -0
  50. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results16.tsv +0 -0
  51. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results17.tsv +0 -0
  52. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results18.tsv +0 -0
  53. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results19.tsv +0 -0
  54. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results2.tsv +0 -0
  55. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results20.tsv +0 -0
  56. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results3.tsv +0 -0
  57. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results4.tsv +0 -0
  58. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results5.tsv +0 -0
  59. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results6.tsv +0 -0
  60. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results7.tsv +0 -0
  61. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results8.tsv +0 -0
  62. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results9.tsv +0 -0
  63. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/baseline_history/results_evolved_v1.tsv +0 -0
  64. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/distribution/zed/LICENSE +0 -0
  65. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/distribution/zed/extension.toml +0 -0
  66. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/distribution/zed/icons/mistral_vibe.svg +0 -0
  67. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/README.md +0 -0
  68. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/acp-setup.md +0 -0
  69. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/BASELINE_412.md +0 -0
  70. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/Drydock_rebrand.md +0 -0
  71. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  72. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  73. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  74. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/PRD.md +0 -0
  75. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/drydock_terms.md +0 -0
  76. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/archive/resume.md +0 -0
  77. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/docs/proxy-setup.md +0 -0
  78. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/__init__.py +0 -0
  79. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/__main__.py +0 -0
  80. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/__init__.py +0 -0
  81. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/acp_agent_loop.py +0 -0
  82. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/acp_logger.py +0 -0
  83. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/entrypoint.py +0 -0
  84. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/__init__.py +0 -0
  85. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/base.py +0 -0
  86. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/builtins/bash.py +0 -0
  87. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/builtins/read_file.py +0 -0
  88. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/builtins/search_replace.py +0 -0
  89. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/builtins/todo.py +0 -0
  90. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/builtins/write_file.py +0 -0
  91. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/tools/session_update.py +0 -0
  92. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/acp/utils.py +0 -0
  93. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/__init__.py +0 -0
  94. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/detectors.py +0 -0
  95. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/detectors_proposed.py +0 -0
  96. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/history.py +0 -0
  97. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/interventions.py +0 -0
  98. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/llm_analyzer.py +0 -0
  99. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/metrics.py +0 -0
  100. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/opus_escalator.py +0 -0
  101. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/persistence.py +0 -0
  102. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/policy.py +0 -0
  103. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/proposer.py +0 -0
  104. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/stager.py +0 -0
  105. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/task_classifier.py +0 -0
  106. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/tuning.py +0 -0
  107. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/validator.py +0 -0
  108. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/admiral/worker.py +0 -0
  109. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/__init__.py +0 -0
  110. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/autocompletion/__init__.py +0 -0
  111. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/autocompletion/base.py +0 -0
  112. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/autocompletion/path_completion.py +0 -0
  113. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/autocompletion/slash_command.py +0 -0
  114. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/cli.py +0 -0
  115. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/clipboard.py +0 -0
  116. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/commands.py +0 -0
  117. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/entrypoint.py +0 -0
  118. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/fix_windows_path.py +0 -0
  119. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/history_manager.py +0 -0
  120. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  121. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  122. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  123. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/terminal_setup.py +0 -0
  124. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/__init__.py +0 -0
  125. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  126. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/app.py +0 -0
  127. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/app.tcss +0 -0
  128. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/external_editor.py +0 -0
  129. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  130. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  131. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  132. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  133. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  134. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  135. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  136. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  137. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  138. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  139. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  140. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  141. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  142. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  143. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  144. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  145. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  146. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  147. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  148. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  149. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  150. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  151. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  152. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  153. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  154. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  155. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  156. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  157. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  158. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  159. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  160. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  161. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  162. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  163. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  164. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  165. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  166. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/windowing/history.py +0 -0
  167. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  168. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/textual_ui/windowing/state.py +0 -0
  169. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/__init__.py +0 -0
  170. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  171. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  172. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  173. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  174. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  175. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/update.py +0 -0
  176. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/cli/update_notifier/whats_new.py +0 -0
  177. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/__init__.py +0 -0
  178. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/agents/__init__.py +0 -0
  179. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/agents/manager.py +0 -0
  180. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/agents/models.py +0 -0
  181. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/auth/__init__.py +0 -0
  182. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/auth/crypto.py +0 -0
  183. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/auth/github.py +0 -0
  184. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/__init__.py +0 -0
  185. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/completers.py +0 -0
  186. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  187. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  188. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  189. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  190. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  191. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/fuzzy.py +0 -0
  192. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/path_prompt.py +0 -0
  193. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  194. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/build_orchestrator.py +0 -0
  195. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/checkpoint.py +0 -0
  196. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/__init__.py +0 -0
  197. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/__main__.py +0 -0
  198. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/classifier.py +0 -0
  199. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/dispatcher.py +0 -0
  200. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/rules.py +0 -0
  201. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/classifier/signal.py +0 -0
  202. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/__init__.py +0 -0
  203. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/_dotenv.py +0 -0
  204. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/_settings.py +0 -0
  205. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/doctor.py +0 -0
  206. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/harness_files/__init__.py +0 -0
  207. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  208. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/harness_files/_paths.py +0 -0
  209. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/local_detect.py +0 -0
  210. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/config/migrate.py +0 -0
  211. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/consultant.py +0 -0
  212. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/context_recovery.py +0 -0
  213. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/drydock_states.py +0 -0
  214. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/hooks.py +0 -0
  215. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/__init__.py +0 -0
  216. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/anthropic.py +0 -0
  217. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/base.py +0 -0
  218. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/factory.py +0 -0
  219. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/generic.py +0 -0
  220. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/mistral.py +0 -0
  221. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  222. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/backend/vertex.py +0 -0
  223. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/exceptions.py +0 -0
  224. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/format.py +0 -0
  225. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/message_utils.py +0 -0
  226. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/llm/types.py +0 -0
  227. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/logger.py +0 -0
  228. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/middleware.py +0 -0
  229. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/output_formatters.py +0 -0
  230. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/paths/__init__.py +0 -0
  231. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/paths/_drydock_home.py +0 -0
  232. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/paths/_local_config_walk.py +0 -0
  233. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/paths/conventions.py +0 -0
  234. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/plan_session.py +0 -0
  235. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/plugins.py +0 -0
  236. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/programmatic.py +0 -0
  237. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/__init__.py +0 -0
  238. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/builder.md +0 -0
  239. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/cli.md +0 -0
  240. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/compact.md +0 -0
  241. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/dangerous_directory.md +0 -0
  242. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/diagnostic.md +0 -0
  243. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/explore.md +0 -0
  244. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/gemma4.md +0 -0
  245. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/planner.md +0 -0
  246. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/project_context.md +0 -0
  247. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/prompts/tests.md +0 -0
  248. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/proxy_setup.py +0 -0
  249. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/agent_memory.py +0 -0
  250. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/checkpoints.py +0 -0
  251. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/session_loader.py +0 -0
  252. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/session_logger.py +0 -0
  253. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/session_migration.py +0 -0
  254. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session/state_file.py +0 -0
  255. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/session_checker.py +0 -0
  256. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/skills/__init__.py +0 -0
  257. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/skills/manager.py +0 -0
  258. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/skills/models.py +0 -0
  259. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/skills/parser.py +0 -0
  260. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/slug.py +0 -0
  261. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/steering_hook.py +0 -0
  262. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/system_prompt.py +0 -0
  263. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/telemetry/__init__.py +0 -0
  264. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/telemetry/send.py +0 -0
  265. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/teleport/errors.py +0 -0
  266. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/teleport/git.py +0 -0
  267. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/teleport/nuage.py +0 -0
  268. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/teleport/teleport.py +0 -0
  269. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/teleport/types.py +0 -0
  270. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/base.py +0 -0
  271. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/_task_manager.py +0 -0
  272. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  273. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/bash.py +0 -0
  274. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/count_tool.py +0 -0
  275. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/cron.py +0 -0
  276. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  277. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/glob_tool.py +0 -0
  278. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/grep.py +0 -0
  279. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  280. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/lsp.py +0 -0
  281. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/math_tool.py +0 -0
  282. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  283. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/memory_tool.py +0 -0
  284. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  285. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/powershell.py +0 -0
  286. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  287. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  288. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  289. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  290. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  291. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  292. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  293. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  294. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  295. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  296. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  297. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  298. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  299. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  300. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  301. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/task.md +0 -0
  302. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  303. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  304. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  305. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  306. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  307. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  308. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  309. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/read_file.py +0 -0
  310. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/retrieve.py +0 -0
  311. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/search_replace.py +0 -0
  312. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/task.py +0 -0
  313. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/todo.py +0 -0
  314. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/tool_search.py +0 -0
  315. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/verify_tool.py +0 -0
  316. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/webfetch.py +0 -0
  317. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/websearch.py +0 -0
  318. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/worktree.py +0 -0
  319. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/builtins/write_file.py +0 -0
  320. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/injection_guard.py +0 -0
  321. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/manager.py +0 -0
  322. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/mcp/__init__.py +0 -0
  323. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/mcp/registry.py +0 -0
  324. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/mcp/tools.py +0 -0
  325. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/mcp_sampling.py +0 -0
  326. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/ui.py +0 -0
  327. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/tools/utils.py +0 -0
  328. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/trusted_folders.py +0 -0
  329. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/types.py +0 -0
  330. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/core/utils.py +0 -0
  331. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/__init__.py +0 -0
  332. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/__main__.py +0 -0
  333. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/gap_detector.py +0 -0
  334. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/item.py +0 -0
  335. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/queue.py +0 -0
  336. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/curiosity/surprise.py +0 -0
  337. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/__init__.py +0 -0
  338. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/__main__.py +0 -0
  339. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/code_indexer.py +0 -0
  340. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/retriever.py +0 -0
  341. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/storage.py +0 -0
  342. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/graphrag/text_indexer.py +0 -0
  343. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/__init__.py +0 -0
  344. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/base.py +0 -0
  345. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/onboarding.tcss +0 -0
  346. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/screens/__init__.py +0 -0
  347. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/screens/api_key.py +0 -0
  348. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/screens/choice.py +0 -0
  349. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/screens/local_model.py +0 -0
  350. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/onboarding/screens/welcome.py +0 -0
  351. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  352. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  353. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/__init__.py +0 -0
  354. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/api-design/SKILL.md +0 -0
  355. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/audit-tests/SKILL.md +0 -0
  356. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/batch/SKILL.md +0 -0
  357. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/commit-code/SKILL.md +0 -0
  358. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/context-summary/SKILL.md +0 -0
  359. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/create-presentation/SKILL.md +0 -0
  360. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/deep-research/SKILL.md +0 -0
  361. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/deploy/SKILL.md +0 -0
  362. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/diff-review/SKILL.md +0 -0
  363. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/doc-gen/SKILL.md +0 -0
  364. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/explain-code/SKILL.md +0 -0
  365. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/explore-code/SKILL.md +0 -0
  366. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/fix-issue/SKILL.md +0 -0
  367. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/git-ops/SKILL.md +0 -0
  368. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/init-project/SKILL.md +0 -0
  369. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/investigate/SKILL.md +0 -0
  370. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/loop/SKILL.md +0 -0
  371. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/migrate/SKILL.md +0 -0
  372. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/perf-analyze/SKILL.md +0 -0
  373. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/plan-impl/SKILL.md +0 -0
  374. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/pr-review/SKILL.md +0 -0
  375. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/refactor/SKILL.md +0 -0
  376. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/regex-help/SKILL.md +0 -0
  377. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/review/SKILL.md +0 -0
  378. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/security-review/SKILL.md +0 -0
  379. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/ship/SKILL.md +0 -0
  380. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/simplify/SKILL.md +0 -0
  381. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/strong-tests/SKILL.md +0 -0
  382. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/skills/test-verify/SKILL.md +0 -0
  383. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/__init__.py +0 -0
  384. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/__main__.py +0 -0
  385. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/applier.py +0 -0
  386. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/config.py +0 -0
  387. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/registry.py +0 -0
  388. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sandbox.py +0 -0
  389. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sidecar/__init__.py +0 -0
  390. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sidecar/header_parser.py +0 -0
  391. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sidecar/hooks.py +0 -0
  392. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sidecar/loader.py +0 -0
  393. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/sidecar/server.py +0 -0
  394. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/train/__init__.py +0 -0
  395. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/train/capture.py +0 -0
  396. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/train/compute_vector.py +0 -0
  397. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/train/extract_pairs.py +0 -0
  398. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/steering/vectors.py +0 -0
  399. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock/whats_new.md +0 -0
  400. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/drydock-acp.spec +0 -0
  401. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/flake.lock +0 -0
  402. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/flake.nix +0 -0
  403. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/outlook_draft_assistant.tar.gz +0 -0
  404. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/README.md +0 -0
  405. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/config_base.toml +0 -0
  406. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/config_best.toml +0 -0
  407. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/domain_spec.md +0 -0
  408. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/experimenter.py +0 -0
  409. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/kernel.py +0 -0
  410. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/mini_prd.md +0 -0
  411. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/mini_prompts.txt +0 -0
  412. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/proposer.py +0 -0
  413. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/research/results.tsv +0 -0
  414. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/README.md +0 -0
  415. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/admiral_probe.py +0 -0
  416. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/auto_test_loop.sh +0 -0
  417. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/monitor_test_battery.sh +0 -0
  418. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/overnight_agents_test.sh +0 -0
  419. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/test_bank.sh +0 -0
  420. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/test_full.sh +0 -0
  421. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/test_smoke.sh +0 -0
  422. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/archive/tui_test.py +0 -0
  423. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/audit_sampler.py +0 -0
  424. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/auto_generate_tests.py +0 -0
  425. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/auto_release.sh +0 -0
  426. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/autonomous_review.sh +0 -0
  427. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/autonomous_review_prompt.md +0 -0
  428. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/backfill_hle_curiosity.py +0 -0
  429. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/backup.sh +0 -0
  430. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/bench_inference.py +0 -0
  431. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/bump_version.py +0 -0
  432. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/classify_pulse.sh +0 -0
  433. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/consume_retrieval_queue.py +0 -0
  434. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/curiosity_idle_cycle.sh +0 -0
  435. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/deploy_to_github.sh +0 -0
  436. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/fetch_arxiv_abstracts.py +0 -0
  437. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/gen_2000_prompts.py +0 -0
  438. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/hle_eval_seed.jsonl +0 -0
  439. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/llm_balancer.py +0 -0
  440. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/notify_release.py +0 -0
  441. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/perf_baseline_when_idle.sh +0 -0
  442. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/perf_sweep.py +0 -0
  443. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/poll_issues.sh +0 -0
  444. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/publish_to_pypi.sh +0 -0
  445. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/queue_top.py +0 -0
  446. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/ralph_loop.py +0 -0
  447. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/research_babysitter.sh +0 -0
  448. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/shakedown.py +0 -0
  449. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/shakedown_interactive.py +0 -0
  450. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/shakedown_suite.sh +0 -0
  451. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/shakedown_variance.sh +0 -0
  452. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/start_steering_sidecar.sh +0 -0
  453. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_babysitter.sh +0 -0
  454. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_prompts_50.txt +0 -0
  455. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_prompts_realuser.txt +0 -0
  456. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_prompts_tool_agent.txt +0 -0
  457. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  458. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_shakedown.py +0 -0
  459. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_telegram_status.py +0 -0
  460. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/stress_watcher.py +0 -0
  461. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/telegram_bot.py +0 -0
  462. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/scripts/vllm_failover.sh +0 -0
  463. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/__init__.py +0 -0
  464. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/conftest.py +0 -0
  465. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_acp.py +0 -0
  466. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_agent_thought.py +0 -0
  467. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_bash.py +0 -0
  468. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_compact_session_updates.py +0 -0
  469. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_content.py +0 -0
  470. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_initialize.py +0 -0
  471. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_list_sessions.py +0 -0
  472. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_load_session.py +0 -0
  473. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_multi_session.py +0 -0
  474. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_new_session.py +0 -0
  475. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_proxy_setup_acp.py +0 -0
  476. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_read_file.py +0 -0
  477. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_search_replace.py +0 -0
  478. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_set_config_option.py +0 -0
  479. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_set_mode.py +0 -0
  480. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_set_model.py +0 -0
  481. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_tool_call_session_update.py +0 -0
  482. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_utils.py +0 -0
  483. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/acp/test_write_file.py +0 -0
  484. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_file_indexer.py +0 -0
  485. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_fuzzy.py +0 -0
  486. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  487. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  488. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_path_completion_controller.py +0 -0
  489. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  490. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_slash_command_controller.py +0 -0
  491. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  492. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/__init__.py +0 -0
  493. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/data/__init__.py +0 -0
  494. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/data/fireworks.py +0 -0
  495. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/data/mistral.py +0 -0
  496. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/test_anthropic_adapter.py +0 -0
  497. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/test_backend.py +0 -0
  498. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  499. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/test_reasoning_adapter.py +0 -0
  500. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  501. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  502. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  503. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  504. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_bell_notifications.py +0 -0
  505. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_braille_renderer.py +0 -0
  506. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_clipboard.py +0 -0
  507. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_commands.py +0 -0
  508. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_copy_shortcuts.py +0 -0
  509. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_external_editor.py +0 -0
  510. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_no_markup_static.py +0 -0
  511. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_question_app.py +0 -0
  512. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_spinner.py +0 -0
  513. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_switching_mode.py +0 -0
  514. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  515. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  516. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_ui_session_resume.py +0 -0
  517. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/test_ui_skill_dispatch.py +0 -0
  518. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/textual_ui/__init__.py +0 -0
  519. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/cli/textual_ui/test_session_picker.py +0 -0
  520. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/conftest.py +0 -0
  521. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_agents.py +0 -0
  522. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_auth_crypto.py +0 -0
  523. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_auth_github.py +0 -0
  524. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  525. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  526. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_config_load_dotenv.py +0 -0
  527. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_config_paths.py +0 -0
  528. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_config_resolution.py +0 -0
  529. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_file_logging.py +0 -0
  530. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_plan_session.py +0 -0
  531. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_proxy_setup.py +0 -0
  532. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_slug.py +0 -0
  533. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_telemetry_send.py +0 -0
  534. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_teleport_git.py +0 -0
  535. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_teleport_nuage.py +0 -0
  536. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_teleport_service.py +0 -0
  537. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_trusted_folders.py +0 -0
  538. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/core/test_utils.py +0 -0
  539. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/common.py +0 -0
  540. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/conftest.py +0 -0
  541. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/mock_server.py +0 -0
  542. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  543. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/test_cli_tui_streaming.py +0 -0
  544. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  545. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/fixtures/doc_qa_system_prd.md +0 -0
  546. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/mock/__init__.py +0 -0
  547. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/mock/mock_backend_factory.py +0 -0
  548. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/mock/mock_entrypoint.py +0 -0
  549. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/mock/utils.py +0 -0
  550. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/onboarding/test_run_onboarding.py +0 -0
  551. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/onboarding/test_ui_onboarding.py +0 -0
  552. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/session/test_session_loader.py +0 -0
  553. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/session/test_session_logger.py +0 -0
  554. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/session/test_session_migration.py +0 -0
  555. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/skills/conftest.py +0 -0
  556. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/skills/test_manager.py +0 -0
  557. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/skills/test_models.py +0 -0
  558. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/skills/test_parser.py +0 -0
  559. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  560. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  561. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  562. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  563. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  564. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  565. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  566. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  567. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  568. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  569. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  570. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  571. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  572. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  573. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  574. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  575. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  576. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  577. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  578. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  579. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  580. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  581. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  582. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  583. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  584. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  585. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  586. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  587. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  588. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  589. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  590. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  591. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  592. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  593. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  594. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  595. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  596. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  597. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  598. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  599. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  600. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  601. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  602. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  603. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  604. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  605. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  606. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  607. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  608. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  609. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  610. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  611. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  612. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  613. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  614. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  615. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  616. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  617. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  618. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  619. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/base_snapshot_test_app.py +0 -0
  620. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/conftest.py +0 -0
  621. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/snap_compare.py +0 -0
  622. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  623. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  624. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  625. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  626. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  627. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  628. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  629. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  630. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  631. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  632. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  633. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  634. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  635. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  636. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/stubs/fake_backend.py +0 -0
  637. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/stubs/fake_client.py +0 -0
  638. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/stubs/fake_tool.py +0 -0
  639. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral.py +0 -0
  640. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  641. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_intervention_outcome.py +0 -0
  642. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_phase3.py +0 -0
  643. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_proposed.py +0 -0
  644. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_session_id.py +0 -0
  645. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_admiral_struggle_dedup.py +0 -0
  646. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_auto_compact.py +0 -0
  647. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_backend.py +0 -0
  648. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_observer_streaming.py +0 -0
  649. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_stats.py +0 -0
  650. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_tasks.py +0 -0
  651. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agent_tool_call.py +0 -0
  652. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_agents.py +0 -0
  653. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_build.py +0 -0
  654. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_debug.py +0 -0
  655. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_multiagent.py +0 -0
  656. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_prd.py +0 -0
  657. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_prd_extended.py +0 -0
  658. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_tools.py +0 -0
  659. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_bank_update.py +0 -0
  660. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_build_projects.py +0 -0
  661. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_checkpoint.py +0 -0
  662. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_classifier.py +0 -0
  663. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_config_migration.py +0 -0
  664. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_context_recovery.py +0 -0
  665. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_count_tool.py +0 -0
  666. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_curiosity.py +0 -0
  667. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_current_bugs.py +0 -0
  668. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_dispatcher.py +0 -0
  669. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_drydock_regression.py +0 -0
  670. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_drydock_tasks.py +0 -0
  671. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  672. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_full_regression.py +0 -0
  673. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_graphrag.py +0 -0
  674. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_graphrag_worked_examples.py +0 -0
  675. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_hallucinated_tool_suppression.py +0 -0
  676. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_history_manager.py +0 -0
  677. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_hle_typing.py +0 -0
  678. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_integration.py +0 -0
  679. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_issue_fixes.py +0 -0
  680. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_math_tool.py +0 -0
  681. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_mcp_settings.py +0 -0
  682. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_memory_tool.py +0 -0
  683. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_message_id.py +0 -0
  684. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_message_merging.py +0 -0
  685. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_middleware.py +0 -0
  686. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_multi_agent.py +0 -0
  687. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_read_file_not_found_listing.py +0 -0
  688. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_real_failures.py +0 -0
  689. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_real_issues.py +0 -0
  690. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_real_workflow.py +0 -0
  691. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_reasoning_content.py +0 -0
  692. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_retrieval_consumer.py +0 -0
  693. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_retrieve_tool.py +0 -0
  694. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_search_replace_args_not_truncated.py +0 -0
  695. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_smoke.py +0 -0
  696. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering.py +0 -0
  697. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering_capture.py +0 -0
  698. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering_compute_vector.py +0 -0
  699. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering_extract_pairs.py +0 -0
  700. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering_hook.py +0 -0
  701. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_steering_sidecar_hooks.py +0 -0
  702. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_system_prompt.py +0 -0
  703. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_tagged_text.py +0 -0
  704. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_task_complete_nudge.py +0 -0
  705. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_tool_args.py +0 -0
  706. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_truncate_args_valid_json.py +0 -0
  707. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_truncated_arg_path_hint.py +0 -0
  708. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_truncated_search_replace_escalation.py +0 -0
  709. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_truncated_write_escalation.py +0 -0
  710. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_ui_external_editor.py +0 -0
  711. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_ui_input_history.py +0 -0
  712. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_user_issues.py +0 -0
  713. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_verify_tool.py +0 -0
  714. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_wall_of_text_rescue.py +0 -0
  715. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_workloads.py +0 -0
  716. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/test_write_file_missing_path.py +0 -0
  717. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/testbank_helpers.py +0 -0
  718. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_ask_user_question.py +0 -0
  719. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash.py +0 -0
  720. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  721. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_consec_empty_search.py +0 -0
  722. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  723. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  724. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  725. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  726. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  727. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  728. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  729. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_exit_plan_mode.py +0 -0
  730. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_grep.py +0 -0
  731. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  732. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_invoke_context.py +0 -0
  733. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  734. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_manager_get_tool_config.py +0 -0
  735. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_mcp.py +0 -0
  736. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_mcp_sampling.py +0 -0
  737. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  738. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  739. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_read_file_directory.py +0 -0
  740. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_read_file_limit_truncation.py +0 -0
  741. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_append_fallback.py +0 -0
  742. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_dir_path.py +0 -0
  743. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_empty_content.py +0 -0
  744. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_file_not_found.py +0 -0
  745. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  746. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_hard_stop.py +0 -0
  747. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_malformed_block.py +0 -0
  748. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  749. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_placeholder.py +0 -0
  750. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  751. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_task.py +0 -0
  752. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_ui_bash_execution.py +0 -0
  753. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_webfetch.py +0 -0
  754. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_websearch.py +0 -0
  755. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  756. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  757. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  758. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  759. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_do_update.py +0 -0
  760. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  761. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_github_update_gateway.py +0 -0
  762. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  763. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_ui_update_notification.py +0 -0
  764. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_update_use_case.py +0 -0
  765. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/tests/update_notifier/test_whats_new.py +0 -0
  766. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/worked_examples/README.md +0 -0
  767. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/worked_examples/cli_subcommand_dispatch.py +0 -0
  768. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/worked_examples/lookup.json +0 -0
  769. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/worked_examples/sql_parser.py +0 -0
  770. {drydock_cli-2.8.23 → drydock_cli-2.8.25}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 1115561
@@ -0,0 +1,149 @@
1
+ # DRYDOCK.md — harness instructions
2
+
3
+ Auto-loaded into the system prompt when DryDock runs in this directory.
4
+ Equivalent of `CLAUDE.md` for Claude Code: the per-project instructions
5
+ file the model reads on every session. Keep it short — every byte here
6
+ costs context budget on every turn.
7
+
8
+ ## What DryDock is
9
+
10
+ A local-first CLI coding agent with a TUI. Talks to any
11
+ OpenAI-compatible local model server (vLLM, llama.cpp, Ollama,
12
+ LM Studio). Production target: Gemma 4 26B-A4B-it on a 2-GPU
13
+ workstation. The agent loop, classifier, Curiosity Layer, GraphRAG
14
+ hook, Admiral supervisor, and tool plugins all live in `drydock/core/`.
15
+
16
+ The harness is the product. When something goes wrong, fix the
17
+ harness — don't work around it in a script.
18
+
19
+ ## Four core principles (your default posture)
20
+
21
+ 1. Don't assume. Don't hide confusion. Surface tradeoffs.
22
+ 2. Minimum code that solves the problem. Nothing speculative.
23
+ 3. Touch only what you must. Clean up only your own mess.
24
+ 4. Define success criteria. Loop until verified.
25
+
26
+ ## Tool inventory — when to use each
27
+
28
+ **Always-available reads:** `read_file`, `glob`, `grep`, `retrieve` (GraphRAG),
29
+ `web_search`, `web_fetch`. Auto-approved.
30
+
31
+ **Writes (gate-able):** `write_file`, `search_replace`, `bash`, `notebook_edit`.
32
+
33
+ **Direct built-ins for transformer weaknesses (USE THESE — don't compute in your head):**
34
+
35
+ - `math(expression="...")` — exact arithmetic via Python stdlib (`math.factorial(20)`,
36
+ `math.comb(50, 5)`, `Fraction(1,3) + Fraction(1,6)`,
37
+ `statistics.mean([...])`). USE for any non-trivial number.
38
+ - `count(pattern="...", text=... OR path=..., mode=...)` — exact substring /
39
+ regex / lines / words / chars / bytes counter. USE instead of estimating
40
+ "how many".
41
+ - `memory(op="save"|"recall"|"list_keys"|"forget"|"stats", ...)` — persistent
42
+ cross-session notes at `~/.drydock/agent_memory/notes.jsonl`. SAVE
43
+ per-project patterns and decisions; RECALL them next session.
44
+ - `verify(criterion="...", command="...", expect="...", expect_mode=...)` —
45
+ programmatic success check after a change. Operationalizes principle #4
46
+ ("Loop until verified").
47
+
48
+ **Curiosity Layer (PRD §5.7) — your default posture is "investigate, then assert":**
49
+
50
+ - If the user message names an unfamiliar entity (paper, library, API,
51
+ identifier), your FIRST tool call is `retrieve(query="<the term>")`.
52
+ Not text. Not web_search. Retrieve.
53
+ - "I think it's X" is not an answer when retrieve costs one tool call.
54
+ - When retrieved evidence contradicts what you were about to say,
55
+ prefer the evidence and say so. Don't quietly drop the contradiction.
56
+
57
+ **Subagent delegation:** Only for genuinely large tasks (9+ files, multiple
58
+ subdirs). For 1-8 files BUILD INLINE — wasted delegation costs 60-90s of
59
+ extra context loading.
60
+
61
+ ## Critical constraints
62
+
63
+ - **Loop detection is advisory.** It NEVER stops you — only nudges and
64
+ prunes duplicate calls. The only hard stop is `MAX_TOOL_TURNS = 200`.
65
+ - **No `--no-verify` git commits, no `pkill drydock`** (kills the user's TUI).
66
+ - **TUI only.** Headless mode was removed deliberately. All testing
67
+ goes through the real TUI via `pexpect` (see `scripts/shakedown.py`).
68
+ - **Don't `git push` from this repo** — local and origin diverge by design;
69
+ `auto_release.sh` rebuilds and pushes every 6h. Direct edits to
70
+ `site-packages/` get overwritten at the next cron tick.
71
+ - **Match exact CLI specs in PRDs.** Every subcommand listed must have a
72
+ working handler — not just argparse registration.
73
+ - **Stub classes are forbidden.** Never write
74
+ `class X: def method(self): pass` inline to silence ModuleNotFoundError.
75
+ Write the real class in its own file and import it.
76
+ - **`--help` is not a test.** A package that `--help`s successfully can
77
+ have broken imports in every other module. Real test = a
78
+ `functional_tests.sh` that exercises actual feature commands and
79
+ checks real outputs.
80
+
81
+ ## File map (only the load-bearing pieces)
82
+
83
+ ```
84
+ drydock/
85
+ ├── core/
86
+ │ ├── agent_loop.py ← THE main loop. Loop detection, message
87
+ │ │ ordering, Curiosity hooks, MTP dispatch
88
+ │ ├── system_prompt.py ← Loads DRYDOCK.md + gemma4.md/cli.md
89
+ │ ├── tools/
90
+ │ │ ├── manager.py ← Tool auto-discovery (any non-_ .py here
91
+ │ │ │ is picked up)
92
+ │ │ └── builtins/ ← read_file, write_file, grep, glob, bash,
93
+ │ │ retrieve, math, count, memory, verify, ...
94
+ │ ├── classifier/ ← Failure → 5-bucket dispatch (harness /
95
+ │ │ retrieval / steering / model_prior /
96
+ │ │ ambiguous_input)
97
+ │ └── prompts/
98
+ │ ├── gemma4.md ← Compact (50 lines) prompt for Gemma 4
99
+ │ └── cli.md ← Full prompt for stronger models
100
+ ├── curiosity/ ← SOVEREIGN_PRD §5.7 — gap_detector,
101
+ │ surprise scorer, JSONL queue, CLI
102
+ ├── graphrag/ ← AST symbol indexer + TF-IDF retriever
103
+ ├── steering/ ← Deep Noir vector framework (scaffolding)
104
+ └── cli/textual_ui/app.py ← TUI app + slash commands
105
+
106
+ scripts/
107
+ ├── auto_release.sh ← Cron 0,6,12,18 CDT — bumps version, builds
108
+ │ wheel, twine upload, GitHub push
109
+ ├── deploy_to_github.sh ← Cron 04:00 CDT — full test gate then sync
110
+ ├── autonomous_review.sh ← Cron */30 — Claude Code drains classifier
111
+ │ + curiosity queues, ships fixes
112
+ ├── shakedown.py ← The honest test harness (drives real TUI)
113
+ └── bench_inference.py ← Throughput benchmark vs localhost:8000
114
+ ```
115
+
116
+ ## Workflows
117
+
118
+ **Building from a PRD:**
119
+
120
+ 1. Read the spec.
121
+ 2. `write_file` each file. Start with `__init__.py` and `__main__.py`.
122
+ 3. Verify package imports: `bash` → `python3 -m <pkg> --help`.
123
+ 4. Run a real test: `bash` → exercise actual subcommands; check outputs
124
+ match the PRD's examples.
125
+ 5. If the PRD has a `functional_tests.sh`, run THAT — not just `--help`.
126
+
127
+ **Fixing a bug:**
128
+
129
+ 1. `grep` for the symbol mentioned.
130
+ 2. `read_file` the source.
131
+ 3. `search_replace` minimal change.
132
+ 4. `verify(criterion="...", command="pytest ...", expect_mode="exit_code", expect="0")`.
133
+
134
+ **Adding a feature to drydock itself (in this repo):**
135
+
136
+ 1. `git status` first — never destroy uncommitted work.
137
+ 2. Make the change, run the relevant test file (`pytest tests/test_X.py -q`).
138
+ 3. Commit; let `auto_release.sh` (next 6h tick) ship to PyPI + GitHub.
139
+ 4. Don't `git push` — see Constraints.
140
+
141
+ ## When you stop
142
+
143
+ A turn ends when:
144
+
145
+ - TODO mode (multi-step request like "build the package"): every item done.
146
+ - SIMPLE mode (single ask): exactly that, then stop. Don't invent
147
+ follow-up work the user didn't ask for.
148
+
149
+ NEVER ask "would you like me to proceed". Just do it.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.23
3
+ Version: 2.8.25
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,49 +480,141 @@ without waiting on consumer infrastructure.
480
480
  mode), so every eval run produces ≥10 learning signals
481
481
  - ✅ 26 unit tests in `tests/test_curiosity.py` added to the deploy gate
482
482
 
483
- ### Tier 2 — consumer side + forcing function — *next week*
483
+ ### Tier 2 — consumer side + forcing function — *shipped 2026-05-12 (v2.8.20–22)*
484
484
 
485
485
  The prompt rule alone gets the model to retrieve more, but Gemma 4 will
486
- still default to prior under context pressure (per
487
- `project_graphrag_underused.md`). Tier 2 closes that gap and starts
488
- shipping fixes from the queue.
489
-
490
- - `agent_loop.py` first-turn hook call `detect_gaps(user_msg)`
491
- before the first LLM call; if any candidates returned, automatically
492
- invoke `retrieve` on the top 2–3 and inject results onto the user
493
- message as `[CURIOSITY PREFETCH]` context. Forces evidence into the
494
- window before the model can answer from prior. ~40 lines.
495
- - `autonomous_review.sh` curiosity consumer — read
496
- `~/.drydock/dispatch/curiosity.jsonl`, pick highest-confidence
497
- unconsumed item, generate a fix proposal (AGENTS.md hint / prompt
498
- rule / GraphRAG ingest plan), commit with subject prefix
499
- `addresses curiosity:<fingerprint>:`. Mirrors the existing harness
500
- bucket consumer. ~80 lines.
501
- - Surprise-on-tool-result scoring inside `_handle_tool_response`
502
- when `score_surprise()` exceeds threshold, enqueue an
503
- `EVIDENCE_CONFLICT` item automatically. Catches confident-but-wrong
504
- claims without operator priming.
505
- - HLE re-run with the tier-1 prompt to measure adherence — the
506
- `retrieve called on ≥80% of HLE Q` criterion needs an actual
507
- measurement to confirm the prompt rule moves the needle.
508
-
509
- ### Tier 3 — Phase 3 proper — *after Deep Noir vectors land*
510
-
511
- The advanced layer that depends on infrastructure not yet in place.
486
+ still default to prior under context pressure. Tier 2 closes that gap
487
+ and starts shipping fixes from the queue.
488
+
489
+ - ✅ `agent_loop.py` curiosity gap-logging hook — every user message
490
+ runs through `detect_gaps`; each candidate term is enqueued as an
491
+ `UNKNOWN_TERM` item (gated by `DRYDOCK_CURIOSITY=1`, default on)
492
+ - `_maybe_log_surprise` in `_handle_tool_response` fires on tool
493
+ failures, scores against the most recent assistant assertion, queues
494
+ `EVIDENCE_CONFLICT` items above the 0.6 threshold. Catches
495
+ confident-but-wrong claims without operator priming.
496
+ - Auto-prefetch retrieve hook (`_auto_prefetch_retrieve`) flipped
497
+ to **default ON** (was env-gated off). Synthetic `retrieve` tool
498
+ call injected before the first LLM turn whenever the GraphRAG corpus
499
+ has good hits. Forces evidence into the window — the §5.7
500
+ acceptance #1 forcing function. Opt out: `DRYDOCK_AUTO_RETRIEVE=0`.
501
+ - `autonomous_review.sh` curiosity consumer step 2b in
502
+ `scripts/autonomous_review_prompt.md` drains the top item per tick,
503
+ acts on it, marks consumed, prefixes commit with
504
+ `addresses curiosity:<id>:`.
505
+ - `python -m drydock.curiosity {top,stats,consume,reset}` CLI.
506
+ - `/curiosity` slash command for in-TUI inspection.
507
+ - HLE backfill script 82 historical HLE_FAILURE items ingested
508
+ from prior runs so the queue has signal even before fresh runs.
509
+
510
+ ### Tier 3a — operator-visible scaffolding — *shipped 2026-05-12 (v2.8.22)*
511
+
512
+ - ✅ `scripts/curiosity_idle_cycle.sh` — bounded exploration worker
513
+ (cron-suggested hourly). Idle-gated (no TUI / no HLE / no
514
+ autonomous_review), daily-capped at 12 cycles, pause sentinel.
515
+ Appends hypotheses to `curiosity_log.md`; no model calls.
516
+ - ▢ Wire the idle-cycle script into cron — operator decision; script
517
+ is checked in and ready.
518
+
519
+ ### Tier 3b — model-shape work — *blocked / future*
512
520
 
513
521
  - ▢ Deep Noir "exploration" mode vector candidate — train from
514
- curiosity-log traces (retrieve calls, hypothesis enumeration,
515
- reading-before-writing). Becomes the steerable behavioral prior
516
- for curiosity once `drydock.steering` has real vectors.
517
- - Idle-cycle exploration worker when drydock is idle > N minutes
518
- and the classifier dispatch queues are non-empty, run one bounded
519
- exploratory cycle (pick highest-priority pattern, ingest fresh logs,
520
- generate hypothesis, log to `~/.drydock/curiosity_log.md`). Bounded
521
- by a tokens-per-day budget so curiosity does not starve user work.
522
- - ▢ Frustration / surprise detection across the full session, not
523
- just single turns when the operator repeatedly redirects on the
524
- same topic, treat it as a high-confidence curiosity signal even if
525
- no individual turn tripped the per-turn detectors.
522
+ curiosity-log traces. Blocked on real Deep Noir vectors landing in
523
+ `drydock.steering`.
524
+ - Frustration / surprise detection across the full session — pattern:
525
+ when the operator repeatedly redirects on the same topic, treat it
526
+ as a high-confidence curiosity signal even if no individual turn
527
+ tripped the per-turn detectors.
528
+
529
+ ---
530
+
531
+ ## 5.8 Direct built-in tools for transformer weaknesses shipped 2026-05-12 (v2.8.22–23)
532
+
533
+ Per the transformer-weakness map (Babich, "What coding can fix"):
534
+ arithmetic, counting, persistent memory, and reliability/verification
535
+ are well-solved by classical code wrapped as agent tools. We ship them
536
+ as direct built-ins (NOT MCP — per Babich, "MCP is Dead", MCP servers
537
+ burn ~20K tokens of context per call, which is a real cost on a
538
+ 131K-context local model).
539
+
540
+ | Tool | Closes | Status |
541
+ | ---- | ------ | ------ |
542
+ | `math(expression="...")` | Arithmetic, factorials, primes, statistics, exact fractions via Python stdlib (math/statistics/Fraction/Decimal) sandbox | ✅ shipped, 37 tests |
543
+ | `count(pattern, text/path, mode)` | "How many X" estimation — substring/regex/lines/words/chars/bytes | ✅ shipped, 23 tests |
544
+ | `memory(op, key, value)` | Long-term cross-session memory at `~/.drydock/agent_memory/notes.jsonl` (save / recall / list_keys / forget / stats) | ✅ shipped, 22 tests |
545
+ | `verify(criterion, command, expect, expect_mode)` | Operationalizes "Loop until verified" — runs a check, returns pass/fail (contains/regex/equals/exit_code/file_exists/file_contains) | ✅ shipped, 24 tests |
546
+
547
+ Anti-pattern explicitly forbidden: NEVER convert these into MCP
548
+ servers later. The whole point is one direct built-in per closed
549
+ weakness. MCP integration remains available for users who want to
550
+ connect external services, just not for capabilities the harness
551
+ should own.
552
+
553
+ ## 5.9 Project-instructions auto-create (DRYDOCK.md)
554
+
555
+ Per CLAUDE.md / AGENTS.md convention: every fresh project session
556
+ should land a per-project instructions file the model reads on every
557
+ turn. Best practices: lean (every byte costs context budget), language-
558
+ detected, with TODO stubs the user fills in.
559
+
560
+ - ✅ `_ensure_drydock_md()` in `agent_loop.py` — runs once on first
561
+ session. Detects language from manifest (pyproject / package.json /
562
+ Cargo.toml / go.mod / Gemfile / pom.xml / build.gradle), writes a
563
+ ~2.8 KB starter with: project overview (auto-detected stack +
564
+ TODO purpose), tool inventory by purpose (especially the new
565
+ math/count/memory/verify built-ins the model otherwise overlooks),
566
+ 4 core principles, Curiosity behavior, TODO stubs for Coding
567
+ Standards / Workflow / External References. 10 unit tests.
568
+ - ✅ `/data3/drydock/DRYDOCK.md` — hand-written canonical for drydock
569
+ itself, loaded when running drydock from this source tree.
570
+
571
+ ## 5.10 Inference throughput (Multi-Token Prediction investigation)
572
+
573
+ Investigation 2026-05-12 — outcome: **blocked on llama.cpp upstream**.
574
+
575
+ - ✅ Baseline measured: **64.1 tok/s** on `gemma-4-26B-A4B-it-UD-Q3_K_M`
576
+ via llama.cpp 9115 on 2× RTX 4060 Ti, single-GPU `-ngl 99`,
577
+ `-c 32768`, `-ctk q8_0 -ctv q8_0`.
578
+ - ✅ `scripts/bench_inference.py` — 5-prompt × N-token throughput
579
+ bench against localhost:8000 for any future MTP / quant / serving
580
+ comparison.
581
+ - ✅ Trained drafter checkpoints downloaded to `/data3/Models/`
582
+ (AtomicChat + Radamanthys community quants of the
583
+ `gemma-4-26B-A4B-it-assistant` model). **Blocked**: both use custom
584
+ archs `gemma4_assistant` / `gemma4_mtp` that llama.cpp 9115 doesn't
585
+ recognize. Files ready for when upstream lands the arch.
586
+ - ✅ Built-in ngram-* speculative decoding tested
587
+ (`--spec-type ngram-simple|ngram-cache|ngram-mod`) — 0% measured
588
+ speedup on either mixed prompts or code-heavy prompts. The lookup
589
+ overhead cancels saved forward passes for this 26B MoE shape on
590
+ TP=2.
591
+ - ▢ vLLM with MTP — untested. The article (Pawel, 2026-05-10) claims
592
+ day-one vLLM support. Switching back to the `start_gemma4.sh` vLLM
593
+ path with the bf16 assistant Transformers checkpoint (not GGUF) is
594
+ the next thing to try.
595
+ - ▢ Quant upgrade Q3_K_M → Q4_K_M — Q4 file downloaded
596
+ (`gemma-4-26B-A4B-it-UD-Q4_K_M.gguf`, 15.78 GiB), pending validation
597
+ that it doesn't reintroduce the hallucinated-tool / write-loop
598
+ failure modes that Q3_K_M was originally selected to suppress.
599
+ Higher quants (Q5_K_M, Q6_K) require tensor split via `-sm row`.
600
+
601
+ ## 5.11 Bug-report template + dependency audit
602
+
603
+ Operator-visibility plumbing landed alongside the §5.7 work:
604
+
605
+ - ✅ `.github/ISSUE_TEMPLATE/bug-report.yml` overhaul — pre-flight
606
+ checklist, expanded component dropdown (CLI/TUI / ACP / MCP /
607
+ GraphRAG / Curiosity / Auto-release / Install), required Model +
608
+ provider field (the #1 missing-info gap on prior bugs), separate
609
+ OS+Python+install field, expected-vs-actual section, logs section
610
+ pointed at correct paths.
611
+ - ✅ `.github/ISSUE_TEMPLATE/config.yml` — removed broken upstream
612
+ links (mistralai/mistral-vibe Discussions, old Mistral docs URL,
613
+ outdated Discord).
614
+ - ✅ Dependency audit — `requests` removed (0 imports anywhere; `httpx`
615
+ is the actual HTTP client); `pexpect` moved runtime → dev (only used
616
+ by harness scripts that don't ship in the wheel). End-user install
617
+ drops ~1.8 MB. All other suspicious entries verified used.
526
618
 
527
619
  ---
528
620
 
@@ -417,6 +417,12 @@ class AgentLoop:
417
417
  # without it the model loops on ls/bash instead of using subagents.
418
418
  if self.stats.steps <= 1:
419
419
  self._ensure_agents_md()
420
+ # Skip DRYDOCK.md auto-create under pytest so tmp_path-based
421
+ # tests don't get unexpected files appearing in their fixture
422
+ # dirs. Unit tests for the auto-create function call it
423
+ # directly (bypassing this gate).
424
+ if "PYTEST_CURRENT_TEST" not in os.environ:
425
+ self._ensure_drydock_md()
420
426
 
421
427
  # Load project state for cross-session context
422
428
  try:
@@ -747,12 +753,21 @@ class AgentLoop:
747
753
  # as a system note BEFORE the first LLM call. Zero behavior change
748
754
  # when the index has nothing relevant; pure lift when it does.
749
755
  #
756
+ # Disable both hooks under pytest. They'd otherwise inject noise
757
+ # into the agent's message stream — a synthetic retrieve tool call
758
+ # for auto-retrieve, and queue writes for curiosity — which breaks
759
+ # tests that pin the exact event order or count messages.
760
+ # Set DRYDOCK_AUTO_RETRIEVE=1 / DRYDOCK_CURIOSITY=1 explicitly in a
761
+ # test if you want to exercise them.
762
+ _under_pytest = "PYTEST_CURRENT_TEST" in os.environ
763
+
750
764
  # SOVEREIGN_PRD §5.7 acceptance #1: "retrieve called on ≥80% of HLE
751
- # questions before any content token". Default ON now the
752
- # prefetch is a no-op when no GraphRAG db exists (early return),
765
+ # questions before any content token". Default ON in production
766
+ # the prefetch is a no-op when no GraphRAG db exists (early return),
753
767
  # so users without a corpus are unaffected. Opt out with
754
768
  # DRYDOCK_AUTO_RETRIEVE=0.
755
- if os.environ.get("DRYDOCK_AUTO_RETRIEVE", "1").strip().lower() not in ("0", "false", "no"):
769
+ _auto_retrieve_default = "0" if _under_pytest else "1"
770
+ if os.environ.get("DRYDOCK_AUTO_RETRIEVE", _auto_retrieve_default).strip().lower() not in ("0", "false", "no"):
756
771
  logger.warning("[AUTO-RETRIEVE] hook entry, query=%r", (user_msg or "")[:80])
757
772
  try:
758
773
  self._auto_prefetch_retrieve(user_msg)
@@ -764,7 +779,9 @@ class AgentLoop:
764
779
  # the user message and enqueue UNKNOWN_TERM curiosity items. The
765
780
  # queue is dedup'd by fingerprint over 7 days so the same recurring
766
781
  # term doesn't flood it. Disabled by setting DRYDOCK_CURIOSITY=0.
767
- if os.environ.get("DRYDOCK_CURIOSITY", "1").strip().lower() not in ("0", "false", "no"):
782
+ # Off by default under pytest (see auto-retrieve note above).
783
+ _curiosity_default = "0" if _under_pytest else "1"
784
+ if os.environ.get("DRYDOCK_CURIOSITY", _curiosity_default).strip().lower() not in ("0", "false", "no"):
768
785
  try:
769
786
  self._log_curiosity_gaps(user_msg)
770
787
  except Exception as _e:
@@ -3584,6 +3601,123 @@ class AgentLoop:
3584
3601
  if parts:
3585
3602
  self._inject_system_note("\n".join(parts))
3586
3603
 
3604
+ def _ensure_drydock_md(self) -> None:
3605
+ """Auto-create DRYDOCK.md in the project root if absent.
3606
+
3607
+ This file is the drydock equivalent of CLAUDE.md / AGENTS.md: a
3608
+ per-project instructions file the model loads on every session
3609
+ (see system_prompt._load_project_instructions, 16 KB cap).
3610
+
3611
+ We write a LEAN starter (~2 KB) telling the model what tools the
3612
+ harness ships with and a few stub sections the user can fill in
3613
+ for project-specific guidance. The point is to give the agent
3614
+ signal about its own capabilities — especially the math / count /
3615
+ memory / verify built-ins it might otherwise overlook — without
3616
+ burning context budget on every turn.
3617
+
3618
+ Best practices baked in:
3619
+ - Detect the language from manifest files (pyproject / package.json /
3620
+ Cargo.toml / go.mod) so the overview line is meaningful.
3621
+ - Tool inventory is one bullet line per category, not a treatise.
3622
+ - Stub sections (Coding Standards, Workflow) marked TODO so the
3623
+ user knows where to add their own rules.
3624
+ """
3625
+ cwd = Path.cwd()
3626
+ if (cwd / "DRYDOCK.md").exists() or (cwd / "drydock.md").exists():
3627
+ return
3628
+
3629
+ # Detect language from manifest presence — single short line.
3630
+ lang = "Unknown stack"
3631
+ for marker, name in (
3632
+ ("pyproject.toml", "Python"),
3633
+ ("setup.py", "Python"),
3634
+ ("requirements.txt", "Python"),
3635
+ ("package.json", "JavaScript / TypeScript"),
3636
+ ("Cargo.toml", "Rust"),
3637
+ ("go.mod", "Go"),
3638
+ ("Gemfile", "Ruby"),
3639
+ ("pom.xml", "Java (Maven)"),
3640
+ ("build.gradle", "Java/Kotlin (Gradle)"),
3641
+ ):
3642
+ if (cwd / marker).exists():
3643
+ lang = name
3644
+ break
3645
+
3646
+ try:
3647
+ (cwd / "DRYDOCK.md").write_text(
3648
+ f"""# DRYDOCK.md — project instructions for the agent
3649
+
3650
+ Auto-loaded into the system prompt every session (16 KB cap). Keep it
3651
+ lean — every byte costs context budget on every turn. Edit freely; this
3652
+ is a living document.
3653
+
3654
+ ## Project overview
3655
+
3656
+ - **Stack:** {lang} _(detected from manifest)_
3657
+ - **Purpose:** _(TODO: one sentence on what this project does)_
3658
+ - **Entry point:** _(TODO: e.g., `python -m mypkg`, `npm start`, `cargo run`)_
3659
+
3660
+ ## What the harness can do for you
3661
+
3662
+ DryDock ships these direct built-in tools (one entry each in the model's
3663
+ tool list — no MCP overhead):
3664
+
3665
+ - **Reads / search:** `read_file`, `glob`, `grep`, `retrieve` (GraphRAG
3666
+ semantic search if the project is indexed), `web_search`, `web_fetch`.
3667
+ - **Writes:** `write_file`, `search_replace` (preferred for edits),
3668
+ `bash`, `notebook_edit`.
3669
+ - **Exact computation (don't compute in your head):**
3670
+ - `math(expression="...")` — sandboxed Python: `math.factorial(20)`,
3671
+ `Fraction(1,3)+Fraction(1,6)`, `statistics.mean([...])`.
3672
+ - `count(pattern="...", text=... OR path=..., mode=...)` —
3673
+ substring / regex / lines / words / chars / bytes.
3674
+ - **Persistent memory across sessions:** `memory(op="save"|"recall"|...)`
3675
+ — store and recall key/value notes at `~/.drydock/agent_memory/`.
3676
+ - **Verify before claiming done:**
3677
+ `verify(criterion="...", command="...", expect="...", expect_mode="contains")`
3678
+ — runs a check, returns pass/fail. Operationalizes "Loop until
3679
+ verified."
3680
+ - **Delegation:** `task(agent="builder"|"explore"|"diagnostic"|"planner",
3681
+ task="...")` — only for genuinely large work (9+ files); inline for
3682
+ smaller.
3683
+
3684
+ ## Behavioral rules (defaults)
3685
+
3686
+ 1. Don't assume. Don't hide confusion. Surface tradeoffs.
3687
+ 2. Minimum code that solves the problem. Nothing speculative.
3688
+ 3. Touch only what you must. Clean up only your own mess.
3689
+ 4. Define success criteria. Loop until verified (call `verify`).
3690
+
3691
+ When you see an unfamiliar named entity (paper title, library, API,
3692
+ identifier), your FIRST tool call is `retrieve(query="<the term>")` —
3693
+ not text, not web_search. Investigate before asserting (Curiosity Layer
3694
+ default).
3695
+
3696
+ ## Coding standards
3697
+
3698
+ - _(TODO: e.g., "prefer named exports", "tabs not spaces", "no `any` in
3699
+ TypeScript", "snake_case for Python", language-specific rules here)_
3700
+
3701
+ ## Workflow
3702
+
3703
+ - **Build:** _(TODO: e.g., `npm run build`, `cargo build --release`)_
3704
+ - **Test:** _(TODO: e.g., `pytest -q`, `npm test`, `cargo test`)_
3705
+ - **Run:** _(TODO: e.g., `python -m mypkg`, `npm start`)_
3706
+ - **Format/lint:** _(TODO: e.g., `ruff check . && ruff format .`)_
3707
+
3708
+ ## External references
3709
+
3710
+ - _(TODO: link to the project README, design docs, style guide if any)_
3711
+
3712
+ ---
3713
+ _Auto-generated by drydock on first session in this directory. Customize
3714
+ or replace freely; future sessions will respect your edits._
3715
+ """
3716
+ )
3717
+ logger.info("Auto-created DRYDOCK.md in %s", cwd)
3718
+ except (OSError, PermissionError):
3719
+ pass # Non-critical — read-only filesystem
3720
+
3587
3721
  def _ensure_agents_md(self) -> None:
3588
3722
  """Auto-create AGENTS.md if no project instructions file exists.
3589
3723
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.23"
3
+ version = "2.8.25"
4
4
  description = "Local-first CLI coding agent — tested with Gemma 4 26B via vLLM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -394,10 +394,19 @@ def main() -> int:
394
394
  ap.add_argument("--seed", type=int, default=42)
395
395
  ap.add_argument("--resume", type=Path,
396
396
  help="resume from existing run dir (skip already-done IDs)")
397
+ ap.add_argument(
398
+ "--category", default="",
399
+ help=(
400
+ "Filter to questions in this HLE category (case-insensitive "
401
+ "substring match against q['category']). Examples: 'math', "
402
+ "'chemistry', 'physics'. Use this to measure tool-impact on a "
403
+ "specific axis."
404
+ ),
405
+ )
397
406
  args = ap.parse_args()
398
407
 
399
408
  print(f"[hle_eval] source={args.source} limit={args.limit} "
400
- f"shuffle={args.shuffle}")
409
+ f"shuffle={args.shuffle} category={args.category or '(any)'}")
401
410
 
402
411
  if args.source == "seed":
403
412
  questions = load_seed()
@@ -405,6 +414,13 @@ def main() -> int:
405
414
  questions = load_hle()
406
415
 
407
416
  print(f"[hle_eval] loaded {len(questions)} questions")
417
+
418
+ if args.category:
419
+ cat = args.category.lower().strip()
420
+ before = len(questions)
421
+ questions = [q for q in questions if cat in (q.get("category", "") or "").lower()]
422
+ print(f"[hle_eval] category filter '{args.category}': {before} → {len(questions)} questions")
423
+
408
424
  if args.shuffle:
409
425
  random.Random(args.seed).shuffle(questions)
410
426
  questions = questions[: args.limit]