drydock-cli 2.9.105__tar.gz → 2.9.109__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 (715) hide show
  1. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/PKG-INFO +1 -1
  2. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/agent_loop.py +59 -58
  3. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/gemma4_slim.md +8 -24
  4. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/pyproject.toml +1 -1
  5. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_loop_regressions_2026_06_06.py +211 -5
  6. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/uv.lock +1 -1
  7. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/.gitignore +0 -0
  8. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/LICENSE +0 -0
  9. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/NOTICE +0 -0
  10. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/README.md +0 -0
  11. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/distribution/zed/LICENSE +0 -0
  12. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/docs/README.md +0 -0
  13. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/__init__.py +0 -0
  14. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/__main__.py +0 -0
  15. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/__init__.py +0 -0
  16. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/acp_agent_loop.py +0 -0
  17. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/acp_logger.py +0 -0
  18. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/entrypoint.py +0 -0
  19. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/__init__.py +0 -0
  20. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/base.py +0 -0
  21. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/builtins/bash.py +0 -0
  22. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/builtins/read_file.py +0 -0
  23. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/builtins/search_replace.py +0 -0
  24. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/builtins/todo.py +0 -0
  25. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/builtins/write_file.py +0 -0
  26. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/tools/session_update.py +0 -0
  27. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/acp/utils.py +0 -0
  28. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/__init__.py +0 -0
  29. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/detectors.py +0 -0
  30. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/detectors_proposed.py +0 -0
  31. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/history.py +0 -0
  32. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/interventions.py +0 -0
  33. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/llm_analyzer.py +0 -0
  34. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/metrics.py +0 -0
  35. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/opus_escalator.py +0 -0
  36. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/persistence.py +0 -0
  37. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/policy.py +0 -0
  38. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/proposer.py +0 -0
  39. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/stager.py +0 -0
  40. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/task_classifier.py +0 -0
  41. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/tuning.py +0 -0
  42. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/validator.py +0 -0
  43. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/admiral/worker.py +0 -0
  44. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/__init__.py +0 -0
  45. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/autocompletion/__init__.py +0 -0
  46. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/autocompletion/base.py +0 -0
  47. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/autocompletion/path_completion.py +0 -0
  48. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/autocompletion/slash_command.py +0 -0
  49. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/cli.py +0 -0
  50. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/clipboard.py +0 -0
  51. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/commands.py +0 -0
  52. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/entrypoint.py +0 -0
  53. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/fix_windows_path.py +0 -0
  54. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/history_manager.py +0 -0
  55. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  56. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  57. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  58. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/terminal_setup.py +0 -0
  59. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/__init__.py +0 -0
  60. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  61. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/app.py +0 -0
  62. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/app.tcss +0 -0
  63. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/external_editor.py +0 -0
  64. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  65. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  66. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  67. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  68. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  69. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  70. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  71. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  72. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  73. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  74. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  75. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  76. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  77. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  78. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  79. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  80. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  81. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  82. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  83. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  84. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  85. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  86. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  87. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  88. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  89. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  90. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  91. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  92. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  93. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  94. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  95. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  96. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  97. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  98. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  99. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  100. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  101. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/windowing/history.py +0 -0
  102. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  103. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/textual_ui/windowing/state.py +0 -0
  104. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/__init__.py +0 -0
  105. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  106. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  107. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  108. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  109. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  110. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/update.py +0 -0
  111. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/cli/update_notifier/whats_new.py +0 -0
  112. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/__init__.py +0 -0
  113. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/agents/__init__.py +0 -0
  114. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/agents/manager.py +0 -0
  115. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/agents/models.py +0 -0
  116. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/auth/__init__.py +0 -0
  117. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/auth/crypto.py +0 -0
  118. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/auth/github.py +0 -0
  119. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/auto_solve.py +0 -0
  120. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/__init__.py +0 -0
  121. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/completers.py +0 -0
  122. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  123. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  124. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  125. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  126. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  127. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/fuzzy.py +0 -0
  128. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/path_prompt.py +0 -0
  129. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  130. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/build_orchestrator.py +0 -0
  131. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/checkpoint.py +0 -0
  132. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/__init__.py +0 -0
  133. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/__main__.py +0 -0
  134. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/classifier.py +0 -0
  135. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/dispatcher.py +0 -0
  136. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/rules.py +0 -0
  137. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/classifier/signal.py +0 -0
  138. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/__init__.py +0 -0
  139. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/_dotenv.py +0 -0
  140. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/_settings.py +0 -0
  141. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/doctor.py +0 -0
  142. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/harness_files/__init__.py +0 -0
  143. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  144. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/harness_files/_paths.py +0 -0
  145. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/local_detect.py +0 -0
  146. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/config/migrate.py +0 -0
  147. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/constraint_extract.py +0 -0
  148. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/constraint_hint.py +0 -0
  149. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/consultant.py +0 -0
  150. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/context_recovery.py +0 -0
  151. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/drydock_states.py +0 -0
  152. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/goal.py +0 -0
  153. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/hooks.py +0 -0
  154. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/__init__.py +0 -0
  155. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/anthropic.py +0 -0
  156. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/base.py +0 -0
  157. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/factory.py +0 -0
  158. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/generic.py +0 -0
  159. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/mistral.py +0 -0
  160. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  161. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/backend/vertex.py +0 -0
  162. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/exceptions.py +0 -0
  163. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/format.py +0 -0
  164. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/grammar/__init__.py +0 -0
  165. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/grammar/_llamacpp_converter.py +0 -0
  166. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/grammar/policy.py +0 -0
  167. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/grammar/policy_union.py +0 -0
  168. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/message_utils.py +0 -0
  169. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/llm/types.py +0 -0
  170. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/logger.py +0 -0
  171. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/middleware.py +0 -0
  172. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/output_formatters.py +0 -0
  173. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/paths/__init__.py +0 -0
  174. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/paths/_drydock_home.py +0 -0
  175. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/paths/_local_config_walk.py +0 -0
  176. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/paths/conventions.py +0 -0
  177. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/plan_session.py +0 -0
  178. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/plugins.py +0 -0
  179. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/programmatic.py +0 -0
  180. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/__init__.py +0 -0
  181. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/builder.md +0 -0
  182. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/cli.md +0 -0
  183. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/compact.md +0 -0
  184. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/dangerous_directory.md +0 -0
  185. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/diagnostic.md +0 -0
  186. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/explore.md +0 -0
  187. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/gemma4.md +0 -0
  188. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/gemma4_math.md +0 -0
  189. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/planner.md +0 -0
  190. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/project_context.md +0 -0
  191. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/prompts/tests.md +0 -0
  192. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/proxy_setup.py +0 -0
  193. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/agent_memory.py +0 -0
  194. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/checkpoints.py +0 -0
  195. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/session_loader.py +0 -0
  196. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/session_logger.py +0 -0
  197. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/session_migration.py +0 -0
  198. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session/state_file.py +0 -0
  199. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/session_checker.py +0 -0
  200. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/skills/__init__.py +0 -0
  201. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/skills/manager.py +0 -0
  202. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/skills/models.py +0 -0
  203. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/skills/parser.py +0 -0
  204. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/slug.py +0 -0
  205. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/spec_check.py +0 -0
  206. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/steering_hook.py +0 -0
  207. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/system_prompt.py +0 -0
  208. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/telemetry/__init__.py +0 -0
  209. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/telemetry/send.py +0 -0
  210. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/teleport/errors.py +0 -0
  211. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/teleport/git.py +0 -0
  212. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/teleport/nuage.py +0 -0
  213. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/teleport/teleport.py +0 -0
  214. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/teleport/types.py +0 -0
  215. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/base.py +0 -0
  216. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/_task_manager.py +0 -0
  217. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  218. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  219. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/bash.py +0 -0
  220. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  221. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/count_tool.py +0 -0
  222. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/cron.py +0 -0
  223. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  224. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/glob_tool.py +0 -0
  225. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/grep.py +0 -0
  226. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  227. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  228. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/logic_tool.py +0 -0
  229. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/lsp.py +0 -0
  230. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/math_tool.py +0 -0
  231. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  232. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
  233. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/memory_tool.py +0 -0
  234. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  235. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  236. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/powershell.py +0 -0
  237. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prolog_tool.py +0 -0
  238. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  239. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  240. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  241. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  242. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  243. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  244. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  245. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  246. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  247. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  248. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  249. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  250. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  251. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  252. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  253. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/task.md +0 -0
  254. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  255. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  256. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  257. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  258. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  259. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  260. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  261. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/read_file.py +0 -0
  262. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/retrieve.py +0 -0
  263. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/search_replace.py +0 -0
  264. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/set_tool.py +0 -0
  265. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/solve_tool.py +0 -0
  266. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/stats_tool.py +0 -0
  267. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/task.py +0 -0
  268. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/todo.py +0 -0
  269. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/tool_search.py +0 -0
  270. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/units_tool.py +0 -0
  271. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/verify_tool.py +0 -0
  272. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/webfetch.py +0 -0
  273. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/websearch.py +0 -0
  274. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/worktree.py +0 -0
  275. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/builtins/write_file.py +0 -0
  276. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/injection_guard.py +0 -0
  277. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/manager.py +0 -0
  278. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/mcp/__init__.py +0 -0
  279. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/mcp/registry.py +0 -0
  280. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/mcp/tools.py +0 -0
  281. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/mcp_sampling.py +0 -0
  282. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/ui.py +0 -0
  283. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/tools/utils.py +0 -0
  284. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/trusted_folders.py +0 -0
  285. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/types.py +0 -0
  286. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/core/utils.py +0 -0
  287. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/__init__.py +0 -0
  288. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/__main__.py +0 -0
  289. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/gap_detector.py +0 -0
  290. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/ingest.py +0 -0
  291. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/item.py +0 -0
  292. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/queue.py +0 -0
  293. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/curiosity/surprise.py +0 -0
  294. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/__init__.py +0 -0
  295. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/__main__.py +0 -0
  296. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/code_indexer.py +0 -0
  297. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/retriever.py +0 -0
  298. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/storage.py +0 -0
  299. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/graphrag/text_indexer.py +0 -0
  300. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/__init__.py +0 -0
  301. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/base.py +0 -0
  302. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/onboarding.tcss +0 -0
  303. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/screens/__init__.py +0 -0
  304. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/screens/api_key.py +0 -0
  305. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/screens/choice.py +0 -0
  306. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/screens/local_model.py +0 -0
  307. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/onboarding/screens/welcome.py +0 -0
  308. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  309. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  310. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/__init__.py +0 -0
  311. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/api-design/SKILL.md +0 -0
  312. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/audit-tests/SKILL.md +0 -0
  313. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/batch/SKILL.md +0 -0
  314. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/checklist/SKILL.md +0 -0
  315. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/commit-code/SKILL.md +0 -0
  316. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  317. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/context-summary/SKILL.md +0 -0
  318. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/create-presentation/SKILL.md +0 -0
  319. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/deep-research/SKILL.md +0 -0
  320. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/deploy/SKILL.md +0 -0
  321. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/diff-review/SKILL.md +0 -0
  322. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/doc-gen/SKILL.md +0 -0
  323. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/explain-code/SKILL.md +0 -0
  324. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/explore-code/SKILL.md +0 -0
  325. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/fix-issue/SKILL.md +0 -0
  326. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/git-ops/SKILL.md +0 -0
  327. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/init-project/SKILL.md +0 -0
  328. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/investigate/SKILL.md +0 -0
  329. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/logic/SKILL.md +0 -0
  330. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  331. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/loop/SKILL.md +0 -0
  332. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/migrate/SKILL.md +0 -0
  333. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/perf-analyze/SKILL.md +0 -0
  334. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/plan-impl/SKILL.md +0 -0
  335. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/pr-review/SKILL.md +0 -0
  336. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/prove/SKILL.md +0 -0
  337. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/refactor/SKILL.md +0 -0
  338. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/regex-help/SKILL.md +0 -0
  339. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/review/SKILL.md +0 -0
  340. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/security-review/SKILL.md +0 -0
  341. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/ship/SKILL.md +0 -0
  342. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/simplify/SKILL.md +0 -0
  343. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/strong-tests/SKILL.md +0 -0
  344. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/skills/test-verify/SKILL.md +0 -0
  345. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/__init__.py +0 -0
  346. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/__main__.py +0 -0
  347. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/applier.py +0 -0
  348. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/config.py +0 -0
  349. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/registry.py +0 -0
  350. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sandbox.py +0 -0
  351. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sidecar/__init__.py +0 -0
  352. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sidecar/header_parser.py +0 -0
  353. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sidecar/hooks.py +0 -0
  354. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sidecar/loader.py +0 -0
  355. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/sidecar/server.py +0 -0
  356. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/train/__init__.py +0 -0
  357. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/train/capture.py +0 -0
  358. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/train/compute_vector.py +0 -0
  359. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/train/extract_pairs.py +0 -0
  360. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/train/scan_sessions.py +0 -0
  361. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/steering/vectors.py +0 -0
  362. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/drydock/whats_new.md +0 -0
  363. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/install_tests/README.md +0 -0
  364. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/install_tests/publish/README.md +0 -0
  365. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/install_tests/windows/README.md +0 -0
  366. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/scripts/README.md +0 -0
  367. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/scripts/_archived_eval_harness/README.md +0 -0
  368. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/scripts/llm/README.md +0 -0
  369. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/__init__.py +0 -0
  370. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/conftest.py +0 -0
  371. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_acp.py +0 -0
  372. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_agent_thought.py +0 -0
  373. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_bash.py +0 -0
  374. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_compact_session_updates.py +0 -0
  375. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_content.py +0 -0
  376. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_initialize.py +0 -0
  377. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_list_sessions.py +0 -0
  378. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_load_session.py +0 -0
  379. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_multi_session.py +0 -0
  380. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_new_session.py +0 -0
  381. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_proxy_setup_acp.py +0 -0
  382. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_read_file.py +0 -0
  383. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_search_replace.py +0 -0
  384. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_set_config_option.py +0 -0
  385. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_set_mode.py +0 -0
  386. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_set_model.py +0 -0
  387. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_tool_call_session_update.py +0 -0
  388. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_utils.py +0 -0
  389. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/acp/test_write_file.py +0 -0
  390. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/conftest.py +0 -0
  391. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_file_indexer.py +0 -0
  392. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_fuzzy.py +0 -0
  393. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  394. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  395. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_path_completion_controller.py +0 -0
  396. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  397. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_slash_command_controller.py +0 -0
  398. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  399. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/__init__.py +0 -0
  400. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/data/__init__.py +0 -0
  401. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/data/fireworks.py +0 -0
  402. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/data/mistral.py +0 -0
  403. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/test_anthropic_adapter.py +0 -0
  404. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/test_backend.py +0 -0
  405. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  406. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/test_reasoning_adapter.py +0 -0
  407. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  408. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  409. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  410. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  411. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_bell_notifications.py +0 -0
  412. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_braille_renderer.py +0 -0
  413. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_clipboard.py +0 -0
  414. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_commands.py +0 -0
  415. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_copy_shortcuts.py +0 -0
  416. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_external_editor.py +0 -0
  417. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_no_markup_static.py +0 -0
  418. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_question_app.py +0 -0
  419. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_spinner.py +0 -0
  420. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_switching_mode.py +0 -0
  421. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  422. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  423. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_ui_session_resume.py +0 -0
  424. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/test_ui_skill_dispatch.py +0 -0
  425. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/textual_ui/__init__.py +0 -0
  426. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/cli/textual_ui/test_session_picker.py +0 -0
  427. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/conftest.py +0 -0
  428. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_agents.py +0 -0
  429. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_auth_crypto.py +0 -0
  430. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_auth_github.py +0 -0
  431. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_config_load_dotenv.py +0 -0
  432. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_config_paths.py +0 -0
  433. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_config_resolution.py +0 -0
  434. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_file_logging.py +0 -0
  435. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_plan_session.py +0 -0
  436. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_proxy_setup.py +0 -0
  437. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_slug.py +0 -0
  438. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_telemetry_send.py +0 -0
  439. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_teleport_git.py +0 -0
  440. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_teleport_nuage.py +0 -0
  441. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_teleport_service.py +0 -0
  442. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_trusted_folders.py +0 -0
  443. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/core/test_utils.py +0 -0
  444. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/common.py +0 -0
  445. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/conftest.py +0 -0
  446. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/mock_server.py +0 -0
  447. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  448. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/test_cli_tui_streaming.py +0 -0
  449. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  450. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/fixtures/doc_qa_system_prd.md +0 -0
  451. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/mock/__init__.py +0 -0
  452. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/mock/mock_backend_factory.py +0 -0
  453. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/mock/mock_entrypoint.py +0 -0
  454. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/mock/utils.py +0 -0
  455. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/onboarding/test_run_onboarding.py +0 -0
  456. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/onboarding/test_ui_onboarding.py +0 -0
  457. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/session/test_session_loader.py +0 -0
  458. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/session/test_session_logger.py +0 -0
  459. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/session/test_session_migration.py +0 -0
  460. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/skills/conftest.py +0 -0
  461. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/skills/test_manager.py +0 -0
  462. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/skills/test_models.py +0 -0
  463. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/skills/test_parser.py +0 -0
  464. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  465. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  466. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  467. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  468. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  469. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  470. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  471. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  472. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  473. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  474. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  475. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  476. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  477. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  478. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  479. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  480. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  481. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  482. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  483. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  484. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  485. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  486. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  487. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  488. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  489. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  490. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  491. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  492. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  493. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  494. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  495. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  496. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  497. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  498. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  499. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  500. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  501. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  502. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  503. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  504. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  505. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  506. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  507. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  508. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  509. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  510. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  511. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  512. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  513. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  514. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  515. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  516. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  517. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  518. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  519. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  520. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  521. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  522. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  523. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  524. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/base_snapshot_test_app.py +0 -0
  525. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/conftest.py +0 -0
  526. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/snap_compare.py +0 -0
  527. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  528. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  529. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  530. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  531. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  532. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  533. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  534. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  535. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  536. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  537. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  538. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  539. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  540. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  541. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/stress/__init__.py +0 -0
  542. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/stress/test_io_thrash.py +0 -0
  543. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/stubs/fake_backend.py +0 -0
  544. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/stubs/fake_client.py +0 -0
  545. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/stubs/fake_tool.py +0 -0
  546. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral.py +0 -0
  547. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  548. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_intervention_outcome.py +0 -0
  549. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_phase3.py +0 -0
  550. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_proposed.py +0 -0
  551. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_session_id.py +0 -0
  552. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_admiral_struggle_dedup.py +0 -0
  553. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_auto_compact.py +0 -0
  554. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_backend.py +0 -0
  555. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_observer_streaming.py +0 -0
  556. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_stats.py +0 -0
  557. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_tasks.py +0 -0
  558. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agent_tool_call.py +0 -0
  559. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_agents.py +0 -0
  560. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_algebra_tool.py +0 -0
  561. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_api_error_recovery.py +0 -0
  562. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_approval_modal_stray_keys.py +0 -0
  563. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  564. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_auto_solve.py +0 -0
  565. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_build.py +0 -0
  566. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_debug.py +0 -0
  567. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_multiagent.py +0 -0
  568. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_prd.py +0 -0
  569. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_prd_extended.py +0 -0
  570. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_tools.py +0 -0
  571. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_bank_update.py +0 -0
  572. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_build_projects.py +0 -0
  573. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_checkpoint.py +0 -0
  574. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_chemistry_tool.py +0 -0
  575. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_classifier.py +0 -0
  576. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_cli_programmatic_preload.py +0 -0
  577. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_config_migration.py +0 -0
  578. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_constraint_extract.py +0 -0
  579. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_constraint_hint.py +0 -0
  580. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_context_recovery.py +0 -0
  581. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_count_tool.py +0 -0
  582. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_curiosity.py +0 -0
  583. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_current_bugs.py +0 -0
  584. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_dispatch_report.py +0 -0
  585. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_dispatcher.py +0 -0
  586. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_drydock_regression.py +0 -0
  587. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_drydock_tasks.py +0 -0
  588. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  589. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_full_regression.py +0 -0
  590. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_gemma4_anti_loop_migration.py +0 -0
  591. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_gemma4_tool_filter.py +0 -0
  592. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_goal.py +0 -0
  593. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_grammar.py +0 -0
  594. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_graphrag.py +0 -0
  595. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_graphrag_worked_examples.py +0 -0
  596. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_hallucinated_tool_suppression.py +0 -0
  597. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_history_manager.py +0 -0
  598. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_hle_aggregate.py +0 -0
  599. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_integration.py +0 -0
  600. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_issue_fixes.py +0 -0
  601. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_linear_algebra_tool.py +0 -0
  602. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_local_detect.py +0 -0
  603. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_logic_tool.py +0 -0
  604. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_loop_detection.py +0 -0
  605. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_math_docs_lazy_injection.py +0 -0
  606. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_math_tool.py +0 -0
  607. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_mcp_settings.py +0 -0
  608. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_mcp_stdio_command_normalization.py +0 -0
  609. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_memory_tool.py +0 -0
  610. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_message_id.py +0 -0
  611. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_message_merging.py +0 -0
  612. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_middleware.py +0 -0
  613. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_multi_agent.py +0 -0
  614. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_number_theory_tool.py +0 -0
  615. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_prolog_tool.py +0 -0
  616. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_read_file_not_found_listing.py +0 -0
  617. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_read_file_notebook_slim.py +0 -0
  618. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_real_failures.py +0 -0
  619. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_real_issues.py +0 -0
  620. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_real_workflow.py +0 -0
  621. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_reasoning_content.py +0 -0
  622. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_rejudge_hle.py +0 -0
  623. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_retrieval_consumer.py +0 -0
  624. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_retrieve_project_detection.py +0 -0
  625. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_retrieve_tool.py +0 -0
  626. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_safe_parse_tool_args.py +0 -0
  627. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_search_replace_args_not_truncated.py +0 -0
  628. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_search_replace_syntax_rollback.py +0 -0
  629. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_session_log_event.py +0 -0
  630. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_session_publish_on_resume.py +0 -0
  631. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_set_tool.py +0 -0
  632. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_smoke.py +0 -0
  633. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_solve_tool.py +0 -0
  634. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_specialist_math_tools_hidden.py +0 -0
  635. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_stats_tool.py +0 -0
  636. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering.py +0 -0
  637. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_capture.py +0 -0
  638. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_compute_vector.py +0 -0
  639. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_extract_pairs.py +0 -0
  640. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_hook.py +0 -0
  641. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  642. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_steering_sidecar_hooks.py +0 -0
  643. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_system_prompt.py +0 -0
  644. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_tagged_text.py +0 -0
  645. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_task_complete_nudge.py +0 -0
  646. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_tool_args.py +0 -0
  647. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_tool_call_loops_regression_suite.py +0 -0
  648. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_tool_stop_injected_scope.py +0 -0
  649. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_truncate_args_valid_json.py +0 -0
  650. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_truncated_arg_path_hint.py +0 -0
  651. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_truncated_search_replace_escalation.py +0 -0
  652. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_truncated_write_escalation.py +0 -0
  653. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_ui_external_editor.py +0 -0
  654. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_ui_input_history.py +0 -0
  655. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_units_tool.py +0 -0
  656. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_user_issues.py +0 -0
  657. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_validation_error_scrub.py +0 -0
  658. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_verify_tool.py +0 -0
  659. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_wall_of_text_rescue.py +0 -0
  660. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_workloads.py +0 -0
  661. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/test_write_file_missing_path.py +0 -0
  662. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/testbank_helpers.py +0 -0
  663. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_ask_user_question.py +0 -0
  664. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash.py +0 -0
  665. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  666. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_consec_empty_search.py +0 -0
  667. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  668. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  669. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  670. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  671. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  672. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  673. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  674. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_exit_plan_mode.py +0 -0
  675. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_grep.py +0 -0
  676. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  677. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_invoke_context.py +0 -0
  678. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  679. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_manager_get_tool_config.py +0 -0
  680. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_mcp.py +0 -0
  681. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_mcp_sampling.py +0 -0
  682. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_pre_rename_hook.py +0 -0
  683. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  684. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  685. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_read_file_directory.py +0 -0
  686. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_read_file_limit_truncation.py +0 -0
  687. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_append_fallback.py +0 -0
  688. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_dir_path.py +0 -0
  689. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_empty_content.py +0 -0
  690. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_file_not_found.py +0 -0
  691. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  692. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_hard_stop.py +0 -0
  693. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_malformed_block.py +0 -0
  694. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  695. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_placeholder.py +0 -0
  696. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  697. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_task.py +0 -0
  698. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_ui_bash_execution.py +0 -0
  699. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_webfetch.py +0 -0
  700. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_websearch.py +0 -0
  701. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  702. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_write_file_missing_main_module.py +0 -0
  703. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  704. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/tools/test_write_file_multifile_rename.py +0 -0
  705. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  706. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  707. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_do_update.py +0 -0
  708. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  709. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_github_update_gateway.py +0 -0
  710. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  711. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_ui_update_notification.py +0 -0
  712. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_update_use_case.py +0 -0
  713. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/tests/update_notifier/test_whats_new.py +0 -0
  714. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/web/README.md +0 -0
  715. {drydock_cli-2.9.105 → drydock_cli-2.9.109}/worked_examples/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.9.105
3
+ Version: 2.9.109
4
4
  Summary: Local-first CLI coding agent — tested with Gemma 4 26B via llama.cpp
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -3242,65 +3242,66 @@ class AgentLoop:
3242
3242
  )
3243
3243
  return
3244
3244
 
3245
- # 2026-06-07 Pre-flight: prune duplicate write_file history (v2.9.104).
3246
- # User session 2026-06-06 v2.9.95 batch `sam-cell-seg` trial:
3247
- # 22 identical writes to `/app/conversation_summary.smd` with the
3248
- # same sha8=d3bedbf3 content. The existing write_file dedup is
3249
- # advisory-only (per feedback_no_tool_errors_for_loop_detection.md)
3250
- # and Gemma 4 ignores the advisory. Same architectural fix as the
3251
- # consecutive-task preflight: drop the old duplicate calls from
3252
- # history so the model's next turn sees a cleaner context, with
3253
- # only the most recent attempt visible. Tool itself stays advisory.
3254
- if tool_call.tool_name == "write_file":
3255
- try:
3256
- cur_path = (
3257
- tool_call.args_dict.get("path")
3258
- or tool_call.args_dict.get("file_path")
3259
- or ""
3245
+ # 2026-06-07 Pre-flight: prune duplicate tool-call history
3246
+ # (v2.9.104 write_file-specific; v2.9.108 generalized to any tool).
3247
+ # Multiple user-observed loops where Gemma 4 emits the EXACT same
3248
+ # tool name + args 5+ times in a row, each producing the same
3249
+ # no-op result, ignoring the advisory:
3250
+ # 2026-06-06 v2.9.95 sam-cell-seg: 22 writes to same path, same
3251
+ # content (sha8=d3bedbf3).
3252
+ # 2026-06-06 v2.9.95 distribution-search: 3 identical
3253
+ # solve(p1:Real, p2:Real, conclusion:True, objective:"") calls
3254
+ # ending the trial.
3255
+ # Tool-level dedup is advisory-only by design (per memory file
3256
+ # feedback_no_tool_errors_for_loop_detection.md) and the model
3257
+ # ignores advisories.
3258
+ #
3259
+ # Architectural fix: at preflight, if the current call is the
3260
+ # 5th+ identical (same name + same args) call in history, prune
3261
+ # the older N-1 duplicates (and their tool-result siblings) so
3262
+ # the model's next turn sees a clean context. Exact-args match
3263
+ # only — partial overlap doesn't count, since e.g. read_file
3264
+ # with different offsets is legitimate progress.
3265
+ try:
3266
+ cur_name = tool_call.tool_name
3267
+ cur_args_json = json.dumps(
3268
+ tool_call.args_dict, sort_keys=True, default=str
3269
+ )
3270
+ dup_indices: list[int] = []
3271
+ for i, m in enumerate(self.messages):
3272
+ if m.role != Role.assistant or not m.tool_calls:
3273
+ continue
3274
+ for tc in m.tool_calls:
3275
+ if tc.function.name != cur_name:
3276
+ continue
3277
+ try:
3278
+ a = json.loads(tc.function.arguments or "{}")
3279
+ except Exception:
3280
+ continue
3281
+ if json.dumps(a, sort_keys=True, default=str) == cur_args_json:
3282
+ dup_indices.append(i)
3283
+ break
3284
+ dup_count = len(dup_indices)
3285
+ if dup_count >= 5 and len(dup_indices) > 1:
3286
+ to_drop = set()
3287
+ for idx in dup_indices[:-1]:
3288
+ to_drop.add(idx)
3289
+ if idx + 1 < len(self.messages):
3290
+ next_m = self.messages[idx + 1]
3291
+ if next_m.role == Role.tool:
3292
+ to_drop.add(idx + 1)
3293
+ kept = [
3294
+ m for i, m in enumerate(self.messages)
3295
+ if i not in to_drop
3296
+ ]
3297
+ self.messages.reset(kept)
3298
+ logger.warning(
3299
+ "[PREFLIGHT-DUP] pruned %d duplicate %s calls "
3300
+ "(%d identical attempts in history)",
3301
+ len(to_drop), cur_name, dup_count,
3260
3302
  )
3261
- cur_content = tool_call.args_dict.get("content", "")
3262
- if cur_path and isinstance(cur_content, str):
3263
- dup_count = 0
3264
- dup_indices: list[int] = []
3265
- for i, m in enumerate(self.messages):
3266
- if m.role != Role.assistant or not m.tool_calls:
3267
- continue
3268
- for tc in m.tool_calls:
3269
- if tc.function.name != "write_file":
3270
- continue
3271
- try:
3272
- a = json.loads(tc.function.arguments or "{}")
3273
- except Exception:
3274
- continue
3275
- ap = a.get("path") or a.get("file_path") or ""
3276
- ac = a.get("content", "")
3277
- if ap == cur_path and ac == cur_content:
3278
- dup_count += 1
3279
- dup_indices.append(i)
3280
- break
3281
- if dup_count >= 5 and len(dup_indices) > 1:
3282
- # Drop all but the most recent prior duplicate.
3283
- # Also drop the tool result that immediately follows.
3284
- to_drop = set()
3285
- for idx in dup_indices[:-1]:
3286
- to_drop.add(idx)
3287
- if idx + 1 < len(self.messages):
3288
- next_m = self.messages[idx + 1]
3289
- if next_m.role == Role.tool:
3290
- to_drop.add(idx + 1)
3291
- kept = [
3292
- m for i, m in enumerate(self.messages)
3293
- if i not in to_drop
3294
- ]
3295
- self.messages.reset(kept)
3296
- logger.warning(
3297
- "[PREFLIGHT-WRITE-DUP] pruned %d duplicate "
3298
- "write_file calls to %r (%d identical "
3299
- "attempts in history)",
3300
- len(to_drop), cur_path, dup_count,
3301
- )
3302
- except Exception as _e:
3303
- logger.debug("[PREFLIGHT-WRITE-DUP] failed: %s", _e)
3303
+ except Exception as _e:
3304
+ logger.debug("[PREFLIGHT-DUP] failed: %s", _e)
3304
3305
 
3305
3306
  # 2026-06-05 Pre-flight path validation. Operator: "why can't tool
3306
3307
  # calls check the right pathing BEFORE doing it?" Right answer.
@@ -1,16 +1,16 @@
1
1
  You are DryDock, a CLI coding agent. You write code, fix bugs, and build projects.
2
2
 
3
- ACT IMMEDIATELY. For a user coding request (fix, add, implement, build, change, update): begin with a tool call (read_file, write_file, search_replace, bash with a real command, etc.) — not a planning paragraph. Do NOT explain or ask first when the next step is clear. Call a tool NOW. This applies to EVERY new user message that asks for code work.
3
+ ACT IMMEDIATELY. For a user coding request (fix, add, implement, build, change, update): begin with a tool call (read_file, write_file, bash with a real command, etc.) — not a planning paragraph. Do NOT explain or ask first when the next step is clear. Call a tool NOW. This applies to EVERY new user message that asks for code work.
4
4
 
5
- EXCEPTION: if you genuinely do not know which tool to use, emit a SHORT (1-2 line) text response — NEVER a bash call containing only a comment like `# I need to use search_replace`. A comment-as-bash is worse than a sentence of text. When in doubt: write one sentence of text, then call the right tool on the next turn.
5
+ EXCEPTION: if you genuinely do not know which tool to use, emit a SHORT (1-2 line) text response — NEVER a bash call containing only a comment. A comment-as-bash is worse than a sentence of text. When in doubt: write one sentence of text, then call the right tool on the next turn.
6
6
 
7
7
  When ANY bash command (including `python3 -c` inline scripts) returns IDENTICAL output 3 or more times in a row: STOP repeating it. Switch tools: use read_file to read file contents, grep to search for symbols, write_file to create missing files. Repeating the same bash command will never produce a different result.
8
8
 
9
9
  When running tests (pytest, unittest, cargo test, go test, npm test) and you see IDENTICAL failure output 3 or more times in a row: STOP re-running. Identical failures mean the bug is in your source code — the test will not pass on its own. (1) read the failure message and locate the specific file+line, (2) use grep or cat to inspect the failing code, (3) fix the root cause in the source file, (4) then run once to verify.
10
10
 
11
- Your tools: read_file, write_file, search_replace, mechanical_rename, grep, glob, bash, task, web_search, web_fetch, retrieve, math, count, memory, verify, logic, algebra, number_theory, set, linear_algebra, stats, units, chemistry, solve, prolog.
11
+ Your tools: read_file, write_file, mechanical_rename, grep, glob, bash, lsp, web_search, web_fetch, retrieve, math, verify, count, logic, algebra, number_theory, set, linear_algebra, stats, units, chemistry, solve, prolog.
12
12
 
13
- For renaming an identifier across multiple files (e.g. "rename `units` to `quantity` everywhere", "introduce a Backend ABC and have both backends inherit"), prefer `mechanical_rename(old_name, new_name, scope, kind)` over a search_replace cascade — it applies the rename atomically across all .py files in scope, runs pytest, and rolls back if the suite goes red. `kind` is one of: `function`, `class`, `field` (field also rewrites dict-key string literals), or `auto`.
13
+ For renaming an identifier across multiple files (e.g. "rename `units` to `quantity` everywhere", "introduce a Backend ABC and have both backends inherit"), prefer `mechanical_rename(old_name, new_name, scope, kind)` over manual edits — it applies the rename atomically across all .py files in scope, runs pytest, and rolls back if the suite goes red. `kind` is one of: `function`, `class`, `field` (field also rewrites dict-key string literals), or `auto`.
14
14
 
15
15
  CURIOSITY — default posture is "investigate, then assert":
16
16
  - If the user message names a thing you don't have context for (paper title, library, API, identifier, project-specific term), your FIRST tool call is `retrieve(query="<the term>")`. Not text. Not web_search. Retrieve.
@@ -18,10 +18,10 @@ CURIOSITY — default posture is "investigate, then assert":
18
18
  - When retrieved evidence contradicts what you were about to say, prefer the evidence and say so.
19
19
  - Don't ask the user to clarify before you've tried one investigation pass. Read the obvious files; retrieve the obvious terms.
20
20
  - NEVER say "X is already implemented" without first calling read_file or bash ls to confirm.
21
- - Writing "I created/wrote/implemented X" in text does NOT create any file. Only a write_file or search_replace tool call does.
21
+ - Writing "I created/wrote/implemented X" in text does NOT create any file. Only a write_file tool call does.
22
22
  - NEVER announce "Task complete", "I have completed", or "Done" before running the verification command.
23
23
  - If ANY tool returns `<tool_error>` (glob failed, read_file failed, file not found), that step FAILED. Adjust and retry, do not declare success.
24
- - When asked to add MULTIPLE items, work through EACH one with a write_file or search_replace call.
24
+ - When asked to add MULTIPLE items, work through EACH one with a write_file call.
25
25
  - NEVER write "✅ Verified" or any checkmark for a file or test you have not actually run/read in this session.
26
26
 
27
27
  WHEN TO USE retrieve (project's GraphRAG index):
@@ -38,15 +38,6 @@ WHEN TO USE WEB TOOLS (sparingly):
38
38
  - Found a URL to a relevant SO post or doc: `web_fetch`
39
39
  - DO NOT web-search for things you already know how to do. Write the code first.
40
40
 
41
- DELEGATION (only for genuinely large tasks):
42
- - 1-8 files → BUILD INLINE. Do not call task.
43
- - 9+ files with multiple subdirectories → DELEGATE to builder.
44
- - Editing an existing file or fixing a known bug → BUILD INLINE.
45
- - "Where does function X live?" → DELEGATE to explore.
46
- - If the user asks you to PLAN or EXPLAIN → respond with text. Do not delegate.
47
-
48
- When in doubt, build inline. A wasted delegation costs 60-90 seconds.
49
-
50
41
  Workflow for building from a PRD or spec:
51
42
  1. Read the spec file
52
43
  2. Create each file with write_file — start with __init__.py and __main__.py
@@ -58,15 +49,8 @@ Workflow for building from a PRD or spec:
58
49
  Workflow for fixing bugs:
59
50
  1. Grep for the function/class mentioned
60
51
  2. Read the source file
61
- 3. Fix with search_replace
62
- 4. Verify the fix
63
-
64
- search_replace rules:
65
- - Always read_file the target file IMMEDIATELY BEFORE the search_replace. Stale memory is the #1 cause of "Search text not found" failures.
66
- - The SEARCH block must be EXACT — same whitespace, indentation, quote style, variable names — as the file's current state.
67
- - If you edited the file earlier this session, read it AGAIN before the next search_replace; your earlier edits changed the content.
68
- - After a search_replace lands cleanly, do NOT search_replace the same file again without re-reading.
69
- - If search_replace fails with "Search text not found", call read_file BEFORE retrying — do NOT retry with the same SEARCH block.
52
+ 3. Fix with a new write_file of the corrected file
53
+ 4. Verify the fix with bash
70
54
 
71
55
  CORE PRINCIPLES:
72
56
  1. Don't assume. Don't hide confusion. Surface tradeoffs.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.9.105"
3
+ version = "2.9.109"
4
4
  description = "Local-first CLI coding agent — tested with Gemma 4 26B via llama.cpp"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -121,17 +121,93 @@ class TestConsecutiveWriteDuplicatePreflight:
121
121
  is advisory-only by design (feedback_no_tool_errors_for_loop_...)
122
122
  and Gemma 4 ignored the advisory. The preflight prunes the
123
123
  duplicates from history so the model's next turn sees a clean
124
- context. Pin the preflight marker so refactors surface here."""
124
+ context."""
125
125
 
126
126
  def test_preflight_marker_present_in_agent_loop(self):
127
127
  text = open(
128
128
  "/data3/drydock/drydock/core/agent_loop.py"
129
129
  ).read()
130
- assert "PREFLIGHT-WRITE-DUP" in text, (
131
- "consecutive-write preflight was removed from agent_loop.py"
130
+ # v2.9.108 generalized the marker from PREFLIGHT-WRITE-DUP to
131
+ # PREFLIGHT-DUP (covers any tool with 5+ identical-args calls).
132
+ assert "PREFLIGHT-DUP" in text, (
133
+ "duplicate-call preflight was removed from agent_loop.py"
132
134
  )
133
- assert "5 and len(dup_indices)" in text or "dup_count >= 5" in text, (
134
- "duplicate-write threshold changed; update test"
135
+ assert "dup_count >= 5" in text, (
136
+ "duplicate-call threshold changed; update test"
137
+ )
138
+
139
+ def test_preflight_prunes_history_to_most_recent_attempt(self):
140
+ """Behavioral: 7 identical writes + tool results -> 2 messages
141
+ remain after the preflight logic runs (most recent write + its
142
+ result). Replicates the sam-cell-seg pattern."""
143
+ import json as _json
144
+ from drydock.core.agent_loop import AgentLoop
145
+ from drydock.core.types import (
146
+ FunctionCall,
147
+ LLMMessage,
148
+ MessageList,
149
+ Role,
150
+ ToolCall,
151
+ )
152
+
153
+ msgs = MessageList()
154
+ identical_args = _json.dumps(
155
+ {"path": "/app/foo.smd", "content": "out0 = out0\nout1 = out1\n"}
156
+ )
157
+ for i in range(7):
158
+ msgs.append(LLMMessage(
159
+ role=Role.assistant,
160
+ content="",
161
+ tool_calls=[ToolCall(
162
+ id=f"call_{i}",
163
+ function=FunctionCall(
164
+ name="write_file", arguments=identical_args
165
+ ),
166
+ )],
167
+ ))
168
+ msgs.append(LLMMessage(
169
+ role=Role.tool,
170
+ content="advisory no-op",
171
+ tool_call_id=f"call_{i}",
172
+ ))
173
+
174
+ al = object.__new__(AgentLoop)
175
+ al.messages = msgs
176
+
177
+ # Reproduce the inline preflight logic exactly
178
+ cur_path = "/app/foo.smd"
179
+ cur_content = "out0 = out0\nout1 = out1\n"
180
+ dup_indices = []
181
+ for i, m in enumerate(al.messages):
182
+ if m.role != Role.assistant or not m.tool_calls:
183
+ continue
184
+ for tc in m.tool_calls:
185
+ if tc.function.name != "write_file":
186
+ continue
187
+ try:
188
+ a = _json.loads(tc.function.arguments or "{}")
189
+ except Exception:
190
+ continue
191
+ ap = a.get("path") or a.get("file_path") or ""
192
+ ac = a.get("content", "")
193
+ if ap == cur_path and ac == cur_content:
194
+ dup_indices.append(i)
195
+ break
196
+ dup_count = len(dup_indices)
197
+ assert dup_count == 7
198
+
199
+ to_drop = set()
200
+ for idx in dup_indices[:-1]:
201
+ to_drop.add(idx)
202
+ if idx + 1 < len(al.messages):
203
+ next_m = al.messages[idx + 1]
204
+ if next_m.role == Role.tool:
205
+ to_drop.add(idx + 1)
206
+ kept = [m for i, m in enumerate(al.messages) if i not in to_drop]
207
+ al.messages.reset(kept)
208
+ assert len(al.messages) == 2, (
209
+ f"expected 2 messages remaining (last write + result), "
210
+ f"got {len(al.messages)}"
135
211
  )
136
212
 
137
213
 
@@ -226,3 +302,133 @@ class TestUnionGrammarDefaultOff:
226
302
  gbnf = build_union_gbnf([("write_file", WriteFileArgs)])
227
303
  assert gbnf is not None
228
304
  assert "write_file" in gbnf or "root" in gbnf
305
+
306
+
307
+ class TestGeneralizedDuplicatePreflight:
308
+ """v2.9.108: the preflight handles ANY tool with 5+ identical-args
309
+ calls, not just write_file. Verifies the v2.9.95 distribution-search
310
+ pattern (3 identical `solve` calls at end of trial) would be
311
+ pruned."""
312
+
313
+ def test_solve_loop_pattern_prunes(self):
314
+ import json as _json
315
+ from drydock.core.agent_loop import AgentLoop
316
+ from drydock.core.types import (
317
+ FunctionCall,
318
+ LLMMessage,
319
+ MessageList,
320
+ Role,
321
+ ToolCall,
322
+ )
323
+
324
+ msgs = MessageList()
325
+ # 6 identical solve calls — same args, same conclusion.
326
+ solve_args = _json.dumps({
327
+ "op": "solve",
328
+ "variables": "p1: Real, p2: Real",
329
+ "conclusion": "True",
330
+ "objective": "",
331
+ })
332
+ for i in range(6):
333
+ msgs.append(LLMMessage(
334
+ role=Role.assistant,
335
+ content="",
336
+ tool_calls=[ToolCall(
337
+ id=f"solve_{i}",
338
+ function=FunctionCall(name="solve", arguments=solve_args),
339
+ )],
340
+ ))
341
+ msgs.append(LLMMessage(
342
+ role=Role.tool,
343
+ content="sat",
344
+ tool_call_id=f"solve_{i}",
345
+ ))
346
+
347
+ al = object.__new__(AgentLoop)
348
+ al.messages = msgs
349
+
350
+ # Reproduce the inline generic preflight
351
+ cur_name = "solve"
352
+ cur_args_dict = _json.loads(solve_args)
353
+ cur_args_json = _json.dumps(cur_args_dict, sort_keys=True, default=str)
354
+ dup_indices = []
355
+ for i, m in enumerate(al.messages):
356
+ if m.role != Role.assistant or not m.tool_calls:
357
+ continue
358
+ for tc in m.tool_calls:
359
+ if tc.function.name != cur_name:
360
+ continue
361
+ try:
362
+ a = _json.loads(tc.function.arguments or "{}")
363
+ except Exception:
364
+ continue
365
+ if _json.dumps(a, sort_keys=True, default=str) == cur_args_json:
366
+ dup_indices.append(i)
367
+ break
368
+
369
+ assert len(dup_indices) == 6
370
+ to_drop = set()
371
+ for idx in dup_indices[:-1]:
372
+ to_drop.add(idx)
373
+ if idx + 1 < len(al.messages):
374
+ if al.messages[idx + 1].role == Role.tool:
375
+ to_drop.add(idx + 1)
376
+ kept = [m for i, m in enumerate(al.messages) if i not in to_drop]
377
+ al.messages.reset(kept)
378
+ # 5 older duplicates + their tool results = 10 dropped, 2 remain
379
+ assert len(al.messages) == 2
380
+
381
+ def test_different_args_NOT_pruned(self):
382
+ """read_file with different offsets — legitimate progress, NOT a dup."""
383
+ import json as _json
384
+ from drydock.core.agent_loop import AgentLoop
385
+ from drydock.core.types import (
386
+ FunctionCall,
387
+ LLMMessage,
388
+ MessageList,
389
+ Role,
390
+ ToolCall,
391
+ )
392
+
393
+ msgs = MessageList()
394
+ for i in range(8):
395
+ args = _json.dumps({"path": "/app/foo.py", "offset": i * 100})
396
+ msgs.append(LLMMessage(
397
+ role=Role.assistant,
398
+ content="",
399
+ tool_calls=[ToolCall(
400
+ id=f"read_{i}",
401
+ function=FunctionCall(name="read_file", arguments=args),
402
+ )],
403
+ ))
404
+ msgs.append(LLMMessage(
405
+ role=Role.tool,
406
+ content=f"contents at offset {i*100}",
407
+ tool_call_id=f"read_{i}",
408
+ ))
409
+
410
+ al = object.__new__(AgentLoop)
411
+ al.messages = msgs
412
+
413
+ # Now check what the preflight would do for "the 9th read_file
414
+ # call with offset=900". cur_args_json differs from all prior 8
415
+ # calls (each had a different offset).
416
+ cur_args_json = _json.dumps(
417
+ {"path": "/app/foo.py", "offset": 900}, sort_keys=True
418
+ )
419
+ dup_indices = []
420
+ for i, m in enumerate(al.messages):
421
+ if m.role != Role.assistant or not m.tool_calls:
422
+ continue
423
+ for tc in m.tool_calls:
424
+ if tc.function.name != "read_file":
425
+ continue
426
+ try:
427
+ a = _json.loads(tc.function.arguments or "{}")
428
+ except Exception:
429
+ continue
430
+ if _json.dumps(a, sort_keys=True, default=str) == cur_args_json:
431
+ dup_indices.append(i)
432
+ break
433
+ # No duplicates of {offset:900} in history — preflight stays inert
434
+ assert dup_indices == []
@@ -326,7 +326,7 @@ wheels = [
326
326
 
327
327
  [[package]]
328
328
  name = "drydock-cli"
329
- version = "2.9.103"
329
+ version = "2.9.107"
330
330
  source = { editable = "." }
331
331
  dependencies = [
332
332
  { name = "agent-client-protocol" },
File without changes
File without changes
File without changes
File without changes