drydock-cli 2.8.5__tar.gz → 2.8.7__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 (729) hide show
  1. drydock_cli-2.8.7/.auto_release.lock +1 -0
  2. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/PKG-INFO +1 -1
  3. drydock_cli-2.8.7/drydock/__main__.py +17 -0
  4. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/cli.py +60 -38
  5. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/agent_loop.py +71 -11
  6. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/_settings.py +29 -1
  7. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/local_detect.py +3 -1
  8. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/migrate.py +16 -5
  9. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/grep.py +18 -10
  10. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/pyproject.toml +1 -1
  11. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/llm_balancer.py +8 -1
  12. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/trip_log.md +339 -0
  13. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/uv.lock +1 -1
  14. drydock_cli-2.8.5/.auto_release.lock +0 -1
  15. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.claude/scheduled_tasks.lock +0 -0
  16. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/CODEOWNERS +0 -0
  17. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  18. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  19. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/workflows/build-and-upload.yml +0 -0
  21. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/workflows/ci.yml +0 -0
  22. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/workflows/issue-labeler.yml +0 -0
  23. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.github/workflows/release.yml +0 -0
  24. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.gitignore +0 -0
  25. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.pre-commit-config.yaml +0 -0
  26. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.python-version +0 -0
  27. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.typos.toml +0 -0
  28. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.vscode/extensions.json +0 -0
  29. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.vscode/launch.json +0 -0
  30. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/.vscode/settings.json +0 -0
  31. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/AGENTS.md +0 -0
  32. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/Admiral.md +0 -0
  33. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/CHANGELOG.md +0 -0
  34. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/CLAUDE.md +0 -0
  35. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/CONTRIBUTING.md +0 -0
  36. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/DEPLOYMENT.md +0 -0
  37. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/HLE_PRD.md +0 -0
  38. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/JETSON_BENCH.md +0 -0
  39. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/LICENSE +0 -0
  40. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/MODEL_SHORTCOMINGS.md +0 -0
  41. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/NOTICE +0 -0
  42. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/README.md +0 -0
  43. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/SOVEREIGN_PRD.md +0 -0
  44. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/TRIAGE_v1.md +0 -0
  45. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/action.yml +0 -0
  46. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/README.md +0 -0
  47. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results1.tsv +0 -0
  48. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results13.tsv +0 -0
  49. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results14.tsv +0 -0
  50. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results15.tsv +0 -0
  51. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results16.tsv +0 -0
  52. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results17.tsv +0 -0
  53. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results18.tsv +0 -0
  54. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results19.tsv +0 -0
  55. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results2.tsv +0 -0
  56. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results20.tsv +0 -0
  57. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results3.tsv +0 -0
  58. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results4.tsv +0 -0
  59. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results5.tsv +0 -0
  60. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results6.tsv +0 -0
  61. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results7.tsv +0 -0
  62. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results8.tsv +0 -0
  63. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results9.tsv +0 -0
  64. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/baseline_history/results_evolved_v1.tsv +0 -0
  65. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/distribution/zed/LICENSE +0 -0
  66. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/distribution/zed/extension.toml +0 -0
  67. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/distribution/zed/icons/mistral_vibe.svg +0 -0
  68. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/README.md +0 -0
  69. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/acp-setup.md +0 -0
  70. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/BASELINE_412.md +0 -0
  71. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/Drydock_rebrand.md +0 -0
  72. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  73. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  74. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  75. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/PRD.md +0 -0
  76. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/drydock_terms.md +0 -0
  77. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/archive/resume.md +0 -0
  78. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/docs/proxy-setup.md +0 -0
  79. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/__init__.py +0 -0
  80. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/__init__.py +0 -0
  81. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/acp_agent_loop.py +0 -0
  82. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/acp_logger.py +0 -0
  83. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/entrypoint.py +0 -0
  84. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/__init__.py +0 -0
  85. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/base.py +0 -0
  86. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/builtins/bash.py +0 -0
  87. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/builtins/read_file.py +0 -0
  88. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/builtins/search_replace.py +0 -0
  89. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/builtins/todo.py +0 -0
  90. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/builtins/write_file.py +0 -0
  91. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/tools/session_update.py +0 -0
  92. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/acp/utils.py +0 -0
  93. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/__init__.py +0 -0
  94. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/detectors.py +0 -0
  95. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/detectors_proposed.py +0 -0
  96. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/history.py +0 -0
  97. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/interventions.py +0 -0
  98. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/llm_analyzer.py +0 -0
  99. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/metrics.py +0 -0
  100. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/opus_escalator.py +0 -0
  101. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/persistence.py +0 -0
  102. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/policy.py +0 -0
  103. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/proposer.py +0 -0
  104. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/stager.py +0 -0
  105. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/task_classifier.py +0 -0
  106. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/tuning.py +0 -0
  107. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/validator.py +0 -0
  108. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/admiral/worker.py +0 -0
  109. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/__init__.py +0 -0
  110. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/autocompletion/__init__.py +0 -0
  111. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/autocompletion/base.py +0 -0
  112. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/autocompletion/path_completion.py +0 -0
  113. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/autocompletion/slash_command.py +0 -0
  114. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/clipboard.py +0 -0
  115. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/commands.py +0 -0
  116. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/entrypoint.py +0 -0
  117. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/fix_windows_path.py +0 -0
  118. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/history_manager.py +0 -0
  119. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  120. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  121. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  122. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/terminal_setup.py +0 -0
  123. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/__init__.py +0 -0
  124. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  125. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/app.py +0 -0
  126. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/app.tcss +0 -0
  127. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/external_editor.py +0 -0
  128. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  129. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  130. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  131. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  132. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  133. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  134. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  135. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  136. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  137. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  138. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  139. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  140. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  141. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  142. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  143. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  144. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  145. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  146. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  147. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  148. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  149. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  150. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  151. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  152. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  153. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  154. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  155. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  156. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  157. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  158. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  159. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  160. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  161. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  162. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  163. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  164. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  165. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/windowing/history.py +0 -0
  166. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  167. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/textual_ui/windowing/state.py +0 -0
  168. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/__init__.py +0 -0
  169. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  170. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  171. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  172. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  173. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  174. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/update.py +0 -0
  175. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/cli/update_notifier/whats_new.py +0 -0
  176. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/__init__.py +0 -0
  177. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/agents/__init__.py +0 -0
  178. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/agents/manager.py +0 -0
  179. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/agents/models.py +0 -0
  180. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/auth/__init__.py +0 -0
  181. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/auth/crypto.py +0 -0
  182. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/auth/github.py +0 -0
  183. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/__init__.py +0 -0
  184. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/completers.py +0 -0
  185. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  186. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  187. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  188. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  189. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  190. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/fuzzy.py +0 -0
  191. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/path_prompt.py +0 -0
  192. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  193. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/build_orchestrator.py +0 -0
  194. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/checkpoint.py +0 -0
  195. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/__init__.py +0 -0
  196. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/__main__.py +0 -0
  197. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/classifier.py +0 -0
  198. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/dispatcher.py +0 -0
  199. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/rules.py +0 -0
  200. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/classifier/signal.py +0 -0
  201. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/__init__.py +0 -0
  202. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/_dotenv.py +0 -0
  203. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/doctor.py +0 -0
  204. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/harness_files/__init__.py +0 -0
  205. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  206. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/config/harness_files/_paths.py +0 -0
  207. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/consultant.py +0 -0
  208. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/context_recovery.py +0 -0
  209. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/drydock_states.py +0 -0
  210. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/hooks.py +0 -0
  211. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/__init__.py +0 -0
  212. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/anthropic.py +0 -0
  213. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/base.py +0 -0
  214. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/factory.py +0 -0
  215. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/generic.py +0 -0
  216. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/mistral.py +0 -0
  217. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  218. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/backend/vertex.py +0 -0
  219. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/exceptions.py +0 -0
  220. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/format.py +0 -0
  221. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/message_utils.py +0 -0
  222. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/llm/types.py +0 -0
  223. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/logger.py +0 -0
  224. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/middleware.py +0 -0
  225. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/output_formatters.py +0 -0
  226. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/paths/__init__.py +0 -0
  227. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/paths/_drydock_home.py +0 -0
  228. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/paths/_local_config_walk.py +0 -0
  229. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/paths/conventions.py +0 -0
  230. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/plan_session.py +0 -0
  231. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/plugins.py +0 -0
  232. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/programmatic.py +0 -0
  233. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/__init__.py +0 -0
  234. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/builder.md +0 -0
  235. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/cli.md +0 -0
  236. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/compact.md +0 -0
  237. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/dangerous_directory.md +0 -0
  238. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/diagnostic.md +0 -0
  239. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/explore.md +0 -0
  240. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/gemma4.md +0 -0
  241. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/planner.md +0 -0
  242. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/project_context.md +0 -0
  243. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/prompts/tests.md +0 -0
  244. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/proxy_setup.py +0 -0
  245. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/agent_memory.py +0 -0
  246. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/checkpoints.py +0 -0
  247. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/session_loader.py +0 -0
  248. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/session_logger.py +0 -0
  249. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/session_migration.py +0 -0
  250. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session/state_file.py +0 -0
  251. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/session_checker.py +0 -0
  252. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/skills/__init__.py +0 -0
  253. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/skills/manager.py +0 -0
  254. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/skills/models.py +0 -0
  255. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/skills/parser.py +0 -0
  256. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/slug.py +0 -0
  257. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/steering_hook.py +0 -0
  258. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/system_prompt.py +0 -0
  259. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/telemetry/__init__.py +0 -0
  260. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/telemetry/send.py +0 -0
  261. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/teleport/errors.py +0 -0
  262. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/teleport/git.py +0 -0
  263. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/teleport/nuage.py +0 -0
  264. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/teleport/teleport.py +0 -0
  265. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/teleport/types.py +0 -0
  266. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/base.py +0 -0
  267. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/_task_manager.py +0 -0
  268. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  269. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/bash.py +0 -0
  270. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/cron.py +0 -0
  271. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  272. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/glob_tool.py +0 -0
  273. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  274. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/lsp.py +0 -0
  275. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  276. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  277. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/powershell.py +0 -0
  278. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  279. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  280. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  281. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  282. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  283. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  284. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  285. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  286. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  287. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  288. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  289. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  290. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  291. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  292. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  293. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/task.md +0 -0
  294. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  295. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  296. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  297. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  298. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  299. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  300. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  301. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/read_file.py +0 -0
  302. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/retrieve.py +0 -0
  303. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/search_replace.py +0 -0
  304. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/task.py +0 -0
  305. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/todo.py +0 -0
  306. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/tool_search.py +0 -0
  307. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/webfetch.py +0 -0
  308. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/websearch.py +0 -0
  309. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/worktree.py +0 -0
  310. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/builtins/write_file.py +0 -0
  311. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/injection_guard.py +0 -0
  312. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/manager.py +0 -0
  313. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/mcp/__init__.py +0 -0
  314. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/mcp/registry.py +0 -0
  315. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/mcp/tools.py +0 -0
  316. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/mcp_sampling.py +0 -0
  317. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/ui.py +0 -0
  318. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/tools/utils.py +0 -0
  319. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/trusted_folders.py +0 -0
  320. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/types.py +0 -0
  321. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/core/utils.py +0 -0
  322. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/__init__.py +0 -0
  323. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/__main__.py +0 -0
  324. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/code_indexer.py +0 -0
  325. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/retriever.py +0 -0
  326. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/storage.py +0 -0
  327. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/graphrag/text_indexer.py +0 -0
  328. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/__init__.py +0 -0
  329. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/base.py +0 -0
  330. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/onboarding.tcss +0 -0
  331. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/screens/__init__.py +0 -0
  332. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/screens/api_key.py +0 -0
  333. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/screens/choice.py +0 -0
  334. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/screens/local_model.py +0 -0
  335. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/onboarding/screens/welcome.py +0 -0
  336. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  337. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  338. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/__init__.py +0 -0
  339. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/api-design/SKILL.md +0 -0
  340. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/audit-tests/SKILL.md +0 -0
  341. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/batch/SKILL.md +0 -0
  342. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/commit-code/SKILL.md +0 -0
  343. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/context-summary/SKILL.md +0 -0
  344. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/create-presentation/SKILL.md +0 -0
  345. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/deep-research/SKILL.md +0 -0
  346. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/deploy/SKILL.md +0 -0
  347. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/diff-review/SKILL.md +0 -0
  348. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/doc-gen/SKILL.md +0 -0
  349. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/explain-code/SKILL.md +0 -0
  350. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/explore-code/SKILL.md +0 -0
  351. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/fix-issue/SKILL.md +0 -0
  352. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/git-ops/SKILL.md +0 -0
  353. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/init-project/SKILL.md +0 -0
  354. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/investigate/SKILL.md +0 -0
  355. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/loop/SKILL.md +0 -0
  356. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/migrate/SKILL.md +0 -0
  357. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/perf-analyze/SKILL.md +0 -0
  358. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/plan-impl/SKILL.md +0 -0
  359. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/pr-review/SKILL.md +0 -0
  360. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/refactor/SKILL.md +0 -0
  361. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/regex-help/SKILL.md +0 -0
  362. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/review/SKILL.md +0 -0
  363. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/security-review/SKILL.md +0 -0
  364. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/ship/SKILL.md +0 -0
  365. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/simplify/SKILL.md +0 -0
  366. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/strong-tests/SKILL.md +0 -0
  367. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/skills/test-verify/SKILL.md +0 -0
  368. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/__init__.py +0 -0
  369. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/__main__.py +0 -0
  370. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/applier.py +0 -0
  371. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/config.py +0 -0
  372. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/registry.py +0 -0
  373. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/sandbox.py +0 -0
  374. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/steering/vectors.py +0 -0
  375. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock/whats_new.md +0 -0
  376. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/drydock-acp.spec +0 -0
  377. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/flake.lock +0 -0
  378. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/flake.nix +0 -0
  379. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/README.md +0 -0
  380. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/config_base.toml +0 -0
  381. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/config_best.toml +0 -0
  382. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/domain_spec.md +0 -0
  383. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/experimenter.py +0 -0
  384. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/kernel.py +0 -0
  385. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/mini_prd.md +0 -0
  386. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/mini_prompts.txt +0 -0
  387. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/proposer.py +0 -0
  388. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/research/results.tsv +0 -0
  389. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/README.md +0 -0
  390. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/admiral_probe.py +0 -0
  391. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/auto_test_loop.sh +0 -0
  392. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/monitor_test_battery.sh +0 -0
  393. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/overnight_agents_test.sh +0 -0
  394. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/test_bank.sh +0 -0
  395. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/test_full.sh +0 -0
  396. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/test_smoke.sh +0 -0
  397. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/archive/tui_test.py +0 -0
  398. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/audit_sampler.py +0 -0
  399. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/auto_generate_tests.py +0 -0
  400. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/auto_release.sh +0 -0
  401. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/autonomous_review.sh +0 -0
  402. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/autonomous_review_prompt.md +0 -0
  403. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/backup.sh +0 -0
  404. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/bump_version.py +0 -0
  405. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/classify_pulse.sh +0 -0
  406. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/consume_retrieval_queue.py +0 -0
  407. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/deploy_to_github.sh +0 -0
  408. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/fetch_arxiv_abstracts.py +0 -0
  409. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/gen_2000_prompts.py +0 -0
  410. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/hle_eval.py +0 -0
  411. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/hle_eval_seed.jsonl +0 -0
  412. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/notify_release.py +0 -0
  413. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/perf_baseline_when_idle.sh +0 -0
  414. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/perf_sweep.py +0 -0
  415. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/poll_issues.sh +0 -0
  416. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/publish_to_pypi.sh +0 -0
  417. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/queue_top.py +0 -0
  418. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/ralph_loop.py +0 -0
  419. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/research_babysitter.sh +0 -0
  420. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/shakedown.py +0 -0
  421. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/shakedown_interactive.py +0 -0
  422. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/shakedown_suite.sh +0 -0
  423. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/shakedown_variance.sh +0 -0
  424. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_babysitter.sh +0 -0
  425. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_prompts_50.txt +0 -0
  426. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_prompts_realuser.txt +0 -0
  427. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_prompts_tool_agent.txt +0 -0
  428. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  429. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_shakedown.py +0 -0
  430. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_telegram_status.py +0 -0
  431. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/stress_watcher.py +0 -0
  432. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/telegram_bot.py +0 -0
  433. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/scripts/vllm_failover.sh +0 -0
  434. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/__init__.py +0 -0
  435. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/conftest.py +0 -0
  436. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_acp.py +0 -0
  437. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_agent_thought.py +0 -0
  438. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_bash.py +0 -0
  439. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_compact_session_updates.py +0 -0
  440. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_content.py +0 -0
  441. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_initialize.py +0 -0
  442. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_list_sessions.py +0 -0
  443. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_load_session.py +0 -0
  444. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_multi_session.py +0 -0
  445. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_new_session.py +0 -0
  446. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_proxy_setup_acp.py +0 -0
  447. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_read_file.py +0 -0
  448. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_search_replace.py +0 -0
  449. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_set_config_option.py +0 -0
  450. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_set_mode.py +0 -0
  451. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_set_model.py +0 -0
  452. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_tool_call_session_update.py +0 -0
  453. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_utils.py +0 -0
  454. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/acp/test_write_file.py +0 -0
  455. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_file_indexer.py +0 -0
  456. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_fuzzy.py +0 -0
  457. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  458. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  459. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_path_completion_controller.py +0 -0
  460. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  461. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_slash_command_controller.py +0 -0
  462. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  463. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/__init__.py +0 -0
  464. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/data/__init__.py +0 -0
  465. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/data/fireworks.py +0 -0
  466. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/data/mistral.py +0 -0
  467. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/test_anthropic_adapter.py +0 -0
  468. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/test_backend.py +0 -0
  469. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  470. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/test_reasoning_adapter.py +0 -0
  471. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  472. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  473. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  474. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  475. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_bell_notifications.py +0 -0
  476. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_braille_renderer.py +0 -0
  477. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_clipboard.py +0 -0
  478. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_commands.py +0 -0
  479. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_copy_shortcuts.py +0 -0
  480. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_external_editor.py +0 -0
  481. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_no_markup_static.py +0 -0
  482. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_question_app.py +0 -0
  483. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_spinner.py +0 -0
  484. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_switching_mode.py +0 -0
  485. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  486. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  487. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_ui_session_resume.py +0 -0
  488. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/test_ui_skill_dispatch.py +0 -0
  489. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/textual_ui/__init__.py +0 -0
  490. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/cli/textual_ui/test_session_picker.py +0 -0
  491. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/conftest.py +0 -0
  492. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_agents.py +0 -0
  493. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_auth_crypto.py +0 -0
  494. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_auth_github.py +0 -0
  495. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  496. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  497. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_config_load_dotenv.py +0 -0
  498. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_config_paths.py +0 -0
  499. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_config_resolution.py +0 -0
  500. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_file_logging.py +0 -0
  501. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_plan_session.py +0 -0
  502. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_proxy_setup.py +0 -0
  503. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_slug.py +0 -0
  504. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_telemetry_send.py +0 -0
  505. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_teleport_git.py +0 -0
  506. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_teleport_nuage.py +0 -0
  507. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_teleport_service.py +0 -0
  508. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_trusted_folders.py +0 -0
  509. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/core/test_utils.py +0 -0
  510. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/common.py +0 -0
  511. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/conftest.py +0 -0
  512. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/mock_server.py +0 -0
  513. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  514. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/test_cli_tui_streaming.py +0 -0
  515. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  516. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/fixtures/doc_qa_system_prd.md +0 -0
  517. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/mock/__init__.py +0 -0
  518. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/mock/mock_backend_factory.py +0 -0
  519. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/mock/mock_entrypoint.py +0 -0
  520. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/mock/utils.py +0 -0
  521. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/onboarding/test_run_onboarding.py +0 -0
  522. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/onboarding/test_ui_onboarding.py +0 -0
  523. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/session/test_session_loader.py +0 -0
  524. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/session/test_session_logger.py +0 -0
  525. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/session/test_session_migration.py +0 -0
  526. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/skills/conftest.py +0 -0
  527. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/skills/test_manager.py +0 -0
  528. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/skills/test_models.py +0 -0
  529. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/skills/test_parser.py +0 -0
  530. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  531. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  532. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  533. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  534. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  535. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  536. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  537. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  538. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  539. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  540. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  541. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  542. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  543. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  544. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  545. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  546. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  547. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  548. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  549. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  550. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  551. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  552. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  553. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  554. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  555. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  556. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  557. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  558. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  559. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  560. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  561. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  562. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  563. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  564. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  565. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  566. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  567. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  568. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  569. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  570. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  571. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  572. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  573. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  574. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  575. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  576. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  577. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  578. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  579. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  580. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  581. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  582. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  583. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  584. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  585. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  586. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  587. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  588. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  589. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  590. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/base_snapshot_test_app.py +0 -0
  591. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/conftest.py +0 -0
  592. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/snap_compare.py +0 -0
  593. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  594. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  595. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  596. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  597. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  598. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  599. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  600. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  601. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  602. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  603. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  604. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  605. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  606. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  607. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/stubs/fake_backend.py +0 -0
  608. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/stubs/fake_client.py +0 -0
  609. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/stubs/fake_tool.py +0 -0
  610. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_admiral.py +0 -0
  611. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_admiral_phase3.py +0 -0
  612. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_admiral_proposed.py +0 -0
  613. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_admiral_struggle_dedup.py +0 -0
  614. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_auto_compact.py +0 -0
  615. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_backend.py +0 -0
  616. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_observer_streaming.py +0 -0
  617. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_stats.py +0 -0
  618. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_tasks.py +0 -0
  619. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agent_tool_call.py +0 -0
  620. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_agents.py +0 -0
  621. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_build.py +0 -0
  622. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_debug.py +0 -0
  623. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_multiagent.py +0 -0
  624. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_prd.py +0 -0
  625. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_prd_extended.py +0 -0
  626. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_tools.py +0 -0
  627. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_bank_update.py +0 -0
  628. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_build_projects.py +0 -0
  629. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_checkpoint.py +0 -0
  630. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_classifier.py +0 -0
  631. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_cli_programmatic_preload.py +0 -0
  632. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_config_migration.py +0 -0
  633. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_context_recovery.py +0 -0
  634. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_current_bugs.py +0 -0
  635. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_dispatcher.py +0 -0
  636. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_drydock_regression.py +0 -0
  637. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_drydock_tasks.py +0 -0
  638. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  639. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_full_regression.py +0 -0
  640. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_graphrag.py +0 -0
  641. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_hallucinated_tool_suppression.py +0 -0
  642. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_history_manager.py +0 -0
  643. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_integration.py +0 -0
  644. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_issue_fixes.py +0 -0
  645. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_local_detect.py +0 -0
  646. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_loop_detection.py +0 -0
  647. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_message_id.py +0 -0
  648. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_message_merging.py +0 -0
  649. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_middleware.py +0 -0
  650. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_multi_agent.py +0 -0
  651. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_read_file_not_found_listing.py +0 -0
  652. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_real_failures.py +0 -0
  653. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_real_issues.py +0 -0
  654. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_real_workflow.py +0 -0
  655. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_reasoning_content.py +0 -0
  656. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_retrieval_consumer.py +0 -0
  657. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_retrieve_tool.py +0 -0
  658. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_search_replace_args_not_truncated.py +0 -0
  659. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_smoke.py +0 -0
  660. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_steering.py +0 -0
  661. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_steering_hook.py +0 -0
  662. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_system_prompt.py +0 -0
  663. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_tagged_text.py +0 -0
  664. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_task_complete_nudge.py +0 -0
  665. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_tool_args.py +0 -0
  666. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_truncate_args_valid_json.py +0 -0
  667. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_truncated_arg_path_hint.py +0 -0
  668. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_truncated_search_replace_escalation.py +0 -0
  669. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_truncated_write_escalation.py +0 -0
  670. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_ui_external_editor.py +0 -0
  671. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_ui_input_history.py +0 -0
  672. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_user_issues.py +0 -0
  673. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_wall_of_text_rescue.py +0 -0
  674. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_workloads.py +0 -0
  675. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/test_write_file_missing_path.py +0 -0
  676. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/testbank_helpers.py +0 -0
  677. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_ask_user_question.py +0 -0
  678. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash.py +0 -0
  679. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  680. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_consec_empty_search.py +0 -0
  681. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  682. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  683. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  684. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  685. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  686. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  687. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  688. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_exit_plan_mode.py +0 -0
  689. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_grep.py +0 -0
  690. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  691. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_invoke_context.py +0 -0
  692. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  693. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_manager_get_tool_config.py +0 -0
  694. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_mcp.py +0 -0
  695. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_mcp_sampling.py +0 -0
  696. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  697. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  698. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_read_file_directory.py +0 -0
  699. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_read_file_limit_truncation.py +0 -0
  700. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_append_fallback.py +0 -0
  701. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_dir_path.py +0 -0
  702. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_empty_content.py +0 -0
  703. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_file_not_found.py +0 -0
  704. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  705. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_hard_stop.py +0 -0
  706. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_malformed_block.py +0 -0
  707. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  708. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_placeholder.py +0 -0
  709. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  710. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_task.py +0 -0
  711. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_ui_bash_execution.py +0 -0
  712. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_webfetch.py +0 -0
  713. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_websearch.py +0 -0
  714. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  715. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  716. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  717. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  718. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_do_update.py +0 -0
  719. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  720. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_github_update_gateway.py +0 -0
  721. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  722. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_ui_update_notification.py +0 -0
  723. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_update_use_case.py +0 -0
  724. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/tests/update_notifier/test_whats_new.py +0 -0
  725. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/worked_examples/README.md +0 -0
  726. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/worked_examples/cli_subcommand_dispatch.py +0 -0
  727. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/worked_examples/lookup.json +0 -0
  728. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/worked_examples/sql_parser.py +0 -0
  729. {drydock_cli-2.8.5 → drydock_cli-2.8.7}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 4072961
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.5
3
+ Version: 2.8.7
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
@@ -0,0 +1,17 @@
1
+ """Entry point for `python -m drydock`.
2
+
3
+ This file lets users run drydock without the `drydock` console script
4
+ shim being on PATH — useful on Windows where `pip install --user`
5
+ puts the script in `%APPDATA%\\Python\\PythonXY\\Scripts` which isn't
6
+ on PATH by default.
7
+
8
+ Usage:
9
+ python -m drydock # same as `drydock`
10
+ python -m drydock --fix-windows-path
11
+ python -m drydock --setup
12
+ python -m drydock -p "your prompt here"
13
+ """
14
+ from drydock.cli.entrypoint import main
15
+
16
+ if __name__ == "__main__":
17
+ main()
@@ -75,49 +75,71 @@ def bootstrap_config_files() -> None:
75
75
  except Exception as e: # migration must never break startup
76
76
  logger.debug("config migration failed: %s", e)
77
77
  if not config_file.exists():
78
+ # Try auto-detecting a running local LLM first. Saves the user a
79
+ # setup screen if they already have llama.cpp / Ollama / vLLM /
80
+ # LM Studio listening on a known port.
81
+ detected_info = None
78
82
  try:
79
- config_file.parent.mkdir(parents=True, exist_ok=True)
80
- default = DrydockConfig.create_default()
81
- # Auto-detect a running local LLM server (llama.cpp, Ollama,
82
- # vLLM, LM Studio). If found, point the default config at it
83
- # and set local as the active model — so a fresh install with
84
- # a local server already running starts up without demanding
85
- # a Mistral API key.
83
+ from drydock.core.config.local_detect import detect_local_llm
84
+ detected_info = detect_local_llm()
85
+ except Exception as e:
86
+ logger.debug("local-LLM detection failed: %s", e)
87
+
88
+ if detected_info is not None:
89
+ # Detected — write a config patched to point at the live
90
+ # server with no user interaction required.
86
91
  try:
87
- from drydock.core.config.local_detect import (
88
- detect_local_llm,
89
- patch_config_for_local,
92
+ config_file.parent.mkdir(parents=True, exist_ok=True)
93
+ default = DrydockConfig.create_default()
94
+ from drydock.core.config.local_detect import patch_config_for_local
95
+ patch_config_for_local(default, detected_info)
96
+ rprint(
97
+ f"[green]Auto-detected {detected_info.label} at "
98
+ f"{detected_info.api_base}[/]\n"
99
+ f" Using model: [cyan]{detected_info.model_name}[/]\n"
100
+ f" To use a different LLM, run [cyan]drydock --setup[/] "
101
+ f"or edit [cyan]{config_file}[/]"
90
102
  )
91
- info = detect_local_llm()
92
- if info is not None:
93
- patch_config_for_local(default, info)
94
- rprint(
95
- f"[green]Auto-detected {info.label} at "
96
- f"{info.api_base}[/]\n"
97
- f" Using model: [cyan]{info.model_name}[/]\n"
98
- f" To use a different LLM, run [cyan]drydock --setup[/] "
99
- f"or edit [cyan]{config_file}[/]"
100
- )
101
- else:
102
- # No local server answering — default config already
103
- # points at llama.cpp on http://127.0.0.1:8000/v1 with
104
- # active_model="local". Tell the user so they know what
105
- # endpoint drydock will try, and how to point it
106
- # elsewhere if needed.
103
+ with config_file.open("wb") as f:
104
+ tomli_w.dump(default, f)
105
+ except Exception as e:
106
+ rprint(f"[yellow]Could not create default config file: {e}[/]")
107
+ else:
108
+ # No local server answering. Run the onboarding flow so the
109
+ # user can choose between (a) Mistral API key, (b) point
110
+ # drydock at a custom local URL via LocalModelScreen. Don't
111
+ # silently write a config pointing at a port nothing is
112
+ # listening on — that surprises users who run drydock
113
+ # without knowing they need to start a model server first.
114
+ rprint(
115
+ "[yellow]No local LLM server detected on the usual ports "
116
+ "(llama.cpp:8000/8080, Ollama:11434, LM Studio:1234).[/]\n"
117
+ " Launching setup so you can point drydock at your "
118
+ "model server."
119
+ )
120
+ try:
121
+ from drydock.setup.onboarding import run_onboarding
122
+ run_onboarding()
123
+ except SystemExit:
124
+ raise # onboarding cancelled — let the exit propagate
125
+ except Exception as e:
126
+ # Onboarding failed for some reason (e.g. no TTY in CI).
127
+ # Fall back to writing the defaults so drydock can at
128
+ # least try to start, and tell the user what to fix.
129
+ logger.debug("onboarding failed: %s", e)
130
+ try:
131
+ config_file.parent.mkdir(parents=True, exist_ok=True)
132
+ default = DrydockConfig.create_default()
133
+ with config_file.open("wb") as f:
134
+ tomli_w.dump(default, f)
107
135
  rprint(
108
- "[yellow]No local LLM server detected.[/]\n"
109
- " Defaulting to [cyan]llama.cpp at "
110
- "http://127.0.0.1:8000/v1[/] (OpenAI-compatible).\n"
111
- " Start a server on that port, run "
112
- "[cyan]drydock --setup[/], or edit "
113
- f"[cyan]{config_file}[/] to use a different URL."
136
+ f"[yellow]Setup failed ({e}). Wrote default config "
137
+ f"pointing at http://127.0.0.1:8000/v1.[/]\n"
138
+ f" Edit [cyan]{config_file}[/] or run "
139
+ "[cyan]drydock --setup[/] to fix."
114
140
  )
115
- except Exception as e: # detection must never break first launch
116
- logger.debug("local-LLM detection failed: %s", e)
117
- with config_file.open("wb") as f:
118
- tomli_w.dump(default, f)
119
- except Exception as e:
120
- rprint(f"[yellow]Could not create default config file: {e}[/]")
141
+ except Exception as ee:
142
+ rprint(f"[yellow]Could not create default config file: {ee}[/]")
121
143
 
122
144
  history_file = HISTORY_FILE.path
123
145
  if not history_file.exists():
@@ -868,6 +868,50 @@ class AgentLoop:
868
868
  or "400 bad request" in error_str.lower()
869
869
  or "status: 400" in error_str.lower()):
870
870
  # Context limit or malformed request — aggressive recovery
871
+ # Step 0 (added 2026-05-09): if the error looks like a
872
+ # malformed tool call (most common 400 cause that ISN'T
873
+ # context-overflow), drop the offending assistant
874
+ # message + its orphaned tool-result follow-ups so the
875
+ # retry doesn't re-send the same bad payload. Without
876
+ # this, drydock would re-send the same broken
877
+ # tool_call N times until MAX_API_ERRORS gave up,
878
+ # leaving the user with a sticky banner that only
879
+ # /clear or session-restart could clear.
880
+ dropped_bad_tool_call = False
881
+ bad_call_indicators = (
882
+ "tool_call", "tool call", "function call",
883
+ "function.arguments", "arguments",
884
+ "invalid json", "json decode", "schema",
885
+ "validation error", "tool_use", "function name",
886
+ )
887
+ if any(ind in error_str.lower() for ind in bad_call_indicators):
888
+ try:
889
+ # Walk backward to the most recent assistant
890
+ # message with tool_calls — that's the payload
891
+ # vLLM rejected.
892
+ bad_idx = None
893
+ for i in range(len(self.messages) - 1, -1, -1):
894
+ m = self.messages[i]
895
+ if m.role == Role.assistant and getattr(m, "tool_calls", None):
896
+ bad_idx = i
897
+ break
898
+ if bad_idx is not None:
899
+ # Drop the bad assistant message PLUS any
900
+ # tool-role messages that followed it (they
901
+ # reference tool_call_ids that no longer
902
+ # exist; sending them alone is also a 400).
903
+ new_msgs = list(self.messages[:bad_idx])
904
+ self.messages.reset(new_msgs)
905
+ dropped_bad_tool_call = True
906
+ logger.info(
907
+ "Auto-recovery: dropped bad tool-call "
908
+ "message (idx=%d) and %d follow-ups",
909
+ bad_idx, len(self.messages) - bad_idx
910
+ if hasattr(self, "messages") else 0,
911
+ )
912
+ except Exception as drop_err:
913
+ logger.debug("bad-tool-call drop failed: %s", drop_err)
914
+
871
915
  try:
872
916
  # First try: truncate old messages
873
917
  for i, msg in enumerate(self.messages):
@@ -897,7 +941,17 @@ class AgentLoop:
897
941
  logger.info("Emergency reset: kept first user + last 5 messages")
898
942
  except Exception:
899
943
  pass
900
- error_text = "Context compacted due to API error. Continue with your task."
944
+ if dropped_bad_tool_call:
945
+ error_text = (
946
+ "Your last tool call was rejected by the "
947
+ "server (likely malformed arguments). "
948
+ "Try a simpler form, or use a different tool."
949
+ )
950
+ else:
951
+ error_text = (
952
+ "Context compacted due to API error. "
953
+ "Continue with your task."
954
+ )
901
955
  else:
902
956
  error_text = f"API error occurred: {e}. Please continue with your task."
903
957
  self._inject_system_note(error_text)
@@ -1025,7 +1079,8 @@ class AgentLoop:
1025
1079
  if (assistant_msg.role == Role.assistant
1026
1080
  and assistant_msg.tool_calls):
1027
1081
  prev_tool_name = assistant_msg.tool_calls[-1].function.name if assistant_msg.tool_calls[-1].function else None
1028
- _readonly_tools = {"read_file", "grep", "glob", "ls", "pwd"}
1082
+ _readonly_tools = {"read_file", "grep", "glob", "ls", "pwd",
1083
+ "ralph_repo_index", "retrieve", "search_files"}
1029
1084
  _write_tools = {"write_file", "search_replace"}
1030
1085
  _prev_was_read = prev_tool_name in _readonly_tools
1031
1086
  _prev_was_write = prev_tool_name in _write_tools
@@ -2822,17 +2877,22 @@ class AgentLoop:
2822
2877
  ):
2823
2878
  return "FORCE_STOP"
2824
2879
 
2825
- # Check 1a: Same TOOL NAME repeated ≥8 consecutively, regardless
2826
- # of args. Catches the "write_file with missing/corrupted args 36
2827
- # times in a row" pathology where each sig differs (path is
2828
- # missing or garbled differently each call) but the model is
2829
- # clearly stuck hammering the same tool.
2880
+ # Check 1a: Same TOOL NAME repeated consecutively, regardless of args.
2881
+ # Catches the "write_file with missing/corrupted args 36 times in a row"
2882
+ # pathology where each sig differs but the model is clearly stuck.
2883
+ # Threshold is lower for exploration/indexing tools (ralph_repo_index,
2884
+ # read_file, glob, grep) that should never need 4+ consecutive calls —
2885
+ # each call after the first is a stall-recovery loop, not progress.
2886
+ # Write/shell tools keep the higher threshold (8) since they legitimately
2887
+ # appear many times in sequence when building multi-file projects.
2830
2888
  # Record a hot-combo on the stuck tool with an empty-path marker
2831
2889
  # so the per-tool mute in _chat will remove it for 1 turn.
2832
- if len(tool_names) >= 8:
2833
- last8 = tool_names[-8:]
2834
- if all(n == last8[-1] for n in last8):
2835
- self._hot_tool_path = (last8[-1], "<stuck>")
2890
+ _productive_tools = {"write_file", "search_replace", "bash", "run_command"}
2891
+ _check_1a_threshold = 8 if (tool_names and tool_names[-1] in _productive_tools) else 4
2892
+ if len(tool_names) >= _check_1a_threshold:
2893
+ last_n = tool_names[-_check_1a_threshold:]
2894
+ if all(n == last_n[-1] for n in last_n):
2895
+ self._hot_tool_path = (last_n[-1], "<stuck>")
2836
2896
  return "FORCE_STOP"
2837
2897
 
2838
2898
  # Check 1c: High recent-error fraction. If ≥6 of last 10 tool
@@ -301,11 +301,39 @@ DEFAULT_MODELS = [
301
301
  output_price=0.3,
302
302
  ),
303
303
  ModelConfig(
304
- name="devstral",
304
+ # Default local model is Gemma 4 — the recommended setup per
305
+ # CLAUDE.md (`start_gemma4.sh`). The `name` here is the model id
306
+ # the OpenAI-compatible server reports; for `start_gemma4.sh` +
307
+ # vLLM that's literally "gemma4". The local_detect probe will
308
+ # overwrite this at first launch with whatever the running
309
+ # server actually reports, so a user running a different
310
+ # local model (e.g. llama-3, mistral-small) gets matched up
311
+ # automatically.
312
+ name="gemma4",
305
313
  provider="llamacpp",
306
314
  alias="local",
307
315
  input_price=0.0,
308
316
  output_price=0.0,
317
+ # Gemma 4 anti-loop sampling recipe (see CLAUDE.md). Temperature
318
+ # MUST be 1.0 — lower values reinforce loops on quantized GGUF.
319
+ # The other knobs prevent the model from getting stuck on
320
+ # repeated tokens.
321
+ temperature=1.0,
322
+ # llama-server article recipe is `-c 32768`. Match it so
323
+ # auto_compact_threshold gets clamped to 28K (32K - 4K headroom)
324
+ # and the server doesn't return empty/garbage on context overflow.
325
+ context_window=32_768,
326
+ auto_compact_threshold=28_000,
327
+ # llama.cpp uses `repeat_penalty` (its native knob), not the
328
+ # OpenAI-style `frequency_penalty`. `temperature=1.0` is the
329
+ # top-level field above; the other three sampling params live
330
+ # here and get forwarded as extra_sampling to the server.
331
+ extra_params={
332
+ "top_k": 40,
333
+ "top_p": 0.95,
334
+ "repeat_penalty": 1.1,
335
+ "max_tokens": 2048,
336
+ },
309
337
  ),
310
338
  ]
311
339
 
@@ -140,6 +140,8 @@ def patch_config_for_local(
140
140
  extra = model.setdefault("extra_params", {})
141
141
  extra.setdefault("top_k", 40)
142
142
  extra.setdefault("top_p", 0.95)
143
- extra.setdefault("frequency_penalty", 1.1)
143
+ # llama.cpp's native repetition knob, not the
144
+ # OpenAI-style frequency_penalty.
145
+ extra.setdefault("repeat_penalty", 1.1)
144
146
  extra.setdefault("max_tokens", 2048)
145
147
  break
@@ -72,6 +72,7 @@ def migrate_user_config(config_file: Path) -> None:
72
72
  return
73
73
 
74
74
  added: list[str] = []
75
+ fixed: list[str] = []
75
76
  models = data.get("models")
76
77
  if isinstance(models, list):
77
78
  for model in models:
@@ -86,8 +87,17 @@ def migrate_user_config(config_file: Path) -> None:
86
87
  window = model.get("context_window") or _default_window_for(provider)
87
88
  model["auto_compact_threshold"] = _default_compact_threshold_for(window)
88
89
  added.append(f"models.{label}.auto_compact_threshold")
89
-
90
- if not added:
90
+ # llamacpp models written by v2.8.3–v2.8.5 used the
91
+ # OpenAI-style `frequency_penalty`. llama.cpp's actual
92
+ # repetition knob is `repeat_penalty` — rename it so the
93
+ # server accepts the value instead of silently ignoring it.
94
+ if "llamacpp" in provider.lower():
95
+ extra = model.get("extra_params")
96
+ if isinstance(extra, dict) and "frequency_penalty" in extra and "repeat_penalty" not in extra:
97
+ extra["repeat_penalty"] = extra.pop("frequency_penalty")
98
+ fixed.append(f"models.{label}.extra_params: frequency_penalty → repeat_penalty")
99
+
100
+ if not added and not fixed:
91
101
  return
92
102
 
93
103
  try:
@@ -97,8 +107,9 @@ def migrate_user_config(config_file: Path) -> None:
97
107
  logger.warning("config migration: cannot write %s: %s", config_file, e)
98
108
  return
99
109
 
110
+ changes = added + fixed
100
111
  rprint(
101
- f"[cyan]Drydock config migrated: added {len(added)} new "
102
- f"key(s) to {config_file}[/]\n "
103
- + "\n ".join(added)
112
+ f"[cyan]Drydock config migrated: {len(changes)} change(s) to "
113
+ f"{config_file}[/]\n "
114
+ + "\n ".join(changes)
104
115
  )
@@ -118,28 +118,36 @@ class Grep(
118
118
  self, args: GrepArgs, ctx: InvokeContext | None = None
119
119
  ) -> AsyncGenerator[ToolStreamEvent | GrepResult, None]:
120
120
  backend = self._detect_backend()
121
+ args, regex_note = self._coerce_pattern(args)
121
122
  self._validate_args(args)
122
123
 
123
124
  exclude_patterns = self._collect_exclude_patterns()
124
125
  cmd = self._build_command(args, exclude_patterns, backend)
125
126
  stdout = await self._execute_search(cmd)
126
127
 
127
- yield self._parse_output(
128
+ result = self._parse_output(
128
129
  stdout, args.max_matches or self.config.default_max_matches
129
130
  )
131
+ if regex_note:
132
+ result.matches = regex_note + result.matches
133
+ yield result
130
134
 
131
- def _validate_args(self, args: GrepArgs) -> None:
132
- if not args.pattern.strip():
133
- raise ToolError("Empty search pattern provided.")
134
-
135
+ def _coerce_pattern(self, args: GrepArgs) -> tuple[GrepArgs, str]:
136
+ """Auto-escape invalid regex to avoid ToolError loops; return note if coerced."""
135
137
  try:
136
138
  _re.compile(args.pattern)
137
- except _re.error as regex_err:
139
+ return args, ""
140
+ except _re.error:
138
141
  escaped = _re.escape(args.pattern)
139
- raise ToolError(
140
- f"Invalid regex pattern: {regex_err}\n"
141
- f"To search for this as literal text, use pattern={escaped!r}"
142
- ) from None
142
+ note = (
143
+ f"NOTE: '{args.pattern}' is not valid regex; searching as literal text"
144
+ f" (pattern='{escaped}').\n"
145
+ )
146
+ return args.model_copy(update={"pattern": escaped}), note
147
+
148
+ def _validate_args(self, args: GrepArgs) -> None:
149
+ if not args.pattern.strip():
150
+ raise ToolError("Empty search pattern provided.")
143
151
 
144
152
  path_obj = Path(args.path).expanduser()
145
153
  if not path_obj.is_absolute():
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.5"
3
+ version = "2.8.7"
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"
@@ -26,7 +26,14 @@ import urllib.request
26
26
 
27
27
  BACKENDS = [
28
28
  "http://localhost:8000",
29
- "http://192.168.50.21:8000",
29
+ # 192.168.50.21:8000 (romulus) PAUSED 2026-05-09 — its llama.cpp
30
+ # build reports `b1-e77056f` which is well below the b3000+ that
31
+ # the article-recommended Gemma 4 inference fixes shipped in. We
32
+ # suspect intermittent jumbled-text output (random character
33
+ # insertions like "contaiens"/"folloiwng") originates from this
34
+ # backend. Re-add this line and rebuild romulus once it's on a
35
+ # current llama.cpp build (b9000+ to match remus's docker image).
36
+ # "http://192.168.50.21:8000",
30
37
  # 192.168.50.19:8080 (Jetson) was probed for inclusion 2026-05-05
31
38
  # but its /v1/chat/completions endpoint times out after 90s with
32
39
  # no response (only /v1/models returns, and in Ollama-style schema