drydock-cli 2.0.0__tar.gz → 2.0.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 (514) hide show
  1. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/PKG-INFO +1 -1
  2. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/PRD.md +123 -5
  3. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/agent_loop.py +46 -7
  4. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/build_orchestrator.py +5 -1
  5. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/pyproject.toml +1 -1
  6. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/CODEOWNERS +0 -0
  7. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  8. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  9. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/workflows/build-and-upload.yml +0 -0
  11. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/workflows/ci.yml +0 -0
  12. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/workflows/issue-labeler.yml +0 -0
  13. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.github/workflows/release.yml +0 -0
  14. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.gitignore +0 -0
  15. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.pre-commit-config.yaml +0 -0
  16. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.python-version +0 -0
  17. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.typos.toml +0 -0
  18. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.vscode/extensions.json +0 -0
  19. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.vscode/launch.json +0 -0
  20. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/.vscode/settings.json +0 -0
  21. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/AGENTS.md +0 -0
  22. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/CHANGELOG.md +0 -0
  23. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/CLAUDE.md +0 -0
  24. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/CONTRIBUTING.md +0 -0
  25. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/Drydock_rebrand.md +0 -0
  26. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/LICENSE +0 -0
  27. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/NOTICE +0 -0
  28. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/README.md +0 -0
  29. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/action.yml +0 -0
  30. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/distribution/zed/LICENSE +0 -0
  31. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/distribution/zed/extension.toml +0 -0
  32. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/distribution/zed/icons/mistral_vibe.svg +0 -0
  33. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/docs/README.md +0 -0
  34. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/docs/acp-setup.md +0 -0
  35. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/docs/proxy-setup.md +0 -0
  36. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/__init__.py +0 -0
  37. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/__init__.py +0 -0
  38. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/acp_agent_loop.py +0 -0
  39. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/acp_logger.py +0 -0
  40. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/entrypoint.py +0 -0
  41. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/__init__.py +0 -0
  42. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/base.py +0 -0
  43. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/builtins/bash.py +0 -0
  44. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/builtins/read_file.py +0 -0
  45. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/builtins/search_replace.py +0 -0
  46. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/builtins/todo.py +0 -0
  47. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/builtins/write_file.py +0 -0
  48. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/tools/session_update.py +0 -0
  49. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/acp/utils.py +0 -0
  50. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/__init__.py +0 -0
  51. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/autocompletion/__init__.py +0 -0
  52. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/autocompletion/base.py +0 -0
  53. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/autocompletion/path_completion.py +0 -0
  54. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/autocompletion/slash_command.py +0 -0
  55. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/cli.py +0 -0
  56. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/clipboard.py +0 -0
  57. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/commands.py +0 -0
  58. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/entrypoint.py +0 -0
  59. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/history_manager.py +0 -0
  60. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  61. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  62. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  63. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/terminal_setup.py +0 -0
  64. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/__init__.py +0 -0
  65. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  66. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/app.py +0 -0
  67. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/app.tcss +0 -0
  68. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/external_editor.py +0 -0
  69. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  70. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  71. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  72. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  73. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  74. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  75. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  76. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  77. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  78. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  79. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  80. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  81. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  82. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  83. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  84. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  85. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  86. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  87. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  88. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  89. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  90. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  91. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  92. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  93. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  94. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  95. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  96. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  97. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  98. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  99. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  100. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  101. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  102. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  103. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  104. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  105. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/windowing/history.py +0 -0
  106. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  107. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/textual_ui/windowing/state.py +0 -0
  108. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/__init__.py +0 -0
  109. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  110. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  111. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  112. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  113. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  114. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/update.py +0 -0
  115. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/cli/update_notifier/whats_new.py +0 -0
  116. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/__init__.py +0 -0
  117. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/agents/__init__.py +0 -0
  118. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/agents/manager.py +0 -0
  119. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/agents/models.py +0 -0
  120. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/auth/__init__.py +0 -0
  121. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/auth/crypto.py +0 -0
  122. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/auth/github.py +0 -0
  123. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/__init__.py +0 -0
  124. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/completers.py +0 -0
  125. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  126. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  127. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  128. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  129. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  130. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/fuzzy.py +0 -0
  131. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/path_prompt.py +0 -0
  132. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  133. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/config/__init__.py +0 -0
  134. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/config/_settings.py +0 -0
  135. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/config/harness_files/__init__.py +0 -0
  136. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  137. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/config/harness_files/_paths.py +0 -0
  138. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/consultant.py +0 -0
  139. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/drydock_states.py +0 -0
  140. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/hooks.py +0 -0
  141. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/__init__.py +0 -0
  142. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/anthropic.py +0 -0
  143. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/base.py +0 -0
  144. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/factory.py +0 -0
  145. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/generic.py +0 -0
  146. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/mistral.py +0 -0
  147. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  148. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/backend/vertex.py +0 -0
  149. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/exceptions.py +0 -0
  150. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/format.py +0 -0
  151. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/message_utils.py +0 -0
  152. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/llm/types.py +0 -0
  153. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/logger.py +0 -0
  154. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/middleware.py +0 -0
  155. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/output_formatters.py +0 -0
  156. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/paths/__init__.py +0 -0
  157. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/paths/_local_config_walk.py +0 -0
  158. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/paths/_vibe_home.py +0 -0
  159. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/paths/conventions.py +0 -0
  160. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/plan_session.py +0 -0
  161. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/plugins.py +0 -0
  162. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/programmatic.py +0 -0
  163. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/__init__.py +0 -0
  164. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/builder.md +0 -0
  165. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/cli.md +0 -0
  166. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/compact.md +0 -0
  167. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/dangerous_directory.md +0 -0
  168. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/diagnostic.md +0 -0
  169. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/explore.md +0 -0
  170. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/planner.md +0 -0
  171. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/project_context.md +0 -0
  172. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/prompts/tests.md +0 -0
  173. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/proxy_setup.py +0 -0
  174. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/agent_memory.py +0 -0
  175. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/checkpoints.py +0 -0
  176. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/session_loader.py +0 -0
  177. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/session_logger.py +0 -0
  178. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/session_migration.py +0 -0
  179. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/session/state_file.py +0 -0
  180. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/skills/__init__.py +0 -0
  181. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/skills/manager.py +0 -0
  182. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/skills/models.py +0 -0
  183. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/skills/parser.py +0 -0
  184. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/slug.py +0 -0
  185. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/system_prompt.py +0 -0
  186. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/telemetry/__init__.py +0 -0
  187. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/telemetry/send.py +0 -0
  188. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/teleport/errors.py +0 -0
  189. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/teleport/git.py +0 -0
  190. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/teleport/nuage.py +0 -0
  191. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/teleport/teleport.py +0 -0
  192. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/teleport/types.py +0 -0
  193. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/base.py +0 -0
  194. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  195. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/bash.py +0 -0
  196. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/cron.py +0 -0
  197. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  198. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/glob_tool.py +0 -0
  199. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/grep.py +0 -0
  200. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  201. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/lsp.py +0 -0
  202. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  203. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  204. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/powershell.py +0 -0
  205. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  206. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  207. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  208. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  209. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  210. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  211. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  212. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  213. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  214. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  215. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  216. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  217. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  218. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  219. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/task.md +0 -0
  220. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  221. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  222. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  223. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  224. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  225. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  226. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  227. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/read_file.py +0 -0
  228. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/search_replace.py +0 -0
  229. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/task.py +0 -0
  230. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/task_manager.py +0 -0
  231. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/todo.py +0 -0
  232. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/tool_search.py +0 -0
  233. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/webfetch.py +0 -0
  234. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/websearch.py +0 -0
  235. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/worktree.py +0 -0
  236. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/builtins/write_file.py +0 -0
  237. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/injection_guard.py +0 -0
  238. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/manager.py +0 -0
  239. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/mcp/__init__.py +0 -0
  240. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/mcp/registry.py +0 -0
  241. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/mcp/tools.py +0 -0
  242. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/mcp_sampling.py +0 -0
  243. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/ui.py +0 -0
  244. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/tools/utils.py +0 -0
  245. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/trusted_folders.py +0 -0
  246. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/types.py +0 -0
  247. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/core/utils.py +0 -0
  248. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/__init__.py +0 -0
  249. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/base.py +0 -0
  250. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/onboarding.tcss +0 -0
  251. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/screens/__init__.py +0 -0
  252. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/screens/api_key.py +0 -0
  253. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/onboarding/screens/welcome.py +0 -0
  254. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  255. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  256. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/__init__.py +0 -0
  257. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/batch/SKILL.md +0 -0
  258. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/create-presentation/SKILL.md +0 -0
  259. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/deep-research/SKILL.md +0 -0
  260. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/investigate/SKILL.md +0 -0
  261. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/review/SKILL.md +0 -0
  262. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/ship/SKILL.md +0 -0
  263. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/skills/simplify/SKILL.md +0 -0
  264. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock/whats_new.md +0 -0
  265. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock-acp.spec +0 -0
  266. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/drydock_terms.md +0 -0
  267. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/flake.lock +0 -0
  268. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/flake.nix +0 -0
  269. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/README.md +0 -0
  270. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/auto_test_loop.sh +0 -0
  271. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/backup.sh +0 -0
  272. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/bump_version.py +0 -0
  273. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/deploy_to_github.sh +0 -0
  274. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/install.sh +0 -0
  275. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/monitor_test_battery.sh +0 -0
  276. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/notify_release.py +0 -0
  277. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/prepare_release.py +0 -0
  278. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/publish_to_pypi.sh +0 -0
  279. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/test_bank.sh +0 -0
  280. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/test_full.sh +0 -0
  281. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/scripts/test_smoke.sh +0 -0
  282. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/__init__.py +0 -0
  283. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/conftest.py +0 -0
  284. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_acp.py +0 -0
  285. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_agent_thought.py +0 -0
  286. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_bash.py +0 -0
  287. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_compact_session_updates.py +0 -0
  288. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_content.py +0 -0
  289. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_initialize.py +0 -0
  290. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_list_sessions.py +0 -0
  291. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_load_session.py +0 -0
  292. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_multi_session.py +0 -0
  293. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_new_session.py +0 -0
  294. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_proxy_setup_acp.py +0 -0
  295. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_read_file.py +0 -0
  296. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_search_replace.py +0 -0
  297. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_set_config_option.py +0 -0
  298. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_set_mode.py +0 -0
  299. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_set_model.py +0 -0
  300. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_tool_call_session_update.py +0 -0
  301. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_utils.py +0 -0
  302. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/acp/test_write_file.py +0 -0
  303. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_file_indexer.py +0 -0
  304. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_fuzzy.py +0 -0
  305. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  306. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  307. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_path_completion_controller.py +0 -0
  308. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  309. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_slash_command_controller.py +0 -0
  310. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  311. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/__init__.py +0 -0
  312. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/data/__init__.py +0 -0
  313. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/data/fireworks.py +0 -0
  314. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/data/mistral.py +0 -0
  315. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/test_anthropic_adapter.py +0 -0
  316. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/test_backend.py +0 -0
  317. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/test_reasoning_adapter.py +0 -0
  318. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  319. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  320. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  321. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  322. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_bell_notifications.py +0 -0
  323. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_braille_renderer.py +0 -0
  324. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_clipboard.py +0 -0
  325. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_commands.py +0 -0
  326. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_copy_shortcuts.py +0 -0
  327. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_external_editor.py +0 -0
  328. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_no_markup_static.py +0 -0
  329. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_question_app.py +0 -0
  330. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_spinner.py +0 -0
  331. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_switching_mode.py +0 -0
  332. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  333. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  334. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_ui_session_resume.py +0 -0
  335. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/test_ui_skill_dispatch.py +0 -0
  336. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/textual_ui/__init__.py +0 -0
  337. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/cli/textual_ui/test_session_picker.py +0 -0
  338. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/conftest.py +0 -0
  339. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_agents.py +0 -0
  340. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_auth_crypto.py +0 -0
  341. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_auth_github.py +0 -0
  342. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_config_load_dotenv.py +0 -0
  343. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_config_paths.py +0 -0
  344. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_config_resolution.py +0 -0
  345. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_file_logging.py +0 -0
  346. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_plan_session.py +0 -0
  347. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_proxy_setup.py +0 -0
  348. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_slug.py +0 -0
  349. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_telemetry_send.py +0 -0
  350. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_teleport_git.py +0 -0
  351. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_teleport_nuage.py +0 -0
  352. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_teleport_service.py +0 -0
  353. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_trusted_folders.py +0 -0
  354. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/core/test_utils.py +0 -0
  355. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/common.py +0 -0
  356. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/conftest.py +0 -0
  357. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/mock_server.py +0 -0
  358. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  359. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/test_cli_tui_streaming.py +0 -0
  360. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  361. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/mock/__init__.py +0 -0
  362. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/mock/mock_backend_factory.py +0 -0
  363. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/mock/mock_entrypoint.py +0 -0
  364. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/mock/utils.py +0 -0
  365. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/onboarding/test_run_onboarding.py +0 -0
  366. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/onboarding/test_ui_onboarding.py +0 -0
  367. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/session/test_session_loader.py +0 -0
  368. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/session/test_session_logger.py +0 -0
  369. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/session/test_session_migration.py +0 -0
  370. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/skills/conftest.py +0 -0
  371. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/skills/test_manager.py +0 -0
  372. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/skills/test_models.py +0 -0
  373. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/skills/test_parser.py +0 -0
  374. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  375. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  376. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  377. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  378. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  379. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  380. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  381. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  382. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  383. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  384. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  385. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  386. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  387. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  388. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  389. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  390. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  391. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  392. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  393. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  394. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  395. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  396. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  397. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  398. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  399. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  400. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  401. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  402. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  403. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  404. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  405. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  406. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  407. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  408. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  409. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  410. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  411. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  412. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  413. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  414. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  415. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  416. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  417. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  418. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  419. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  420. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  421. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  422. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  423. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  424. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  425. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  426. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  427. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  428. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  429. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  430. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  431. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  432. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  433. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  434. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/base_snapshot_test_app.py +0 -0
  435. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/conftest.py +0 -0
  436. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/snap_compare.py +0 -0
  437. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  438. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  439. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  440. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  441. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  442. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  443. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  444. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  445. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  446. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  447. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  448. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  449. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  450. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  451. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/stubs/fake_backend.py +0 -0
  452. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/stubs/fake_client.py +0 -0
  453. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/stubs/fake_tool.py +0 -0
  454. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_auto_compact.py +0 -0
  455. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_backend.py +0 -0
  456. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_observer_streaming.py +0 -0
  457. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_stats.py +0 -0
  458. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_tasks.py +0 -0
  459. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agent_tool_call.py +0 -0
  460. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_agents.py +0 -0
  461. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_build.py +0 -0
  462. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_debug.py +0 -0
  463. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_multiagent.py +0 -0
  464. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_prd.py +0 -0
  465. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_prd_extended.py +0 -0
  466. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_tools.py +0 -0
  467. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_bank_update.py +0 -0
  468. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_build_projects.py +0 -0
  469. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_cli_programmatic_preload.py +0 -0
  470. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_current_bugs.py +0 -0
  471. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_drydock_regression.py +0 -0
  472. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_drydock_tasks.py +0 -0
  473. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_full_regression.py +0 -0
  474. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_history_manager.py +0 -0
  475. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_integration.py +0 -0
  476. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_loop_detection.py +0 -0
  477. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_message_id.py +0 -0
  478. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_message_merging.py +0 -0
  479. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_middleware.py +0 -0
  480. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_multi_agent.py +0 -0
  481. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_real_failures.py +0 -0
  482. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_real_issues.py +0 -0
  483. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_real_workflow.py +0 -0
  484. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_reasoning_content.py +0 -0
  485. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_smoke.py +0 -0
  486. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_system_prompt.py +0 -0
  487. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_tagged_text.py +0 -0
  488. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_ui_external_editor.py +0 -0
  489. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_ui_input_history.py +0 -0
  490. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_user_issues.py +0 -0
  491. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/test_workloads.py +0 -0
  492. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/testbank_helpers.py +0 -0
  493. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_ask_user_question.py +0 -0
  494. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_bash.py +0 -0
  495. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_exit_plan_mode.py +0 -0
  496. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_grep.py +0 -0
  497. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_invoke_context.py +0 -0
  498. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_manager_get_tool_config.py +0 -0
  499. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_mcp.py +0 -0
  500. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_mcp_sampling.py +0 -0
  501. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_task.py +0 -0
  502. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_ui_bash_execution.py +0 -0
  503. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_webfetch.py +0 -0
  504. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/tools/test_websearch.py +0 -0
  505. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  506. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  507. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_do_update.py +0 -0
  508. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  509. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_github_update_gateway.py +0 -0
  510. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  511. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_ui_update_notification.py +0 -0
  512. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_update_use_case.py +0 -0
  513. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/tests/update_notifier/test_whats_new.py +0 -0
  514. {drydock_cli-2.0.0 → drydock_cli-2.0.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.0.0
3
+ Version: 2.0.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
@@ -1,10 +1,10 @@
1
1
  # DryDock — Local CLI Coding Agent
2
2
 
3
3
  **Repository:** https://github.com/fbobe321/drydock
4
- **PyPI:** https://pypi.org/project/drydock-cli/ (v1.5.3)
4
+ **PyPI:** https://pypi.org/project/drydock-cli/ (v2.0.0)
5
5
  **License:** Apache 2.0 (fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe))
6
6
  **Status:** Active development
7
- **Current version:** 1.5.3
7
+ **Current version:** 2.0.0
8
8
  **Hardware:** 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM at localhost:8000
9
9
  **Server:** remus (Ubuntu 22.04, user: bobef)
10
10
 
@@ -323,15 +323,84 @@ drydock/
323
323
 
324
324
  ---
325
325
 
326
+ ## Mistral/devstral Tool Calling Design (CRITICAL)
327
+
328
+ Understanding how devstral handles tools, agents, and skills is essential. Getting this wrong cost weeks of debugging.
329
+
330
+ ### How devstral Decides to Call Tools
331
+
332
+ In `tool_choice="auto"` (default), the model **autonomously decides** whether to call a tool or respond with text. Key rules:
333
+
334
+ 1. **If the system prompt asks the model to output text first** (e.g., "Restate the goal"), the model generates text and SKIPS tool calling entirely
335
+ 2. **Tool descriptions matter** — the model picks tools based on description quality, not just name
336
+ 3. **`tool_choice="required"`** forces a tool call (useful for first-turn delegation)
337
+ 4. **`tool_choice={"type":"function","function":{"name":"task"}}`** forces a specific tool
338
+
339
+ ### The "Restate the Goal" Bug (v2.0.0 fix)
340
+
341
+ The single line `"Restate the goal in one line."` in the system prompt caused devstral to output text instead of making tool calls. This blocked subagent delegation for months. Evidence: removing it improved task() tool usage from 1/5 to 5/5 across SWE-bench prompts.
342
+
343
+ **Rule: Never ask the model to output text before its first tool call.** Any instruction that triggers text generation pre-empts tool calling.
344
+
345
+ ### Tool Definition Format
346
+
347
+ ```json
348
+ {
349
+ "type": "function",
350
+ "function": {
351
+ "name": "task",
352
+ "description": "Delegate to subagent (explore/diagnostic/planner)",
353
+ "parameters": {
354
+ "type": "object",
355
+ "properties": {
356
+ "task": {"type": "string"},
357
+ "agent": {"type": "string", "enum": ["explore","diagnostic","planner"]}
358
+ },
359
+ "required": ["task", "agent"]
360
+ }
361
+ }
362
+ }
363
+ ```
364
+
365
+ ### Multi-Agent Pattern
366
+
367
+ DryDock's subagents follow Mistral's agent-to-agent delegation pattern:
368
+ - `explore` — read-only codebase exploration (grep, read_file, glob)
369
+ - `diagnostic` — analyze test failures (grep, read_file, bash, glob)
370
+ - `planner` — create implementation plans (grep, read_file, glob)
371
+
372
+ Each spawns a separate AgentLoop with its own context window. The main agent sees results as tool responses.
373
+
374
+ ### Build Orchestrator (bypasses model entirely)
375
+
376
+ For complex build tasks, the orchestrator makes direct API calls instead of going through the model:
377
+ - Phase 1: Deterministic plan extraction from PRD (no LLM)
378
+ - Phase 2: Scaffold package structure (no LLM)
379
+ - Phase 3: One `backend.complete()` call per file (separate context each)
380
+ - Phase 4: Model tests and fixes (standard agent loop)
381
+
382
+ ### Key Gotchas
383
+
384
+ | Issue | Solution |
385
+ |-------|----------|
386
+ | Model outputs text instead of calling tools | Don't ask for text before first tool call |
387
+ | vLLM rejects `user` after `tool` messages | `_sanitize_message_ordering()` before every LLM call |
388
+ | `tool_choice="any"` not supported by vLLM | Use `"required"` instead |
389
+ | Model hallucinates tool names (`task_agent:`) | Error handler shows available tool names |
390
+ | Circuit breaker blocks valid retries | Only block FAILED commands (3+ identical failures) |
391
+ | Separate httpx calls get 404 from vLLM | Use `self.backend.complete()` (same connection) |
392
+
393
+ ---
394
+
326
395
  ## Key Decisions
327
396
 
328
397
  **No mock tests.** Every behavior test runs against the real vLLM backend. Mocks gave false confidence — critical bugs like `raw_arguments` crash and circuit breaker failures passed all mock tests but broke in production.
329
398
 
330
- **Circuit breaker force-stops.** After 3 consecutive breaker fires, the conversation is terminated. The model was ignoring error messages and repeating the only fix is cutting the loop.
399
+ **Circuit breaker: failed-only.** Only blocks commands that FAILED 3+ times with identical args. Successful commands and retries-after-fix are never blocked. Loop detection handles pattern-based repetition separately.
331
400
 
332
- **Bash abuse = #1 failure cause.** 88% of no-patch failures were the model running cat/grep/sed via bash instead of using search_replace. Fixed with escalating nudges at 5/8/12 bash calls.
401
+ **Bash abuse detection.** Model uses cat/grep/sed via bash instead of proper tools. Detected at 3/6/10 bash calls with escalating nudges.
333
402
 
334
- **Nudges as user messages.** `_inject_system_note` buries nudges in old tool results where the model doesn't see them. Nudges now go as direct user messages.
403
+ **Auto-explore for all tasks.** Instead of relying on the model to call `task(agent="explore")`, the agent loop auto-reads project files and injects function/class signatures before the model's first turn.
335
404
 
336
405
  **Scroll workaround.** Mouse wheel doesn't work in Textual's alternate screen buffer. Shift+Up/Down is the working solution. Copy/paste works with native text selection (mouse=False).
337
406
 
@@ -411,3 +480,52 @@ Run with: `./scripts/test_bank.sh` (full) or `./scripts/test_bank.sh quick` (eas
411
480
  **PRD-driven test bank:** 65 tests (15 core + 50 extended) that give DryDock a PRD and verify the built project RUNS. Core 15 pass at 100%.
412
481
 
413
482
  **Relative import auto-fix:** When model gets "relative import with no known parent package", agent loop explains absolute imports vs python3 -m and forces search_replace.
483
+
484
+ ### Phase 13 (Mar 29-30): Multi-Phase Build Orchestrator (v1.6.0-v1.8.0)
485
+
486
+ DryDock was unusable for building projects — broke within 2 minutes every time. Root causes:
487
+ 1. Model wasted context on `__init__.py`, relative imports, `__main__.py`
488
+ 2. Single context window for everything → model degraded by Phase 4
489
+ 3. Cross-file import name mismatches (each file built independently)
490
+
491
+ **Solution: Multi-phase build orchestrator** (`drydock/core/build_orchestrator.py`):
492
+
493
+ | Phase | What | LLM? |
494
+ |---|---|---|
495
+ | 1. PLAN | Parse PRD, extract package name + modules | No (regex) |
496
+ | 2. SCAFFOLD | Create dirs, `__init__.py`, `__main__.py` | No (deterministic) |
497
+ | 3. IMPLEMENT | One `backend.complete()` call per file | Yes (separate context each) |
498
+ | 3.5 FIX | Cross-file import matching, circular import breaking, `from __future__ import annotations` | No (AST analysis) |
499
+ | 4. TEST | Model runs `python3 -m package --help`, fixes errors | Yes (main loop) |
500
+
501
+ **Results:** 79-83% pass rate on 6 PRD types over 24 rounds of automated testing.
502
+
503
+ **Key issues solved along the way:**
504
+ - Orchestrator was calling Mistral cloud API instead of local vLLM (wrong provider selection)
505
+ - Separate httpx calls got 404 from vLLM → switched to `self.backend.complete()`
506
+ - Plan extractor matched English words as package names ("with", "from") → 80+ word blocklist
507
+ - Model rebuilt files in Phase 4 despite being told not to → yield summary directly to user
508
+ - Circuit breaker blocked valid retries after fixes → disabled for successful commands
509
+
510
+ ### Phase 14 (Mar 30): Subagent Delegation Fixed + v2.0.0
511
+
512
+ **ROOT CAUSE FOUND for subagent non-use:** The system prompt line `"Restate the goal in one line."` caused devstral to output text instead of making tool calls. This pre-empted the tool-calling mechanism entirely.
513
+
514
+ Evidence: removing this one line improved `task(agent="explore")` usage from 1/5 to 5/5 across SWE-bench test prompts.
515
+
516
+ **Other v2.0.0 changes:**
517
+ - All user-visible "Vibe" references removed (interrupt, window title, onboarding, user agent)
518
+ - `/setup-model` command: interactive wizard for local LLM setup (vLLM, Ollama, LM Studio)
519
+ - `--local` CLI flag: `drydock --local http://localhost:8000/v1`
520
+ - Auto-explore + skill routing for all task types (review, investigate, ship, simplify)
521
+ - Telegram release notifications
522
+ - `whats_new.md` updated
523
+
524
+ ### Lessons Learned (Updated)
525
+
526
+ 1. **One prompt line can block an entire feature.** "Restate the goal" prevented tool calling for months.
527
+ 2. **Don't rely on the model to delegate.** Force it structurally (orchestrator) or do it before the model responds.
528
+ 3. **Same-process API calls can fail.** httpx from inside DryDock got 404 from vLLM. Use the existing backend connection.
529
+ 4. **Test the installed package, not source.** Different Python envs (miniconda3 vs miniforge3) have different behavior.
530
+ 5. **Explicit Python paths everywhere.** Cron doesn't inherit PATH. Every script must use the full path.
531
+ 6. **The circuit breaker was net negative.** It blocked valid retries more than it prevented loops. Failed-only mode is the right balance.
@@ -489,14 +489,53 @@ class AgentLoop:
489
489
  prd_content = prd_path.read_text()[:8000]
490
490
  build_prompt = f"{user_msg}\n\nPRD CONTENT:\n{prd_content}"
491
491
  break
492
- summary = await run_build_pipeline(
493
- user_prompt=build_prompt,
494
- config=self.config,
495
- base_dir=Path.cwd(),
496
- backend=self.backend,
492
+ from drydock.core.build_orchestrator import (
493
+ make_plan_from_prd, scaffold_package, implement_file,
494
+ _fix_cross_file_imports, _fix_circular_imports,
495
+ _extract_public_api,
496
+ )
497
+
498
+ # Phase 1: Plan
499
+ yield AssistantEvent(content="Planning project structure...")
500
+ plan = make_plan_from_prd(build_prompt)
501
+ file_list = ", ".join(f.path.split("/")[-1] for f in plan.files)
502
+ yield AssistantEvent(
503
+ content=f"Package: `{plan.package_name}` with {len(plan.files)} files: {file_list}"
504
+ )
505
+
506
+ # Phase 2: Scaffold
507
+ yield AssistantEvent(content="Creating package structure...")
508
+ scaffold_package(plan, Path.cwd())
509
+
510
+ # Phase 3: Implement each file
511
+ for i, file_spec in enumerate(plan.files):
512
+ yield AssistantEvent(
513
+ content=f"Writing {file_spec.path} ({i+1}/{len(plan.files)})..."
514
+ )
515
+ for attempt in range(3):
516
+ success = await implement_file(
517
+ file_spec, plan, self.config, Path.cwd(), self.backend
518
+ )
519
+ if success:
520
+ from drydock.core.build_orchestrator import _fix_imports
521
+ _fix_imports(Path.cwd() / file_spec.path, plan.package_name)
522
+ break
523
+
524
+ # Phase 3.5: Fix imports
525
+ yield AssistantEvent(content="Fixing cross-file imports...")
526
+ _fix_cross_file_imports(plan, Path.cwd())
527
+ _fix_circular_imports(plan, Path.cwd())
528
+
529
+ # Build summary
530
+ succeeded = sum(
531
+ 1 for f in plan.files
532
+ if (Path.cwd() / f.path).exists()
533
+ and (Path.cwd() / f.path).stat().st_size > 100
534
+ )
535
+ summary = (
536
+ f"Project `{plan.package_name}` built: {succeeded}/{len(plan.files)} files.\n"
537
+ f"Test with: `python3 -m {plan.package_name} --help`"
497
538
  )
498
- # Yield the summary directly to the user — don't let the model
499
- # respond, because it will ignore the instructions and rebuild files.
500
539
  yield AssistantEvent(content=summary)
501
540
 
502
541
  # Auto-test: run python3 -m package and report result
@@ -539,11 +539,15 @@ async def run_build_pipeline(
539
539
  logger.warning(" Attempt %d error for %s: %s", attempt + 1, file_spec.path, e)
540
540
  results.append((file_spec.path, success))
541
541
 
542
- # Phase 3.5: Auto-fix cross-file import mismatches and circular imports
542
+ # Phase 3.5: Auto-fix imports
543
543
  logger.info("BUILD PHASE 3.5: Fixing imports...")
544
544
  _fix_cross_file_imports(plan, base_dir)
545
545
  _fix_circular_imports(plan, base_dir)
546
546
 
547
+ # Phase 3.75: Verify the package actually imports — fix errors iteratively
548
+ logger.info("BUILD PHASE 3.75: Verify & fix...")
549
+ _verify_and_fix_imports(plan, base_dir)
550
+
547
551
  # Build summary
548
552
  succeeded = sum(1 for _, ok in results if ok)
549
553
  failed_files = [path for path, ok in results if not ok]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.0.0"
3
+ version = "2.0.1"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
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