drydock-cli 2.4.9__tar.gz → 2.5.1__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.4.9 → drydock_cli-2.5.1}/CLAUDE.md +55 -29
  2. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/PKG-INFO +1 -1
  3. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/cli.py +47 -82
  4. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agent_loop.py +36 -0
  5. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/pyproject.toml +1 -1
  6. drydock_cli-2.5.1/scripts/discover_cli_tools.sh +69 -0
  7. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/CODEOWNERS +0 -0
  8. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  9. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  10. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  11. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/build-and-upload.yml +0 -0
  12. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/ci.yml +0 -0
  13. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/issue-labeler.yml +0 -0
  14. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.github/workflows/release.yml +0 -0
  15. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.gitignore +0 -0
  16. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.pre-commit-config.yaml +0 -0
  17. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.python-version +0 -0
  18. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.typos.toml +0 -0
  19. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/extensions.json +0 -0
  20. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/launch.json +0 -0
  21. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/.vscode/settings.json +0 -0
  22. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/AGENTS.md +0 -0
  23. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/CHANGELOG.md +0 -0
  24. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/CONTRIBUTING.md +0 -0
  25. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/Drydock_rebrand.md +0 -0
  26. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/LICENSE +0 -0
  27. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/NOTICE +0 -0
  28. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/PRD.md +0 -0
  29. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/README.md +0 -0
  30. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/action.yml +0 -0
  31. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/LICENSE +0 -0
  32. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/extension.toml +0 -0
  33. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/distribution/zed/icons/mistral_vibe.svg +0 -0
  34. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/README.md +0 -0
  35. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/acp-setup.md +0 -0
  36. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/docs/proxy-setup.md +0 -0
  37. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/__init__.py +0 -0
  38. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/__init__.py +0 -0
  39. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/acp_agent_loop.py +0 -0
  40. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/acp_logger.py +0 -0
  41. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/entrypoint.py +0 -0
  42. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/__init__.py +0 -0
  43. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/base.py +0 -0
  44. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/bash.py +0 -0
  45. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/read_file.py +0 -0
  46. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/search_replace.py +0 -0
  47. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/todo.py +0 -0
  48. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/builtins/write_file.py +0 -0
  49. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/tools/session_update.py +0 -0
  50. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/acp/utils.py +0 -0
  51. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/__init__.py +0 -0
  52. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/__init__.py +0 -0
  53. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/base.py +0 -0
  54. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/path_completion.py +0 -0
  55. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/autocompletion/slash_command.py +0 -0
  56. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/clipboard.py +0 -0
  57. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/commands.py +0 -0
  58. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/entrypoint.py +0 -0
  59. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/history_manager.py +0 -0
  60. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  61. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  62. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  63. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/terminal_setup.py +0 -0
  64. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/__init__.py +0 -0
  65. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  66. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/app.py +0 -0
  67. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/app.tcss +0 -0
  68. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/external_editor.py +0 -0
  69. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  70. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  71. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  72. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  73. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  74. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  75. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  76. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  77. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  78. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  79. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  80. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  81. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  82. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  83. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  84. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  85. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  86. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  87. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  88. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  89. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  90. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  91. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  92. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  93. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  94. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  95. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  96. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  97. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  98. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  99. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  100. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  101. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  102. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  103. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  104. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  105. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/history.py +0 -0
  106. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  107. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/textual_ui/windowing/state.py +0 -0
  108. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/__init__.py +0 -0
  109. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  110. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  111. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  112. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  113. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  114. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/update.py +0 -0
  115. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/cli/update_notifier/whats_new.py +0 -0
  116. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/__init__.py +0 -0
  117. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/__init__.py +0 -0
  118. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/manager.py +0 -0
  119. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/agents/models.py +0 -0
  120. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/__init__.py +0 -0
  121. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/crypto.py +0 -0
  122. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/auth/github.py +0 -0
  123. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/__init__.py +0 -0
  124. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/completers.py +0 -0
  125. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  126. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  127. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  128. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  129. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  130. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/fuzzy.py +0 -0
  131. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/path_prompt.py +0 -0
  132. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  133. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/build_orchestrator.py +0 -0
  134. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/__init__.py +0 -0
  135. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/_settings.py +0 -0
  136. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/__init__.py +0 -0
  137. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  138. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/config/harness_files/_paths.py +0 -0
  139. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/consultant.py +0 -0
  140. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/drydock_states.py +0 -0
  141. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/hooks.py +0 -0
  142. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/__init__.py +0 -0
  143. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/anthropic.py +0 -0
  144. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/base.py +0 -0
  145. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/factory.py +0 -0
  146. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/generic.py +0 -0
  147. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/mistral.py +0 -0
  148. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  149. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/backend/vertex.py +0 -0
  150. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/exceptions.py +0 -0
  151. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/format.py +0 -0
  152. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/message_utils.py +0 -0
  153. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/llm/types.py +0 -0
  154. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/logger.py +0 -0
  155. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/middleware.py +0 -0
  156. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/output_formatters.py +0 -0
  157. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/__init__.py +0 -0
  158. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/_local_config_walk.py +0 -0
  159. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/_vibe_home.py +0 -0
  160. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/paths/conventions.py +0 -0
  161. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/plan_session.py +0 -0
  162. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/plugins.py +0 -0
  163. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/programmatic.py +0 -0
  164. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/__init__.py +0 -0
  165. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/builder.md +0 -0
  166. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/cli.md +0 -0
  167. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/compact.md +0 -0
  168. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/dangerous_directory.md +0 -0
  169. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/diagnostic.md +0 -0
  170. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/explore.md +0 -0
  171. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/gemma4.md +0 -0
  172. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/planner.md +0 -0
  173. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/project_context.md +0 -0
  174. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/prompts/tests.md +0 -0
  175. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/proxy_setup.py +0 -0
  176. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/agent_memory.py +0 -0
  177. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/checkpoints.py +0 -0
  178. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_loader.py +0 -0
  179. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_logger.py +0 -0
  180. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/session_migration.py +0 -0
  181. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/session/state_file.py +0 -0
  182. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/__init__.py +0 -0
  183. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/manager.py +0 -0
  184. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/models.py +0 -0
  185. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/skills/parser.py +0 -0
  186. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/slug.py +0 -0
  187. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/system_prompt.py +0 -0
  188. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/telemetry/__init__.py +0 -0
  189. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/telemetry/send.py +0 -0
  190. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/errors.py +0 -0
  191. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/git.py +0 -0
  192. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/nuage.py +0 -0
  193. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/teleport.py +0 -0
  194. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/teleport/types.py +0 -0
  195. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/base.py +0 -0
  196. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  197. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/bash.py +0 -0
  198. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/cron.py +0 -0
  199. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  200. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/glob_tool.py +0 -0
  201. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/grep.py +0 -0
  202. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  203. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/lsp.py +0 -0
  204. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  205. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  206. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/powershell.py +0 -0
  207. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  208. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  209. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  210. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  211. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  212. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  213. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  214. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  215. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  216. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  217. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  218. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  219. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  220. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  221. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/task.md +0 -0
  222. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  223. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  224. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  225. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  226. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  227. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  228. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  229. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/read_file.py +0 -0
  230. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/search_replace.py +0 -0
  231. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/task.py +0 -0
  232. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/task_manager.py +0 -0
  233. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/todo.py +0 -0
  234. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/tool_search.py +0 -0
  235. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/webfetch.py +0 -0
  236. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/websearch.py +0 -0
  237. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/worktree.py +0 -0
  238. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/builtins/write_file.py +0 -0
  239. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/injection_guard.py +0 -0
  240. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/manager.py +0 -0
  241. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/__init__.py +0 -0
  242. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/registry.py +0 -0
  243. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp/tools.py +0 -0
  244. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/mcp_sampling.py +0 -0
  245. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/ui.py +0 -0
  246. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/tools/utils.py +0 -0
  247. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/trusted_folders.py +0 -0
  248. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/types.py +0 -0
  249. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/core/utils.py +0 -0
  250. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/__init__.py +0 -0
  251. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/base.py +0 -0
  252. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/onboarding.tcss +0 -0
  253. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/__init__.py +0 -0
  254. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/api_key.py +0 -0
  255. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/onboarding/screens/welcome.py +0 -0
  256. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  257. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  258. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/__init__.py +0 -0
  259. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/api-design/SKILL.md +0 -0
  260. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/batch/SKILL.md +0 -0
  261. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/commit-code/SKILL.md +0 -0
  262. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/context-summary/SKILL.md +0 -0
  263. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/create-presentation/SKILL.md +0 -0
  264. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/deep-research/SKILL.md +0 -0
  265. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/deploy/SKILL.md +0 -0
  266. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/diff-review/SKILL.md +0 -0
  267. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/doc-gen/SKILL.md +0 -0
  268. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/explain-code/SKILL.md +0 -0
  269. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/explore-code/SKILL.md +0 -0
  270. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/fix-issue/SKILL.md +0 -0
  271. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/git-ops/SKILL.md +0 -0
  272. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/init-project/SKILL.md +0 -0
  273. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/investigate/SKILL.md +0 -0
  274. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/loop/SKILL.md +0 -0
  275. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/migrate/SKILL.md +0 -0
  276. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/perf-analyze/SKILL.md +0 -0
  277. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/plan-impl/SKILL.md +0 -0
  278. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/pr-review/SKILL.md +0 -0
  279. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/refactor/SKILL.md +0 -0
  280. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/regex-help/SKILL.md +0 -0
  281. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/review/SKILL.md +0 -0
  282. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/security-review/SKILL.md +0 -0
  283. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/ship/SKILL.md +0 -0
  284. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/simplify/SKILL.md +0 -0
  285. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/skills/test-verify/SKILL.md +0 -0
  286. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock/whats_new.md +0 -0
  287. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock-acp.spec +0 -0
  288. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/drydock_terms.md +0 -0
  289. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/flake.lock +0 -0
  290. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/flake.nix +0 -0
  291. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/__init__.py +0 -0
  292. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/__main__.py +0 -0
  293. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/analyzer.py +0 -0
  294. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/log_analyzer/cli.py +0 -0
  295. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/README.md +0 -0
  296. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/auto_test_loop.sh +0 -0
  297. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/backup.sh +0 -0
  298. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/bump_version.py +0 -0
  299. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/deploy_to_github.sh +0 -0
  300. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/install.sh +0 -0
  301. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/monitor_swebench.sh +0 -0
  302. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/monitor_test_battery.sh +0 -0
  303. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/notify_release.py +0 -0
  304. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/overnight_agents_test.sh +0 -0
  305. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/prepare_release.py +0 -0
  306. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/publish_to_pypi.sh +0 -0
  307. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_bank.sh +0 -0
  308. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_full.sh +0 -0
  309. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_smoke.sh +0 -0
  310. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/test_tui_path.py +0 -0
  311. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/scripts/tui_test.py +0 -0
  312. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/__init__.py +0 -0
  313. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/conftest.py +0 -0
  314. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_acp.py +0 -0
  315. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_agent_thought.py +0 -0
  316. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_bash.py +0 -0
  317. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_compact_session_updates.py +0 -0
  318. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_content.py +0 -0
  319. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_initialize.py +0 -0
  320. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_list_sessions.py +0 -0
  321. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_load_session.py +0 -0
  322. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_multi_session.py +0 -0
  323. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_new_session.py +0 -0
  324. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_proxy_setup_acp.py +0 -0
  325. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_read_file.py +0 -0
  326. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_search_replace.py +0 -0
  327. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_config_option.py +0 -0
  328. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_mode.py +0 -0
  329. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_set_model.py +0 -0
  330. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_tool_call_session_update.py +0 -0
  331. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_utils.py +0 -0
  332. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/acp/test_write_file.py +0 -0
  333. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_file_indexer.py +0 -0
  334. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_fuzzy.py +0 -0
  335. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  336. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  337. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_completion_controller.py +0 -0
  338. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  339. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_slash_command_controller.py +0 -0
  340. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  341. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/__init__.py +0 -0
  342. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/__init__.py +0 -0
  343. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/fireworks.py +0 -0
  344. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/data/mistral.py +0 -0
  345. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_anthropic_adapter.py +0 -0
  346. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_backend.py +0 -0
  347. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_reasoning_adapter.py +0 -0
  348. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  349. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  350. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  351. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  352. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_bell_notifications.py +0 -0
  353. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_braille_renderer.py +0 -0
  354. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_clipboard.py +0 -0
  355. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_commands.py +0 -0
  356. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_copy_shortcuts.py +0 -0
  357. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_external_editor.py +0 -0
  358. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_no_markup_static.py +0 -0
  359. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_question_app.py +0 -0
  360. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_spinner.py +0 -0
  361. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_switching_mode.py +0 -0
  362. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  363. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  364. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_session_resume.py +0 -0
  365. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/test_ui_skill_dispatch.py +0 -0
  366. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/textual_ui/__init__.py +0 -0
  367. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/cli/textual_ui/test_session_picker.py +0 -0
  368. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/conftest.py +0 -0
  369. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_agents.py +0 -0
  370. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_auth_crypto.py +0 -0
  371. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_auth_github.py +0 -0
  372. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_load_dotenv.py +0 -0
  373. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_paths.py +0 -0
  374. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_config_resolution.py +0 -0
  375. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_file_logging.py +0 -0
  376. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_plan_session.py +0 -0
  377. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_proxy_setup.py +0 -0
  378. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_slug.py +0 -0
  379. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_telemetry_send.py +0 -0
  380. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_git.py +0 -0
  381. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_nuage.py +0 -0
  382. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_teleport_service.py +0 -0
  383. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_trusted_folders.py +0 -0
  384. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/core/test_utils.py +0 -0
  385. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/common.py +0 -0
  386. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/conftest.py +0 -0
  387. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/mock_server.py +0 -0
  388. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  389. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_streaming.py +0 -0
  390. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  391. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/__init__.py +0 -0
  392. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/mock_backend_factory.py +0 -0
  393. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/mock_entrypoint.py +0 -0
  394. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/mock/utils.py +0 -0
  395. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/onboarding/test_run_onboarding.py +0 -0
  396. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/onboarding/test_ui_onboarding.py +0 -0
  397. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_loader.py +0 -0
  398. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_logger.py +0 -0
  399. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/session/test_session_migration.py +0 -0
  400. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/conftest.py +0 -0
  401. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_manager.py +0 -0
  402. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_models.py +0 -0
  403. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/skills/test_parser.py +0 -0
  404. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  405. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  406. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  407. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/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.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  410. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  411. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  412. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  413. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  414. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  415. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  416. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  417. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  418. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  419. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  420. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  421. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  422. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  423. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  424. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  425. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  426. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  427. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  428. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  429. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  430. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  431. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  432. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  433. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  434. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  435. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  436. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  437. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  438. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  439. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  440. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  441. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  442. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  443. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  444. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  445. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  446. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  447. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  448. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  449. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  450. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  451. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  452. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  453. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  454. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  455. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  456. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  457. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  458. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  459. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  460. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  461. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  462. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  463. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  464. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/base_snapshot_test_app.py +0 -0
  465. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/conftest.py +0 -0
  466. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/snap_compare.py +0 -0
  467. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  468. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  469. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  470. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  471. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  472. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  473. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  474. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  475. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  476. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  477. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  478. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  479. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  480. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  481. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_backend.py +0 -0
  482. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_client.py +0 -0
  483. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/stubs/fake_tool.py +0 -0
  484. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_auto_compact.py +0 -0
  485. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_backend.py +0 -0
  486. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_observer_streaming.py +0 -0
  487. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_stats.py +0 -0
  488. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_tasks.py +0 -0
  489. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agent_tool_call.py +0 -0
  490. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_agents.py +0 -0
  491. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_build.py +0 -0
  492. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_debug.py +0 -0
  493. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_multiagent.py +0 -0
  494. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_prd.py +0 -0
  495. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_prd_extended.py +0 -0
  496. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_tools.py +0 -0
  497. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_bank_update.py +0 -0
  498. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_build_projects.py +0 -0
  499. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_cli_programmatic_preload.py +0 -0
  500. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_current_bugs.py +0 -0
  501. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_drydock_regression.py +0 -0
  502. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_drydock_tasks.py +0 -0
  503. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_full_regression.py +0 -0
  504. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_history_manager.py +0 -0
  505. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_integration.py +0 -0
  506. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_loop_detection.py +0 -0
  507. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_message_id.py +0 -0
  508. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_message_merging.py +0 -0
  509. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_middleware.py +0 -0
  510. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_multi_agent.py +0 -0
  511. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_failures.py +0 -0
  512. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_issues.py +0 -0
  513. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_real_workflow.py +0 -0
  514. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_reasoning_content.py +0 -0
  515. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_smoke.py +0 -0
  516. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_system_prompt.py +0 -0
  517. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_tagged_text.py +0 -0
  518. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_ui_external_editor.py +0 -0
  519. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_ui_input_history.py +0 -0
  520. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_user_issues.py +0 -0
  521. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/test_workloads.py +0 -0
  522. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/testbank_helpers.py +0 -0
  523. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_ask_user_question.py +0 -0
  524. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_bash.py +0 -0
  525. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_exit_plan_mode.py +0 -0
  526. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_grep.py +0 -0
  527. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_invoke_context.py +0 -0
  528. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_manager_get_tool_config.py +0 -0
  529. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_mcp.py +0 -0
  530. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_mcp_sampling.py +0 -0
  531. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_task.py +0 -0
  532. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_ui_bash_execution.py +0 -0
  533. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_webfetch.py +0 -0
  534. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/tools/test_websearch.py +0 -0
  535. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  536. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  537. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_do_update.py +0 -0
  538. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  539. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_github_update_gateway.py +0 -0
  540. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  541. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_ui_update_notification.py +0 -0
  542. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_update_use_case.py +0 -0
  543. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/tests/update_notifier/test_whats_new.py +0 -0
  544. {drydock_cli-2.4.9 → drydock_cli-2.5.1}/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.4.9
3
+ Version: 2.5.1
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
@@ -157,92 +157,57 @@ def run_cli(args: argparse.Namespace) -> None:
157
157
  loaded_session = load_session(args, config)
158
158
 
159
159
  stdin_prompt = get_prompt_from_stdin()
160
+
161
+ # -p flag feeds prompt into the TUI (headless mode removed)
160
162
  if args.prompt is not None:
161
- # Disable tools that Gemma 4 can't handle
162
- gemma_disabled = []
163
- try:
164
- active = config.get_active_model()
165
- if "gemma" in active.name.lower():
166
- gemma_disabled = ["todo", "task_create", "task_update", "task", "invoke_skill", "tool_search"]
167
- except Exception:
168
- pass
169
- config.disabled_tools = [*config.disabled_tools, "ask_user_question", *gemma_disabled]
170
- programmatic_prompt = args.prompt or stdin_prompt
171
- if not programmatic_prompt:
172
- print(
173
- "Error: No prompt provided for programmatic mode", file=sys.stderr
174
- )
175
- sys.exit(1)
176
- output_format = OutputFormat(
177
- args.output if hasattr(args, "output") else "text"
178
- )
163
+ if not hasattr(args, 'initial_prompt') or not args.initial_prompt:
164
+ args.initial_prompt = args.prompt or stdin_prompt
179
165
 
180
- try:
181
- final_response = run_programmatic(
182
- config=config,
183
- prompt=programmatic_prompt,
184
- max_turns=args.max_turns,
185
- max_price=args.max_price,
186
- output_format=output_format,
187
- previous_messages=loaded_session[0] if loaded_session else None,
188
- agent_name=initial_agent_name,
189
- )
190
- if final_response:
191
- print(final_response)
192
- sys.exit(0)
193
- except ConversationLimitException as e:
194
- print(e, file=sys.stderr)
195
- sys.exit(1)
196
- except RuntimeError as e:
197
- print(f"Error: {e}", file=sys.stderr)
198
- sys.exit(1)
199
- else:
200
- # Disable problematic tools for models that can't handle complex schemas
201
- try:
202
- active = config.get_active_model()
203
- if "gemma" in active.name.lower():
204
- config.disabled_tools = [
205
- *config.disabled_tools,
206
- "ask_user_question", # Gemma sends empty {} args
207
- "todo", # Gemma sends empty {} args
208
- "task_create", # Gemma loops on task management instead of coding
209
- "task_update", # Gemma sends invalid args, loops 64+ times
210
- "task", # Subagent delegation — Gemma can't use it properly
211
- "invoke_skill", # Gemma loads wrong skills, leaks templates
212
- "tool_search", # Not useful for local models
213
- ]
214
- except (ValueError, AttributeError):
215
- pass
216
-
217
- # Disable streaming for Gemma 4 — streaming tool call accumulation
218
- # produces empty arguments (14 write_file calls → 0 files).
219
- # Headless (non-streaming) works perfectly with same model.
220
- use_streaming = True
221
- try:
222
- if "gemma" in config.get_active_model().name.lower():
223
- use_streaming = False
224
- except Exception:
225
- pass
226
-
227
- agent_loop = AgentLoop(
228
- config,
229
- agent_name=initial_agent_name,
230
- enable_streaming=use_streaming,
231
- entrypoint_metadata=EntrypointMetadata(
232
- agent_entrypoint="cli",
233
- agent_version=__version__,
234
- client_name="drydock_cli",
235
- client_version=__version__,
236
- ),
237
- )
166
+ # Disable problematic tools for models that can't handle complex schemas
167
+ try:
168
+ active = config.get_active_model()
169
+ if "gemma" in active.name.lower():
170
+ config.disabled_tools = [
171
+ *config.disabled_tools,
172
+ "ask_user_question",
173
+ "todo",
174
+ "task_create",
175
+ "task_update",
176
+ "task",
177
+ "invoke_skill",
178
+ "tool_search",
179
+ ]
180
+ except (ValueError, AttributeError):
181
+ pass
182
+
183
+ # Disable streaming for Gemma 4 — streaming tool call accumulation
184
+ # produces empty arguments (14 write_file calls → 0 files)
185
+ use_streaming = True
186
+ try:
187
+ if "gemma" in config.get_active_model().name.lower():
188
+ use_streaming = False
189
+ except Exception:
190
+ pass
191
+
192
+ agent_loop = AgentLoop(
193
+ config,
194
+ agent_name=initial_agent_name,
195
+ enable_streaming=use_streaming,
196
+ entrypoint_metadata=EntrypointMetadata(
197
+ agent_entrypoint="cli",
198
+ agent_version=__version__,
199
+ client_name="drydock_cli",
200
+ client_version=__version__,
201
+ ),
202
+ )
238
203
 
239
- if loaded_session:
240
- _resume_previous_session(agent_loop, *loaded_session)
204
+ if loaded_session:
205
+ _resume_previous_session(agent_loop, *loaded_session)
241
206
 
242
- run_textual_ui(
243
- agent_loop=agent_loop,
244
- initial_prompt=args.initial_prompt or stdin_prompt,
245
- teleport_on_start=args.teleport,
207
+ run_textual_ui(
208
+ agent_loop=agent_loop,
209
+ initial_prompt=args.initial_prompt or stdin_prompt,
210
+ teleport_on_start=args.teleport,
246
211
  )
247
212
 
248
213
  except (KeyboardInterrupt, EOFError):
@@ -1856,6 +1856,42 @@ class AgentLoop:
1856
1856
  except Exception:
1857
1857
  pass
1858
1858
 
1859
+ # Inject discoverable CLI tools (built by DryDock, CLI-Anything, system)
1860
+ try:
1861
+ from drydock.core.config.harness_files import get_harness_files_manager
1862
+ mgr = get_harness_files_manager()
1863
+ user_skills_dirs = mgr.user_skills_dirs
1864
+ tools_found = []
1865
+ for skills_dir in user_skills_dirs:
1866
+ if not skills_dir.is_dir():
1867
+ continue
1868
+ for skill_dir in sorted(skills_dir.iterdir())[:50]:
1869
+ skill_md = skill_dir / "SKILL.md"
1870
+ if not skill_md.is_file():
1871
+ continue
1872
+ name = skill_dir.name
1873
+ # Only show tool-*, system-*, cli-anything-* skills
1874
+ if not any(name.startswith(p) for p in ("tool-", "system-", "cli-anything-")):
1875
+ continue
1876
+ # Read first line of description
1877
+ try:
1878
+ for line in skill_md.read_text(encoding="utf-8").split("\n"):
1879
+ if line.strip().startswith("description:"):
1880
+ desc = line.split(":", 1)[1].strip().strip('"').strip("'")[:80]
1881
+ tools_found.append(f" {name}: {desc}")
1882
+ break
1883
+ except Exception:
1884
+ pass
1885
+ if tools_found:
1886
+ # Show max 15 to avoid bloating context
1887
+ parts.append(
1888
+ f"AVAILABLE CLI TOOLS ({len(tools_found)} installed, showing first 15):\n"
1889
+ + "\n".join(tools_found[:15])
1890
+ + "\nUse via bash: cd /path && python3 -m package_name [args]"
1891
+ )
1892
+ except Exception:
1893
+ pass
1894
+
1859
1895
  if parts:
1860
1896
  self._inject_system_note("\n".join(parts))
1861
1897
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.4.9"
3
+ version = "2.5.1"
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