drydock-cli 0.6.3__tar.gz → 0.6.4__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 (455) hide show
  1. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/PKG-INFO +1 -1
  2. drydock_cli-0.6.4/PRD.md +180 -0
  3. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/pyproject.toml +1 -1
  4. drydock_cli-0.6.3/PRD.md +0 -268
  5. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/CODEOWNERS +0 -0
  6. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  7. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  8. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  9. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/workflows/build-and-upload.yml +0 -0
  10. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/workflows/ci.yml +0 -0
  11. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/workflows/issue-labeler.yml +0 -0
  12. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.github/workflows/release.yml +0 -0
  13. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.gitignore +0 -0
  14. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.pre-commit-config.yaml +0 -0
  15. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.python-version +0 -0
  16. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.typos.toml +0 -0
  17. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.vscode/extensions.json +0 -0
  18. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.vscode/launch.json +0 -0
  19. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/.vscode/settings.json +0 -0
  20. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/AGENTS.md +0 -0
  21. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/CHANGELOG.md +0 -0
  22. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/CLAUDE.md +0 -0
  23. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/CONTRIBUTING.md +0 -0
  24. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/Drydock_rebrand.md +0 -0
  25. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/LICENSE +0 -0
  26. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/NOTICE +0 -0
  27. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/README.md +0 -0
  28. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/action.yml +0 -0
  29. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/distribution/zed/LICENSE +0 -0
  30. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/distribution/zed/extension.toml +0 -0
  31. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/distribution/zed/icons/mistral_vibe.svg +0 -0
  32. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/docs/README.md +0 -0
  33. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/docs/acp-setup.md +0 -0
  34. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/docs/proxy-setup.md +0 -0
  35. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/__init__.py +0 -0
  36. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/__init__.py +0 -0
  37. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/acp_agent_loop.py +0 -0
  38. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/acp_logger.py +0 -0
  39. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/entrypoint.py +0 -0
  40. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/__init__.py +0 -0
  41. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/base.py +0 -0
  42. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/builtins/bash.py +0 -0
  43. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/builtins/read_file.py +0 -0
  44. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/builtins/search_replace.py +0 -0
  45. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/builtins/todo.py +0 -0
  46. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/builtins/write_file.py +0 -0
  47. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/tools/session_update.py +0 -0
  48. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/acp/utils.py +0 -0
  49. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/__init__.py +0 -0
  50. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/autocompletion/__init__.py +0 -0
  51. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/autocompletion/base.py +0 -0
  52. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/autocompletion/path_completion.py +0 -0
  53. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/autocompletion/slash_command.py +0 -0
  54. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/cli.py +0 -0
  55. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/clipboard.py +0 -0
  56. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/commands.py +0 -0
  57. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/entrypoint.py +0 -0
  58. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/history_manager.py +0 -0
  59. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  60. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  61. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  62. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/terminal_setup.py +0 -0
  63. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/__init__.py +0 -0
  64. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  65. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/app.py +0 -0
  66. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/app.tcss +0 -0
  67. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/external_editor.py +0 -0
  68. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  69. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  70. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  71. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  72. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  73. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  74. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  75. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  76. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  77. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  78. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  79. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  80. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  81. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  82. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  83. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  84. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  85. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  86. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  87. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  88. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  89. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  90. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  91. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  92. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  93. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  94. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  95. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  96. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  97. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  98. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  99. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  100. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  101. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  102. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  103. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  104. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/windowing/history.py +0 -0
  105. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  106. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/textual_ui/windowing/state.py +0 -0
  107. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/__init__.py +0 -0
  108. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  109. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  110. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  111. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  112. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  113. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/update.py +0 -0
  114. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/cli/update_notifier/whats_new.py +0 -0
  115. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/__init__.py +0 -0
  116. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/agent_loop.py +0 -0
  117. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/agents/__init__.py +0 -0
  118. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/agents/manager.py +0 -0
  119. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/agents/models.py +0 -0
  120. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/auth/__init__.py +0 -0
  121. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/auth/crypto.py +0 -0
  122. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/auth/github.py +0 -0
  123. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/__init__.py +0 -0
  124. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/completers.py +0 -0
  125. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  126. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  127. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  128. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  129. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  130. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/fuzzy.py +0 -0
  131. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/path_prompt.py +0 -0
  132. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  133. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/config/__init__.py +0 -0
  134. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/config/_settings.py +0 -0
  135. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/config/harness_files/__init__.py +0 -0
  136. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  137. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/config/harness_files/_paths.py +0 -0
  138. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/consultant.py +0 -0
  139. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/drydock_states.py +0 -0
  140. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/__init__.py +0 -0
  141. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/anthropic.py +0 -0
  142. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/base.py +0 -0
  143. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/factory.py +0 -0
  144. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/generic.py +0 -0
  145. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/mistral.py +0 -0
  146. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  147. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/backend/vertex.py +0 -0
  148. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/exceptions.py +0 -0
  149. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/format.py +0 -0
  150. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/message_utils.py +0 -0
  151. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/llm/types.py +0 -0
  152. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/logger.py +0 -0
  153. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/middleware.py +0 -0
  154. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/output_formatters.py +0 -0
  155. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/paths/__init__.py +0 -0
  156. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/paths/_local_config_walk.py +0 -0
  157. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/paths/_vibe_home.py +0 -0
  158. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/paths/conventions.py +0 -0
  159. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/plan_session.py +0 -0
  160. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/programmatic.py +0 -0
  161. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/__init__.py +0 -0
  162. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/cli.md +0 -0
  163. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/compact.md +0 -0
  164. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/dangerous_directory.md +0 -0
  165. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/diagnostic.md +0 -0
  166. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/explore.md +0 -0
  167. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/planner.md +0 -0
  168. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/project_context.md +0 -0
  169. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/prompts/tests.md +0 -0
  170. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/proxy_setup.py +0 -0
  171. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/session/session_loader.py +0 -0
  172. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/session/session_logger.py +0 -0
  173. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/session/session_migration.py +0 -0
  174. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/session/state_file.py +0 -0
  175. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/skills/__init__.py +0 -0
  176. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/skills/manager.py +0 -0
  177. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/skills/models.py +0 -0
  178. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/skills/parser.py +0 -0
  179. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/slug.py +0 -0
  180. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/system_prompt.py +0 -0
  181. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/telemetry/__init__.py +0 -0
  182. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/telemetry/send.py +0 -0
  183. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/teleport/errors.py +0 -0
  184. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/teleport/git.py +0 -0
  185. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/teleport/nuage.py +0 -0
  186. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/teleport/teleport.py +0 -0
  187. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/teleport/types.py +0 -0
  188. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/base.py +0 -0
  189. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  190. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/bash.py +0 -0
  191. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  192. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/grep.py +0 -0
  193. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  194. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  195. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  196. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  197. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  198. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  199. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  200. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/task.md +0 -0
  201. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  202. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  203. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  204. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  205. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/read_file.py +0 -0
  206. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/search_replace.py +0 -0
  207. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/task.py +0 -0
  208. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/todo.py +0 -0
  209. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/webfetch.py +0 -0
  210. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/websearch.py +0 -0
  211. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/builtins/write_file.py +0 -0
  212. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/injection_guard.py +0 -0
  213. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/manager.py +0 -0
  214. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/mcp/__init__.py +0 -0
  215. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/mcp/registry.py +0 -0
  216. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/mcp/tools.py +0 -0
  217. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/mcp_sampling.py +0 -0
  218. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/ui.py +0 -0
  219. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/tools/utils.py +0 -0
  220. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/trusted_folders.py +0 -0
  221. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/types.py +0 -0
  222. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/core/utils.py +0 -0
  223. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/__init__.py +0 -0
  224. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/base.py +0 -0
  225. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/onboarding.tcss +0 -0
  226. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/screens/__init__.py +0 -0
  227. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/screens/api_key.py +0 -0
  228. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/onboarding/screens/welcome.py +0 -0
  229. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  230. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  231. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/skills/__init__.py +0 -0
  232. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/skills/create-presentation/SKILL.md +0 -0
  233. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock/whats_new.md +0 -0
  234. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock-acp.spec +0 -0
  235. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/drydock_terms.md +0 -0
  236. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/flake.lock +0 -0
  237. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/flake.nix +0 -0
  238. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/README.md +0 -0
  239. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/bump_version.py +0 -0
  240. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/deploy_to_github.sh +0 -0
  241. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/install.sh +0 -0
  242. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/prepare_release.py +0 -0
  243. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/scripts/publish_to_pypi.sh +0 -0
  244. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/__init__.py +0 -0
  245. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/conftest.py +0 -0
  246. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_acp.py +0 -0
  247. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_agent_thought.py +0 -0
  248. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_bash.py +0 -0
  249. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_compact_session_updates.py +0 -0
  250. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_content.py +0 -0
  251. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_initialize.py +0 -0
  252. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_list_sessions.py +0 -0
  253. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_load_session.py +0 -0
  254. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_multi_session.py +0 -0
  255. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_new_session.py +0 -0
  256. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_proxy_setup_acp.py +0 -0
  257. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_read_file.py +0 -0
  258. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_search_replace.py +0 -0
  259. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_set_config_option.py +0 -0
  260. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_set_mode.py +0 -0
  261. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_set_model.py +0 -0
  262. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_tool_call_session_update.py +0 -0
  263. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_utils.py +0 -0
  264. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/acp/test_write_file.py +0 -0
  265. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_file_indexer.py +0 -0
  266. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_fuzzy.py +0 -0
  267. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  268. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  269. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_path_completion_controller.py +0 -0
  270. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  271. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_slash_command_controller.py +0 -0
  272. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  273. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/__init__.py +0 -0
  274. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/data/__init__.py +0 -0
  275. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/data/fireworks.py +0 -0
  276. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/data/mistral.py +0 -0
  277. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/test_anthropic_adapter.py +0 -0
  278. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/test_backend.py +0 -0
  279. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/test_reasoning_adapter.py +0 -0
  280. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  281. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  282. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  283. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  284. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_bell_notifications.py +0 -0
  285. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_braille_renderer.py +0 -0
  286. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_clipboard.py +0 -0
  287. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_commands.py +0 -0
  288. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_copy_shortcuts.py +0 -0
  289. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_external_editor.py +0 -0
  290. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_no_markup_static.py +0 -0
  291. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_question_app.py +0 -0
  292. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_spinner.py +0 -0
  293. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_switching_mode.py +0 -0
  294. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  295. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  296. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_ui_session_resume.py +0 -0
  297. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/test_ui_skill_dispatch.py +0 -0
  298. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/textual_ui/__init__.py +0 -0
  299. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/cli/textual_ui/test_session_picker.py +0 -0
  300. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/conftest.py +0 -0
  301. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_agents.py +0 -0
  302. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_auth_crypto.py +0 -0
  303. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_auth_github.py +0 -0
  304. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_config_load_dotenv.py +0 -0
  305. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_config_paths.py +0 -0
  306. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_config_resolution.py +0 -0
  307. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_file_logging.py +0 -0
  308. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_plan_session.py +0 -0
  309. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_proxy_setup.py +0 -0
  310. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_slug.py +0 -0
  311. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_telemetry_send.py +0 -0
  312. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_teleport_git.py +0 -0
  313. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_teleport_nuage.py +0 -0
  314. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_teleport_service.py +0 -0
  315. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_trusted_folders.py +0 -0
  316. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/core/test_utils.py +0 -0
  317. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/common.py +0 -0
  318. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/conftest.py +0 -0
  319. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/mock_server.py +0 -0
  320. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  321. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/test_cli_tui_streaming.py +0 -0
  322. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  323. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/mock/__init__.py +0 -0
  324. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/mock/mock_backend_factory.py +0 -0
  325. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/mock/mock_entrypoint.py +0 -0
  326. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/mock/utils.py +0 -0
  327. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/onboarding/test_run_onboarding.py +0 -0
  328. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/onboarding/test_ui_onboarding.py +0 -0
  329. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/session/test_session_loader.py +0 -0
  330. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/session/test_session_logger.py +0 -0
  331. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/session/test_session_migration.py +0 -0
  332. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/skills/conftest.py +0 -0
  333. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/skills/test_manager.py +0 -0
  334. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/skills/test_models.py +0 -0
  335. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/skills/test_parser.py +0 -0
  336. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  337. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  338. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  339. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  340. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  341. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  342. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  343. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  344. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  345. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  346. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  347. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  348. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  349. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  350. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  351. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  352. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  353. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  354. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  355. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  356. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  357. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  358. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  359. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  360. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  361. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  362. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  363. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  364. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  365. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  366. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  367. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  368. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  369. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  370. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  371. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  372. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  373. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  374. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  375. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  376. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  377. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  378. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  379. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  380. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  381. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  382. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  383. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  384. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  385. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  386. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  387. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  388. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  389. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  390. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  391. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  392. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  393. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  394. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  395. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  396. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/base_snapshot_test_app.py +0 -0
  397. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/conftest.py +0 -0
  398. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/snap_compare.py +0 -0
  399. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  400. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  401. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  402. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  403. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  404. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  405. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  406. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  407. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  408. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  409. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  410. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  411. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  412. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  413. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/stubs/fake_backend.py +0 -0
  414. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/stubs/fake_client.py +0 -0
  415. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/stubs/fake_tool.py +0 -0
  416. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agent_auto_compact.py +0 -0
  417. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agent_backend.py +0 -0
  418. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agent_observer_streaming.py +0 -0
  419. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agent_stats.py +0 -0
  420. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agent_tool_call.py +0 -0
  421. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_agents.py +0 -0
  422. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_cli_programmatic_preload.py +0 -0
  423. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_drydock_regression.py +0 -0
  424. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_drydock_tasks.py +0 -0
  425. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_history_manager.py +0 -0
  426. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_message_id.py +0 -0
  427. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_message_merging.py +0 -0
  428. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_middleware.py +0 -0
  429. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_reasoning_content.py +0 -0
  430. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_system_prompt.py +0 -0
  431. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_tagged_text.py +0 -0
  432. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_ui_external_editor.py +0 -0
  433. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/test_ui_input_history.py +0 -0
  434. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_ask_user_question.py +0 -0
  435. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_bash.py +0 -0
  436. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_exit_plan_mode.py +0 -0
  437. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_grep.py +0 -0
  438. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_invoke_context.py +0 -0
  439. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_manager_get_tool_config.py +0 -0
  440. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_mcp.py +0 -0
  441. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_mcp_sampling.py +0 -0
  442. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_task.py +0 -0
  443. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_ui_bash_execution.py +0 -0
  444. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_webfetch.py +0 -0
  445. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/tools/test_websearch.py +0 -0
  446. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  447. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  448. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_do_update.py +0 -0
  449. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  450. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_github_update_gateway.py +0 -0
  451. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  452. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_ui_update_notification.py +0 -0
  453. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_update_use_case.py +0 -0
  454. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/tests/update_notifier/test_whats_new.py +0 -0
  455. {drydock_cli-0.6.3 → drydock_cli-0.6.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 0.6.3
3
+ Version: 0.6.4
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,180 @@
1
+ # DryDock — Local CLI Coding Agent
2
+
3
+ **Repository:** https://github.com/fbobe321/drydock
4
+ **PyPI:** https://pypi.org/project/drydock-cli/ (v0.6.3)
5
+ **License:** Apache 2.0 (fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe))
6
+ **Status:** Active development — continuous improvement running
7
+
8
+ ---
9
+
10
+ ## Deployment Process
11
+
12
+ Every change follows this pipeline:
13
+
14
+ 1. **Code** → modify files in `drydock/` package directory
15
+ 2. **Syntax check** → `python3 -c "import ast; ast.parse(...)"`
16
+ 3. **Regression tests** → 81 tests must pass (auto-run by deploy scripts)
17
+ 4. **Commit** → descriptive message with Co-Authored-By
18
+ 5. **Publish** → `./scripts/publish_to_pypi.sh` (tests → build → PyPI → GitHub)
19
+
20
+ Scripts:
21
+ - `scripts/deploy_to_github.sh` — runs tests, syncs to GitHub. Cron daily at 4 AM.
22
+ - `scripts/publish_to_pypi.sh` — runs tests, bumps version, builds wheel, uploads to PyPI, deploys to GitHub. Aborts on test failure.
23
+
24
+ Both scripts gate on the full 81-test regression suite. No deploy happens if tests fail.
25
+
26
+ ---
27
+
28
+ ## Regression Test Suite (81 tests)
29
+
30
+ Two test files, run in 0.3s:
31
+
32
+ ```bash
33
+ pytest tests/test_drydock_regression.py tests/test_drydock_tasks.py -p no:xdist -p no:cov --override-ini="addopts="
34
+ ```
35
+
36
+ **test_drydock_regression.py (37 tests):**
37
+ Message ordering (6), system note injection (3), wave spinner (2), config paths (3), state terms (4), Easter eggs (2), bash allowlist (5), conda detection (2), CLI flags (2), loop thresholds (1), write file safety (3), loop patterns (2), loading widget (2)
38
+
39
+ **test_drydock_tasks.py (44 tests):**
40
+ Binary file guard (5), unknown tool handling (1), loop thresholds (3), file I/O timeouts (4), skill discovery (3), config migration (2), system prompt content (3), bash allowlist (2), wave spinner (3), Easter eggs (1), injection guard (4), state file (4), context warnings (3), deviation rules (1), circuit breaker (2), CLI flags (2), thinking throttle (1)
41
+
42
+ ---
43
+
44
+ ## Continuous Improvement
45
+
46
+ DryDock improves itself automatically and survives restarts:
47
+
48
+ 1. **`continuous_bench.sh`** runs SWE-bench batches in a loop (20 tasks, 600s timeout)
49
+ 2. **`@reboot` cron** restarts 2 minutes after any system restart
50
+ 3. **Every 6 hours** cron re-launches if the loop died
51
+ 4. **Daily at 4 AM** deploys to GitHub (with test gate)
52
+ 5. **State persists** in `continuous_bench_state.json`
53
+
54
+ **Latest results (Mar 25):**
55
+ - 520 task runs completed, 500/500 unique tasks covered
56
+ - **254/500 passed (50.8%)** — up from 207/500 baseline (41.4%)
57
+ - **+47 net improvement** (117 newly passing, 70 regressions from model non-determinism)
58
+
59
+ ---
60
+
61
+ ## Objective
62
+
63
+ | | Value |
64
+ |---|---|
65
+ | **Baseline (Mar 15)** | 207/500 (41.4%) |
66
+ | **Current (Mar 25)** | 254/500 (50.8%) |
67
+ | **Net improvement** | +47 tasks (+9.4%) |
68
+ | **Target** | 80%+ |
69
+ | **Hardware** | 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM, 128k context |
70
+
71
+ ---
72
+
73
+ ## Development Progress
74
+
75
+ ### Phase 1: Baseline & Analysis (Mar 14–20)
76
+ 1,138 task runs across 254 unique SWE-bench Verified tasks. Identified top failure modes: message ordering crashes (9%), wrong file edits (15%), loop kills (28%), prose-only responses (11%).
77
+
78
+ ### Phase 2: Core Agent Improvements (Mar 15–20)
79
+ 10 features: failure recovery middleware, fuzzy search_replace, grep source-first sorting, smarter loop detection, diagnostic/planner subagents, "never edit tests" rule, SWE-bench workflow prompt, .codeignore, message ordering fix.
80
+
81
+ ### Phase 3: Crash Elimination (Mar 23)
82
+ `_sanitize_message_ordering()` safety net, middleware safe injection, MessageList bug fix, loop threshold tuning, forced-edit nudges, ConversationLimitException exit 0. Result: zero crashes.
83
+
84
+ ### Phase 4: Conda/Pip & Rebrand (Mar 23)
85
+ Bash tool allowlist (pip, conda, pytest auto-approve), conda environment detection via BASH_ENV, full Mistral Vibe → DryDock rebrand. Published to GitHub.
86
+
87
+ ### Phase 5: UX Overhaul (Mar 24)
88
+ Wave spinner, .drydock config dir, double Ctrl-C, --dangerously-skip-permissions, nautical Easter eggs, status throttle, write file timeouts, binary file guard, pptx skill, bash abuse detection, alternating loop detection, progressive budget warnings, ambiguous prompt guard, message queuing, mouse scroll, ocean blue onboarding. 76 regression tests gating deploys.
89
+
90
+ ### Phase 5b: Package Rename (Mar 24)
91
+ `vibe/` → `drydock/` directory rename (908 imports, 257 files). Published to PyPI as drydock-cli. Removed `vibe` CLI entry point.
92
+
93
+ ### Phase 6: GSD Integration & Performance (Mar 25)
94
+
95
+ Inspired by [get-shit-done](https://github.com/gsd-build/get-shit-done) (41k stars):
96
+
97
+ | Feature | Details |
98
+ |---------|---------|
99
+ | Tiered context warnings | 4 levels at 50/65/75/85% usage, debounced every 5 calls |
100
+ | Prompt injection guard | Detects role overrides, invisible Unicode, hidden instructions |
101
+ | Structured state file | `.drydock/state.md` persists task context across sessions |
102
+ | Deviation handling rules | Auto-fix bugs/imports, ask user for architecture/scope decisions |
103
+ | Circuit breaker | Blocks exact same tool call after 2 attempts with "already attempted" summary |
104
+ | Thinking flicker fix | Status words change every 4s, not every token |
105
+ | Conda env protection | Preserves user's active environment in subprocesses |
106
+ | `--insecure` / `-k` flag | Disables SSL verification for corporate proxies |
107
+ | `/consult` command | Ask a smarter model for advice — response visible to local model |
108
+ | `consultant_model` config | Select consultant from configured models in config.toml |
109
+ | `.vibe` auto-migration | Copies ~/.vibe → ~/.drydock on first run |
110
+
111
+ ---
112
+
113
+ ## Architecture
114
+
115
+ ```
116
+ drydock/
117
+ ├── PRD.md ← This document
118
+ ├── NOTICE ← Apache 2.0 attribution
119
+ ├── drydock/
120
+ │ ├── core/
121
+ │ │ ├── agent_loop.py ← Loop detection, circuit breaker, message ordering
122
+ │ │ ├── consultant.py ← /consult command backend (read-only advisor)
123
+ │ │ ├── middleware.py ← Tiered context warnings
124
+ │ │ ├── programmatic.py ← Headless API entry point
125
+ │ │ ├── session/state_file.py ← Cross-session state persistence
126
+ │ │ ├── tools/injection_guard.py ← Prompt injection detection
127
+ │ │ ├── tools/builtins/bash.py ← Shell, conda/pip, allowlist/denylist
128
+ │ │ ├── tools/builtins/search_replace.py ← Fuzzy auto-apply, recovery hints
129
+ │ │ └── prompts/cli.md ← System prompt with deviation rules
130
+ │ ├── cli/
131
+ │ │ ├── entrypoint.py ← CLI flags (--insecure, --consultant, etc.)
132
+ │ │ ├── commands.py ← Slash commands (/consult, /help, etc.)
133
+ │ │ └── textual_ui/app.py ← TUI, message queuing, double Ctrl-C
134
+ │ └── skills/
135
+ │ └── create-presentation/SKILL.md ← Bundled pptx skill
136
+ ├── tests/
137
+ │ ├── test_drydock_regression.py ← 37 component tests
138
+ │ └── test_drydock_tasks.py ← 44 behavior tests
139
+ └── scripts/
140
+ ├── deploy_to_github.sh ← Test-gated GitHub deploy
141
+ └── publish_to_pypi.sh ← Test-gated PyPI publish
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Key Technical Decisions
147
+
148
+ **Circuit breaker:** Tracks tool call signatures (hash of name + args). After 2 identical calls, blocks execution and returns the cached result with "ALREADY ATTEMPTED" summary and suggestions to try different approaches.
149
+
150
+ **Consultant model:** `/consult` sends a question to a configured model using DryDock's own backend (same providers, same API keys). The consultant never calls tools — it only returns text advice that gets injected into the conversation so the local model can see and act on it.
151
+
152
+ **Tiered context warnings:** 4 warning levels (50%, 65%, 75%, 85% context used). Debounced every 5 tool calls. Messages escalate from "wrap up" to "STOP NOW."
153
+
154
+ **Config migration:** On first run, if `~/.vibe` exists but `~/.drydock` doesn't, auto-copies everything and leaves a `MIGRATED.txt` note.
155
+
156
+ ---
157
+
158
+ ## Lessons Learned
159
+
160
+ 1. **Fix bugs before adding features.** The message ordering crash fix was worth more than all subagents combined.
161
+ 2. **Non-determinism is real.** Run 500+ tasks to get stable numbers. 20-task batches are noise.
162
+ 3. **The model needs hard guardrails, not suggestions.** The circuit breaker (block after 2) works better than warnings (which the model ignores).
163
+ 4. **Test everything.** 81 regression tests catch issues before they ship. Gate deploys on tests.
164
+ 5. **Users find different bugs than benchmarks.** SWE-bench found crash bugs. Real usage found UX bugs (flicker, loops, wrong config dirs).
165
+
166
+ ---
167
+
168
+ ## Next Steps
169
+
170
+ ### P1: Startup optimization
171
+ 20-second delay on launch. Profile imports, lazy-load heavy modules.
172
+
173
+ ### P2: Expand to full SWE-bench (2,294 tasks)
174
+ Batch file ready. Switch continuous_bench.sh once Verified is stable.
175
+
176
+ ### P3: Task queue UI
177
+ Show the user what the agent has planned in its execution pipeline.
178
+
179
+ ### P4: Support more LLM backends
180
+ Test with Claude, GPT-4, Gemini to understand which improvements are model-specific.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "0.6.3"
3
+ version = "0.6.4"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
drydock_cli-0.6.3/PRD.md DELETED
@@ -1,268 +0,0 @@
1
- # Drydock — Local CLI Coding Agent
2
-
3
- **Repository:** https://github.com/fbobe321/drydock
4
- **License:** Apache 2.0 (fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe))
5
- **Status:** Active development — continuous improvement running
6
-
7
- ---
8
-
9
- ## Directive: Continuous Improvement
10
-
11
- Drydock improves itself automatically and survives restarts:
12
-
13
- 1. **`continuous_bench.sh`** runs SWE-bench batches in a loop (20 tasks per batch, 600s timeout)
14
- 2. **`@reboot` cron** restarts the bench loop 2 minutes after any system restart
15
- 3. **Every 6 hours** cron re-launches if the loop died for any reason
16
- 4. **Daily at 4 AM** `deploy_to_github.sh` pushes all changes to GitHub
17
- 5. **State persists** in `continuous_bench_state.json` — tracks tested tasks and pass rates across restarts
18
- 6. **Lock file** prevents concurrent runs
19
-
20
- If the computer restarts, the improvement process resumes automatically. No human intervention needed.
21
-
22
- ---
23
-
24
- ## Objective
25
-
26
- Build Drydock into a best-in-class local coding agent, measured by SWE-bench Verified pass rate.
27
-
28
- | | Value |
29
- |---|---|
30
- | **Baseline (Mar 15)** | 60.6% files-match (154/254 tasks) |
31
- | **Post-fix (Mar 23)** | ~47% on previously-impossible tasks; 0 crashes |
32
- | **Target** | 80%+ |
33
- | **Hardware** | 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM, 128k context |
34
-
35
- ---
36
-
37
- ## Development Progress
38
-
39
- ### Phase 1: Baseline & Analysis (Mar 14–20)
40
-
41
- 1,138 task runs across 254 unique SWE-bench Verified tasks established the baseline.
42
-
43
- **Baseline Performance:**
44
-
45
- | Metric | Value |
46
- |--------|-------|
47
- | Unique tasks tested | 254 |
48
- | Files match gold (best attempt) | 154/254 (60.6%) |
49
- | Patch generated | 192/254 (75.6%) |
50
- | No patch (timeout/loop kill) | 72 (28%) |
51
- | No patch (gave up) | 27 (11%) |
52
- | Wrong files edited | 38 (15%) |
53
- | Message ordering crash | 23 (9%) |
54
-
55
- **By Repository:**
56
-
57
- | Repo | Pass Rate |
58
- |------|-----------|
59
- | flask | 100% (3/3) |
60
- | xarray | 75% (9/12) |
61
- | scikit-learn | 65% (13/20) |
62
- | pytest | 62% (8/13) |
63
- | sympy | 59% (24/41) |
64
- | requests | 60% (3/5) |
65
- | sphinx | 56% (9/16) |
66
- | django | 54% (59/109) |
67
- | matplotlib | 45% (5/11) |
68
- | astropy | 44% (4/9) |
69
-
70
- **Top Failure Modes Identified:**
71
-
72
- 1. **Message ordering crash (9%)** — vLLM/Mistral rejects `user` after `tool` messages
73
- 2. **Wrong file edited (15%)** — model edits test files or wrong source module
74
- 3. **Loop detection kills (28%)** — agent stopped before making an edit
75
- 4. **Describes fix but doesn't apply (11%)** — model writes prose instead of calling search_replace
76
-
77
- ### Phase 2: Core Agent Improvements (Mar 15–20)
78
-
79
- 10 features implemented in Drydock's source:
80
-
81
- 1. **Failure Recovery Middleware** — search_replace errors include RECOVERY hint telling model to re-read and retry
82
- 2. **Fuzzy search_replace Auto-Apply** — auto-applies matches >= 95% similarity when exact match fails
83
- 3. **grep Source-First Sorting** — source files sorted before test files in results
84
- 4. **Smarter Loop Detection** — tool-specific thresholds, investigation-aware warnings
85
- 5. **Diagnostic Subagent** — analyzes test failures, registered as builtin agent
86
- 6. **Planner Subagent** — pre-edit analysis, identifies target file/function
87
- 7. **"Never Edit Tests" Rule** — explicit in cli.md system prompt
88
- 8. **SWE-bench Workflow Prompt** — two-phase investigate-then-fix guidance
89
- 9. **.codeignore** — test dirs excluded from grep in SWE-bench worktrees
90
- 10. **Message Ordering Fix** — `_inject_system_note()` prevents user-after-tool crash
91
-
92
- ### Phase 3: Crash Elimination & Optimization (Mar 23)
93
-
94
- Diagnosed and fixed the remaining crash modes. Ran validation batches (51 tasks total).
95
-
96
- **Fixes applied:**
97
-
98
- | Fix | Impact |
99
- |-----|--------|
100
- | `_sanitize_message_ordering()` safety net | Eliminated 63+ message ordering crashes |
101
- | Harness path update (mistral-vibe → drydock) | Eliminated 110+ empty output crashes |
102
- | Middleware INJECT_MESSAGE safe injection | Prevented user-after-tool in middleware path |
103
- | `_prune_repeated_tool_calls` MessageList bug | Fixed list replacement breaking downstream methods |
104
- | Loop detection thresholds relaxed (WARNING 6→8, FORCE_STOP 20→25) | More room for legitimate investigation |
105
- | Investigation tools count 0.3 per warning (was 0.5) | grep/read_file penalized less |
106
- | Forced-edit nudge at 15 turns (was 20), repeats every 5 | Earlier intervention for stuck agents |
107
- | Escalating text-without-action (3 levels) | Stronger nudges when model describes instead of fixing |
108
- | ConversationLimitException exits 0 | Middleware stop is normal completion, not error |
109
-
110
- **Validation Results:**
111
-
112
- | Batch | Tasks | Files Match | Notes |
113
- |-------|-------|-------------|-------|
114
- | postfix_v1 | 21 (all never-passed) | 9/21 (43%) | Zero crashes |
115
- | postfix_v2 | 30 (10 regression + 20 new) | 14/30 (47%) | Zero crashes, zero errors |
116
- | **Newly passing** | 40 previously-impossible | **19/40 (48%)** | Tasks that never passed before |
117
-
118
- **Regressions:** 6/10 previously-passing tasks failed — all due to model non-determinism (empty output, no edits made), not code changes.
119
-
120
- ### Phase 4: Conda/Pip Support & Rebrand (Mar 23)
121
-
122
- - **Bash tool allowlist** — pip install, conda install/run/list, pytest, make, python -c all auto-approve
123
- - **Conda environment detection** — `_get_conda_setup_script()` finds conda.sh and sets `BASH_ENV` so `conda activate` works in non-interactive subprocesses
124
- - **Full rebrand** — Mistral Vibe → Drydock throughout CLI, TUI, docs, config
125
- - **Published to GitHub** — https://github.com/fbobe321/drydock
126
-
127
- ### Phase 5: UX Overhaul & Regression Tests (Mar 24)
128
-
129
- User-reported issues from real usage testing, all fixed:
130
-
131
- | Fix | Details |
132
- |-----|---------|
133
- | Wave spinner | ~≈~ animation with ocean blue colors, replaces snake |
134
- | .drydock config | Default config dir is ~/.drydock (falls back to ~/.vibe) |
135
- | Double Ctrl-C to quit | Single cancels operation, double within 1s exits |
136
- | --dangerously-skip-permissions | CLI flag for auto-approve from start |
137
- | Nautical Easter eggs | Removed all French terms (chocolatine, Proust, etc.) |
138
- | Slower state switching | Deque maxlen 2→5, no rapid flickering |
139
- | Write file timeout | 30s anyio.fail_after on all file I/O (read, write, search_replace) |
140
- | Binary file guard | write_file rejects .pptx/.xlsx/.pdf with guidance for python-pptx |
141
- | pptx skill | Bundled create-presentation skill with template handling & verification |
142
- | Bash abuse detection | Nudge after 10+ bash calls without editing |
143
- | search_replace failure guidance | After 3+ failures, tells model to re-read the file |
144
- | Alternating loop detection | Catches A→B→A→B→A→B→A→B patterns |
145
- | Progressive budget warnings | Nudges at 50, 100, 150 tool calls |
146
- | Ambiguous prompt guard | "test"/"check" → asks for clarification instead of exploring |
147
- | Unknown tool error | Lists available tools (fixes "Ralph tool" hallucination) |
148
- | SSL proxy for websearch | HTTPS_PROXY and SSL_CERT_FILE support |
149
- | Message queuing | New input queued during agent work, processed after completion |
150
- | Resume message fixed | Says "drydock --resume" not "vibe --resume" |
151
- | Mouse scroll | MOUSE_SUPPORT enabled for chat window |
152
- | Ocean blue onboarding | Welcome screen gradient updated from orange to blue |
153
-
154
- ### Phase 5b: Testing & CI (Mar 24)
155
-
156
- - **76 regression tests** gating all deploys
157
- - **Continuous SWE-bench loop** — 500/500 tasks tested, 49.0% pass rate (+9.4% from baseline)
158
- - **vibe/ → drydock/** package rename (908 imports updated)
159
- - **PyPI published** — drydock-cli v0.5.2
160
-
161
- ### Phase 6: GSD Integration & Performance (Mar 25)
162
-
163
- GSD-inspired features (from [get-shit-done](https://github.com/gsd-build/get-shit-done)):
164
-
165
- | Feature | Details |
166
- |---------|---------|
167
- | Tiered context warnings | 4 levels at 50/65/75/85% usage, debounced every 5 calls |
168
- | Prompt injection guard | Detects role overrides, invisible Unicode, hidden instructions in file writes |
169
- | Structured state file | `.drydock/state.md` persists task, files, decisions across sessions |
170
- | Deviation handling rules | Auto-fix bugs/imports, ask user for architecture/scope decisions |
171
-
172
- Performance and loop fixes:
173
-
174
- | Fix | Details |
175
- |-----|---------|
176
- | Circuit breaker | Blocks exact same tool call after 2 attempts, returns cached result |
177
- | Thinking flicker fix | Status words change every 4s, not every token |
178
- | Conda env protection | Preserves user's active conda environment in subprocesses |
179
- | `--insecure` / `-k` flag | Disables SSL verification for corporate proxy environments |
180
- | `--consultant MODEL` flag | Allows calling a smarter model for single-turn advice when stuck |
181
- | 81 regression tests | Circuit breaker, injection guard, state file, context tiers all tested |
182
-
183
- ---
184
-
185
- ## Architecture
186
-
187
- ```
188
- drydock/
189
- ├── PRD.md ← This document
190
- ├── NOTICE ← Apache 2.0 attribution
191
- ├── vibe/core/
192
- │ ├── agent_loop.py ← Loop detection, failure recovery, message ordering
193
- │ ├── programmatic.py ← Programmatic/headless API entry point
194
- │ ├── agents/models.py ← Agent profiles (diagnostic, planner, auto-approve)
195
- │ ├── prompts/
196
- │ │ ├── cli.md ← System prompt (SWE-bench rules, two-phase workflow)
197
- │ │ ├── diagnostic.md ← Failure analysis prompt
198
- │ │ └── planner.md ← Pre-edit analysis prompt
199
- │ └── tools/builtins/
200
- │ ├── bash.py ← Shell execution, conda/pip support, allowlist/denylist
201
- │ ├── search_replace.py ← Fuzzy auto-apply, recovery hints
202
- │ ├── grep.py ← Source-first sorting
203
- │ └── task.py ← Subagent spawning
204
- ├── vibe/cli/
205
- │ ├── entrypoint.py ← CLI entry point
206
- │ └── textual_ui/ ← TUI (Textual-based)
207
- └── vibe/setup/ ← Onboarding, trusted folders
208
- ```
209
-
210
- ### Key Technical Decisions
211
-
212
- **Message ordering safety net (`_sanitize_message_ordering`):**
213
- Runs before every `_chat()` and `_chat_streaming()` call. Scans the message list and merges any `user` messages that follow `tool` messages into the preceding tool result as `[SYSTEM: ...]` annotations. Also appends `"Continue."` if the last message is `assistant`. This is a belt-and-suspenders approach — the injection points should already be safe, but this catches edge cases.
214
-
215
- **Loop detection philosophy:**
216
- Investigation tools (grep, read_file) get a longer leash than action tools (bash, search_replace). The agent needs to explore before it can fix. Thresholds are tuned for SWE-bench tasks where 3-5 greps + 2-3 reads is typical before making an edit. Warnings escalate: soft nudge → strong directive → tool replacement → force stop.
217
-
218
- **Conda in non-interactive shells:**
219
- `conda activate` is a shell function defined in `.bashrc`, which isn't sourced for non-interactive `subprocess` commands. We detect the conda installation and set `BASH_ENV` to `conda.sh`, which bash sources before every non-interactive command.
220
-
221
- ---
222
-
223
- ## Lessons Learned
224
-
225
- 1. **Don't build parallel systems — improve the actual tool.** We wasted time building a custom `multi_agent/` pipeline. Every improvement should be a commit to Drydock's source.
226
-
227
- 2. **Monitoring without fixing is useless.** 797 watchdog restarts, zero code fixes. Crons must diagnose AND fix.
228
-
229
- 3. **LLM self-improvement doesn't work at 24B.** The auto-improve loop tried to use devstral to suggest code changes to its own pipeline. It never produced a valid improvement.
230
-
231
- 4. **Small batch sizes create noise.** 20-task batches have huge variance (15% to 62.5%). Need 50+ tasks per measurement.
232
-
233
- 5. **The biggest win was fixing a bug, not adding features.** The message ordering crash affected 9% of all tasks. Fixing that one bug was worth more than all the subagents and prompt changes combined.
234
-
235
- 6. **Non-determinism is real.** "Always-passing" tasks can fail on any given run. Don't chase regressions that are just model variance — run larger batches.
236
-
237
- ---
238
-
239
- ## Available Datasets
240
-
241
- | Dataset | Instances | Status |
242
- |---------|-----------|--------|
243
- | SWE-bench Verified | 500 | Active — continuous benchmarking |
244
- | SWE-bench Full | 2,294 | Batch file ready (`batch_full_2294.txt`) |
245
- | SWE-bench Lite | 534 | Available on HuggingFace |
246
- | SWE-bench Multimodal | 600 | Future (requires image support) |
247
- | SWE-bench Multilingual | 300 | Future (requires multi-language support) |
248
-
249
- ---
250
-
251
- ## Next Steps
252
-
253
- ### P1: Reduce "no patch" failures
254
- The model either gets loop-killed or talks instead of acting. Currently ~28% of tasks.
255
- - Extended nudging to 5 attempts (implemented, converts 3/5 to passes)
256
- - Diagnostic summary in stdout for analysis
257
- - Investigate remaining zero-output tasks
258
-
259
- ### P2: Fix wrong source file selection
260
- The model finds the right function name but in the wrong file. Currently ~11%.
261
- - Source directory hints per repo (implemented for pytest, matplotlib, scikit-learn)
262
- - Recovery hints on search_replace failure suggesting deeper module paths
263
-
264
- ### P3: Expand to full SWE-bench (2,294 tasks)
265
- Batch file ready. Switch continuous_bench.sh to use `batch_full_2294.txt` once Verified coverage is complete.
266
-
267
- ### P4: Support more LLM backends
268
- Currently optimized for devstral-24B via vLLM. Test with other models to understand which improvements are model-specific vs general.
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