drydock-cli 2.10.6__tar.gz → 2.10.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/PKG-INFO +2 -2
  2. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/entrypoint.py +137 -0
  3. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/agent_loop.py +16 -1
  4. drydock_cli-2.10.8/drydock/data/cookbook/tbench_domains/mcmc_stan.md +188 -0
  5. drydock_cli-2.10.8/drydock/data/cookbook/tbench_domains/mobilesam_cell_seg.md +162 -0
  6. drydock_cli-2.10.8/drydock/data/cookbook/tbench_domains/raman_fitting.md +190 -0
  7. drydock_cli-2.10.8/drydock/data/cookbook/tbench_domains/regex_chess.md +211 -0
  8. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/pyproject.toml +2 -2
  9. drydock_cli-2.10.8/tests/test_auto_retrieve_wrapper_strip.py +85 -0
  10. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/.gitignore +0 -0
  11. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/LICENSE +0 -0
  12. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/NOTICE +0 -0
  13. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/README.md +0 -0
  14. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/distribution/zed/LICENSE +0 -0
  15. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/docs/README.md +0 -0
  16. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/__init__.py +0 -0
  17. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/__main__.py +0 -0
  18. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/__init__.py +0 -0
  19. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/acp_agent_loop.py +0 -0
  20. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/acp_logger.py +0 -0
  21. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/entrypoint.py +0 -0
  22. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/__init__.py +0 -0
  23. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/base.py +0 -0
  24. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/builtins/bash.py +0 -0
  25. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/builtins/read_file.py +0 -0
  26. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/builtins/search_replace.py +0 -0
  27. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/builtins/todo.py +0 -0
  28. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/builtins/write_file.py +0 -0
  29. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/tools/session_update.py +0 -0
  30. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/acp/utils.py +0 -0
  31. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/__init__.py +0 -0
  32. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/detectors.py +0 -0
  33. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/detectors_proposed.py +0 -0
  34. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/history.py +0 -0
  35. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/interventions.py +0 -0
  36. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/llm_analyzer.py +0 -0
  37. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/metrics.py +0 -0
  38. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/opus_escalator.py +0 -0
  39. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/persistence.py +0 -0
  40. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/policy.py +0 -0
  41. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/proposer.py +0 -0
  42. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/stager.py +0 -0
  43. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/task_classifier.py +0 -0
  44. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/tuning.py +0 -0
  45. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/validator.py +0 -0
  46. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/admiral/worker.py +0 -0
  47. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/__init__.py +0 -0
  48. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/autocompletion/__init__.py +0 -0
  49. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/autocompletion/base.py +0 -0
  50. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/autocompletion/path_completion.py +0 -0
  51. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/autocompletion/slash_command.py +0 -0
  52. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/cli.py +0 -0
  53. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/clipboard.py +0 -0
  54. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/commands.py +0 -0
  55. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/fix_windows_path.py +0 -0
  56. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/history_manager.py +0 -0
  57. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  58. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  59. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  60. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/terminal_setup.py +0 -0
  61. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/__init__.py +0 -0
  62. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  63. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/app.py +0 -0
  64. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/app.tcss +0 -0
  65. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/external_editor.py +0 -0
  66. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  67. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  68. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  69. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  70. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  71. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  72. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  73. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  74. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  75. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  76. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  77. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  78. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  79. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  80. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  81. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  82. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  83. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  84. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  85. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  86. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  87. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  88. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  89. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  90. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  91. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  92. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  93. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  94. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  95. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  96. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  97. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  98. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  99. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  100. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  101. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  102. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  103. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/windowing/history.py +0 -0
  104. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  105. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/textual_ui/windowing/state.py +0 -0
  106. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/__init__.py +0 -0
  107. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  108. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  109. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  110. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  111. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  112. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/update.py +0 -0
  113. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/cli/update_notifier/whats_new.py +0 -0
  114. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/__init__.py +0 -0
  115. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/agents/__init__.py +0 -0
  116. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/agents/manager.py +0 -0
  117. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/agents/models.py +0 -0
  118. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/auth/__init__.py +0 -0
  119. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/auth/crypto.py +0 -0
  120. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/auth/github.py +0 -0
  121. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/auto_solve.py +0 -0
  122. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/__init__.py +0 -0
  123. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/completers.py +0 -0
  124. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  125. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  126. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  127. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  128. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  129. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/fuzzy.py +0 -0
  130. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/path_prompt.py +0 -0
  131. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  132. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/build_orchestrator.py +0 -0
  133. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/checkpoint.py +0 -0
  134. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/__init__.py +0 -0
  135. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/__main__.py +0 -0
  136. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/classifier.py +0 -0
  137. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/dispatcher.py +0 -0
  138. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/rules.py +0 -0
  139. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/classifier/signal.py +0 -0
  140. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/__init__.py +0 -0
  141. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/_dotenv.py +0 -0
  142. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/_settings.py +0 -0
  143. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/doctor.py +0 -0
  144. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/harness_files/__init__.py +0 -0
  145. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  146. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/harness_files/_paths.py +0 -0
  147. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/local_detect.py +0 -0
  148. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/config/migrate.py +0 -0
  149. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/constraint_extract.py +0 -0
  150. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/constraint_hint.py +0 -0
  151. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/consultant.py +0 -0
  152. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/context_recovery.py +0 -0
  153. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/drydock_states.py +0 -0
  154. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/goal.py +0 -0
  155. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/hooks.py +0 -0
  156. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/__init__.py +0 -0
  157. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/anthropic.py +0 -0
  158. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/base.py +0 -0
  159. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/factory.py +0 -0
  160. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/generic.py +0 -0
  161. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/mistral.py +0 -0
  162. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  163. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/backend/vertex.py +0 -0
  164. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/exceptions.py +0 -0
  165. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/format.py +0 -0
  166. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/grammar/__init__.py +0 -0
  167. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/grammar/_llamacpp_converter.py +0 -0
  168. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/grammar/policy.py +0 -0
  169. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/grammar/policy_union.py +0 -0
  170. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/message_utils.py +0 -0
  171. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/llm/types.py +0 -0
  172. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/logger.py +0 -0
  173. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/middleware.py +0 -0
  174. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/output_formatters.py +0 -0
  175. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/paths/__init__.py +0 -0
  176. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/paths/_drydock_home.py +0 -0
  177. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/paths/_local_config_walk.py +0 -0
  178. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/paths/conventions.py +0 -0
  179. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/plan_session.py +0 -0
  180. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/plugins.py +0 -0
  181. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/programmatic.py +0 -0
  182. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/__init__.py +0 -0
  183. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/builder.md +0 -0
  184. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/cli.md +0 -0
  185. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/compact.md +0 -0
  186. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/dangerous_directory.md +0 -0
  187. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/diagnostic.md +0 -0
  188. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/explore.md +0 -0
  189. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/gemma4.md +0 -0
  190. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/gemma4_math.md +0 -0
  191. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/gemma4_slim.md +0 -0
  192. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/planner.md +0 -0
  193. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/project_context.md +0 -0
  194. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/prompts/tests.md +0 -0
  195. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/proxy_setup.py +0 -0
  196. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/agent_memory.py +0 -0
  197. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/checkpoints.py +0 -0
  198. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/session_loader.py +0 -0
  199. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/session_logger.py +0 -0
  200. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/session_migration.py +0 -0
  201. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session/state_file.py +0 -0
  202. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/session_checker.py +0 -0
  203. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/skills/__init__.py +0 -0
  204. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/skills/manager.py +0 -0
  205. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/skills/models.py +0 -0
  206. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/skills/parser.py +0 -0
  207. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/slug.py +0 -0
  208. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/spec_check.py +0 -0
  209. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/steering_hook.py +0 -0
  210. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/system_prompt.py +0 -0
  211. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/telemetry/__init__.py +0 -0
  212. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/telemetry/send.py +0 -0
  213. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/teleport/errors.py +0 -0
  214. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/teleport/git.py +0 -0
  215. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/teleport/nuage.py +0 -0
  216. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/teleport/teleport.py +0 -0
  217. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/teleport/types.py +0 -0
  218. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/base.py +0 -0
  219. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/_task_manager.py +0 -0
  220. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  221. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  222. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/bash.py +0 -0
  223. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  224. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/count_tool.py +0 -0
  225. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/cron.py +0 -0
  226. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  227. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/glob_tool.py +0 -0
  228. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/grep.py +0 -0
  229. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  230. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  231. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/logic_tool.py +0 -0
  232. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/lsp.py +0 -0
  233. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/math_tool.py +0 -0
  234. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  235. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
  236. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/memory_tool.py +0 -0
  237. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  238. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  239. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/powershell.py +0 -0
  240. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prolog_tool.py +0 -0
  241. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  242. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  243. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  244. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  245. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  246. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  247. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  248. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  249. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  250. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  251. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  252. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  253. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  254. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  255. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  256. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/task.md +0 -0
  257. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  258. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  259. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  260. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  261. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  262. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  263. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  264. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/read_file.py +0 -0
  265. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/retrieve.py +0 -0
  266. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/search_replace.py +0 -0
  267. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/set_tool.py +0 -0
  268. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/solve_tool.py +0 -0
  269. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/stats_tool.py +0 -0
  270. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/task.py +0 -0
  271. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/todo.py +0 -0
  272. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/tool_search.py +0 -0
  273. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/units_tool.py +0 -0
  274. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/verify_tool.py +0 -0
  275. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/webfetch.py +0 -0
  276. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/websearch.py +0 -0
  277. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/worktree.py +0 -0
  278. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/builtins/write_file.py +0 -0
  279. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/injection_guard.py +0 -0
  280. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/manager.py +0 -0
  281. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/mcp/__init__.py +0 -0
  282. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/mcp/registry.py +0 -0
  283. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/mcp/tools.py +0 -0
  284. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/mcp_sampling.py +0 -0
  285. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/ui.py +0 -0
  286. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/tools/utils.py +0 -0
  287. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/trusted_folders.py +0 -0
  288. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/types.py +0 -0
  289. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/core/utils.py +0 -0
  290. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/__init__.py +0 -0
  291. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/__main__.py +0 -0
  292. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/gap_detector.py +0 -0
  293. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/ingest.py +0 -0
  294. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/item.py +0 -0
  295. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/queue.py +0 -0
  296. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/curiosity/surprise.py +0 -0
  297. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/python/global_rename.md +0 -0
  298. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/biopython_dna.md +0 -0
  299. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/dense_eigenvalue.md +0 -0
  300. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/elf_extraction_js.md +0 -0
  301. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/feal_cryptanalysis.md +0 -0
  302. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/llm_batching_scheduler.md +0 -0
  303. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/mips_isa.md +0 -0
  304. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/mteb_retrieve.md +0 -0
  305. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/path_tracing.md +0 -0
  306. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/vim_macros.md +0 -0
  307. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/data/cookbook/tbench_domains/xss_filter.md +0 -0
  308. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/__init__.py +0 -0
  309. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/__main__.py +0 -0
  310. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/code_indexer.py +0 -0
  311. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/retriever.py +0 -0
  312. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/storage.py +0 -0
  313. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/graphrag/text_indexer.py +0 -0
  314. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/__init__.py +0 -0
  315. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/base.py +0 -0
  316. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/onboarding.tcss +0 -0
  317. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/screens/__init__.py +0 -0
  318. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/screens/api_key.py +0 -0
  319. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/screens/choice.py +0 -0
  320. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/screens/local_model.py +0 -0
  321. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/onboarding/screens/welcome.py +0 -0
  322. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  323. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  324. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/__init__.py +0 -0
  325. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/api-design/SKILL.md +0 -0
  326. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/audit-tests/SKILL.md +0 -0
  327. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/batch/SKILL.md +0 -0
  328. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/checklist/SKILL.md +0 -0
  329. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/commit-code/SKILL.md +0 -0
  330. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  331. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/context-summary/SKILL.md +0 -0
  332. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/create-presentation/SKILL.md +0 -0
  333. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/deep-research/SKILL.md +0 -0
  334. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/deploy/SKILL.md +0 -0
  335. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/diff-review/SKILL.md +0 -0
  336. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/doc-gen/SKILL.md +0 -0
  337. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/explain-code/SKILL.md +0 -0
  338. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/explore-code/SKILL.md +0 -0
  339. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/fix-issue/SKILL.md +0 -0
  340. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/git-ops/SKILL.md +0 -0
  341. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/init-project/SKILL.md +0 -0
  342. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/investigate/SKILL.md +0 -0
  343. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/logic/SKILL.md +0 -0
  344. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  345. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/loop/SKILL.md +0 -0
  346. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/migrate/SKILL.md +0 -0
  347. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/perf-analyze/SKILL.md +0 -0
  348. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/plan-impl/SKILL.md +0 -0
  349. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/pr-review/SKILL.md +0 -0
  350. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/prove/SKILL.md +0 -0
  351. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/refactor/SKILL.md +0 -0
  352. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/regex-help/SKILL.md +0 -0
  353. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/review/SKILL.md +0 -0
  354. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/security-review/SKILL.md +0 -0
  355. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/ship/SKILL.md +0 -0
  356. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/simplify/SKILL.md +0 -0
  357. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/strong-tests/SKILL.md +0 -0
  358. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/skills/test-verify/SKILL.md +0 -0
  359. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/__init__.py +0 -0
  360. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/__main__.py +0 -0
  361. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/applier.py +0 -0
  362. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/config.py +0 -0
  363. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/registry.py +0 -0
  364. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sandbox.py +0 -0
  365. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sidecar/__init__.py +0 -0
  366. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sidecar/header_parser.py +0 -0
  367. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sidecar/hooks.py +0 -0
  368. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sidecar/loader.py +0 -0
  369. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/sidecar/server.py +0 -0
  370. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/train/__init__.py +0 -0
  371. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/train/capture.py +0 -0
  372. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/train/compute_vector.py +0 -0
  373. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/train/extract_pairs.py +0 -0
  374. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/train/scan_sessions.py +0 -0
  375. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/steering/vectors.py +0 -0
  376. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/drydock/whats_new.md +0 -0
  377. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/install_tests/README.md +0 -0
  378. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/install_tests/publish/README.md +0 -0
  379. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/install_tests/windows/README.md +0 -0
  380. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/scripts/README.md +0 -0
  381. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/scripts/_archived_eval_harness/README.md +0 -0
  382. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/scripts/llm/README.md +0 -0
  383. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/__init__.py +0 -0
  384. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/conftest.py +0 -0
  385. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_acp.py +0 -0
  386. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_agent_thought.py +0 -0
  387. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_bash.py +0 -0
  388. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_compact_session_updates.py +0 -0
  389. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_content.py +0 -0
  390. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_initialize.py +0 -0
  391. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_list_sessions.py +0 -0
  392. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_load_session.py +0 -0
  393. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_multi_session.py +0 -0
  394. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_new_session.py +0 -0
  395. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_proxy_setup_acp.py +0 -0
  396. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_read_file.py +0 -0
  397. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_search_replace.py +0 -0
  398. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_set_config_option.py +0 -0
  399. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_set_mode.py +0 -0
  400. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_set_model.py +0 -0
  401. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_tool_call_session_update.py +0 -0
  402. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_utils.py +0 -0
  403. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/acp/test_write_file.py +0 -0
  404. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/conftest.py +0 -0
  405. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_file_indexer.py +0 -0
  406. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_fuzzy.py +0 -0
  407. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  408. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  409. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_path_completion_controller.py +0 -0
  410. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  411. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_slash_command_controller.py +0 -0
  412. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  413. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/__init__.py +0 -0
  414. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/data/__init__.py +0 -0
  415. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/data/fireworks.py +0 -0
  416. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/data/mistral.py +0 -0
  417. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/test_anthropic_adapter.py +0 -0
  418. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/test_backend.py +0 -0
  419. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  420. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/test_reasoning_adapter.py +0 -0
  421. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  422. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  423. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  424. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  425. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_bell_notifications.py +0 -0
  426. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_braille_renderer.py +0 -0
  427. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_clipboard.py +0 -0
  428. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_commands.py +0 -0
  429. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_copy_shortcuts.py +0 -0
  430. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_external_editor.py +0 -0
  431. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_no_markup_static.py +0 -0
  432. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_question_app.py +0 -0
  433. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_spinner.py +0 -0
  434. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_switching_mode.py +0 -0
  435. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  436. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  437. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_ui_session_resume.py +0 -0
  438. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/test_ui_skill_dispatch.py +0 -0
  439. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/textual_ui/__init__.py +0 -0
  440. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/cli/textual_ui/test_session_picker.py +0 -0
  441. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/conftest.py +0 -0
  442. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_agents.py +0 -0
  443. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_auth_crypto.py +0 -0
  444. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_auth_github.py +0 -0
  445. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_config_load_dotenv.py +0 -0
  446. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_config_paths.py +0 -0
  447. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_config_resolution.py +0 -0
  448. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_file_logging.py +0 -0
  449. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_plan_session.py +0 -0
  450. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_proxy_setup.py +0 -0
  451. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_slug.py +0 -0
  452. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_telemetry_send.py +0 -0
  453. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_teleport_git.py +0 -0
  454. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_teleport_nuage.py +0 -0
  455. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_teleport_service.py +0 -0
  456. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_trusted_folders.py +0 -0
  457. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/core/test_utils.py +0 -0
  458. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/common.py +0 -0
  459. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/conftest.py +0 -0
  460. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/mock_server.py +0 -0
  461. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  462. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/test_cli_tui_streaming.py +0 -0
  463. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  464. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/fixtures/doc_qa_system_prd.md +0 -0
  465. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/mock/__init__.py +0 -0
  466. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/mock/mock_backend_factory.py +0 -0
  467. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/mock/mock_entrypoint.py +0 -0
  468. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/mock/utils.py +0 -0
  469. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/onboarding/test_run_onboarding.py +0 -0
  470. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/onboarding/test_ui_onboarding.py +0 -0
  471. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/session/test_session_loader.py +0 -0
  472. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/session/test_session_logger.py +0 -0
  473. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/session/test_session_migration.py +0 -0
  474. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/skills/conftest.py +0 -0
  475. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/skills/test_manager.py +0 -0
  476. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/skills/test_models.py +0 -0
  477. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/skills/test_parser.py +0 -0
  478. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  479. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  480. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  481. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  482. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  483. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  484. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  485. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  486. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  487. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  488. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  489. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  490. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  491. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  492. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  493. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  494. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  495. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  496. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  497. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  498. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  499. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  500. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  501. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  502. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  503. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  504. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  505. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  506. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  507. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  508. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  509. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  510. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  511. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  512. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  513. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  514. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  515. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  516. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  517. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  518. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  519. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  520. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  521. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  522. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  523. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  524. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  525. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  526. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  527. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  528. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  529. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  530. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  531. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  532. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  533. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  534. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  535. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  536. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  537. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  538. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/base_snapshot_test_app.py +0 -0
  539. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/conftest.py +0 -0
  540. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/snap_compare.py +0 -0
  541. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  542. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  543. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  544. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  545. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  546. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  547. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  548. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  549. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  550. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  551. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  552. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  553. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  554. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  555. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/stress/__init__.py +0 -0
  556. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/stress/test_io_thrash.py +0 -0
  557. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/stubs/fake_backend.py +0 -0
  558. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/stubs/fake_client.py +0 -0
  559. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/stubs/fake_tool.py +0 -0
  560. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral.py +0 -0
  561. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  562. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_intervention_outcome.py +0 -0
  563. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_phase3.py +0 -0
  564. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_proposed.py +0 -0
  565. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_session_id.py +0 -0
  566. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_admiral_struggle_dedup.py +0 -0
  567. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_auto_compact.py +0 -0
  568. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_backend.py +0 -0
  569. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_observer_streaming.py +0 -0
  570. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_stats.py +0 -0
  571. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_tasks.py +0 -0
  572. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agent_tool_call.py +0 -0
  573. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_agents.py +0 -0
  574. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_algebra_tool.py +0 -0
  575. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_api_error_recovery.py +0 -0
  576. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_approval_modal_stray_keys.py +0 -0
  577. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_auto_retrieve_cookbook_bypass.py +0 -0
  578. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  579. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_auto_solve.py +0 -0
  580. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_build.py +0 -0
  581. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_debug.py +0 -0
  582. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_multiagent.py +0 -0
  583. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_prd.py +0 -0
  584. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_prd_extended.py +0 -0
  585. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_tools.py +0 -0
  586. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_bank_update.py +0 -0
  587. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_broken_tool_isolation.py +0 -0
  588. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_build_projects.py +0 -0
  589. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_checkpoint.py +0 -0
  590. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_chemistry_tool.py +0 -0
  591. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_classifier.py +0 -0
  592. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_cli_programmatic_preload.py +0 -0
  593. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_config_migration.py +0 -0
  594. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_constraint_extract.py +0 -0
  595. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_constraint_hint.py +0 -0
  596. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_context_recovery.py +0 -0
  597. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_count_tool.py +0 -0
  598. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_curiosity.py +0 -0
  599. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_current_bugs.py +0 -0
  600. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_dispatch_report.py +0 -0
  601. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_dispatcher.py +0 -0
  602. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_drydock_regression.py +0 -0
  603. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_drydock_tasks.py +0 -0
  604. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  605. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_full_regression.py +0 -0
  606. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_gemma4_anti_loop_migration.py +0 -0
  607. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_gemma4_tool_filter.py +0 -0
  608. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_goal.py +0 -0
  609. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_grammar.py +0 -0
  610. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_graphrag.py +0 -0
  611. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_graphrag_pdf_ingest.py +0 -0
  612. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_graphrag_worked_examples.py +0 -0
  613. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_hallucinated_tool_suppression.py +0 -0
  614. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_history_manager.py +0 -0
  615. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_hle_aggregate.py +0 -0
  616. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_integration.py +0 -0
  617. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_issue_fixes.py +0 -0
  618. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_linear_algebra_tool.py +0 -0
  619. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_local_detect.py +0 -0
  620. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_local_detect_fallback.py +0 -0
  621. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_logic_tool.py +0 -0
  622. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_loop_detection.py +0 -0
  623. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_loop_regressions_2026_06_06.py +0 -0
  624. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_math_docs_lazy_injection.py +0 -0
  625. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_math_tool.py +0 -0
  626. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_mcp_settings.py +0 -0
  627. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_mcp_stdio_command_normalization.py +0 -0
  628. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_mechanical_rename_tool.py +0 -0
  629. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_mechanical_rename_type_extraction.py +0 -0
  630. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_memory_tool.py +0 -0
  631. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_message_id.py +0 -0
  632. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_message_merging.py +0 -0
  633. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_middleware.py +0 -0
  634. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_multi_agent.py +0 -0
  635. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_number_theory_tool.py +0 -0
  636. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_prolog_tool.py +0 -0
  637. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_read_file_not_found_listing.py +0 -0
  638. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_read_file_notebook_slim.py +0 -0
  639. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_real_failures.py +0 -0
  640. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_real_issues.py +0 -0
  641. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_real_workflow.py +0 -0
  642. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_reasoning_content.py +0 -0
  643. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_rejudge_hle.py +0 -0
  644. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_retrieval_consumer.py +0 -0
  645. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_retrieve_project_detection.py +0 -0
  646. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_retrieve_tool.py +0 -0
  647. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_safe_parse_tool_args.py +0 -0
  648. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_search_replace_args_not_truncated.py +0 -0
  649. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_search_replace_syntax_rollback.py +0 -0
  650. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_session_log_event.py +0 -0
  651. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_session_publish_on_resume.py +0 -0
  652. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_set_tool.py +0 -0
  653. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_smoke.py +0 -0
  654. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_solve_tool.py +0 -0
  655. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_specialist_math_tools_hidden.py +0 -0
  656. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_stats_tool.py +0 -0
  657. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering.py +0 -0
  658. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_capture.py +0 -0
  659. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_compute_vector.py +0 -0
  660. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_extract_pairs.py +0 -0
  661. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_hook.py +0 -0
  662. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  663. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_steering_sidecar_hooks.py +0 -0
  664. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_system_prompt.py +0 -0
  665. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_tagged_text.py +0 -0
  666. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_task_complete_nudge.py +0 -0
  667. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_tool_args.py +0 -0
  668. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_tool_call_loops_regression_suite.py +0 -0
  669. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_tool_stop_injected_scope.py +0 -0
  670. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_truncate_args_valid_json.py +0 -0
  671. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_truncated_arg_path_hint.py +0 -0
  672. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_truncated_search_replace_escalation.py +0 -0
  673. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_truncated_write_escalation.py +0 -0
  674. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_ui_external_editor.py +0 -0
  675. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_ui_input_history.py +0 -0
  676. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_units_tool.py +0 -0
  677. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_user_issues.py +0 -0
  678. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_validation_error_scrub.py +0 -0
  679. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_verify_tool.py +0 -0
  680. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_wall_of_text_rescue.py +0 -0
  681. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_workloads.py +0 -0
  682. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/test_write_file_missing_path.py +0 -0
  683. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/testbank_helpers.py +0 -0
  684. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_ask_user_question.py +0 -0
  685. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash.py +0 -0
  686. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  687. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_consec_empty_search.py +0 -0
  688. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  689. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  690. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  691. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  692. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  693. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  694. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  695. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_exit_plan_mode.py +0 -0
  696. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_grep.py +0 -0
  697. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  698. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_invoke_context.py +0 -0
  699. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  700. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_manager_get_tool_config.py +0 -0
  701. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_mcp.py +0 -0
  702. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_mcp_sampling.py +0 -0
  703. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_pre_rename_hook.py +0 -0
  704. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  705. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  706. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_read_file_directory.py +0 -0
  707. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_read_file_limit_truncation.py +0 -0
  708. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_append_fallback.py +0 -0
  709. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_dir_path.py +0 -0
  710. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_empty_content.py +0 -0
  711. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_file_not_found.py +0 -0
  712. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  713. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_hard_stop.py +0 -0
  714. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_malformed_block.py +0 -0
  715. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  716. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_placeholder.py +0 -0
  717. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  718. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_task.py +0 -0
  719. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_ui_bash_execution.py +0 -0
  720. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_webfetch.py +0 -0
  721. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_websearch.py +0 -0
  722. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  723. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_write_file_missing_main_module.py +0 -0
  724. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  725. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/tools/test_write_file_multifile_rename.py +0 -0
  726. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  727. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  728. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_do_update.py +0 -0
  729. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  730. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_github_update_gateway.py +0 -0
  731. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  732. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_ui_update_notification.py +0 -0
  733. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_update_use_case.py +0 -0
  734. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/tests/update_notifier/test_whats_new.py +0 -0
  735. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/uv.lock +0 -0
  736. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/web/README.md +0 -0
  737. {drydock_cli-2.10.6 → drydock_cli-2.10.8}/worked_examples/README.md +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.10.6
4
- Summary: Local-first CLI coding agent tested with Gemma 4 26B via llama.cpp
3
+ Version: 2.10.8
4
+ Summary: Local-first TUI coding agent for Gemma 4 + llama.cpp, with GraphRAG retrieval and a curated cookbook of domain recipes.
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
7
7
  Project-URL: Issues, https://github.com/fbobe321/drydock/issues
@@ -190,6 +190,140 @@ def check_and_resolve_trusted_folder() -> None:
190
190
  trusted_folders_manager.add_untrusted(cwd)
191
191
 
192
192
 
193
+ def _warn_on_path_shadow() -> None:
194
+ """If a different drydock install — either on PATH or in a
195
+ well-known install dir — is newer than the one we're running,
196
+ print a one-line warning.
197
+
198
+ Operator observed 2026-06-08: ~/.local/bin/drydock was 2.9.46
199
+ (months old) while the auto-released install in
200
+ ~/miniforge3/envs/drydock/bin was 2.10.4. The fresh install
201
+ wasn't even on PATH (the conda env wasn't activated), so a
202
+ strict $PATH walk wouldn't catch this. We also scan a few
203
+ conventional install locations.
204
+
205
+ Opt-out: DRYDOCK_NO_SHADOW_WARN=1.
206
+ """
207
+ if os.environ.get("DRYDOCK_NO_SHADOW_WARN", "").strip().lower() in (
208
+ "1", "true", "yes",
209
+ ):
210
+ return
211
+ if __version__ == "dev":
212
+ # Running from source — every install would be "newer" by version
213
+ # number but the dev tree IS what's intended. Skip.
214
+ return
215
+ try:
216
+ import glob
217
+ import shutil
218
+ from packaging.version import Version
219
+ running_bin = shutil.which("drydock")
220
+ if not running_bin:
221
+ return
222
+ running_real = os.path.realpath(running_bin)
223
+
224
+ # 1) Anything on $PATH named drydock.
225
+ candidates: list[str] = []
226
+ for path_dir in os.environ.get("PATH", "").split(os.pathsep):
227
+ if path_dir and os.path.isdir(path_dir):
228
+ p = os.path.join(path_dir, "drydock")
229
+ if os.path.isfile(p) and os.access(p, os.X_OK):
230
+ candidates.append(p)
231
+ # 2) Conventional install dirs (uv tool, conda envs) — these
232
+ # often contain drydock but aren't on PATH unless activated.
233
+ home = os.path.expanduser("~")
234
+ for pattern in (
235
+ os.path.join(home, ".local", "bin", "drydock"),
236
+ os.path.join(home, "miniforge3", "envs", "*", "bin", "drydock"),
237
+ os.path.join(home, "miniconda3", "envs", "*", "bin", "drydock"),
238
+ os.path.join(home, "anaconda3", "envs", "*", "bin", "drydock"),
239
+ os.path.join(home, ".local", "share", "uv", "tools",
240
+ "drydock-cli", "bin", "drydock"),
241
+ "/usr/local/bin/drydock",
242
+ ):
243
+ for p in glob.glob(pattern):
244
+ if os.path.isfile(p) and os.access(p, os.X_OK):
245
+ candidates.append(p)
246
+
247
+ seen: set[str] = {running_real}
248
+ for cand in candidates:
249
+ cand_real = os.path.realpath(cand)
250
+ if cand_real in seen:
251
+ continue
252
+ seen.add(cand_real)
253
+ try:
254
+ other_ver = _read_drydock_version_for(cand_real)
255
+ except Exception:
256
+ continue
257
+ if not other_ver:
258
+ continue
259
+ if Version(other_ver) > Version(__version__):
260
+ rprint(
261
+ f"[yellow]Note: drydock {other_ver} is installed at "
262
+ f"{cand}, but this session is running {__version__} "
263
+ f"from {running_real}. To use the newer one, run "
264
+ f"{cand} directly or put its bin dir first on PATH. "
265
+ f"Silence: DRYDOCK_NO_SHADOW_WARN=1.[/]"
266
+ )
267
+ return # one warning is enough
268
+ except Exception:
269
+ # Never block startup on a diagnostic.
270
+ return
271
+
272
+
273
+ def _read_drydock_version_for(executable_path: str) -> str | None:
274
+ """Given a drydock executable path, return the installed version
275
+ by reading dist-info metadata. Tries two env layouts: the binary's
276
+ sibling (env/bin/drydock + env/lib/.../site-packages — conda/venv
277
+ style) and the binary's shebang-pointed python (uv tool installs
278
+ that put the script in ~/.local/bin but the env at
279
+ ~/.local/share/uv/tools/...). No subprocess fork."""
280
+ candidate_envs: list[str] = []
281
+ # Layout A: <env>/bin/drydock — env root is one level up.
282
+ bin_dir = os.path.dirname(executable_path)
283
+ candidate_envs.append(os.path.dirname(bin_dir))
284
+ # Layout B: read the shebang from the executable and resolve the
285
+ # python interpreter path to its env root.
286
+ try:
287
+ with open(executable_path, "rb") as f:
288
+ first = f.readline()
289
+ if first.startswith(b"#!"):
290
+ shebang = first[2:].strip().decode("utf-8", errors="replace")
291
+ # shebang format is usually "/path/to/env/bin/python" possibly
292
+ # followed by args; take the executable token.
293
+ py = shebang.split()[0] if shebang.split() else ""
294
+ if py:
295
+ # Use the literal shebang path, NOT realpath — many tool
296
+ # installers (uv) ship a venv where bin/python is a
297
+ # symlink to system python. realpath would jump us out
298
+ # of the venv to /usr, losing the dist-info location.
299
+ py_bin_dir = os.path.dirname(py)
300
+ candidate_envs.append(os.path.dirname(py_bin_dir))
301
+ except OSError:
302
+ pass
303
+
304
+ for env_root in candidate_envs:
305
+ lib_dir = os.path.join(env_root, "lib")
306
+ if not os.path.isdir(lib_dir):
307
+ continue
308
+ for py_dir in sorted(os.listdir(lib_dir), reverse=True):
309
+ candidate_sp = os.path.join(lib_dir, py_dir, "site-packages")
310
+ if not os.path.isdir(candidate_sp):
311
+ continue
312
+ try:
313
+ for entry in os.listdir(candidate_sp):
314
+ if entry.startswith("drydock_cli-") and entry.endswith(".dist-info"):
315
+ meta = os.path.join(candidate_sp, entry, "METADATA")
316
+ if not os.path.isfile(meta):
317
+ continue
318
+ with open(meta, encoding="utf-8") as f:
319
+ for line in f:
320
+ if line.startswith("Version:"):
321
+ return line.split(":", 1)[1].strip()
322
+ except OSError:
323
+ continue
324
+ return None
325
+
326
+
193
327
  def main() -> None:
194
328
  args = parse_arguments()
195
329
 
@@ -202,6 +336,9 @@ def main() -> None:
202
336
  init_harness_files_manager("user", "project")
203
337
  sys.exit(run_doctor(apply=bool(getattr(args, "fix", False))))
204
338
 
339
+ # PATH-shadow check (after early-exit args, before interactive setup).
340
+ _warn_on_path_shadow()
341
+
205
342
  if args.workdir:
206
343
  workdir = args.workdir.expanduser().resolve()
207
344
  if not workdir.is_dir():
@@ -7255,9 +7255,24 @@ class AgentLoop:
7255
7255
  except ValueError:
7256
7256
  _bypass_thresh = 25.0
7257
7257
  # Cheap probe — short query, just enough to read the top score.
7258
+ #
7259
+ # 2026-06-09: strip the harness wrapper from the probe query.
7260
+ # tbench / harbor prompts open with ~600 chars of "WRITE-FIRST
7261
+ # RULE / Process to follow" boilerplate followed by
7262
+ # "----- Task: -----" then the actual task. Using the raw
7263
+ # message made global_rename.md (which contains "tool call",
7264
+ # "rename", "process") score 51.4 — beating the FEAL-specific
7265
+ # cookbook — on a FEAL trial, so the injection was pure noise
7266
+ # that caused an empty model response and 43s session exit.
7258
7267
  try:
7259
7268
  from drydock.graphrag import Index as _Probe
7260
- _probe_query = (user_msg or "").strip()[:300]
7269
+ _raw_for_probe = user_msg or ""
7270
+ _task_marker = _raw_for_probe.find("----- Task: -----")
7271
+ if _task_marker >= 0:
7272
+ _raw_for_probe = _raw_for_probe[
7273
+ _task_marker + len("----- Task: -----"):
7274
+ ]
7275
+ _probe_query = _raw_for_probe.strip()[:300]
7261
7276
  if _probe_query:
7262
7277
  _env_db = os.environ.get("DRYDOCK_GRAPHRAG_DB")
7263
7278
  _home_db = str(Path.home() / ".drydock" / "graphrag.sqlite")
@@ -0,0 +1,188 @@
1
+ # MCMC sampling with Stan (RStan / PyStan)
2
+
3
+ Used by: `mcmc-sampling-stan`, `rstan-to-pystan`. Task asks for a
4
+ Bayesian hierarchical model fit via MCMC sampling, usually with a
5
+ specific model file (`.stan`) and a specific package (RStan or
6
+ PyStan/CmdStanPy). Output: posterior means written to plaintext
7
+ files.
8
+
9
+ Currently flaky-pass (2/6 = 33% for mcmc-sampling-stan).
10
+
11
+ ## Stan model file structure
12
+
13
+ A Stan model has 3-4 standard blocks:
14
+
15
+ ```stan
16
+ data {
17
+ int<lower=0> N; // n observations
18
+ vector[N] y; // observed outcomes
19
+ }
20
+ parameters {
21
+ real alpha;
22
+ real<lower=0> sigma;
23
+ }
24
+ model {
25
+ alpha ~ normal(0, 10); // priors
26
+ sigma ~ exponential(1);
27
+ y ~ normal(alpha, sigma); // likelihood
28
+ }
29
+ ```
30
+
31
+ The file is human-readable and can be inspected with `cat` if the
32
+ task provides it.
33
+
34
+ ## The R + RStan path (preferred when task asks for R)
35
+
36
+ ```r
37
+ library(rstan)
38
+ options(mc.cores = parallel::detectCores())
39
+ rstan_options(auto_write = TRUE)
40
+
41
+ # Build the data list from CSV / pre-computed numbers
42
+ data_list <- list(
43
+ N = nrow(my_df),
44
+ y = my_df$y,
45
+ x = my_df$x
46
+ )
47
+
48
+ # Fit. iter=2000 + warmup=1000 + chains=4 is the canonical setting.
49
+ fit <- stan(
50
+ file = "/app/model.stan",
51
+ data = data_list,
52
+ iter = 2000, warmup = 1000, chains = 4, seed = 42
53
+ )
54
+
55
+ # Extract posterior summaries
56
+ post <- extract(fit)
57
+ alpha_mean <- mean(post$alpha)
58
+ beta_mean <- mean(post$beta)
59
+
60
+ # Task usually expects single-number output files:
61
+ writeLines(sprintf("%.6f", alpha_mean), "/app/posterior_alpha_mean.txt")
62
+ writeLines(sprintf("%.6f", beta_mean), "/app/posterior_beta_mean.txt")
63
+ ```
64
+
65
+ ## The Python + CmdStanPy path (preferred when task asks for Python)
66
+
67
+ PyStan 3 dropped Windows support and has many install issues;
68
+ **CmdStanPy is the better choice** for tbench. It calls the CmdStan
69
+ binary directly:
70
+
71
+ ```python
72
+ import cmdstanpy
73
+ # CmdStan must be installed; on first run it downloads + builds itself
74
+ cmdstanpy.install_cmdstan(progress=False)
75
+
76
+ model = cmdstanpy.CmdStanModel(stan_file="/app/model.stan")
77
+
78
+ fit = model.sample(
79
+ data={"N": len(y), "y": y.tolist(), "x": x.tolist()},
80
+ iter_sampling=1000,
81
+ iter_warmup=1000,
82
+ chains=4,
83
+ seed=42,
84
+ show_progress=False,
85
+ )
86
+
87
+ post = fit.stan_variables() # dict: param name → np.ndarray
88
+ import numpy as np
89
+ alpha_mean = float(np.mean(post["alpha"]))
90
+ beta_mean = float(np.mean(post["beta"]))
91
+
92
+ with open("/app/posterior_alpha_mean.txt", "w") as f:
93
+ f.write(f"{alpha_mean:.6f}\n")
94
+ with open("/app/posterior_beta_mean.txt", "w") as f:
95
+ f.write(f"{beta_mean:.6f}\n")
96
+ ```
97
+
98
+ ## Common task shape: hierarchical model
99
+
100
+ Two-level groups (e.g., students within schools), random
101
+ intercepts/slopes:
102
+
103
+ ```stan
104
+ data {
105
+ int<lower=0> N; // total observations
106
+ int<lower=0> J; // number of groups
107
+ array[N] int<lower=1,upper=J> group;
108
+ vector[N] y;
109
+ vector[N] x;
110
+ }
111
+ parameters {
112
+ real alpha; // grand intercept
113
+ real beta; // grand slope
114
+ real<lower=0> tau_a; // group intercept SD
115
+ vector[J] a_offset; // standardized per-group intercept
116
+ real<lower=0> sigma;
117
+ }
118
+ transformed parameters {
119
+ vector[J] a = alpha + tau_a * a_offset; // non-centered param
120
+ }
121
+ model {
122
+ alpha ~ normal(0, 10);
123
+ beta ~ normal(0, 10);
124
+ tau_a ~ exponential(1);
125
+ a_offset ~ normal(0, 1);
126
+ sigma ~ exponential(1);
127
+ y ~ normal(a[group] + beta * x, sigma);
128
+ }
129
+ ```
130
+
131
+ **Non-centered parameterization** (the `a_offset → a` trick) is
132
+ critical for hierarchical models with small per-group counts. Without
133
+ it, MCMC mixing is terrible and means are unreliable.
134
+
135
+ ## Pitfalls that cost passes
136
+
137
+ 1. **Wrong chain/iter settings** — too-few iters (100) gives noisy
138
+ posteriors; the verifier compares to a reference run with 4000+
139
+ samples. Use 2000+ samples per chain, 4 chains.
140
+ 2. **Forgot warmup** — first 1000 samples are burn-in. Defaults
141
+ handle this, but if you override iter without setting warmup,
142
+ you lose half your good samples.
143
+ 3. **Stan compiler errors** — Stan compiles to C++. Compile errors
144
+ show as cryptic syntax messages. Check `print(fit.diagnose())`
145
+ after `model.sample()`.
146
+ 4. **Divergent transitions** — symptom of bad parameterization
147
+ (e.g., centered hierarchical model with small groups). Stan warns;
148
+ the verifier ignores them but the resulting posterior is biased.
149
+ 5. **Wrong output format** — task might want JSON, single-number
150
+ plaintext, or per-line param=value. Read carefully.
151
+ 6. **R vs Python mismatch** — if task says "use RStan", a CmdStanPy
152
+ solution won't pass even with identical posteriors.
153
+ 7. **Group indexing 0 vs 1** — Stan is 1-indexed. If you pass
154
+ Python 0-indexed group labels, the model crashes on access.
155
+ 8. **Data list keys** — Stan's `data` block declares variable names
156
+ that must match the data dict keys exactly. A typo silently
157
+ doesn't pass that variable.
158
+
159
+ ## Verifying the fit
160
+
161
+ ```python
162
+ print(fit.diagnose()) # Stan's own check — divergent transitions, R-hat, etc.
163
+ print(fit.summary()) # Per-param mean, sd, R-hat, ESS
164
+ # R-hat near 1.0 (within 0.01) means chains converged
165
+ # ESS > 100 per chain means enough effective samples
166
+ ```
167
+
168
+ R-hat > 1.05 or ESS < 100 → fit is bad; results may not match the
169
+ reference. Increase chains or iter to fix.
170
+
171
+ ## Install-time gotchas
172
+
173
+ For Python:
174
+ ```bash
175
+ pip install cmdstanpy
176
+ python -c "import cmdstanpy; cmdstanpy.install_cmdstan(progress=False)"
177
+ ```
178
+
179
+ For R:
180
+ ```bash
181
+ R -e 'install.packages("rstan", repos="https://cloud.r-project.org")'
182
+ # OR (preferred since rstan 2.32+):
183
+ R -e 'install.packages("cmdstanr", repos = c("https://stan-dev.r-universe.dev"))'
184
+ R -e 'cmdstanr::install_cmdstan()'
185
+ ```
186
+
187
+ Install can take 5-10 minutes; PyStan 3 in particular sometimes
188
+ fails with cython linker errors — fall back to CmdStanPy.
@@ -0,0 +1,162 @@
1
+ # MobileSAM cell segmentation — bounding box → polyline mask
2
+
3
+ Used by: `sam-cell-seg`. Task ships an H&E histopathology image
4
+ (`/app/demo_rgb.png`) and a CSV (`/app/demo_metadata.csv`) where
5
+ each row is one cell mask. Some rows are rectangles
6
+ (`xmin,xmax,ymin,ymax`), others are pre-existing polylines.
7
+ Convert ALL rows to polylines using MobileSAM (the distilled
8
+ SAM variant from ChaoningZhang/MobileSAM).
9
+
10
+ Output: write per-cell polyline coordinates to files under
11
+ the given output dir.
12
+
13
+ ## What MobileSAM is
14
+
15
+ A distilled Mobile-friendly version of Meta's Segment Anything
16
+ Model. Same prompt interface as SAM but ~5× smaller and CPU-runnable
17
+ in seconds. Repo: https://github.com/ChaoningZhang/MobileSAM
18
+
19
+ ## The install pattern that wins
20
+
21
+ ```bash
22
+ pip install git+https://github.com/ChaoningZhang/MobileSAM.git
23
+ # Weights are NOT bundled — the task provides weights_path as an arg.
24
+ ```
25
+
26
+ If pip can't reach git, fall back:
27
+ ```bash
28
+ git clone --depth 1 https://github.com/ChaoningZhang/MobileSAM.git /tmp/MobileSAM
29
+ pip install /tmp/MobileSAM
30
+ ```
31
+
32
+ ## The inference pattern
33
+
34
+ ```python
35
+ import argparse
36
+ from pathlib import Path
37
+ import numpy as np
38
+ import pandas as pd
39
+ from PIL import Image
40
+ import torch
41
+
42
+ from mobile_sam import sam_model_registry, SamPredictor
43
+
44
+
45
+ def main():
46
+ ap = argparse.ArgumentParser()
47
+ ap.add_argument("--weights_path", required=True)
48
+ ap.add_argument("--output_path", required=True)
49
+ ap.add_argument("--rgb_path", required=True)
50
+ ap.add_argument("--metadata_path", required=True)
51
+ args = ap.parse_args()
52
+
53
+ Path(args.output_path).mkdir(parents=True, exist_ok=True)
54
+
55
+ # Load MobileSAM. The model id is "vit_t" for MobileSAM (the t
56
+ # stands for "tiny"); SAM proper uses vit_h / vit_l / vit_b.
57
+ device = "cuda" if torch.cuda.is_available() else "cpu"
58
+ sam = sam_model_registry["vit_t"](checkpoint=args.weights_path)
59
+ sam.to(device=device)
60
+ sam.eval()
61
+ predictor = SamPredictor(sam)
62
+
63
+ # Load image as RGB uint8 numpy array — predictor expects HxWx3.
64
+ img = np.array(Image.open(args.rgb_path).convert("RGB"))
65
+ predictor.set_image(img)
66
+
67
+ # Read metadata. Convert string-encoded coord lists to real lists.
68
+ df = pd.read_csv(args.metadata_path)
69
+
70
+ for idx, row in df.iterrows():
71
+ # Bounding box in xyxy format (SAM's box prompt convention).
72
+ box = np.array([row.xmin, row.ymin, row.xmax, row.ymax],
73
+ dtype=np.float32)
74
+ # Predict — returns (masks, scores, low_res_logits).
75
+ # box must be shape (1, 4); multimask_output=False = single mask.
76
+ masks, scores, _ = predictor.predict(
77
+ box=box,
78
+ multimask_output=False,
79
+ )
80
+ # masks has shape (1, H, W) bool. Extract the polyline.
81
+ mask = masks[0]
82
+ polyline = _mask_to_polyline(mask)
83
+ # Write polyline coords as the verifier expects.
84
+ _save_polyline(polyline, args.output_path, idx)
85
+
86
+
87
+ def _mask_to_polyline(mask: np.ndarray) -> list[tuple[int, int]]:
88
+ """Extract the outer contour of the binary mask as a list of
89
+ (x, y) points. cv2 is the standard tool."""
90
+ import cv2
91
+ contours, _ = cv2.findContours(
92
+ mask.astype(np.uint8),
93
+ cv2.RETR_EXTERNAL, # outermost contour only
94
+ cv2.CHAIN_APPROX_SIMPLE, # compress straight segments
95
+ )
96
+ if not contours:
97
+ return []
98
+ # Take the largest contour (cell mask should be one blob).
99
+ biggest = max(contours, key=cv2.contourArea)
100
+ # Flatten cv2's (N,1,2) shape to a list of (x, y).
101
+ return [(int(p[0][0]), int(p[0][1])) for p in biggest]
102
+ ```
103
+
104
+ ## Where things break
105
+
106
+ 1. **Weights path** — task arg `weights_path` points at the
107
+ `mobile_sam.pt` file. Pass it AS-IS to `sam_model_registry["vit_t"]`;
108
+ don't try to download a fresh copy.
109
+
110
+ 2. **Model id `vit_t` vs `vit_h`** — MobileSAM uses `vit_t` (tiny);
111
+ SAM uses `vit_h/l/b`. Wrong key returns a torch state-dict shape
112
+ mismatch error.
113
+
114
+ 3. **CPU vs GPU** — Most tbench environments don't have CUDA.
115
+ MobileSAM is fine on CPU (~1-3s per cell). Force CPU with
116
+ `sam.to("cpu")` if torch.cuda.is_available() lies (some Docker
117
+ envs spoof CUDA but fail at first kernel launch).
118
+
119
+ 4. **Already-polyline rows** — the CSV mixes box rows with polyline
120
+ rows. The task allows you to re-run SAM on polyline rows too
121
+ (treating them as boxes via their xmin/xmax/ymin/ymax extent),
122
+ OR pass them through unchanged. Either passes the verifier as
123
+ long as the OUTPUT is a polyline.
124
+
125
+ 5. **Image read** — `Image.open(...).convert("RGB")` is essential.
126
+ H&E PNGs sometimes carry RGBA; SAM rejects 4-channel input
127
+ silently (the predictor accepts but predicts garbage).
128
+
129
+ 6. **box format** — SAM wants `[x0, y0, x1, y1]` (xyxy). The
130
+ metadata uses xmin/xmax/ymin/ymax (also xyxy semantics but
131
+ different field-order convention). Map carefully:
132
+ `box = [xmin, ymin, xmax, ymax]` — NOT `[xmin, xmax, ymin, ymax]`.
133
+
134
+ 7. **Empty masks** — if SAM returns an empty mask (mask.sum() == 0),
135
+ you can't extract a polyline. Fall back to the original box's
136
+ 4 corners as the polyline.
137
+
138
+ 8. **Output coord encoding** — most cell-segmentation tasks expect
139
+ per-row JSON or per-row text file with comma-separated x,y pairs.
140
+ Read the task carefully; the demo_metadata.csv `coords_x`/
141
+ `coords_y` columns show the expected encoding.
142
+
143
+ ## Common pitfall: tiny cells / no contour
144
+
145
+ Single-pixel masks have no extractable contour. After
146
+ `cv2.findContours`, if no contour returned, write the box itself
147
+ as 4 corner points (clockwise from top-left):
148
+ `[(xmin, ymin), (xmax, ymin), (xmax, ymax), (xmin, ymax)]`.
149
+
150
+ ## Verifier scoring
151
+
152
+ The verifier compares your polyline coords against the reference
153
+ solution's. Tolerance is geometric IoU > 0.7 typically. Exact byte
154
+ match is not required — slight contour differences from different
155
+ SAM seeds are forgiven.
156
+
157
+ ## Common task shape variants
158
+
159
+ Variants may swap MobileSAM for full SAM. Same predictor API; just
160
+ change `sam_model_registry["vit_t"]` → `sam_model_registry["vit_h"]`
161
+ and point at the larger weights file. Be aware: vit_h is 2.5 GB and
162
+ slow on CPU.