drydock-cli 2.6.1__tar.gz → 2.6.3__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 (549) hide show
  1. drydock_cli-2.6.3/.auto_release.lock +1 -0
  2. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/PKG-INFO +1 -1
  3. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/agent_loop.py +3 -163
  4. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/generic.py +1 -1
  5. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/ask_user_question.py +1 -2
  6. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/todo.py +15 -1
  7. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/pyproject.toml +1 -1
  8. drydock_cli-2.6.3/tests/test_tool_args.py +246 -0
  9. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/CODEOWNERS +0 -0
  10. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  11. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  12. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/workflows/build-and-upload.yml +0 -0
  14. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/workflows/ci.yml +0 -0
  15. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/workflows/issue-labeler.yml +0 -0
  16. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.github/workflows/release.yml +0 -0
  17. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.gitignore +0 -0
  18. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.pre-commit-config.yaml +0 -0
  19. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.python-version +0 -0
  20. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.typos.toml +0 -0
  21. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.vscode/extensions.json +0 -0
  22. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.vscode/launch.json +0 -0
  23. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/.vscode/settings.json +0 -0
  24. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/AGENTS.md +0 -0
  25. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/CHANGELOG.md +0 -0
  26. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/CLAUDE.md +0 -0
  27. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/CONTRIBUTING.md +0 -0
  28. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/Drydock_rebrand.md +0 -0
  29. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/LICENSE +0 -0
  30. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/NOTICE +0 -0
  31. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/PRD.md +0 -0
  32. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/README.md +0 -0
  33. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/action.yml +0 -0
  34. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/distribution/zed/LICENSE +0 -0
  35. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/distribution/zed/extension.toml +0 -0
  36. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/distribution/zed/icons/mistral_vibe.svg +0 -0
  37. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/docs/README.md +0 -0
  38. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/docs/acp-setup.md +0 -0
  39. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/docs/proxy-setup.md +0 -0
  40. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/__init__.py +0 -0
  41. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/__init__.py +0 -0
  42. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/acp_agent_loop.py +0 -0
  43. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/acp_logger.py +0 -0
  44. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/entrypoint.py +0 -0
  45. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/__init__.py +0 -0
  46. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/base.py +0 -0
  47. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/builtins/bash.py +0 -0
  48. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/builtins/read_file.py +0 -0
  49. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/builtins/search_replace.py +0 -0
  50. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/builtins/todo.py +0 -0
  51. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/builtins/write_file.py +0 -0
  52. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/tools/session_update.py +0 -0
  53. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/acp/utils.py +0 -0
  54. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/__init__.py +0 -0
  55. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/autocompletion/__init__.py +0 -0
  56. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/autocompletion/base.py +0 -0
  57. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/autocompletion/path_completion.py +0 -0
  58. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/autocompletion/slash_command.py +0 -0
  59. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/cli.py +0 -0
  60. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/clipboard.py +0 -0
  61. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/commands.py +0 -0
  62. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/entrypoint.py +0 -0
  63. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/history_manager.py +0 -0
  64. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  65. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  66. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  67. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/terminal_setup.py +0 -0
  68. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/__init__.py +0 -0
  69. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  70. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/app.py +0 -0
  71. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/app.tcss +0 -0
  72. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/external_editor.py +0 -0
  73. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  74. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  75. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  76. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  77. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  78. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  79. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  80. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  81. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  82. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  83. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  84. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  85. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  86. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  87. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  88. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  89. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  90. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  91. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  92. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  93. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  94. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  95. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  96. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  97. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  98. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  99. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  100. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  101. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  102. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  103. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  104. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  105. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  106. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  107. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  108. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  109. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/windowing/history.py +0 -0
  110. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  111. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/textual_ui/windowing/state.py +0 -0
  112. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/__init__.py +0 -0
  113. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  114. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  115. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  116. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  117. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  118. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/update.py +0 -0
  119. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/cli/update_notifier/whats_new.py +0 -0
  120. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/__init__.py +0 -0
  121. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/agents/__init__.py +0 -0
  122. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/agents/manager.py +0 -0
  123. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/agents/models.py +0 -0
  124. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/auth/__init__.py +0 -0
  125. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/auth/crypto.py +0 -0
  126. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/auth/github.py +0 -0
  127. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/__init__.py +0 -0
  128. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/completers.py +0 -0
  129. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  130. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  131. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  132. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  133. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  134. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/fuzzy.py +0 -0
  135. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/path_prompt.py +0 -0
  136. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  137. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/build_orchestrator.py +0 -0
  138. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/config/__init__.py +0 -0
  139. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/config/_settings.py +0 -0
  140. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/config/harness_files/__init__.py +0 -0
  141. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  142. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/config/harness_files/_paths.py +0 -0
  143. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/consultant.py +0 -0
  144. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/drydock_states.py +0 -0
  145. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/hooks.py +0 -0
  146. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/__init__.py +0 -0
  147. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/anthropic.py +0 -0
  148. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/base.py +0 -0
  149. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/factory.py +0 -0
  150. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/mistral.py +0 -0
  151. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  152. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/backend/vertex.py +0 -0
  153. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/exceptions.py +0 -0
  154. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/format.py +0 -0
  155. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/message_utils.py +0 -0
  156. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/llm/types.py +0 -0
  157. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/logger.py +0 -0
  158. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/middleware.py +0 -0
  159. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/output_formatters.py +0 -0
  160. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/paths/__init__.py +0 -0
  161. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/paths/_local_config_walk.py +0 -0
  162. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/paths/_vibe_home.py +0 -0
  163. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/paths/conventions.py +0 -0
  164. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/plan_session.py +0 -0
  165. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/plugins.py +0 -0
  166. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/programmatic.py +0 -0
  167. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/__init__.py +0 -0
  168. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/builder.md +0 -0
  169. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/cli.md +0 -0
  170. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/compact.md +0 -0
  171. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/dangerous_directory.md +0 -0
  172. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/diagnostic.md +0 -0
  173. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/explore.md +0 -0
  174. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/gemma4.md +0 -0
  175. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/planner.md +0 -0
  176. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/project_context.md +0 -0
  177. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/prompts/tests.md +0 -0
  178. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/proxy_setup.py +0 -0
  179. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/agent_memory.py +0 -0
  180. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/checkpoints.py +0 -0
  181. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/session_loader.py +0 -0
  182. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/session_logger.py +0 -0
  183. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/session_migration.py +0 -0
  184. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session/state_file.py +0 -0
  185. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/session_checker.py +0 -0
  186. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/skills/__init__.py +0 -0
  187. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/skills/manager.py +0 -0
  188. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/skills/models.py +0 -0
  189. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/skills/parser.py +0 -0
  190. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/slug.py +0 -0
  191. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/system_prompt.py +0 -0
  192. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/telemetry/__init__.py +0 -0
  193. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/telemetry/send.py +0 -0
  194. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/teleport/errors.py +0 -0
  195. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/teleport/git.py +0 -0
  196. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/teleport/nuage.py +0 -0
  197. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/teleport/teleport.py +0 -0
  198. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/teleport/types.py +0 -0
  199. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/base.py +0 -0
  200. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/bash.py +0 -0
  201. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/cron.py +0 -0
  202. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  203. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/glob_tool.py +0 -0
  204. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/grep.py +0 -0
  205. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  206. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/lsp.py +0 -0
  207. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  208. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  209. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/powershell.py +0 -0
  210. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  211. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  212. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  213. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  214. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  215. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  216. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  217. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  218. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  219. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  220. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  221. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  222. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  223. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  224. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/task.md +0 -0
  225. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  226. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  227. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  228. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  229. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  230. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  231. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  232. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/read_file.py +0 -0
  233. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/search_replace.py +0 -0
  234. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/task.py +0 -0
  235. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/task_manager.py +0 -0
  236. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/tool_search.py +0 -0
  237. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/webfetch.py +0 -0
  238. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/websearch.py +0 -0
  239. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/worktree.py +0 -0
  240. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/builtins/write_file.py +0 -0
  241. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/injection_guard.py +0 -0
  242. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/manager.py +0 -0
  243. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/mcp/__init__.py +0 -0
  244. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/mcp/registry.py +0 -0
  245. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/mcp/tools.py +0 -0
  246. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/mcp_sampling.py +0 -0
  247. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/ui.py +0 -0
  248. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/tools/utils.py +0 -0
  249. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/trusted_folders.py +0 -0
  250. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/types.py +0 -0
  251. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/core/utils.py +0 -0
  252. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/__init__.py +0 -0
  253. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/base.py +0 -0
  254. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/onboarding.tcss +0 -0
  255. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/screens/__init__.py +0 -0
  256. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/screens/api_key.py +0 -0
  257. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/onboarding/screens/welcome.py +0 -0
  258. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  259. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  260. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/__init__.py +0 -0
  261. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/api-design/SKILL.md +0 -0
  262. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/batch/SKILL.md +0 -0
  263. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/commit-code/SKILL.md +0 -0
  264. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/context-summary/SKILL.md +0 -0
  265. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/create-presentation/SKILL.md +0 -0
  266. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/deep-research/SKILL.md +0 -0
  267. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/deploy/SKILL.md +0 -0
  268. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/diff-review/SKILL.md +0 -0
  269. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/doc-gen/SKILL.md +0 -0
  270. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/explain-code/SKILL.md +0 -0
  271. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/explore-code/SKILL.md +0 -0
  272. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/fix-issue/SKILL.md +0 -0
  273. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/git-ops/SKILL.md +0 -0
  274. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/init-project/SKILL.md +0 -0
  275. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/investigate/SKILL.md +0 -0
  276. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/loop/SKILL.md +0 -0
  277. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/migrate/SKILL.md +0 -0
  278. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/perf-analyze/SKILL.md +0 -0
  279. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/plan-impl/SKILL.md +0 -0
  280. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/pr-review/SKILL.md +0 -0
  281. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/refactor/SKILL.md +0 -0
  282. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/regex-help/SKILL.md +0 -0
  283. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/review/SKILL.md +0 -0
  284. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/security-review/SKILL.md +0 -0
  285. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/ship/SKILL.md +0 -0
  286. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/simplify/SKILL.md +0 -0
  287. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/skills/test-verify/SKILL.md +0 -0
  288. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock/whats_new.md +0 -0
  289. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock-acp.spec +0 -0
  290. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/drydock_terms.md +0 -0
  291. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/flake.lock +0 -0
  292. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/flake.nix +0 -0
  293. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/log_analyzer/__init__.py +0 -0
  294. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/log_analyzer/__main__.py +0 -0
  295. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/log_analyzer/analyzer.py +0 -0
  296. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/log_analyzer/cli.py +0 -0
  297. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/README.md +0 -0
  298. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/auto_release.sh +0 -0
  299. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/auto_test_loop.sh +0 -0
  300. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/backup.sh +0 -0
  301. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/bump_version.py +0 -0
  302. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/deploy_to_github.sh +0 -0
  303. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/discover_cli_tools.sh +0 -0
  304. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/install.sh +0 -0
  305. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/monitor_swebench.sh +0 -0
  306. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/monitor_test_battery.sh +0 -0
  307. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/notify_release.py +0 -0
  308. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/overnight_agents_test.sh +0 -0
  309. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/prepare_release.py +0 -0
  310. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/publish_to_pypi.sh +0 -0
  311. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/telegram_bot.py +0 -0
  312. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/test_bank.sh +0 -0
  313. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/test_full.sh +0 -0
  314. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/test_smoke.sh +0 -0
  315. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/test_tui_path.py +0 -0
  316. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/scripts/tui_test.py +0 -0
  317. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/__init__.py +0 -0
  318. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/conftest.py +0 -0
  319. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_acp.py +0 -0
  320. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_agent_thought.py +0 -0
  321. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_bash.py +0 -0
  322. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_compact_session_updates.py +0 -0
  323. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_content.py +0 -0
  324. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_initialize.py +0 -0
  325. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_list_sessions.py +0 -0
  326. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_load_session.py +0 -0
  327. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_multi_session.py +0 -0
  328. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_new_session.py +0 -0
  329. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_proxy_setup_acp.py +0 -0
  330. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_read_file.py +0 -0
  331. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_search_replace.py +0 -0
  332. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_set_config_option.py +0 -0
  333. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_set_mode.py +0 -0
  334. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_set_model.py +0 -0
  335. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_tool_call_session_update.py +0 -0
  336. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_utils.py +0 -0
  337. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/acp/test_write_file.py +0 -0
  338. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_file_indexer.py +0 -0
  339. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_fuzzy.py +0 -0
  340. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  341. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  342. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_path_completion_controller.py +0 -0
  343. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  344. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_slash_command_controller.py +0 -0
  345. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  346. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/__init__.py +0 -0
  347. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/data/__init__.py +0 -0
  348. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/data/fireworks.py +0 -0
  349. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/data/mistral.py +0 -0
  350. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/test_anthropic_adapter.py +0 -0
  351. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/test_backend.py +0 -0
  352. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/test_reasoning_adapter.py +0 -0
  353. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  354. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  355. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  356. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  357. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_bell_notifications.py +0 -0
  358. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_braille_renderer.py +0 -0
  359. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_clipboard.py +0 -0
  360. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_commands.py +0 -0
  361. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_copy_shortcuts.py +0 -0
  362. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_external_editor.py +0 -0
  363. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_no_markup_static.py +0 -0
  364. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_question_app.py +0 -0
  365. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_spinner.py +0 -0
  366. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_switching_mode.py +0 -0
  367. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  368. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  369. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_ui_session_resume.py +0 -0
  370. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/test_ui_skill_dispatch.py +0 -0
  371. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/textual_ui/__init__.py +0 -0
  372. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/cli/textual_ui/test_session_picker.py +0 -0
  373. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/conftest.py +0 -0
  374. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_agents.py +0 -0
  375. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_auth_crypto.py +0 -0
  376. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_auth_github.py +0 -0
  377. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_config_load_dotenv.py +0 -0
  378. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_config_paths.py +0 -0
  379. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_config_resolution.py +0 -0
  380. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_file_logging.py +0 -0
  381. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_plan_session.py +0 -0
  382. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_proxy_setup.py +0 -0
  383. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_slug.py +0 -0
  384. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_telemetry_send.py +0 -0
  385. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_teleport_git.py +0 -0
  386. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_teleport_nuage.py +0 -0
  387. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_teleport_service.py +0 -0
  388. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_trusted_folders.py +0 -0
  389. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/core/test_utils.py +0 -0
  390. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/common.py +0 -0
  391. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/conftest.py +0 -0
  392. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/mock_server.py +0 -0
  393. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  394. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/test_cli_tui_streaming.py +0 -0
  395. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  396. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/mock/__init__.py +0 -0
  397. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/mock/mock_backend_factory.py +0 -0
  398. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/mock/mock_entrypoint.py +0 -0
  399. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/mock/utils.py +0 -0
  400. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/onboarding/test_run_onboarding.py +0 -0
  401. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/onboarding/test_ui_onboarding.py +0 -0
  402. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/session/test_session_loader.py +0 -0
  403. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/session/test_session_logger.py +0 -0
  404. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/session/test_session_migration.py +0 -0
  405. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/skills/conftest.py +0 -0
  406. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/skills/test_manager.py +0 -0
  407. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/skills/test_models.py +0 -0
  408. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/skills/test_parser.py +0 -0
  409. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  410. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  411. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  412. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  413. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  414. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  415. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  416. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  417. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  418. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  419. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  420. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  421. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  422. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  423. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  424. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  425. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  426. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  427. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  428. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  429. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  430. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  431. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  432. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  433. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  434. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  435. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  436. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  437. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  438. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  439. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  440. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  441. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  442. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  443. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  444. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  445. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  446. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  447. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  448. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  449. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  450. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  451. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  452. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  453. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  454. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  455. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  456. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  457. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  458. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  459. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  460. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  461. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  462. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  463. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  464. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  465. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  466. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  467. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  468. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  469. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/base_snapshot_test_app.py +0 -0
  470. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/conftest.py +0 -0
  471. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/snap_compare.py +0 -0
  472. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  473. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  474. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  475. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  476. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  477. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  478. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  479. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  480. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  481. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  482. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  483. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  484. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  485. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  486. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/stubs/fake_backend.py +0 -0
  487. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/stubs/fake_client.py +0 -0
  488. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/stubs/fake_tool.py +0 -0
  489. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_auto_compact.py +0 -0
  490. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_backend.py +0 -0
  491. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_observer_streaming.py +0 -0
  492. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_stats.py +0 -0
  493. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_tasks.py +0 -0
  494. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agent_tool_call.py +0 -0
  495. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_agents.py +0 -0
  496. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_build.py +0 -0
  497. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_debug.py +0 -0
  498. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_multiagent.py +0 -0
  499. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_prd.py +0 -0
  500. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_prd_extended.py +0 -0
  501. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_tools.py +0 -0
  502. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_bank_update.py +0 -0
  503. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_build_projects.py +0 -0
  504. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_cli_programmatic_preload.py +0 -0
  505. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_current_bugs.py +0 -0
  506. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_drydock_regression.py +0 -0
  507. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_drydock_tasks.py +0 -0
  508. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_full_regression.py +0 -0
  509. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_history_manager.py +0 -0
  510. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_integration.py +0 -0
  511. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_loop_detection.py +0 -0
  512. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_message_id.py +0 -0
  513. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_message_merging.py +0 -0
  514. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_middleware.py +0 -0
  515. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_multi_agent.py +0 -0
  516. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_real_failures.py +0 -0
  517. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_real_issues.py +0 -0
  518. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_real_workflow.py +0 -0
  519. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_reasoning_content.py +0 -0
  520. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_smoke.py +0 -0
  521. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_system_prompt.py +0 -0
  522. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_tagged_text.py +0 -0
  523. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_ui_external_editor.py +0 -0
  524. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_ui_input_history.py +0 -0
  525. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_user_issues.py +0 -0
  526. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/test_workloads.py +0 -0
  527. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/testbank_helpers.py +0 -0
  528. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_ask_user_question.py +0 -0
  529. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_bash.py +0 -0
  530. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_exit_plan_mode.py +0 -0
  531. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_grep.py +0 -0
  532. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_invoke_context.py +0 -0
  533. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_manager_get_tool_config.py +0 -0
  534. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_mcp.py +0 -0
  535. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_mcp_sampling.py +0 -0
  536. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_task.py +0 -0
  537. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_ui_bash_execution.py +0 -0
  538. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_webfetch.py +0 -0
  539. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/tools/test_websearch.py +0 -0
  540. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  541. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  542. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_do_update.py +0 -0
  543. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  544. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_github_update_gateway.py +0 -0
  545. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  546. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_ui_update_notification.py +0 -0
  547. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_update_use_case.py +0 -0
  548. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/tests/update_notifier/test_whats_new.py +0 -0
  549. {drydock_cli-2.6.1 → drydock_cli-2.6.3}/uv.lock +0 -0
@@ -0,0 +1 @@
1
+ 3774888
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.6.1
3
+ Version: 2.6.3
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
@@ -594,174 +594,14 @@ class AgentLoop:
594
594
 
595
595
  last_message = self.messages[-1]
596
596
 
597
- # Track files explored, edits made, and bash/failure patterns
597
+ # Track edits no circuit breakers, just track for has_made_edit
598
598
  if not has_made_edit:
599
599
  for msg in reversed(self.messages[-5:]):
600
600
  if msg.role == Role.assistant and msg.tool_calls:
601
601
  for tc in msg.tool_calls:
602
- if not tc.function:
603
- continue
604
- if tc.function.name in ("search_replace", "write_file"):
605
- first_edit = not has_made_edit
602
+ if tc.function and tc.function.name in ("search_replace", "write_file"):
606
603
  has_made_edit = True
607
- bash_count = 0 # Reset on successful edit
608
- # Reset circuit breaker — the world changed after an edit,
609
- # so previously-failing commands may now succeed
610
- self._tool_call_history.clear()
611
- self._consecutive_circuit_breaker_fires = 0
612
- # Track blast radius
613
- try:
614
- edit_args = json.loads(tc.function.arguments or "{}")
615
- edit_path = edit_args.get("file_path", edit_args.get("path", ""))
616
- if edit_path and edit_path not in files_modified:
617
- files_modified.append(edit_path)
618
- except (json.JSONDecodeError, AttributeError):
619
- edit_path = ""
620
-
621
- # AUTO-FIX: Fix packaging issues the model gets wrong
622
- if edit_path and edit_path.endswith(".py"):
623
- self._auto_fix_package(edit_path)
624
-
625
- # Auto-run diagnostics on edited Python files
626
- if edit_path and edit_path.endswith(".py"):
627
- try:
628
- import asyncio
629
- import subprocess
630
- diag_result = subprocess.run(
631
- ["python3", "-c", f"import ast; ast.parse(open('{edit_path}').read()); print('OK')"],
632
- capture_output=True, text=True, timeout=5,
633
- )
634
- if diag_result.returncode != 0:
635
- self._inject_system_note(
636
- f"SYNTAX ERROR in {edit_path}: {diag_result.stderr.strip()[:200]}. "
637
- f"Fix the syntax error before continuing."
638
- )
639
- except Exception:
640
- pass
641
-
642
- # After first edit: prompt to check related files
643
- if first_edit and edit_path:
644
- self._inject_system_note(
645
- f"Good — you edited {edit_path}. Now check: "
646
- f"does this bug have a RELATED file that also needs changes? "
647
- f"Common patterns: if you edited a model, check the serializer/migration. "
648
- f"If you edited a base class, check subclasses. "
649
- f"If you edited a util, check callers. "
650
- f"Use grep to search for imports of the function/class you changed."
651
- )
652
- if tc.function.name == "read_file":
653
- try:
654
- args = json.loads(tc.function.arguments or "{}")
655
- path = args.get("path", args.get("file_path", ""))
656
- if path and path not in files_explored:
657
- files_explored.append(path)
658
- except (json.JSONDecodeError, AttributeError):
659
- pass
660
- if tc.function.name in ("bash", "run_command"):
661
- bash_count += 1
662
-
663
- # Track search_replace failures (called but error in result)
664
- for msg in reversed(self.messages[-3:]):
665
- if msg.role == Role.tool and msg.content:
666
- content = msg.content or ""
667
- if "search_replace" in content.lower() and "error" in content.lower():
668
- search_replace_failures += 1
669
-
670
- # Blast radius check: warn when touching 5+ files
671
- if len(files_modified) >= 5 and len(files_modified) % 5 == 0:
672
- self._inject_system_note(
673
- f"BLAST RADIUS WARNING: You have modified {len(files_modified)} files. "
674
- f"Files: {', '.join(files_modified[-5:])}. "
675
- f"This is a large change. Are you sure all these edits are needed? "
676
- f"Consider stopping to verify your approach."
677
- )
678
-
679
- # Post-edit bash loop: model made edits but now loops on bash
680
- # trying to test code that keeps failing
681
- if has_made_edit and bash_count >= 3:
682
- # Count consecutive bash calls at end of tool history
683
- consecutive_bash = 0
684
- for tc_name in reversed(self._recent_tool_names()):
685
- if tc_name in ("bash", "run_command"):
686
- consecutive_bash += 1
687
- else:
688
- break
689
- if consecutive_bash >= 3:
690
- self._inject_system_note(
691
- "You have run 3+ bash commands in a row. "
692
- "If your project is WORKING, you are DONE — tell the user the project "
693
- "is complete and what commands they can use. "
694
- "If it is FAILING, STOP running bash and use read_file + search_replace "
695
- "to fix the code. Do NOT keep running the same test."
696
- )
697
-
698
- # Detect bash file creation (touch, echo >, cat <<)
699
- for msg in reversed(self.messages[-3:]):
700
- if msg.role == Role.assistant and msg.tool_calls:
701
- for tc in msg.tool_calls:
702
- if tc.function and tc.function.name in ("bash", "run_command"):
703
- cmd = ""
704
- try:
705
- cmd = json.loads(tc.function.arguments or "{}").get("command", "")
706
- except (json.JSONDecodeError, AttributeError):
707
- pass
708
- if any(kw in cmd for kw in ("touch ", "echo ", "cat <<", "printf ", "> ")):
709
- self._inject_system_note(
710
- f"Do NOT use bash to create files. Use write_file instead. "
711
- f"bash touch/echo/cat does not create proper code files."
712
- )
713
-
714
- # Bash abuse detection: model uses bash instead of proper tools
715
- if not has_made_edit and bash_count >= 3:
716
- if bash_count == 3:
717
- self._inject_system_note(
718
- "You have run 3 bash commands without creating or editing any files. "
719
- "STOP running bash. Start CREATING files with write_file or "
720
- "EDITING files with search_replace. bash does not create code."
721
- )
722
- elif bash_count == 6:
723
- self._inject_system_note(
724
- "WARNING: 6 bash commands, ZERO file edits. You are stuck in a loop. "
725
- "Your NEXT action MUST be write_file to create a file or "
726
- "search_replace to edit one. Do NOT run any more bash commands."
727
- )
728
- elif bash_count >= 10 and bash_count % 5 == 0:
729
- # Nudge every 5 bash calls, never stop
730
- self._inject_system_note(
731
- "You have run many bash commands. Consider using write_file "
732
- "or search_replace to create/edit files."
733
- )
734
-
735
- # 3-Strike Rule: search_replace keeps failing
736
- if search_replace_failures >= 3:
737
- if search_replace_failures == 3:
738
- self._inject_system_note(
739
- f"3-STRIKE RULE: Your search_replace has failed {search_replace_failures} times. "
740
- "STOP trying the same approach. "
741
- "Either: (1) use read_file to get the EXACT text first, "
742
- "(2) try a completely different file, or "
743
- "(3) ask the user for help with /consult."
744
- )
745
- elif search_replace_failures % 3 == 0:
746
- self._inject_system_note(
747
- f"STOP: {search_replace_failures} failed edits. You are stuck. Ask the user for help."
748
- )
749
-
750
- # Context budget warning: after 7 tool turns without an edit,
751
- # warn that context is being consumed without progress
752
- if tool_turns == 7 and not has_made_edit and not context_summary_injected:
753
- context_summary_injected = True
754
- summary = (
755
- "CONTEXT BUDGET WARNING: You have used 7 tool calls without making an edit. "
756
- "Your context window is filling up — performance degrades as it fills. "
757
- )
758
- if files_explored:
759
- summary += "Files explored: " + ", ".join(files_explored[-5:]) + ". "
760
- summary += (
761
- "You MUST state your TARGET/FUNCTION/CAUSE/FIX now and use search_replace "
762
- "on your next turn. Do NOT continue exploring."
763
- )
764
- self._inject_system_note(summary)
604
+ break
765
605
 
766
606
  should_break_loop = last_message.role != Role.tool
767
607
 
@@ -160,7 +160,7 @@ class OpenAIAdapter(APIAdapter):
160
160
  )
161
161
 
162
162
  # Enable thinking for models that support it (Gemma 4)
163
- if thinking and thinking != "off":
163
+ if thinking and thinking not in ("off", ""):
164
164
  payload["chat_template_kwargs"] = {"enable_thinking": True}
165
165
 
166
166
  if enable_streaming:
@@ -46,9 +46,8 @@ class Question(BaseModel):
46
46
 
47
47
  class AskUserQuestionArgs(BaseModel):
48
48
  questions: list[Question] = Field(
49
- default_factory=lambda: [Question(text="What would you like to do?")],
49
+ default_factory=list,
50
50
  description="Questions to ask (1-4). Displayed as tabs if multiple.",
51
- min_length=1,
52
51
  max_length=4,
53
52
  )
54
53
  content_preview: str | None = Field(
@@ -4,7 +4,7 @@ from collections.abc import AsyncGenerator
4
4
  from enum import StrEnum, auto
5
5
  from typing import ClassVar
6
6
 
7
- from pydantic import BaseModel, Field
7
+ from pydantic import BaseModel, Field, field_validator
8
8
 
9
9
  from drydock.core.tools.base import (
10
10
  BaseTool,
@@ -37,6 +37,20 @@ class TodoItem(BaseModel):
37
37
  status: TodoStatus = TodoStatus.PENDING
38
38
  priority: TodoPriority = TodoPriority.MEDIUM
39
39
 
40
+ @field_validator("status", mode="before")
41
+ @classmethod
42
+ def clean_status(cls, v):
43
+ if isinstance(v, str):
44
+ return v.strip("'\"").lower()
45
+ return v
46
+
47
+ @field_validator("priority", mode="before")
48
+ @classmethod
49
+ def clean_priority(cls, v):
50
+ if isinstance(v, str):
51
+ return v.strip("'\"").lower()
52
+ return v
53
+
40
54
 
41
55
  class TodoArgs(BaseModel):
42
56
  action: str = Field(default="read", description="Either 'read' or 'write'")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.6.1"
3
+ version = "2.6.3"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,246 @@
1
+ """Test all tools accept the argument formats Gemma 4 actually sends.
2
+
3
+ Gemma 4 quirks:
4
+ - Wraps enum values in extra quotes: "'completed'" instead of "completed"
5
+ - Sometimes omits required fields
6
+ - Sometimes sends empty {} for all args
7
+ - Sends file_path as "path" or vice versa
8
+ - Sends content in wrong field for search_replace
9
+ """
10
+ import json
11
+ import pytest
12
+ from pathlib import Path
13
+ from unittest.mock import MagicMock
14
+
15
+
16
+ def try_validate(args_class, data: dict) -> tuple[bool, str]:
17
+ """Try to validate args, return (success, error_message)."""
18
+ try:
19
+ args_class.model_validate(data)
20
+ return True, ""
21
+ except Exception as e:
22
+ return False, str(e)[:200]
23
+
24
+
25
+ class TestTodoArgs:
26
+ """Todo tool argument validation."""
27
+
28
+ def setup_method(self):
29
+ from drydock.core.tools.builtins.todo import TodoArgs, TodoItem
30
+ self.TodoArgs = TodoArgs
31
+ self.TodoItem = TodoItem
32
+
33
+ def test_empty_args_has_default(self):
34
+ """Empty {} should work — action defaults to 'read'."""
35
+ ok, err = try_validate(self.TodoArgs, {})
36
+ assert ok, f"Empty args failed: {err}"
37
+
38
+ def test_quoted_enum_status(self):
39
+ """Gemma 4 sends \"'completed'\" with extra quotes."""
40
+ ok, err = try_validate(self.TodoItem, {
41
+ "id": "1", "content": "test", "status": "'completed'", "priority": "high"
42
+ })
43
+ assert ok, f"Quoted status failed: {err}"
44
+
45
+ def test_quoted_enum_priority(self):
46
+ """Gemma 4 sends \"'high'\" with extra quotes."""
47
+ ok, err = try_validate(self.TodoItem, {
48
+ "id": "1", "content": "test", "status": "pending", "priority": "'high'"
49
+ })
50
+ assert ok, f"Quoted priority failed: {err}"
51
+
52
+ def test_uppercase_enum(self):
53
+ """Model might send COMPLETED instead of completed."""
54
+ ok, err = try_validate(self.TodoItem, {
55
+ "id": "1", "content": "test", "status": "COMPLETED", "priority": "HIGH"
56
+ })
57
+ assert ok, f"Uppercase enum failed: {err}"
58
+
59
+
60
+ class TestWriteFileArgs:
61
+ """Write file tool argument validation."""
62
+
63
+ def setup_method(self):
64
+ from drydock.core.tools.builtins.write_file import WriteFileArgs
65
+ self.WriteFileArgs = WriteFileArgs
66
+
67
+ def test_normal_args(self):
68
+ ok, err = try_validate(self.WriteFileArgs, {
69
+ "path": "test.py", "content": "print('hello')"
70
+ })
71
+ assert ok, f"Normal args failed: {err}"
72
+
73
+ def test_overwrite_defaults_true(self):
74
+ """Overwrite should default to True."""
75
+ args = self.WriteFileArgs.model_validate({"path": "test.py", "content": "x"})
76
+ assert args.overwrite is True
77
+
78
+ def test_empty_content(self):
79
+ """Empty content should be accepted (for __init__.py)."""
80
+ ok, err = try_validate(self.WriteFileArgs, {
81
+ "path": "test.py", "content": ""
82
+ })
83
+ assert ok, f"Empty content failed: {err}"
84
+
85
+
86
+ class TestSearchReplaceArgs:
87
+ """Search replace tool argument validation."""
88
+
89
+ def setup_method(self):
90
+ from drydock.core.tools.builtins.search_replace import SearchReplaceArgs
91
+ self.SearchReplaceArgs = SearchReplaceArgs
92
+
93
+ def test_normal_args(self):
94
+ ok, err = try_validate(self.SearchReplaceArgs, {
95
+ "file_path": "test.py",
96
+ "content": "<<<<<<< SEARCH\nold\n=======\nnew\n>>>>>>> REPLACE"
97
+ })
98
+ assert ok, f"Normal args failed: {err}"
99
+
100
+ def test_missing_file_path_has_default(self):
101
+ """file_path should default to empty string, not crash."""
102
+ ok, err = try_validate(self.SearchReplaceArgs, {
103
+ "content": "<<<<<<< SEARCH\nold\n=======\nnew\n>>>>>>> REPLACE"
104
+ })
105
+ assert ok, f"Missing file_path failed: {err}"
106
+
107
+ def test_old_new_string_direct(self):
108
+ """Gemma 4 sometimes sends old_string/new_string directly."""
109
+ ok, err = try_validate(self.SearchReplaceArgs, {
110
+ "file_path": "test.py",
111
+ "old_string": "old text",
112
+ "new_string": "new text"
113
+ })
114
+ assert ok, f"Direct old/new string failed: {err}"
115
+
116
+ def test_empty_args(self):
117
+ """Empty args should not crash."""
118
+ ok, err = try_validate(self.SearchReplaceArgs, {})
119
+ assert ok, f"Empty args failed: {err}"
120
+
121
+
122
+ class TestAskUserQuestionArgs:
123
+ """Ask user question tool argument validation."""
124
+
125
+ def setup_method(self):
126
+ from drydock.core.tools.builtins.ask_user_question import AskUserQuestionArgs
127
+ self.AskUserQuestionArgs = AskUserQuestionArgs
128
+
129
+ def test_empty_args_has_default(self):
130
+ """Empty {} should work — questions has a default."""
131
+ ok, err = try_validate(self.AskUserQuestionArgs, {})
132
+ assert ok, f"Empty args failed: {err}"
133
+
134
+
135
+ class TestReadFileArgs:
136
+ """Read file tool argument validation."""
137
+
138
+ def setup_method(self):
139
+ from drydock.core.tools.builtins.read_file import ReadFileArgs
140
+ self.ReadFileArgs = ReadFileArgs
141
+
142
+ def test_path_field(self):
143
+ ok, err = try_validate(self.ReadFileArgs, {"path": "test.py"})
144
+ assert ok, f"Path field failed: {err}"
145
+
146
+ def test_with_offset_limit(self):
147
+ ok, err = try_validate(self.ReadFileArgs, {
148
+ "path": "test.py", "offset": 10, "limit": 50
149
+ })
150
+ assert ok, f"Offset/limit failed: {err}"
151
+
152
+
153
+ class TestBashArgs:
154
+ """Bash tool argument validation."""
155
+
156
+ def setup_method(self):
157
+ from drydock.core.tools.builtins.bash import BashArgs
158
+ self.BashArgs = BashArgs
159
+
160
+ def test_command_field(self):
161
+ ok, err = try_validate(self.BashArgs, {"command": "ls -la"})
162
+ assert ok, f"Command field failed: {err}"
163
+
164
+ def test_with_timeout(self):
165
+ ok, err = try_validate(self.BashArgs, {"command": "sleep 1", "timeout": 5})
166
+ assert ok, f"Timeout failed: {err}"
167
+
168
+
169
+ class TestGrepArgs:
170
+ """Grep tool argument validation."""
171
+
172
+ def setup_method(self):
173
+ from drydock.core.tools.builtins.grep import GrepArgs
174
+ self.GrepArgs = GrepArgs
175
+
176
+ def test_pattern_only(self):
177
+ ok, err = try_validate(self.GrepArgs, {"pattern": "def main"})
178
+ assert ok, f"Pattern only failed: {err}"
179
+
180
+ def test_with_path(self):
181
+ ok, err = try_validate(self.GrepArgs, {"pattern": "import", "path": "."})
182
+ assert ok, f"With path failed: {err}"
183
+
184
+
185
+ class TestGlobArgs:
186
+ """Glob tool argument validation."""
187
+
188
+ def setup_method(self):
189
+ from drydock.core.tools.builtins.glob_tool import GlobArgs
190
+ self.GlobArgs = GlobArgs
191
+
192
+ def test_pattern(self):
193
+ ok, err = try_validate(self.GlobArgs, {"pattern": "*.py"})
194
+ assert ok, f"Pattern failed: {err}"
195
+
196
+
197
+ class TestTaskCreateArgs:
198
+ """Task create tool argument validation."""
199
+
200
+ def setup_method(self):
201
+ from drydock.core.tools.builtins.task_manager import TaskCreateArgs
202
+ self.TaskCreateArgs = TaskCreateArgs
203
+
204
+ def test_normal(self):
205
+ ok, err = try_validate(self.TaskCreateArgs, {"title": "Build the app"})
206
+ assert ok, f"Normal args failed: {err}"
207
+
208
+ def test_with_description(self):
209
+ ok, err = try_validate(self.TaskCreateArgs, {
210
+ "title": "Build the app", "description": "Create all files"
211
+ })
212
+ assert ok, f"With description failed: {err}"
213
+
214
+
215
+ class TestSearchReplaceBlockParsing:
216
+ """Test that search_replace parses various block formats."""
217
+
218
+ def setup_method(self):
219
+ from drydock.core.tools.builtins.search_replace import SearchReplace
220
+ self.parse = SearchReplace._parse_search_replace_blocks
221
+
222
+ def test_standard_format(self):
223
+ blocks = self.parse("<<<<<<< SEARCH\nold text\n=======\nnew text\n>>>>>>> REPLACE")
224
+ assert len(blocks) == 1
225
+ assert blocks[0].search == "old text"
226
+ assert blocks[0].replace == "new text"
227
+
228
+ def test_repeated_search_word(self):
229
+ """Gemma 4 sometimes repeats: SEARCH SEARCH SEARCH."""
230
+ blocks = self.parse("<<<<<<<<< SEARCH SEARCH SEARCH\nold\n=======\nnew\n>>>>>>>>> REPLACE REPLACE")
231
+ assert len(blocks) == 1
232
+
233
+ def test_json_format(self):
234
+ """Gemma 4 sometimes sends JSON."""
235
+ blocks = self.parse('{"old_string": "old", "new_string": "new"}')
236
+ assert len(blocks) == 1
237
+ assert blocks[0].search == "old"
238
+
239
+ def test_separator_format(self):
240
+ """Simple ======= separator."""
241
+ blocks = self.parse("old text\n=======\nnew text")
242
+ assert len(blocks) == 1
243
+
244
+
245
+ if __name__ == "__main__":
246
+ pytest.main([__file__, "-v"])
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
File without changes