drydock-cli 2.2.1__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. drydock_cli-2.2.2/CLAUDE.md +152 -0
  2. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/PKG-INFO +1 -1
  3. drydock_cli-2.2.2/PRD.md +81 -0
  4. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/app.py +3 -0
  5. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/agent_loop.py +24 -4
  6. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/config/harness_files/_harness_manager.py +5 -1
  7. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/pyproject.toml +1 -1
  8. drydock_cli-2.2.2/scripts/monitor_swebench.sh +40 -0
  9. drydock_cli-2.2.1/CLAUDE.md +0 -61
  10. drydock_cli-2.2.1/PRD.md +0 -594
  11. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/CODEOWNERS +0 -0
  12. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  13. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  14. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  15. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/workflows/build-and-upload.yml +0 -0
  16. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/workflows/ci.yml +0 -0
  17. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/workflows/issue-labeler.yml +0 -0
  18. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.github/workflows/release.yml +0 -0
  19. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.gitignore +0 -0
  20. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.pre-commit-config.yaml +0 -0
  21. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.python-version +0 -0
  22. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.typos.toml +0 -0
  23. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.vscode/extensions.json +0 -0
  24. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.vscode/launch.json +0 -0
  25. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/.vscode/settings.json +0 -0
  26. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/AGENTS.md +0 -0
  27. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/CHANGELOG.md +0 -0
  28. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/CONTRIBUTING.md +0 -0
  29. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/Drydock_rebrand.md +0 -0
  30. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/LICENSE +0 -0
  31. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/NOTICE +0 -0
  32. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/README.md +0 -0
  33. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/action.yml +0 -0
  34. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/distribution/zed/LICENSE +0 -0
  35. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/distribution/zed/extension.toml +0 -0
  36. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/distribution/zed/icons/mistral_vibe.svg +0 -0
  37. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/docs/README.md +0 -0
  38. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/docs/acp-setup.md +0 -0
  39. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/docs/proxy-setup.md +0 -0
  40. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/__init__.py +0 -0
  41. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/__init__.py +0 -0
  42. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/acp_agent_loop.py +0 -0
  43. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/acp_logger.py +0 -0
  44. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/entrypoint.py +0 -0
  45. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/__init__.py +0 -0
  46. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/base.py +0 -0
  47. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/builtins/bash.py +0 -0
  48. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/builtins/read_file.py +0 -0
  49. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/builtins/search_replace.py +0 -0
  50. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/builtins/todo.py +0 -0
  51. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/builtins/write_file.py +0 -0
  52. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/tools/session_update.py +0 -0
  53. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/acp/utils.py +0 -0
  54. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/__init__.py +0 -0
  55. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/autocompletion/__init__.py +0 -0
  56. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/autocompletion/base.py +0 -0
  57. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/autocompletion/path_completion.py +0 -0
  58. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/autocompletion/slash_command.py +0 -0
  59. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/cli.py +0 -0
  60. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/clipboard.py +0 -0
  61. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/commands.py +0 -0
  62. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/entrypoint.py +0 -0
  63. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/history_manager.py +0 -0
  64. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  65. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  66. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  67. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/terminal_setup.py +0 -0
  68. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/__init__.py +0 -0
  69. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  70. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/app.tcss +0 -0
  71. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/external_editor.py +0 -0
  72. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  73. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  74. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  75. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  76. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  77. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  78. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  79. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  80. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  81. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  82. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  83. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  84. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  85. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  86. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  87. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  88. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  89. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  90. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  91. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  92. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  93. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  94. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  95. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  96. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  97. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  98. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  99. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  100. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  101. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  102. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  103. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  104. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  105. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  106. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  107. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  108. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/windowing/history.py +0 -0
  109. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  110. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/textual_ui/windowing/state.py +0 -0
  111. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/__init__.py +0 -0
  112. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  113. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  114. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  115. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  116. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  117. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/update.py +0 -0
  118. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/cli/update_notifier/whats_new.py +0 -0
  119. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/__init__.py +0 -0
  120. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/agents/__init__.py +0 -0
  121. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/agents/manager.py +0 -0
  122. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/agents/models.py +0 -0
  123. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/auth/__init__.py +0 -0
  124. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/auth/crypto.py +0 -0
  125. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/auth/github.py +0 -0
  126. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/__init__.py +0 -0
  127. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/completers.py +0 -0
  128. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  129. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  130. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  131. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  132. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  133. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/fuzzy.py +0 -0
  134. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/path_prompt.py +0 -0
  135. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  136. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/build_orchestrator.py +0 -0
  137. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/config/__init__.py +0 -0
  138. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/config/_settings.py +0 -0
  139. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/config/harness_files/__init__.py +0 -0
  140. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/config/harness_files/_paths.py +0 -0
  141. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/consultant.py +0 -0
  142. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/drydock_states.py +0 -0
  143. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/hooks.py +0 -0
  144. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/__init__.py +0 -0
  145. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/anthropic.py +0 -0
  146. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/base.py +0 -0
  147. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/factory.py +0 -0
  148. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/generic.py +0 -0
  149. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/mistral.py +0 -0
  150. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  151. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/backend/vertex.py +0 -0
  152. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/exceptions.py +0 -0
  153. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/format.py +0 -0
  154. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/message_utils.py +0 -0
  155. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/llm/types.py +0 -0
  156. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/logger.py +0 -0
  157. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/middleware.py +0 -0
  158. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/output_formatters.py +0 -0
  159. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/paths/__init__.py +0 -0
  160. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/paths/_local_config_walk.py +0 -0
  161. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/paths/_vibe_home.py +0 -0
  162. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/paths/conventions.py +0 -0
  163. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/plan_session.py +0 -0
  164. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/plugins.py +0 -0
  165. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/programmatic.py +0 -0
  166. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/__init__.py +0 -0
  167. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/builder.md +0 -0
  168. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/cli.md +0 -0
  169. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/compact.md +0 -0
  170. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/dangerous_directory.md +0 -0
  171. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/diagnostic.md +0 -0
  172. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/explore.md +0 -0
  173. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/planner.md +0 -0
  174. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/project_context.md +0 -0
  175. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/prompts/tests.md +0 -0
  176. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/proxy_setup.py +0 -0
  177. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/agent_memory.py +0 -0
  178. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/checkpoints.py +0 -0
  179. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/session_loader.py +0 -0
  180. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/session_logger.py +0 -0
  181. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/session_migration.py +0 -0
  182. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/session/state_file.py +0 -0
  183. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/skills/__init__.py +0 -0
  184. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/skills/manager.py +0 -0
  185. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/skills/models.py +0 -0
  186. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/skills/parser.py +0 -0
  187. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/slug.py +0 -0
  188. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/system_prompt.py +0 -0
  189. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/telemetry/__init__.py +0 -0
  190. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/telemetry/send.py +0 -0
  191. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/teleport/errors.py +0 -0
  192. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/teleport/git.py +0 -0
  193. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/teleport/nuage.py +0 -0
  194. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/teleport/teleport.py +0 -0
  195. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/teleport/types.py +0 -0
  196. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/base.py +0 -0
  197. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  198. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/bash.py +0 -0
  199. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/cron.py +0 -0
  200. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  201. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/glob_tool.py +0 -0
  202. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/grep.py +0 -0
  203. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  204. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/lsp.py +0 -0
  205. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  206. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  207. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/powershell.py +0 -0
  208. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  209. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  210. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  211. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  212. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  213. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  214. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  215. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  216. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  217. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  218. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  219. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  220. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  221. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  222. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/task.md +0 -0
  223. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  224. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  225. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  226. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  227. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  228. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  229. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  230. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/read_file.py +0 -0
  231. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/search_replace.py +0 -0
  232. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/task.py +0 -0
  233. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/task_manager.py +0 -0
  234. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/todo.py +0 -0
  235. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/tool_search.py +0 -0
  236. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/webfetch.py +0 -0
  237. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/websearch.py +0 -0
  238. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/worktree.py +0 -0
  239. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/builtins/write_file.py +0 -0
  240. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/injection_guard.py +0 -0
  241. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/manager.py +0 -0
  242. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/mcp/__init__.py +0 -0
  243. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/mcp/registry.py +0 -0
  244. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/mcp/tools.py +0 -0
  245. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/mcp_sampling.py +0 -0
  246. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/ui.py +0 -0
  247. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/tools/utils.py +0 -0
  248. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/trusted_folders.py +0 -0
  249. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/types.py +0 -0
  250. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/core/utils.py +0 -0
  251. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/__init__.py +0 -0
  252. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/base.py +0 -0
  253. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/onboarding.tcss +0 -0
  254. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/screens/__init__.py +0 -0
  255. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/screens/api_key.py +0 -0
  256. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/onboarding/screens/welcome.py +0 -0
  257. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  258. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  259. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/__init__.py +0 -0
  260. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/batch/SKILL.md +0 -0
  261. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/create-presentation/SKILL.md +0 -0
  262. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/deep-research/SKILL.md +0 -0
  263. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/investigate/SKILL.md +0 -0
  264. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/review/SKILL.md +0 -0
  265. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/ship/SKILL.md +0 -0
  266. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/skills/simplify/SKILL.md +0 -0
  267. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock/whats_new.md +0 -0
  268. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock-acp.spec +0 -0
  269. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/drydock_terms.md +0 -0
  270. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/flake.lock +0 -0
  271. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/flake.nix +0 -0
  272. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/README.md +0 -0
  273. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/auto_test_loop.sh +0 -0
  274. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/backup.sh +0 -0
  275. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/bump_version.py +0 -0
  276. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/deploy_to_github.sh +0 -0
  277. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/install.sh +0 -0
  278. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/monitor_test_battery.sh +0 -0
  279. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/notify_release.py +0 -0
  280. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/overnight_agents_test.sh +0 -0
  281. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/prepare_release.py +0 -0
  282. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/publish_to_pypi.sh +0 -0
  283. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/test_bank.sh +0 -0
  284. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/test_full.sh +0 -0
  285. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/scripts/test_smoke.sh +0 -0
  286. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/__init__.py +0 -0
  287. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/conftest.py +0 -0
  288. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_acp.py +0 -0
  289. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_agent_thought.py +0 -0
  290. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_bash.py +0 -0
  291. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_compact_session_updates.py +0 -0
  292. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_content.py +0 -0
  293. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_initialize.py +0 -0
  294. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_list_sessions.py +0 -0
  295. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_load_session.py +0 -0
  296. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_multi_session.py +0 -0
  297. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_new_session.py +0 -0
  298. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_proxy_setup_acp.py +0 -0
  299. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_read_file.py +0 -0
  300. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_search_replace.py +0 -0
  301. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_set_config_option.py +0 -0
  302. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_set_mode.py +0 -0
  303. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_set_model.py +0 -0
  304. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_tool_call_session_update.py +0 -0
  305. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_utils.py +0 -0
  306. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/acp/test_write_file.py +0 -0
  307. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_file_indexer.py +0 -0
  308. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_fuzzy.py +0 -0
  309. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  310. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  311. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_path_completion_controller.py +0 -0
  312. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  313. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_slash_command_controller.py +0 -0
  314. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  315. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/__init__.py +0 -0
  316. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/data/__init__.py +0 -0
  317. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/data/fireworks.py +0 -0
  318. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/data/mistral.py +0 -0
  319. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/test_anthropic_adapter.py +0 -0
  320. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/test_backend.py +0 -0
  321. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/test_reasoning_adapter.py +0 -0
  322. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  323. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  324. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  325. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  326. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_bell_notifications.py +0 -0
  327. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_braille_renderer.py +0 -0
  328. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_clipboard.py +0 -0
  329. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_commands.py +0 -0
  330. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_copy_shortcuts.py +0 -0
  331. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_external_editor.py +0 -0
  332. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_no_markup_static.py +0 -0
  333. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_question_app.py +0 -0
  334. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_spinner.py +0 -0
  335. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_switching_mode.py +0 -0
  336. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  337. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  338. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_ui_session_resume.py +0 -0
  339. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/test_ui_skill_dispatch.py +0 -0
  340. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/textual_ui/__init__.py +0 -0
  341. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/cli/textual_ui/test_session_picker.py +0 -0
  342. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/conftest.py +0 -0
  343. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_agents.py +0 -0
  344. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_auth_crypto.py +0 -0
  345. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_auth_github.py +0 -0
  346. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_config_load_dotenv.py +0 -0
  347. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_config_paths.py +0 -0
  348. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_config_resolution.py +0 -0
  349. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_file_logging.py +0 -0
  350. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_plan_session.py +0 -0
  351. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_proxy_setup.py +0 -0
  352. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_slug.py +0 -0
  353. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_telemetry_send.py +0 -0
  354. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_teleport_git.py +0 -0
  355. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_teleport_nuage.py +0 -0
  356. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_teleport_service.py +0 -0
  357. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_trusted_folders.py +0 -0
  358. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/core/test_utils.py +0 -0
  359. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/common.py +0 -0
  360. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/conftest.py +0 -0
  361. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/mock_server.py +0 -0
  362. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  363. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/test_cli_tui_streaming.py +0 -0
  364. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  365. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/mock/__init__.py +0 -0
  366. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/mock/mock_backend_factory.py +0 -0
  367. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/mock/mock_entrypoint.py +0 -0
  368. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/mock/utils.py +0 -0
  369. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/onboarding/test_run_onboarding.py +0 -0
  370. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/onboarding/test_ui_onboarding.py +0 -0
  371. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/session/test_session_loader.py +0 -0
  372. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/session/test_session_logger.py +0 -0
  373. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/session/test_session_migration.py +0 -0
  374. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/skills/conftest.py +0 -0
  375. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/skills/test_manager.py +0 -0
  376. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/skills/test_models.py +0 -0
  377. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/skills/test_parser.py +0 -0
  378. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  379. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  380. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  381. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  382. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  383. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  384. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  385. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  386. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  387. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  388. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  389. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  390. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  391. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  392. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  393. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  394. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  395. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  396. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  397. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  398. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  399. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  400. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  401. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  402. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  403. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  404. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  405. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  406. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  407. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  408. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  409. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  410. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  411. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  412. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  413. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  414. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  415. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  416. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  417. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  418. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  419. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  420. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  421. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  422. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  423. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  424. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  425. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  426. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  427. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  428. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  429. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  430. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  431. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  432. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  433. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  434. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  435. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  436. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  437. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  438. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/base_snapshot_test_app.py +0 -0
  439. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/conftest.py +0 -0
  440. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/snap_compare.py +0 -0
  441. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  442. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  443. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  444. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  445. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  446. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  447. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  448. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  449. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  450. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  451. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  452. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  453. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  454. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  455. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/stubs/fake_backend.py +0 -0
  456. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/stubs/fake_client.py +0 -0
  457. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/stubs/fake_tool.py +0 -0
  458. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_auto_compact.py +0 -0
  459. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_backend.py +0 -0
  460. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_observer_streaming.py +0 -0
  461. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_stats.py +0 -0
  462. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_tasks.py +0 -0
  463. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agent_tool_call.py +0 -0
  464. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_agents.py +0 -0
  465. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_build.py +0 -0
  466. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_debug.py +0 -0
  467. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_multiagent.py +0 -0
  468. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_prd.py +0 -0
  469. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_prd_extended.py +0 -0
  470. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_tools.py +0 -0
  471. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_bank_update.py +0 -0
  472. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_build_projects.py +0 -0
  473. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_cli_programmatic_preload.py +0 -0
  474. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_current_bugs.py +0 -0
  475. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_drydock_regression.py +0 -0
  476. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_drydock_tasks.py +0 -0
  477. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_full_regression.py +0 -0
  478. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_history_manager.py +0 -0
  479. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_integration.py +0 -0
  480. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_loop_detection.py +0 -0
  481. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_message_id.py +0 -0
  482. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_message_merging.py +0 -0
  483. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_middleware.py +0 -0
  484. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_multi_agent.py +0 -0
  485. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_real_failures.py +0 -0
  486. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_real_issues.py +0 -0
  487. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_real_workflow.py +0 -0
  488. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_reasoning_content.py +0 -0
  489. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_smoke.py +0 -0
  490. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_system_prompt.py +0 -0
  491. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_tagged_text.py +0 -0
  492. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_ui_external_editor.py +0 -0
  493. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_ui_input_history.py +0 -0
  494. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_user_issues.py +0 -0
  495. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/test_workloads.py +0 -0
  496. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/testbank_helpers.py +0 -0
  497. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_ask_user_question.py +0 -0
  498. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_bash.py +0 -0
  499. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_exit_plan_mode.py +0 -0
  500. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_grep.py +0 -0
  501. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_invoke_context.py +0 -0
  502. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_manager_get_tool_config.py +0 -0
  503. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_mcp.py +0 -0
  504. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_mcp_sampling.py +0 -0
  505. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_task.py +0 -0
  506. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_ui_bash_execution.py +0 -0
  507. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_webfetch.py +0 -0
  508. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/tools/test_websearch.py +0 -0
  509. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  510. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  511. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_do_update.py +0 -0
  512. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  513. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_github_update_gateway.py +0 -0
  514. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  515. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_ui_update_notification.py +0 -0
  516. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_update_use_case.py +0 -0
  517. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/tests/update_notifier/test_whats_new.py +0 -0
  518. {drydock_cli-2.2.1 → drydock_cli-2.2.2}/uv.lock +0 -0
@@ -0,0 +1,152 @@
1
+ # Drydock Development Guide
2
+
3
+ ## Project
4
+
5
+ Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
6
+ - **Repo:** https://github.com/fbobe321/drydock
7
+ - **PyPI:** https://pypi.org/project/drydock-cli/ (v2.2.1)
8
+ - **Goal:** Best-in-class SWE-bench Verified pass rate with local LLMs
9
+ - **Hardware:** 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM at localhost:8000
10
+ - **Server:** remus (Ubuntu 22.04, user: bobef)
11
+
12
+ ## Build & Test
13
+
14
+ ```bash
15
+ # Install
16
+ uv sync
17
+
18
+ # Run drydock CLI
19
+ uv run drydock
20
+
21
+ # Run programmatically (headless, for benchmarks)
22
+ python3 -c "import sys; sys.path.insert(0, '.'); from drydock.cli.entrypoint import main; main()" --agent auto-approve -p "your prompt"
23
+
24
+ # Run tests
25
+ uv run pytest tests/ -x -q --timeout=30
26
+
27
+ # Syntax check modified files
28
+ python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
29
+ ```
30
+
31
+ ## Key Architecture
32
+
33
+ - `drydock/core/agent_loop.py` — Main agent loop. Loop detection, message ordering, tool execution. **Most changes go here.**
34
+ - `drydock/core/programmatic.py` — Headless API entry point used by SWE-bench harness
35
+ - `drydock/core/build_orchestrator.py` — Multi-phase build pipeline (currently disabled, model drives builds)
36
+ - `drydock/core/tools/builtins/bash.py` — Shell tool with allowlist/denylist, conda support
37
+ - `drydock/core/tools/builtins/search_replace.py` — File editing tool with fuzzy matching
38
+ - `drydock/core/prompts/cli.md` — System prompt (workflow, delegation, tool rules)
39
+ - `drydock/core/prompts/builder.md` — Minimal prompt for file builder subagents
40
+ - `drydock/core/system_prompt.py` — Builds system prompt, loads AGENTS.md/DRYDOCK.md
41
+ - `drydock/core/types.py` — `MessageList` (custom Sequence, use `.reset()` not `=[]`)
42
+ - `drydock/core/middleware.py` — Tiered context warnings, auto-compaction
43
+ - `drydock/core/agents/models.py` — Agent profiles (explore, diagnostic, planner, builder)
44
+ - `drydock/core/skills/manager.py` — Skill discovery and loading
45
+ - `drydock/cli/textual_ui/app.py` — TUI application
46
+ - `drydock/cli/commands.py` — Slash commands (/help, /setup-model, /consult, etc.)
47
+
48
+ ## Critical Constraints
49
+
50
+ - **MessageList is not a plain list.** Never `self.messages = [...]`. Use `self.messages.reset([...])`.
51
+ - **vLLM/Mistral rejects `user` after `tool` messages.** `_sanitize_message_ordering()` runs before every LLM call. All injection must use `_inject_system_note()`.
52
+ - **`os._exit()` in programmatic.py** — necessary because async cleanup hangs. Ensure stdout is flushed before calling.
53
+ - **AGENTS.md is CRITICAL for devstral.** Without per-project instructions, the model loops on ls/bash. Auto-created by `_ensure_agents_md()`.
54
+ - **"Restate the goal" blocks tool calling.** Never ask the model to output text before its first tool call — it pre-empts the tool-calling mechanism.
55
+ - **Additive-only harness changes.** Every control flow modification (circuit breaker, orchestrator, nudges) caused regressions. Just inject better context before the agent loop.
56
+ - **Circuit breaker is disabled.** It blocked valid retries. Loop detection prunes duplicates and nudges instead. Never stops the session.
57
+ - **Loop detection never stops.** Only prunes repeated tool calls and injects guidance. The only hard stop is MAX_TOOL_TURNS (200).
58
+
59
+ ## Mistral/devstral Tool Calling
60
+
61
+ - `tool_choice="auto"` (default): model decides whether to call a tool or respond with text
62
+ - Never ask for text before first tool call — blocks tool calling
63
+ - `tool_choice="required"` forces a tool call (useful for first-turn delegation)
64
+ - AGENTS.md anchors model behavior — without it, devstral loops
65
+ - Plan→Edit workflow: use plan mode first, then switch to accept-edits
66
+
67
+ ## File Locations
68
+
69
+ ```
70
+ /data3/drydock/ ← Main repo (git)
71
+ ├── drydock/ ← Python package
72
+ │ ├── core/
73
+ │ │ ├── agent_loop.py ← THE most important file
74
+ │ │ ├── prompts/cli.md ← System prompt
75
+ │ │ ├── build_orchestrator.py ← Multi-phase builder (disabled)
76
+ │ │ ├── tools/builtins/ ← 24 builtin tools
77
+ │ │ ├── agents/ ← Subagent definitions
78
+ │ │ └── skills/ ← Skill framework
79
+ │ ├── cli/textual_ui/app.py ← TUI application
80
+ │ └── skills/ ← 7 bundled skills
81
+ ├── tests/
82
+ │ ├── test_smoke.py ← 20 fast tests
83
+ │ ├── test_loop_detection.py ← 38 loop tests
84
+ │ ├── test_bank_prd.py ← 15 PRD-driven tests
85
+ │ └── testbank_helpers.py ← Shared test infrastructure
86
+ ├── scripts/
87
+ │ ├── deploy_to_github.sh ← Daily push (4 AM)
88
+ │ ├── publish_to_pypi.sh ← Tests → build → PyPI → tag
89
+ │ ├── notify_release.py ← Telegram notifications
90
+ │ └── backup.sh ← rsync to NAS (3 AM)
91
+ └── test_bank_results/ ← Test logs
92
+ ```
93
+
94
+ ```
95
+ /data3/swe_bench_runs/ ← SWE-bench infrastructure (separate)
96
+ ├── harness.py ← Runs drydock on SWE-bench tasks
97
+ ├── continuous_bench.sh ← Continuous improvement loop
98
+ └── logs/ ← Batch results
99
+ ```
100
+
101
+ ## Configuration Management
102
+
103
+ **All scripts use explicit Python path:** `/home/bobef/miniconda3/bin/python3`
104
+ **Cron PATH doesn't inherit shell.** Every script exports PATH explicitly.
105
+ **User's DryDock install:** `/home/bobef/miniforge3/envs/drydock/bin/python3` (Python 3.14)
106
+ **Dev/test Python:** `/home/bobef/miniconda3/bin/python3` (Python 3.12)
107
+ **Config:** `~/.drydock/config.toml`
108
+ **Tokens:** `~/.config/drydock/github_token`, `~/.config/drydock/pypi_token`
109
+ **Git remotes:** `drydock` → github.com/fbobe321/drydock, `origin` → github.com/mistralai/mistral-vibe
110
+
111
+ ## Deployment Process
112
+
113
+ 1. Code → modify files
114
+ 2. Syntax check → `python3 -c "import ast; ..."`
115
+ 3. Tests → `pytest tests/test_smoke.py tests/test_loop_detection.py -q`
116
+ 4. Commit → descriptive message
117
+ 5. Publish → `./scripts/publish_to_pypi.sh` (tests → build → PyPI → tag → integration test → GitHub → Telegram)
118
+ 6. Install on user's env → `/home/bobef/miniforge3/envs/drydock/bin/pip install --force-reinstall --no-deps --no-cache-dir drydock-cli==X.Y.Z`
119
+
120
+ ## SWE-bench
121
+
122
+ - Current: 42% file match, 62% real patches (50-task eval)
123
+ - Target: 68% (devstral-small-2 published score)
124
+ - Harness at `/data3/swe_bench_runs/harness.py` uses DryDock directly
125
+ - AGENTS.md auto-created per task with bug-fix workflow
126
+ - Environment bootstrapping (Meta-Harness technique) gathers repo structure before first LLM call
127
+ - Test file edits stripped from patches before evaluation
128
+
129
+ ## Key Learnings
130
+
131
+ 1. AGENTS.md is essential — devstral loops without it
132
+ 2. "Restate the goal" blocked tool calling for months — one line
133
+ 3. Additive-only changes work best — control flow mods regress
134
+ 4. The harness matters as much as the model (Meta-Harness paper)
135
+ 5. Environment bootstrapping saves 2-4 exploratory turns
136
+ 6. Plan→Edit workflow is Mistral's design, don't fight it
137
+ 7. Circuit breaker was net negative — removed entirely
138
+ 8. Loop detection should guide, never stop
139
+ 9. Test the installed package, not source (different Python envs)
140
+ 10. Never wait for full test runs — fix issues from early results
141
+
142
+ ## When Compacting
143
+
144
+ Always preserve: the list of files modified in this session, any failing test output, current SWE-bench results, and the user's latest instructions.
145
+
146
+ ## Style
147
+
148
+ - Python 3.12+, type hints, pathlib over os.path
149
+ - Match existing patterns in the codebase
150
+ - No unnecessary abstractions — keep fixes minimal
151
+ - Always run syntax check after editing .py files
152
+ - Don't add features beyond what was asked
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: Drydock — nautical CLI coding agent
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -0,0 +1,81 @@
1
+ # DryDock — Local CLI Coding Agent
2
+
3
+ **Repository:** https://github.com/fbobe321/drydock
4
+ **PyPI:** https://pypi.org/project/drydock-cli/ (v2.2.1)
5
+ **License:** Apache 2.0 (fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe))
6
+
7
+ ## Vision
8
+
9
+ Best-in-class local coding agent. Build, debug, and ship software using local LLMs on consumer hardware.
10
+
11
+ ## Current Status
12
+
13
+ - **Model:** devstral-24B-AWQ-4bit on 2x RTX 4060 Ti 16GB
14
+ - **SWE-bench Verified:** 42% file match (target: 68%)
15
+ - **Version:** 2.2.1
16
+ - **Users can:** Build projects from PRDs, fix bugs, review code, refactor
17
+
18
+ ## Features
19
+
20
+ ### Core
21
+ - 24 builtin tools (bash, grep, read_file, write_file, search_replace, etc.)
22
+ - 7 bundled skills (/investigate, /review, /ship, /batch, /simplify, /deep-research, /create-presentation)
23
+ - Multi-agent delegation (explore, diagnostic, planner subagents)
24
+ - Plan→Edit workflow (Mistral's designed pattern)
25
+ - AGENTS.md support (cross-tool standard, auto-created)
26
+ - Textual TUI with wave spinner, message queuing
27
+
28
+ ### Local Model Support
29
+ - `/setup-model` command (vLLM, Ollama, LM Studio, custom)
30
+ - `--local` CLI flag for quick setup
31
+ - Auto-detect model name from server
32
+
33
+ ### Safety
34
+ - Tool permission system (always/ask/never per tool)
35
+ - Loop guidance (never stops, only redirects)
36
+ - API error auto-recovery (retry after 10s)
37
+
38
+ ## Install
39
+
40
+ ```bash
41
+ pip install drydock-cli
42
+ drydock --local http://localhost:8000/v1
43
+ ```
44
+
45
+ ## Per-Project Instructions
46
+
47
+ DryDock loads instructions from these files in the project root:
48
+ - **AGENTS.md** — Cross-tool standard (recommended)
49
+ - **DRYDOCK.md** — DryDock-specific
50
+ - **.drydock/rules/*.md** — Modular rules
51
+
52
+ Auto-created if none exist. Essential for devstral to use subagents properly.
53
+
54
+ ## Roadmap
55
+
56
+ ### Near-term
57
+ - Reach 68% on SWE-bench Verified (from 42%)
58
+ - Static/dynamic prompt split for prefix caching
59
+ - Layered context compaction (4 fallback layers)
60
+ - Composable prompt sections (task-type specific)
61
+ - Background resource preloading
62
+
63
+ ### Medium-term
64
+ - Real test execution in SWE-bench eval (not just file match)
65
+ - Repo-specific strategies (Django vs sympy vs sphinx)
66
+ - Draft-then-verify pattern for patches
67
+ - Windows Ctrl-C fix
68
+
69
+ ### Long-term
70
+ - Support larger models as hardware improves
71
+ - Plugin marketplace for custom tools/skills
72
+ - Web dashboard for monitoring long runs
73
+ - Multi-model routing (different models for different tasks)
74
+
75
+ ## Architecture Notes
76
+
77
+ See [CLAUDE.md](CLAUDE.md) for technical details, file locations, constraints, and development workflow.
78
+
79
+ ## Legal
80
+
81
+ All code is original or forked from Apache 2.0 mistral-vibe. Architecture improvements are standard design patterns implemented from scratch. No proprietary code copied.
@@ -1706,6 +1706,9 @@ class VibeApp(App): # noqa: PLR0904
1706
1706
  self.agent_loop.agent_profile
1707
1707
  )
1708
1708
  self._update_profile_widgets(new_profile)
1709
+ # Hide any active loading/spinner widget before switching mode
1710
+ # to prevent the old animation from showing behind the new spinner
1711
+ await self._remove_loading_widget()
1709
1712
  if self._chat_input_container:
1710
1713
  self._chat_input_container.switching_mode = True
1711
1714
 
@@ -762,7 +762,25 @@ class AgentLoop:
762
762
  text_without_action += 1
763
763
  # Always continue — don't let the agent exit without editing
764
764
  should_break_loop = False
765
- if text_without_action == 1:
765
+
766
+ # Detect model claiming task is done without having edited anything
767
+ last_text_lower = (last_message.content or "").lower()
768
+ task_complete_phrases = [
769
+ "task completed", "task complete", "task is complete",
770
+ "task is done", "task has been completed",
771
+ "changes have been applied", "fix has been applied",
772
+ "the fix is complete", "issue is resolved",
773
+ ]
774
+ claims_complete = any(p in last_text_lower for p in task_complete_phrases)
775
+
776
+ if claims_complete:
777
+ nudge_text = (
778
+ "You said the task is complete but NO code was actually changed. "
779
+ "Your search_replace call either failed or was never made. "
780
+ "Use read_file to read the target file, then use search_replace "
781
+ "to make your edit. Do NOT say the task is done until search_replace succeeds."
782
+ )
783
+ elif text_without_action == 1:
766
784
  # Check if model already identified a TARGET in its text
767
785
  last_text = (last_message.content or "").upper()
768
786
  has_target = "TARGET:" in last_text or "FILE:" in last_text
@@ -792,9 +810,11 @@ class AgentLoop:
792
810
  "Pick the most likely file and function, and make a minimal edit."
793
811
  )
794
812
  else:
795
- # Give up after 5 futile nudges the model can't/won't edit
796
- should_break_loop = True
797
- nudge_text = None
813
+ # Keep nudgingnever give up
814
+ nudge_text = (
815
+ "You MUST call a tool. Use grep to find the file, "
816
+ "read_file to read it, then search_replace to fix."
817
+ )
798
818
  if nudge_text:
799
819
  # Use _inject_system_note (appends to last tool/user message)
800
820
  # User messages cause 'tool after user' ordering violations
@@ -69,11 +69,15 @@ class HarnessFilesManager:
69
69
  project_skills = Path.cwd() / ".drydock" / "skills"
70
70
  if project_skills.is_dir():
71
71
  dirs.append(project_skills)
72
- # User skills in ~/.drydock/skills/
72
+ # User skills in ~/.drydock/skills/ (and ~/.vibe/skills/ for backward compat)
73
73
  if "user" in self.sources:
74
74
  d = GLOBAL_SKILLS_DIR.path
75
75
  if d.is_dir():
76
76
  dirs.append(d)
77
+ # Always check legacy ~/.vibe/skills/ in case migration didn't complete
78
+ legacy_skills = Path.home() / ".vibe" / "skills"
79
+ if legacy_skills.is_dir() and legacy_skills != d:
80
+ dirs.append(legacy_skills)
77
81
  # Plugin skills
78
82
  try:
79
83
  from drydock.core.plugins import get_plugin_skill_dirs
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.2.1"
3
+ version = "2.2.2"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+ # Monitor SWE-bench runs, analyze early results, report via Telegram
3
+ # Cron: */10 * * * * /data3/drydock/scripts/monitor_swebench.sh
4
+
5
+ set -uo pipefail
6
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
7
+ PYTHON="/home/bobef/miniconda3/bin/python3"
8
+ DRYDOCK="/data3/drydock"
9
+ SWEBENCH="/data3/swe_bench_runs"
10
+ LOG="$SWEBENCH/logs/monitor_swebench.log"
11
+
12
+ log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG"; }
13
+
14
+ # Find the latest running log
15
+ LATEST_LOG=$(ls -t $SWEBENCH/logs/v2*.log 2>/dev/null | head -1)
16
+ if [ -z "$LATEST_LOG" ]; then
17
+ exit 0
18
+ fi
19
+
20
+ # Count completed tasks
21
+ DONE=$(grep -c "Files match:" "$LATEST_LOG" 2>/dev/null || echo 0)
22
+ MATCHES=$(grep -c "Files match: True" "$LATEST_LOG" 2>/dev/null || echo 0)
23
+ PATCHES=$(grep "Patch:" "$LATEST_LOG" 2>/dev/null | grep -v "0L\|1L" | wc -l)
24
+ TOTAL=$(grep -c "^\[" "$LATEST_LOG" 2>/dev/null | head -1 || echo 0)
25
+
26
+ if [ "$DONE" -eq 0 ]; then
27
+ exit 0
28
+ fi
29
+
30
+ RATE=$((MATCHES * 100 / DONE))
31
+
32
+ log "Progress: $DONE done, $MATCHES matches ($RATE%), $PATCHES patches"
33
+
34
+ # Send Telegram update every 10 tasks
35
+ LAST_REPORTED=$(cat "$SWEBENCH/logs/.last_reported" 2>/dev/null || echo 0)
36
+ if [ "$DONE" -ge $((LAST_REPORTED + 10)) ]; then
37
+ $PYTHON "$DRYDOCK/scripts/notify_release.py" "swebench" "SWE-bench progress: $DONE tasks, $MATCHES file matches ($RATE%), $PATCHES patches. Log: $(basename $LATEST_LOG)"
38
+ echo "$DONE" > "$SWEBENCH/logs/.last_reported"
39
+ log "Sent Telegram update"
40
+ fi
@@ -1,61 +0,0 @@
1
- # Drydock Development Guide
2
-
3
- ## Project
4
-
5
- Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
6
- - **Repo:** https://github.com/fbobe321/drydock
7
- - **Goal:** Best-in-class SWE-bench Verified pass rate with local LLMs
8
- - **Hardware:** 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM at localhost:8000
9
-
10
- ## Build & Test
11
-
12
- ```bash
13
- # Install
14
- uv sync
15
-
16
- # Run drydock CLI
17
- uv run drydock
18
-
19
- # Run programmatically (headless, for benchmarks)
20
- python3 -c "import sys; sys.path.insert(0, '.'); from vibe.cli.entrypoint import main; main()" --agent auto-approve -p "your prompt"
21
-
22
- # Run tests (note: pytest from swe-bench worktrees can pollute; use -p no:conftest if needed)
23
- uv run pytest tests/ -x -q --timeout=30
24
-
25
- # Syntax check modified files
26
- python3 -c "import ast; ast.parse(open('path/to/file.py').read())"
27
- ```
28
-
29
- ## Key Architecture
30
-
31
- - `drydock/core/agent_loop.py` — Main agent loop. Loop detection, message ordering, tool execution. **Most changes go here.**
32
- - `drydock/core/programmatic.py` — Headless API entry point used by SWE-bench harness
33
- - `drydock/core/tools/builtins/bash.py` — Shell tool with allowlist/denylist, conda support
34
- - `drydock/core/tools/builtins/search_replace.py` — File editing tool with fuzzy matching
35
- - `drydock/core/prompts/cli.md` — System prompt (two-phase workflow, SWE-bench rules)
36
- - `drydock/core/types.py` — `MessageList` (custom Sequence, use `.reset()` not `=[]`)
37
-
38
- ## Critical Constraints
39
-
40
- - **MessageList is not a plain list.** Never `self.messages = [...]`. Use `self.messages.reset([...])`.
41
- - **vLLM/Mistral rejects `user` after `tool` messages.** `_sanitize_message_ordering()` runs before every LLM call as safety net. All injection should use `_inject_system_note()`.
42
- - **`os._exit()` in programmatic.py** — necessary because async cleanup hangs. Ensure stdout is flushed before calling.
43
- - **Tests may fail due to stale SWE-bench worktrees** poisoning pytest. Use `python3 -c "import ast; ..."` for syntax checks instead.
44
-
45
- ## SWE-bench Infrastructure
46
-
47
- Benchmarking scripts live at `/data3/swe_bench_runs/` (not in the drydock repo):
48
- - `harness.py` — Runs drydock on SWE-bench tasks, captures patches
49
- - `continuous_bench.sh` — Continuous improvement loop (cron @reboot + every 6h)
50
- - `deploy_to_github.sh` → `/data3/drydock/scripts/` — Daily push to GitHub
51
-
52
- ## When Compacting
53
-
54
- Always preserve: the list of files modified in this session, any failing test output, and the current task context from the PRD.
55
-
56
- ## Style
57
-
58
- - Python 3.12+, type hints, pathlib over os.path
59
- - Match existing patterns in the codebase
60
- - No unnecessary abstractions — keep fixes minimal
61
- - Always run syntax check after editing .py files