drydock-cli 2.5.0__tar.gz → 2.5.2__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 (544) hide show
  1. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CLAUDE.md +55 -29
  2. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/PKG-INFO +1 -1
  3. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agent_loop.py +92 -1
  4. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/pyproject.toml +1 -1
  5. drydock_cli-2.5.2/scripts/discover_cli_tools.sh +69 -0
  6. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/CODEOWNERS +0 -0
  7. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  8. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  9. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/build-and-upload.yml +0 -0
  11. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/ci.yml +0 -0
  12. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/issue-labeler.yml +0 -0
  13. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.github/workflows/release.yml +0 -0
  14. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.gitignore +0 -0
  15. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.pre-commit-config.yaml +0 -0
  16. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.python-version +0 -0
  17. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.typos.toml +0 -0
  18. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/extensions.json +0 -0
  19. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/launch.json +0 -0
  20. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/.vscode/settings.json +0 -0
  21. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/AGENTS.md +0 -0
  22. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CHANGELOG.md +0 -0
  23. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/CONTRIBUTING.md +0 -0
  24. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/Drydock_rebrand.md +0 -0
  25. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/LICENSE +0 -0
  26. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/NOTICE +0 -0
  27. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/PRD.md +0 -0
  28. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/README.md +0 -0
  29. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/action.yml +0 -0
  30. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/LICENSE +0 -0
  31. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/extension.toml +0 -0
  32. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/distribution/zed/icons/mistral_vibe.svg +0 -0
  33. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/README.md +0 -0
  34. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/acp-setup.md +0 -0
  35. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/docs/proxy-setup.md +0 -0
  36. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/__init__.py +0 -0
  37. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/__init__.py +0 -0
  38. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/acp_agent_loop.py +0 -0
  39. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/acp_logger.py +0 -0
  40. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/entrypoint.py +0 -0
  41. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/__init__.py +0 -0
  42. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/base.py +0 -0
  43. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/bash.py +0 -0
  44. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/read_file.py +0 -0
  45. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/search_replace.py +0 -0
  46. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/todo.py +0 -0
  47. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/builtins/write_file.py +0 -0
  48. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/tools/session_update.py +0 -0
  49. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/acp/utils.py +0 -0
  50. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/__init__.py +0 -0
  51. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/__init__.py +0 -0
  52. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/base.py +0 -0
  53. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/path_completion.py +0 -0
  54. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/autocompletion/slash_command.py +0 -0
  55. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/cli.py +0 -0
  56. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/clipboard.py +0 -0
  57. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/commands.py +0 -0
  58. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/entrypoint.py +0 -0
  59. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/history_manager.py +0 -0
  60. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  61. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  62. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  63. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/terminal_setup.py +0 -0
  64. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/__init__.py +0 -0
  65. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  66. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/app.py +0 -0
  67. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/app.tcss +0 -0
  68. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/external_editor.py +0 -0
  69. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  70. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  71. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  72. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  73. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  74. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  75. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  76. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  77. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  78. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  79. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  80. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  81. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  82. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  83. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  84. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  85. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  86. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  87. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  88. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  89. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  90. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  91. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  92. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  93. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  94. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  95. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  96. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  97. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  98. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  99. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  100. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  101. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  102. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  103. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  104. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  105. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/history.py +0 -0
  106. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  107. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/textual_ui/windowing/state.py +0 -0
  108. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/__init__.py +0 -0
  109. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  110. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  111. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  112. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  113. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  114. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/update.py +0 -0
  115. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/cli/update_notifier/whats_new.py +0 -0
  116. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/__init__.py +0 -0
  117. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/__init__.py +0 -0
  118. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/manager.py +0 -0
  119. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/agents/models.py +0 -0
  120. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/__init__.py +0 -0
  121. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/crypto.py +0 -0
  122. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/auth/github.py +0 -0
  123. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/__init__.py +0 -0
  124. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/completers.py +0 -0
  125. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  126. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  127. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  128. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  129. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  130. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/fuzzy.py +0 -0
  131. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/path_prompt.py +0 -0
  132. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  133. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/build_orchestrator.py +0 -0
  134. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/__init__.py +0 -0
  135. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/_settings.py +0 -0
  136. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/__init__.py +0 -0
  137. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  138. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/config/harness_files/_paths.py +0 -0
  139. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/consultant.py +0 -0
  140. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/drydock_states.py +0 -0
  141. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/hooks.py +0 -0
  142. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/__init__.py +0 -0
  143. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/anthropic.py +0 -0
  144. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/base.py +0 -0
  145. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/factory.py +0 -0
  146. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/generic.py +0 -0
  147. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/mistral.py +0 -0
  148. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  149. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/backend/vertex.py +0 -0
  150. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/exceptions.py +0 -0
  151. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/format.py +0 -0
  152. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/message_utils.py +0 -0
  153. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/llm/types.py +0 -0
  154. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/logger.py +0 -0
  155. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/middleware.py +0 -0
  156. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/output_formatters.py +0 -0
  157. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/__init__.py +0 -0
  158. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/_local_config_walk.py +0 -0
  159. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/_vibe_home.py +0 -0
  160. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/paths/conventions.py +0 -0
  161. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/plan_session.py +0 -0
  162. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/plugins.py +0 -0
  163. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/programmatic.py +0 -0
  164. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/__init__.py +0 -0
  165. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/builder.md +0 -0
  166. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/cli.md +0 -0
  167. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/compact.md +0 -0
  168. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/dangerous_directory.md +0 -0
  169. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/diagnostic.md +0 -0
  170. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/explore.md +0 -0
  171. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/gemma4.md +0 -0
  172. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/planner.md +0 -0
  173. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/project_context.md +0 -0
  174. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/prompts/tests.md +0 -0
  175. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/proxy_setup.py +0 -0
  176. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/agent_memory.py +0 -0
  177. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/checkpoints.py +0 -0
  178. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_loader.py +0 -0
  179. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_logger.py +0 -0
  180. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/session_migration.py +0 -0
  181. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/session/state_file.py +0 -0
  182. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/__init__.py +0 -0
  183. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/manager.py +0 -0
  184. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/models.py +0 -0
  185. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/skills/parser.py +0 -0
  186. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/slug.py +0 -0
  187. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/system_prompt.py +0 -0
  188. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/telemetry/__init__.py +0 -0
  189. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/telemetry/send.py +0 -0
  190. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/errors.py +0 -0
  191. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/git.py +0 -0
  192. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/nuage.py +0 -0
  193. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/teleport.py +0 -0
  194. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/teleport/types.py +0 -0
  195. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/base.py +0 -0
  196. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  197. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/bash.py +0 -0
  198. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/cron.py +0 -0
  199. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  200. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/glob_tool.py +0 -0
  201. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/grep.py +0 -0
  202. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  203. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/lsp.py +0 -0
  204. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  205. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  206. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/powershell.py +0 -0
  207. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  208. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  209. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  210. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  211. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  212. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  213. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  214. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  215. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  216. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  217. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  218. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  219. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  220. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  221. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/task.md +0 -0
  222. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  223. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  224. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  225. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  226. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  227. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  228. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  229. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/read_file.py +0 -0
  230. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/search_replace.py +0 -0
  231. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/task.py +0 -0
  232. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/task_manager.py +0 -0
  233. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/todo.py +0 -0
  234. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/tool_search.py +0 -0
  235. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/webfetch.py +0 -0
  236. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/websearch.py +0 -0
  237. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/worktree.py +0 -0
  238. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/builtins/write_file.py +0 -0
  239. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/injection_guard.py +0 -0
  240. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/manager.py +0 -0
  241. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/__init__.py +0 -0
  242. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/registry.py +0 -0
  243. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp/tools.py +0 -0
  244. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/mcp_sampling.py +0 -0
  245. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/ui.py +0 -0
  246. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/tools/utils.py +0 -0
  247. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/trusted_folders.py +0 -0
  248. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/types.py +0 -0
  249. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/core/utils.py +0 -0
  250. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/__init__.py +0 -0
  251. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/base.py +0 -0
  252. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/onboarding.tcss +0 -0
  253. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/__init__.py +0 -0
  254. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/api_key.py +0 -0
  255. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/onboarding/screens/welcome.py +0 -0
  256. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  257. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  258. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/__init__.py +0 -0
  259. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/api-design/SKILL.md +0 -0
  260. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/batch/SKILL.md +0 -0
  261. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/commit-code/SKILL.md +0 -0
  262. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/context-summary/SKILL.md +0 -0
  263. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/create-presentation/SKILL.md +0 -0
  264. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/deep-research/SKILL.md +0 -0
  265. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/deploy/SKILL.md +0 -0
  266. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/diff-review/SKILL.md +0 -0
  267. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/doc-gen/SKILL.md +0 -0
  268. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/explain-code/SKILL.md +0 -0
  269. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/explore-code/SKILL.md +0 -0
  270. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/fix-issue/SKILL.md +0 -0
  271. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/git-ops/SKILL.md +0 -0
  272. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/init-project/SKILL.md +0 -0
  273. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/investigate/SKILL.md +0 -0
  274. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/loop/SKILL.md +0 -0
  275. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/migrate/SKILL.md +0 -0
  276. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/perf-analyze/SKILL.md +0 -0
  277. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/plan-impl/SKILL.md +0 -0
  278. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/pr-review/SKILL.md +0 -0
  279. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/refactor/SKILL.md +0 -0
  280. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/regex-help/SKILL.md +0 -0
  281. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/review/SKILL.md +0 -0
  282. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/security-review/SKILL.md +0 -0
  283. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/ship/SKILL.md +0 -0
  284. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/simplify/SKILL.md +0 -0
  285. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/skills/test-verify/SKILL.md +0 -0
  286. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock/whats_new.md +0 -0
  287. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock-acp.spec +0 -0
  288. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/drydock_terms.md +0 -0
  289. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/flake.lock +0 -0
  290. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/flake.nix +0 -0
  291. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/__init__.py +0 -0
  292. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/__main__.py +0 -0
  293. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/analyzer.py +0 -0
  294. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/log_analyzer/cli.py +0 -0
  295. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/README.md +0 -0
  296. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/auto_test_loop.sh +0 -0
  297. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/backup.sh +0 -0
  298. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/bump_version.py +0 -0
  299. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/deploy_to_github.sh +0 -0
  300. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/install.sh +0 -0
  301. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/monitor_swebench.sh +0 -0
  302. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/monitor_test_battery.sh +0 -0
  303. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/notify_release.py +0 -0
  304. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/overnight_agents_test.sh +0 -0
  305. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/prepare_release.py +0 -0
  306. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/publish_to_pypi.sh +0 -0
  307. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_bank.sh +0 -0
  308. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_full.sh +0 -0
  309. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_smoke.sh +0 -0
  310. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/test_tui_path.py +0 -0
  311. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/scripts/tui_test.py +0 -0
  312. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/__init__.py +0 -0
  313. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/conftest.py +0 -0
  314. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_acp.py +0 -0
  315. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_agent_thought.py +0 -0
  316. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_bash.py +0 -0
  317. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_compact_session_updates.py +0 -0
  318. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_content.py +0 -0
  319. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_initialize.py +0 -0
  320. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_list_sessions.py +0 -0
  321. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_load_session.py +0 -0
  322. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_multi_session.py +0 -0
  323. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_new_session.py +0 -0
  324. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_proxy_setup_acp.py +0 -0
  325. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_read_file.py +0 -0
  326. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_search_replace.py +0 -0
  327. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_config_option.py +0 -0
  328. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_mode.py +0 -0
  329. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_set_model.py +0 -0
  330. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_tool_call_session_update.py +0 -0
  331. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_utils.py +0 -0
  332. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/acp/test_write_file.py +0 -0
  333. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_file_indexer.py +0 -0
  334. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_fuzzy.py +0 -0
  335. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  336. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  337. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_completion_controller.py +0 -0
  338. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  339. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_slash_command_controller.py +0 -0
  340. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  341. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/__init__.py +0 -0
  342. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/__init__.py +0 -0
  343. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/fireworks.py +0 -0
  344. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/data/mistral.py +0 -0
  345. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_anthropic_adapter.py +0 -0
  346. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_backend.py +0 -0
  347. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_reasoning_adapter.py +0 -0
  348. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  349. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  350. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  351. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  352. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_bell_notifications.py +0 -0
  353. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_braille_renderer.py +0 -0
  354. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_clipboard.py +0 -0
  355. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_commands.py +0 -0
  356. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_copy_shortcuts.py +0 -0
  357. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_external_editor.py +0 -0
  358. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_no_markup_static.py +0 -0
  359. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_question_app.py +0 -0
  360. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_spinner.py +0 -0
  361. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_switching_mode.py +0 -0
  362. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  363. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  364. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_session_resume.py +0 -0
  365. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/test_ui_skill_dispatch.py +0 -0
  366. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/textual_ui/__init__.py +0 -0
  367. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/cli/textual_ui/test_session_picker.py +0 -0
  368. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/conftest.py +0 -0
  369. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_agents.py +0 -0
  370. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_auth_crypto.py +0 -0
  371. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_auth_github.py +0 -0
  372. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_load_dotenv.py +0 -0
  373. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_paths.py +0 -0
  374. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_config_resolution.py +0 -0
  375. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_file_logging.py +0 -0
  376. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_plan_session.py +0 -0
  377. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_proxy_setup.py +0 -0
  378. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_slug.py +0 -0
  379. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_telemetry_send.py +0 -0
  380. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_git.py +0 -0
  381. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_nuage.py +0 -0
  382. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_teleport_service.py +0 -0
  383. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_trusted_folders.py +0 -0
  384. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/core/test_utils.py +0 -0
  385. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/common.py +0 -0
  386. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/conftest.py +0 -0
  387. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/mock_server.py +0 -0
  388. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  389. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_streaming.py +0 -0
  390. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  391. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/__init__.py +0 -0
  392. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/mock_backend_factory.py +0 -0
  393. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/mock_entrypoint.py +0 -0
  394. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/mock/utils.py +0 -0
  395. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/onboarding/test_run_onboarding.py +0 -0
  396. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/onboarding/test_ui_onboarding.py +0 -0
  397. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_loader.py +0 -0
  398. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_logger.py +0 -0
  399. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/session/test_session_migration.py +0 -0
  400. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/conftest.py +0 -0
  401. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_manager.py +0 -0
  402. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_models.py +0 -0
  403. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/skills/test_parser.py +0 -0
  404. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  405. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  406. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  407. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  408. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  409. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  410. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  411. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  412. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  413. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  414. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  415. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  416. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  417. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  418. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  419. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  420. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  421. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  422. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  423. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  424. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  425. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  426. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  427. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  428. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  429. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  430. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  431. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  432. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  433. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  434. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  435. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  436. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  437. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  438. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  439. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  440. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  441. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  442. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  443. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  444. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  445. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  446. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  447. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  448. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  449. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  450. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  451. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  452. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  453. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  454. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  455. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  456. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  457. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  458. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  459. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  460. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  461. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  462. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  463. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  464. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/base_snapshot_test_app.py +0 -0
  465. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/conftest.py +0 -0
  466. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/snap_compare.py +0 -0
  467. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  468. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  469. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  470. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  471. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  472. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  473. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  474. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  475. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  476. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  477. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  478. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  479. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  480. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  481. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_backend.py +0 -0
  482. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_client.py +0 -0
  483. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/stubs/fake_tool.py +0 -0
  484. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_auto_compact.py +0 -0
  485. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_backend.py +0 -0
  486. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_observer_streaming.py +0 -0
  487. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_stats.py +0 -0
  488. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_tasks.py +0 -0
  489. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agent_tool_call.py +0 -0
  490. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_agents.py +0 -0
  491. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_build.py +0 -0
  492. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_debug.py +0 -0
  493. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_multiagent.py +0 -0
  494. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_prd.py +0 -0
  495. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_prd_extended.py +0 -0
  496. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_tools.py +0 -0
  497. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_bank_update.py +0 -0
  498. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_build_projects.py +0 -0
  499. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_cli_programmatic_preload.py +0 -0
  500. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_current_bugs.py +0 -0
  501. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_drydock_regression.py +0 -0
  502. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_drydock_tasks.py +0 -0
  503. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_full_regression.py +0 -0
  504. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_history_manager.py +0 -0
  505. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_integration.py +0 -0
  506. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_loop_detection.py +0 -0
  507. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_message_id.py +0 -0
  508. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_message_merging.py +0 -0
  509. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_middleware.py +0 -0
  510. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_multi_agent.py +0 -0
  511. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_failures.py +0 -0
  512. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_issues.py +0 -0
  513. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_real_workflow.py +0 -0
  514. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_reasoning_content.py +0 -0
  515. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_smoke.py +0 -0
  516. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_system_prompt.py +0 -0
  517. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_tagged_text.py +0 -0
  518. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_ui_external_editor.py +0 -0
  519. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_ui_input_history.py +0 -0
  520. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_user_issues.py +0 -0
  521. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/test_workloads.py +0 -0
  522. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/testbank_helpers.py +0 -0
  523. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_ask_user_question.py +0 -0
  524. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_bash.py +0 -0
  525. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_exit_plan_mode.py +0 -0
  526. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_grep.py +0 -0
  527. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_invoke_context.py +0 -0
  528. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_manager_get_tool_config.py +0 -0
  529. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_mcp.py +0 -0
  530. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_mcp_sampling.py +0 -0
  531. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_task.py +0 -0
  532. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_ui_bash_execution.py +0 -0
  533. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_webfetch.py +0 -0
  534. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/tools/test_websearch.py +0 -0
  535. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  536. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  537. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_do_update.py +0 -0
  538. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  539. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_github_update_gateway.py +0 -0
  540. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  541. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_ui_update_notification.py +0 -0
  542. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_update_use_case.py +0 -0
  543. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/tests/update_notifier/test_whats_new.py +0 -0
  544. {drydock_cli-2.5.0 → drydock_cli-2.5.2}/uv.lock +0 -0
@@ -4,12 +4,14 @@
4
4
 
5
5
  Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
6
6
  - **Repo:** https://github.com/fbobe321/drydock
7
- - **PyPI:** https://pypi.org/project/drydock-cli/ (v2.2.1 for v2, v3.0.0 for v3)
8
- - **Goal:** Best-in-class SWE-bench Verified pass rate with local LLMs
7
+ - **PyPI:** https://pypi.org/project/drydock-cli/ (v2.5.0)
8
+ - **Goal:** Reliable TUI coding agent with local LLMs. PRD-driven project building + SWE-bench bug fixing.
9
9
  - **Hardware:** 2x RTX 4060 Ti 16GB, Gemma 4 26B MoE (A4B) via vLLM Docker at localhost:8000
10
10
  - **Server:** remus (Ubuntu 22.04, user: bobef)
11
- - **Active model:** Gemma 4 26B-A4B-it-AWQ-4bit (replaced devstral-24B 3-4x faster, better results)
12
- - **Active codebase:** DryDock v3 at `/data3/drydock-v3/` (clean rewrite)
11
+ - **Active model:** Gemma 4 26B-A4B-it-AWQ-4bit (only 4B active params, ~70 tok/s)
12
+ - **TUI results:** 88/90 PRD projects pass (98%) through the real TUI
13
+ - **SWE-bench:** 70% file match (v3 baseline), 58% (v3 tuned — tighter prompt hurt)
14
+ - **Priority:** TUI experience first, SWE-bench second
13
15
 
14
16
  ## Build & Test
15
17
 
@@ -36,17 +38,17 @@ curl http://localhost:8000/v1/models
36
38
  python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
37
39
  ```
38
40
 
39
- ### DryDock v2 (legacy)
41
+ ### DryDock v2 (TUI — user-facing, v2.5.0)
40
42
 
41
43
  ```bash
42
44
  # Install
43
- uv sync
45
+ pip install drydock-cli==2.5.0
44
46
 
45
- # Run drydock CLI
46
- uv run drydock
47
+ # Run TUI (the ONLY way to use drydock — no headless mode)
48
+ drydock
47
49
 
48
- # Run programmatically (headless, for benchmarks)
49
- python3 -c "import sys; sys.path.insert(0, '.'); from drydock.cli.entrypoint import main; main()" --agent auto-approve -p "your prompt"
50
+ # Headless mode has been REMOVED. All testing goes through the TUI.
51
+ # Use scripts/tui_test.py (pexpect) for automated TUI testing.
50
52
 
51
53
  # Run tests
52
54
  uv run pytest tests/ -x -q --timeout=30
@@ -92,11 +94,15 @@ v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files,
92
94
  - **Two-tier compaction.** Normal compaction truncates old tool results. Emergency compaction triggers on 400 errors (context overflow) with aggressive truncation.
93
95
  - **Provider-agnostic design.** No model-specific hacks in the agent loop. All model quirks handled in `providers.py`.
94
96
 
95
- ### v2 Constraints (still apply to v2 codebase)
97
+ ### v2 Constraints (TUI codebase)
96
98
  - **MessageList is not a plain list.** Never `self.messages = [...]`. Use `self.messages.reset([...])`.
97
99
  - **vLLM/Mistral rejects `user` after `tool` messages.** `_sanitize_message_ordering()` runs before every LLM call. All injection must use `_inject_system_note()`.
98
- - **`os._exit()` in programmatic.py** necessary because async cleanup hangs. Ensure stdout is flushed before calling.
99
- - **AGENTS.md is CRITICAL for devstral.** Without per-project instructions, the model loops on ls/bash. Auto-created by `_ensure_agents_md()`.
100
+ - **Non-streaming for Gemma 4.** Streaming tool call argument accumulation produces empty/malformed JSON. `enable_streaming=False` when model is Gemma 4.
101
+ - **Disabled tools for Gemma 4:** ask_user_question, todo, task_create, task_update, task, invoke_skill, tool_search. These cause loops or validation errors.
102
+ - **Simplified prompt for Gemma 4.** Auto-detected via model name → uses `gemma4.md` (20 lines) instead of `cli.md` (125 lines). Complex prompts cause delegation/asking instead of coding.
103
+ - **write_file overwrite=True by default.** Gemma 4 writes files multiple times; old default (False) caused error loops.
104
+ - **Headless mode removed.** All interaction through TUI. Testing via pexpect (`scripts/tui_test.py`).
105
+ - **NEVER test with headless.** The TUI has different code paths (streaming, approval, path expansion). Headless passes mask TUI bugs.
100
106
 
101
107
  ### Shared Constraints
102
108
  - **"Restate the goal" blocks tool calling.** Never ask the model to output text before its first tool call — it pre-empts the tool-calling mechanism.
@@ -252,22 +258,42 @@ v3 is a from-scratch rewrite using nano-claude-code as foundation. 4 core files,
252
258
 
253
259
  ## Key Learnings
254
260
 
255
- 1. AGENTS.md is essential devstral loops without it (Gemma 4 does not have this problem)
256
- 2. "Restate the goal" blocked tool calling for months one line
257
- 3. Additive-only changes work best control flow mods regress
258
- 4. The harness matters as much as the model (Meta-Harness paper)
259
- 5. Environment bootstrapping saves 2-4 exploratory turns
260
- 6. Plan→Edit workflow is Mistral's design, don't fight it
261
- 7. Circuit breaker was net negative removed entirely
262
- 8. Loop detection should guide, never stop
263
- 9. Test the installed package, not source (different Python envs)
264
- 10. Never wait for full test runs fix issues from early results
265
- 11. Clean rewrites beat incremental fixesv3 (~750 lines) outperforms v2 (~5000+ lines)
266
- 12. Model choice matters more than agent complexity Gemma 4 MoE gives 3-4x speed + better accuracy than devstral
267
- 13. Gemma 4 leaks thinking tokens (`<|channel>thought<channel|>`) must filter in provider layer
268
- 14. Two-tier compaction (normal + emergency on 400) is more robust than single-tier
269
- 15. Provider-agnostic design enables fast model switching v3 works with any OpenAI-compatible endpoint
270
- 16. Docker-based model serving (vLLM) is more reliable than bare-metal easier restarts, GPU management
261
+ 1. **Test the TUI, not headless.** Headless passes mask real bugs. TUI has different code paths (streaming, approval, render_path_prompt). ALL testing through TUI via pexpect.
262
+ 2. **Use PRDs for testing.** Concrete PRDs with expected files and `--help` give clear pass/fail. 100-project suite proved TUI works (98%).
263
+ 3. **Scaffold per model.** Weaker models need more guardrails (non-streaming, fewer tools, simpler prompts). As models improve, remove scaffolding. The code should get simpler over time.
264
+ 4. **Streaming breaks Gemma 4 tool calls.** Streaming accumulates JSON chunk-by-chunk → empty args. Non-streaming gets complete response → works perfectly. Root cause of weeks of TUI failures.
265
+ 5. **Fewer tools = better for local models.** Gemma 4 wasted 64 turns on task_create/task_update. Disabling non-essential tools eliminated the loop.
266
+ 6. **Simple prompts win.** The 125-line cli.md with phases/delegation confused Gemma 4. The 20-line gemma4.md ("ACT IMMEDIATELY") works.
267
+ 7. AGENTS.md essential for devstral (loops without it), not needed for Gemma 4
268
+ 8. Circuit breaker was net negative — removed entirely
269
+ 9. Loop detection should guide, never stop (retrospection > hardcoded nudges)
270
+ 10. Clean rewrites beat incremental fixesv3 (~750 lines) outperforms v2 (~5000+ lines) on SWE-bench
271
+ 11. Model choice matters more than agent complexity Gemma 4 MoE gives 3-4x speed
272
+ 12. Docker-based model serving (vLLM) is reliableeasier restarts, GPU management
273
+ 13. Auto-read on failed edit automatically show the model the real file content
274
+ 14. Temperature bump on loops force model to explore different paths
275
+ 15. Failed-approach accumulatorprevent re-trying strategies after pruning/compaction
276
+ 16. PRD complexity must match model capability too many files/features causes timeout
277
+
278
+ ## Testing
279
+
280
+ ### TUI Test Harness
281
+ - **Script:** `scripts/tui_test.py` — pexpect-based, drives the REAL TUI binary
282
+ - **Auto-approves** tool permission prompts
283
+ - **Detects:** write loops, API errors, tool call counts, file creation, --help pass/fail
284
+ - **100 PRDs:** at `/data3/drydock_test_projects/` (88/90 pass = 98%)
285
+
286
+ ### PRD Format (what works)
287
+ - Short (under 30 lines)
288
+ - 4-6 files max
289
+ - Clear package name and file list
290
+ - Test command: `python3 -m package_name --help`
291
+ - Stdlib only (no external deps)
292
+
293
+ ### What breaks PRDs
294
+ - Too many files (8+) — model runs out of turns
295
+ - Complex parsers (custom YAML/XML from scratch)
296
+ - Features requiring external APIs or databases
271
297
 
272
298
  ## When Compacting
273
299
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: Drydock — nautical CLI coding agent
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -901,13 +901,23 @@ class AgentLoop:
901
901
  self._record_failed_approach()
902
902
 
903
903
  # RETROSPECTION: Summarize recent actions and let the model
904
- # decide its own next step — no hardcoded nudges
904
+ # decide its own next step
905
905
  retro = self._build_retrospection()
906
906
  if retro:
907
907
  # Include failed approaches if any
908
908
  if self._failed_approaches:
909
909
  approaches = "\n".join(f" - {a}" for a in self._failed_approaches[-5:])
910
910
  retro += f"\n\nApproaches already tried (don't repeat these):\n{approaches}"
911
+
912
+ # Detect same-file write loop and add specific guidance
913
+ stuck_file = self._detect_stuck_file()
914
+ if stuck_file:
915
+ retro += (
916
+ f"\n\nYou are STUCK writing {stuck_file} repeatedly. "
917
+ f"That file is DONE. Move to the NEXT file now. "
918
+ f"Do NOT write to {stuck_file} again."
919
+ )
920
+
911
921
  self._inject_system_note(retro)
912
922
  else:
913
923
  # Loop broken — reset temperature to normal
@@ -1620,6 +1630,28 @@ class AgentLoop:
1620
1630
  feedback=feedback,
1621
1631
  )
1622
1632
 
1633
+ def _detect_stuck_file(self) -> str | None:
1634
+ """Detect if the model is writing the same file repeatedly."""
1635
+ write_paths: list[str] = []
1636
+ for msg in reversed(self.messages[-20:]):
1637
+ if msg.role == Role.assistant and msg.tool_calls:
1638
+ for tc in msg.tool_calls:
1639
+ if tc.function and tc.function.name in ("write_file", "search_replace"):
1640
+ try:
1641
+ args = json.loads(tc.function.arguments or "{}")
1642
+ path = args.get("path", args.get("file_path", ""))
1643
+ if path:
1644
+ write_paths.append(path)
1645
+ except (json.JSONDecodeError, AttributeError):
1646
+ pass
1647
+ if write_paths:
1648
+ from collections import Counter
1649
+ path_counts = Counter(write_paths)
1650
+ most_common_path, count = path_counts.most_common(1)[0]
1651
+ if count >= 3:
1652
+ return most_common_path
1653
+ return None
1654
+
1623
1655
  def _record_failed_approach(self) -> None:
1624
1656
  """Record a one-line summary of the most recent failed approach.
1625
1657
 
@@ -1824,6 +1856,29 @@ class AgentLoop:
1824
1856
  if tool_names[-8:] == cycle:
1825
1857
  return f"WARNING|{last_tool}"
1826
1858
 
1859
+ # Check 5: Same file written 3+ times (model stuck rewriting one file)
1860
+ if last_tool in ("write_file", "search_replace"):
1861
+ write_paths: list[str] = []
1862
+ for msg in reversed(self.messages):
1863
+ if msg.role == Role.assistant and msg.tool_calls:
1864
+ for tc in msg.tool_calls:
1865
+ if tc.function and tc.function.name in ("write_file", "search_replace"):
1866
+ try:
1867
+ args = json.loads(tc.function.arguments or "{}")
1868
+ path = args.get("path", args.get("file_path", ""))
1869
+ if path:
1870
+ write_paths.append(path)
1871
+ except (json.JSONDecodeError, AttributeError):
1872
+ pass
1873
+ if len(write_paths) >= 10:
1874
+ break
1875
+ if write_paths:
1876
+ from collections import Counter
1877
+ path_counts = Counter(write_paths)
1878
+ most_common_path, most_common_count = path_counts.most_common(1)[0]
1879
+ if most_common_count >= 3:
1880
+ return f"WARNING|{last_tool}"
1881
+
1827
1882
  return None
1828
1883
 
1829
1884
  async def _auto_route_task(self, user_msg: str) -> None:
@@ -1856,6 +1911,42 @@ class AgentLoop:
1856
1911
  except Exception:
1857
1912
  pass
1858
1913
 
1914
+ # Inject discoverable CLI tools (built by DryDock, CLI-Anything, system)
1915
+ try:
1916
+ from drydock.core.config.harness_files import get_harness_files_manager
1917
+ mgr = get_harness_files_manager()
1918
+ user_skills_dirs = mgr.user_skills_dirs
1919
+ tools_found = []
1920
+ for skills_dir in user_skills_dirs:
1921
+ if not skills_dir.is_dir():
1922
+ continue
1923
+ for skill_dir in sorted(skills_dir.iterdir())[:50]:
1924
+ skill_md = skill_dir / "SKILL.md"
1925
+ if not skill_md.is_file():
1926
+ continue
1927
+ name = skill_dir.name
1928
+ # Only show tool-*, system-*, cli-anything-* skills
1929
+ if not any(name.startswith(p) for p in ("tool-", "system-", "cli-anything-")):
1930
+ continue
1931
+ # Read first line of description
1932
+ try:
1933
+ for line in skill_md.read_text(encoding="utf-8").split("\n"):
1934
+ if line.strip().startswith("description:"):
1935
+ desc = line.split(":", 1)[1].strip().strip('"').strip("'")[:80]
1936
+ tools_found.append(f" {name}: {desc}")
1937
+ break
1938
+ except Exception:
1939
+ pass
1940
+ if tools_found:
1941
+ # Show max 15 to avoid bloating context
1942
+ parts.append(
1943
+ f"AVAILABLE CLI TOOLS ({len(tools_found)} installed, showing first 15):\n"
1944
+ + "\n".join(tools_found[:15])
1945
+ + "\nUse via bash: cd /path && python3 -m package_name [args]"
1946
+ )
1947
+ except Exception:
1948
+ pass
1949
+
1859
1950
  if parts:
1860
1951
  self._inject_system_note("\n".join(parts))
1861
1952
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.5.0"
3
+ version = "2.5.2"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+ # Discover installed CLI tools and create DryDock skill wrappers
3
+ # Run this to auto-detect useful CLIs on the system
4
+
5
+ SKILLS_DIR="$HOME/.drydock/skills"
6
+ mkdir -p "$SKILLS_DIR"
7
+
8
+ # List of CLI tools to check for and create skill wrappers
9
+ TOOLS=(
10
+ "jq|JSON processor — query and transform JSON data"
11
+ "yq|YAML/JSON/XML processor — like jq but for YAML"
12
+ "rg|ripgrep — fast regex search across files"
13
+ "fd|fd-find — fast file finder (better find)"
14
+ "bat|cat with syntax highlighting and line numbers"
15
+ "scc|Source code line counter by language"
16
+ "httpie|HTTPie — user-friendly HTTP client (http command)"
17
+ "tree|Directory tree viewer"
18
+ "pandoc|Universal document converter"
19
+ "ffmpeg|Audio/video processing tool"
20
+ "convert|ImageMagick — image conversion and manipulation"
21
+ "sqlite3|SQLite database CLI"
22
+ )
23
+
24
+ created=0
25
+ for entry in "${TOOLS[@]}"; do
26
+ IFS='|' read -r cmd desc <<< "$entry"
27
+
28
+ # Check if command exists
29
+ if ! command -v "$cmd" &>/dev/null; then
30
+ continue
31
+ fi
32
+
33
+ skill_name="system-$cmd"
34
+ skill_dir="$SKILLS_DIR/$skill_name"
35
+
36
+ # Skip if already exists
37
+ [ -f "$skill_dir/SKILL.md" ] && continue
38
+
39
+ # Get help text
40
+ help_text=$($cmd --help 2>&1 | head -30 || echo "No help available")
41
+
42
+ mkdir -p "$skill_dir"
43
+ cat > "$skill_dir/SKILL.md" << EOF
44
+ ---
45
+ name: $skill_name
46
+ description: "$desc"
47
+ user-invocable: false
48
+ ---
49
+
50
+ # $cmd
51
+
52
+ $desc
53
+
54
+ ## Usage
55
+ Run via bash tool: \`$cmd [args]\`
56
+
57
+ ## Help Output
58
+ \`\`\`
59
+ $help_text
60
+ \`\`\`
61
+ EOF
62
+
63
+ echo "Created skill: $skill_name ($cmd)"
64
+ created=$((created + 1))
65
+ done
66
+
67
+ echo "---"
68
+ echo "Discovered $created new CLI tools as skills"
69
+ echo "Total user skills: $(ls -d "$SKILLS_DIR"/*/SKILL.md 2>/dev/null | wc -l)"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes