drydock-cli 1.5.2__tar.gz → 1.5.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 (511) hide show
  1. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/PKG-INFO +1 -1
  2. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/PRD.md +149 -17
  3. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/agent_loop.py +22 -6
  4. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/pyproject.toml +1 -1
  5. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/deploy_to_github.sh +5 -2
  6. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/publish_to_pypi.sh +22 -1
  7. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/test_bank.sh +12 -2
  8. drydock_cli-1.5.4/scripts/test_full.sh +26 -0
  9. drydock_cli-1.5.2/scripts/test_full.sh +0 -17
  10. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/CODEOWNERS +0 -0
  11. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  12. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  13. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  14. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/workflows/build-and-upload.yml +0 -0
  15. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/workflows/ci.yml +0 -0
  16. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/workflows/issue-labeler.yml +0 -0
  17. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.github/workflows/release.yml +0 -0
  18. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.gitignore +0 -0
  19. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.pre-commit-config.yaml +0 -0
  20. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.python-version +0 -0
  21. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.typos.toml +0 -0
  22. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.vscode/extensions.json +0 -0
  23. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.vscode/launch.json +0 -0
  24. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/.vscode/settings.json +0 -0
  25. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/AGENTS.md +0 -0
  26. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/CHANGELOG.md +0 -0
  27. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/CLAUDE.md +0 -0
  28. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/CONTRIBUTING.md +0 -0
  29. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/Drydock_rebrand.md +0 -0
  30. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/LICENSE +0 -0
  31. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/NOTICE +0 -0
  32. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/README.md +0 -0
  33. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/action.yml +0 -0
  34. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/distribution/zed/LICENSE +0 -0
  35. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/distribution/zed/extension.toml +0 -0
  36. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/distribution/zed/icons/mistral_vibe.svg +0 -0
  37. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/docs/README.md +0 -0
  38. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/docs/acp-setup.md +0 -0
  39. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/docs/proxy-setup.md +0 -0
  40. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/__init__.py +0 -0
  41. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/__init__.py +0 -0
  42. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/acp_agent_loop.py +0 -0
  43. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/acp_logger.py +0 -0
  44. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/entrypoint.py +0 -0
  45. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/__init__.py +0 -0
  46. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/base.py +0 -0
  47. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/builtins/bash.py +0 -0
  48. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/builtins/read_file.py +0 -0
  49. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/builtins/search_replace.py +0 -0
  50. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/builtins/todo.py +0 -0
  51. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/builtins/write_file.py +0 -0
  52. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/tools/session_update.py +0 -0
  53. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/acp/utils.py +0 -0
  54. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/__init__.py +0 -0
  55. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/autocompletion/__init__.py +0 -0
  56. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/autocompletion/base.py +0 -0
  57. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/autocompletion/path_completion.py +0 -0
  58. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/autocompletion/slash_command.py +0 -0
  59. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/cli.py +0 -0
  60. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/clipboard.py +0 -0
  61. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/commands.py +0 -0
  62. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/entrypoint.py +0 -0
  63. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/history_manager.py +0 -0
  64. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  65. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  66. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  67. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/terminal_setup.py +0 -0
  68. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/__init__.py +0 -0
  69. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  70. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/app.py +0 -0
  71. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/app.tcss +0 -0
  72. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/external_editor.py +0 -0
  73. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  74. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  75. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  76. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  77. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  78. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  79. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  80. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  81. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  82. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  83. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  84. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  85. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  86. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  87. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  88. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  89. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  90. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  91. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  92. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  93. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  94. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  95. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  96. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  97. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  98. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  99. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  100. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  101. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  102. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  103. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  104. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  105. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  106. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  107. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  108. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  109. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/windowing/history.py +0 -0
  110. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  111. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/textual_ui/windowing/state.py +0 -0
  112. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/__init__.py +0 -0
  113. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  114. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  115. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  116. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  117. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  118. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/update.py +0 -0
  119. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/cli/update_notifier/whats_new.py +0 -0
  120. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/__init__.py +0 -0
  121. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/agents/__init__.py +0 -0
  122. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/agents/manager.py +0 -0
  123. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/agents/models.py +0 -0
  124. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/auth/__init__.py +0 -0
  125. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/auth/crypto.py +0 -0
  126. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/auth/github.py +0 -0
  127. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/__init__.py +0 -0
  128. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/completers.py +0 -0
  129. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  130. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  131. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  132. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  133. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  134. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/fuzzy.py +0 -0
  135. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/path_prompt.py +0 -0
  136. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  137. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/config/__init__.py +0 -0
  138. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/config/_settings.py +0 -0
  139. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/config/harness_files/__init__.py +0 -0
  140. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  141. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/config/harness_files/_paths.py +0 -0
  142. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/consultant.py +0 -0
  143. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/drydock_states.py +0 -0
  144. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/hooks.py +0 -0
  145. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/__init__.py +0 -0
  146. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/anthropic.py +0 -0
  147. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/base.py +0 -0
  148. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/factory.py +0 -0
  149. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/generic.py +0 -0
  150. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/mistral.py +0 -0
  151. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  152. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/backend/vertex.py +0 -0
  153. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/exceptions.py +0 -0
  154. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/format.py +0 -0
  155. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/message_utils.py +0 -0
  156. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/llm/types.py +0 -0
  157. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/logger.py +0 -0
  158. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/middleware.py +0 -0
  159. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/output_formatters.py +0 -0
  160. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/paths/__init__.py +0 -0
  161. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/paths/_local_config_walk.py +0 -0
  162. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/paths/_vibe_home.py +0 -0
  163. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/paths/conventions.py +0 -0
  164. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/plan_session.py +0 -0
  165. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/plugins.py +0 -0
  166. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/programmatic.py +0 -0
  167. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/__init__.py +0 -0
  168. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/cli.md +0 -0
  169. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/compact.md +0 -0
  170. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/dangerous_directory.md +0 -0
  171. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/diagnostic.md +0 -0
  172. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/explore.md +0 -0
  173. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/planner.md +0 -0
  174. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/project_context.md +0 -0
  175. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/prompts/tests.md +0 -0
  176. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/proxy_setup.py +0 -0
  177. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/agent_memory.py +0 -0
  178. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/checkpoints.py +0 -0
  179. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/session_loader.py +0 -0
  180. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/session_logger.py +0 -0
  181. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/session_migration.py +0 -0
  182. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/session/state_file.py +0 -0
  183. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/skills/__init__.py +0 -0
  184. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/skills/manager.py +0 -0
  185. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/skills/models.py +0 -0
  186. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/skills/parser.py +0 -0
  187. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/slug.py +0 -0
  188. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/system_prompt.py +0 -0
  189. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/telemetry/__init__.py +0 -0
  190. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/telemetry/send.py +0 -0
  191. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/teleport/errors.py +0 -0
  192. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/teleport/git.py +0 -0
  193. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/teleport/nuage.py +0 -0
  194. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/teleport/teleport.py +0 -0
  195. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/teleport/types.py +0 -0
  196. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/base.py +0 -0
  197. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  198. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/bash.py +0 -0
  199. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/cron.py +0 -0
  200. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  201. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/glob_tool.py +0 -0
  202. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/grep.py +0 -0
  203. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  204. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/lsp.py +0 -0
  205. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  206. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  207. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/powershell.py +0 -0
  208. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  209. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  210. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  211. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  212. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  213. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  214. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  215. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  216. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  217. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  218. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  219. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  220. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  221. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  222. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/task.md +0 -0
  223. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  224. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  225. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  226. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  227. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  228. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  229. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  230. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/read_file.py +0 -0
  231. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/search_replace.py +0 -0
  232. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/task.py +0 -0
  233. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/task_manager.py +0 -0
  234. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/todo.py +0 -0
  235. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/tool_search.py +0 -0
  236. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/webfetch.py +0 -0
  237. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/websearch.py +0 -0
  238. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/worktree.py +0 -0
  239. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/builtins/write_file.py +0 -0
  240. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/injection_guard.py +0 -0
  241. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/manager.py +0 -0
  242. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/mcp/__init__.py +0 -0
  243. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/mcp/registry.py +0 -0
  244. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/mcp/tools.py +0 -0
  245. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/mcp_sampling.py +0 -0
  246. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/ui.py +0 -0
  247. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/tools/utils.py +0 -0
  248. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/trusted_folders.py +0 -0
  249. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/types.py +0 -0
  250. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/core/utils.py +0 -0
  251. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/__init__.py +0 -0
  252. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/base.py +0 -0
  253. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/onboarding.tcss +0 -0
  254. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/screens/__init__.py +0 -0
  255. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/screens/api_key.py +0 -0
  256. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/onboarding/screens/welcome.py +0 -0
  257. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  258. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  259. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/__init__.py +0 -0
  260. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/batch/SKILL.md +0 -0
  261. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/create-presentation/SKILL.md +0 -0
  262. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/deep-research/SKILL.md +0 -0
  263. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/investigate/SKILL.md +0 -0
  264. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/review/SKILL.md +0 -0
  265. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/ship/SKILL.md +0 -0
  266. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/skills/simplify/SKILL.md +0 -0
  267. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock/whats_new.md +0 -0
  268. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock-acp.spec +0 -0
  269. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/drydock_terms.md +0 -0
  270. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/flake.lock +0 -0
  271. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/flake.nix +0 -0
  272. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/README.md +0 -0
  273. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/backup.sh +0 -0
  274. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/bump_version.py +0 -0
  275. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/install.sh +0 -0
  276. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/monitor_test_battery.sh +0 -0
  277. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/prepare_release.py +0 -0
  278. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/scripts/test_smoke.sh +0 -0
  279. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/__init__.py +0 -0
  280. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/conftest.py +0 -0
  281. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_acp.py +0 -0
  282. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_agent_thought.py +0 -0
  283. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_bash.py +0 -0
  284. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_compact_session_updates.py +0 -0
  285. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_content.py +0 -0
  286. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_initialize.py +0 -0
  287. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_list_sessions.py +0 -0
  288. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_load_session.py +0 -0
  289. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_multi_session.py +0 -0
  290. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_new_session.py +0 -0
  291. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_proxy_setup_acp.py +0 -0
  292. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_read_file.py +0 -0
  293. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_search_replace.py +0 -0
  294. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_set_config_option.py +0 -0
  295. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_set_mode.py +0 -0
  296. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_set_model.py +0 -0
  297. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_tool_call_session_update.py +0 -0
  298. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_utils.py +0 -0
  299. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/acp/test_write_file.py +0 -0
  300. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_file_indexer.py +0 -0
  301. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_fuzzy.py +0 -0
  302. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  303. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  304. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_path_completion_controller.py +0 -0
  305. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  306. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_slash_command_controller.py +0 -0
  307. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  308. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/__init__.py +0 -0
  309. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/data/__init__.py +0 -0
  310. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/data/fireworks.py +0 -0
  311. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/data/mistral.py +0 -0
  312. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/test_anthropic_adapter.py +0 -0
  313. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/test_backend.py +0 -0
  314. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/test_reasoning_adapter.py +0 -0
  315. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  316. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  317. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  318. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  319. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_bell_notifications.py +0 -0
  320. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_braille_renderer.py +0 -0
  321. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_clipboard.py +0 -0
  322. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_commands.py +0 -0
  323. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_copy_shortcuts.py +0 -0
  324. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_external_editor.py +0 -0
  325. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_no_markup_static.py +0 -0
  326. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_question_app.py +0 -0
  327. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_spinner.py +0 -0
  328. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_switching_mode.py +0 -0
  329. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  330. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  331. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_ui_session_resume.py +0 -0
  332. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/test_ui_skill_dispatch.py +0 -0
  333. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/textual_ui/__init__.py +0 -0
  334. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/cli/textual_ui/test_session_picker.py +0 -0
  335. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/conftest.py +0 -0
  336. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_agents.py +0 -0
  337. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_auth_crypto.py +0 -0
  338. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_auth_github.py +0 -0
  339. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_config_load_dotenv.py +0 -0
  340. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_config_paths.py +0 -0
  341. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_config_resolution.py +0 -0
  342. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_file_logging.py +0 -0
  343. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_plan_session.py +0 -0
  344. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_proxy_setup.py +0 -0
  345. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_slug.py +0 -0
  346. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_telemetry_send.py +0 -0
  347. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_teleport_git.py +0 -0
  348. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_teleport_nuage.py +0 -0
  349. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_teleport_service.py +0 -0
  350. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_trusted_folders.py +0 -0
  351. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/core/test_utils.py +0 -0
  352. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/common.py +0 -0
  353. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/conftest.py +0 -0
  354. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/mock_server.py +0 -0
  355. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  356. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/test_cli_tui_streaming.py +0 -0
  357. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  358. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/mock/__init__.py +0 -0
  359. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/mock/mock_backend_factory.py +0 -0
  360. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/mock/mock_entrypoint.py +0 -0
  361. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/mock/utils.py +0 -0
  362. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/onboarding/test_run_onboarding.py +0 -0
  363. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/onboarding/test_ui_onboarding.py +0 -0
  364. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/session/test_session_loader.py +0 -0
  365. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/session/test_session_logger.py +0 -0
  366. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/session/test_session_migration.py +0 -0
  367. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/skills/conftest.py +0 -0
  368. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/skills/test_manager.py +0 -0
  369. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/skills/test_models.py +0 -0
  370. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/skills/test_parser.py +0 -0
  371. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  372. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  373. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  374. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  375. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  376. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  377. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  378. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  379. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  380. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  381. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  382. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  383. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  384. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  385. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  386. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  387. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  388. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  389. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  390. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  391. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  392. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  393. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  394. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  395. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  396. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  397. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  398. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  399. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  400. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  401. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  402. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  403. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  404. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  405. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  406. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  407. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  408. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  409. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  410. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  411. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  412. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  413. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  414. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  415. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  416. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  417. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  418. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  419. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  420. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  421. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  422. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  423. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  424. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  425. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  426. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  427. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  428. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  429. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  430. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  431. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/base_snapshot_test_app.py +0 -0
  432. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/conftest.py +0 -0
  433. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/snap_compare.py +0 -0
  434. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  435. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  436. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  437. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  438. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  439. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  440. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  441. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  442. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  443. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  444. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  445. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  446. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  447. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  448. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/stubs/fake_backend.py +0 -0
  449. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/stubs/fake_client.py +0 -0
  450. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/stubs/fake_tool.py +0 -0
  451. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_auto_compact.py +0 -0
  452. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_backend.py +0 -0
  453. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_observer_streaming.py +0 -0
  454. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_stats.py +0 -0
  455. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_tasks.py +0 -0
  456. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agent_tool_call.py +0 -0
  457. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_agents.py +0 -0
  458. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_build.py +0 -0
  459. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_debug.py +0 -0
  460. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_multiagent.py +0 -0
  461. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_prd.py +0 -0
  462. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_prd_extended.py +0 -0
  463. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_tools.py +0 -0
  464. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_bank_update.py +0 -0
  465. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_build_projects.py +0 -0
  466. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_cli_programmatic_preload.py +0 -0
  467. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_current_bugs.py +0 -0
  468. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_drydock_regression.py +0 -0
  469. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_drydock_tasks.py +0 -0
  470. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_full_regression.py +0 -0
  471. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_history_manager.py +0 -0
  472. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_integration.py +0 -0
  473. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_loop_detection.py +0 -0
  474. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_message_id.py +0 -0
  475. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_message_merging.py +0 -0
  476. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_middleware.py +0 -0
  477. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_multi_agent.py +0 -0
  478. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_real_failures.py +0 -0
  479. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_real_issues.py +0 -0
  480. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_real_workflow.py +0 -0
  481. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_reasoning_content.py +0 -0
  482. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_smoke.py +0 -0
  483. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_system_prompt.py +0 -0
  484. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_tagged_text.py +0 -0
  485. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_ui_external_editor.py +0 -0
  486. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_ui_input_history.py +0 -0
  487. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_user_issues.py +0 -0
  488. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/test_workloads.py +0 -0
  489. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/testbank_helpers.py +0 -0
  490. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_ask_user_question.py +0 -0
  491. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_bash.py +0 -0
  492. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_exit_plan_mode.py +0 -0
  493. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_grep.py +0 -0
  494. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_invoke_context.py +0 -0
  495. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_manager_get_tool_config.py +0 -0
  496. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_mcp.py +0 -0
  497. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_mcp_sampling.py +0 -0
  498. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_task.py +0 -0
  499. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_ui_bash_execution.py +0 -0
  500. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_webfetch.py +0 -0
  501. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/tools/test_websearch.py +0 -0
  502. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  503. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  504. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_do_update.py +0 -0
  505. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  506. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_github_update_gateway.py +0 -0
  507. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  508. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_ui_update_notification.py +0 -0
  509. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_update_use_case.py +0 -0
  510. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/tests/update_notifier/test_whats_new.py +0 -0
  511. {drydock_cli-1.5.2 → drydock_cli-1.5.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 1.5.2
3
+ Version: 1.5.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
@@ -1,9 +1,12 @@
1
1
  # DryDock — Local CLI Coding Agent
2
2
 
3
3
  **Repository:** https://github.com/fbobe321/drydock
4
- **PyPI:** https://pypi.org/project/drydock-cli/ (v1.5.0)
4
+ **PyPI:** https://pypi.org/project/drydock-cli/ (v1.5.3)
5
5
  **License:** Apache 2.0 (fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe))
6
- **Status:** Active development — continuous improvement running
6
+ **Status:** Active development
7
+ **Current version:** 1.5.3
8
+ **Hardware:** 2x RTX 4060 Ti 16GB, devstral-24B-AWQ-4bit via vLLM at localhost:8000
9
+ **Server:** remus (Ubuntu 22.04, user: bobef)
7
10
 
8
11
  ---
9
12
 
@@ -30,31 +33,143 @@ Scripts:
30
33
 
31
34
  ---
32
35
 
36
+ ## Configuration Management
37
+
38
+ **CRITICAL: Every script and cron MUST follow these rules.**
39
+
40
+ ### Python Path
41
+ All scripts use explicit Python path, never bare `python3`:
42
+ ```bash
43
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
44
+ PYTHON="/home/bobef/miniconda3/bin/python3"
45
+ ```
46
+ **Why:** Cron environment doesn't inherit shell PATH. Bare `python3` resolves to `/usr/bin/python3` (system Python, no packages). This caused an 8-hour crash loop where the test battery restarted every 10 minutes and immediately failed.
47
+
48
+ ### Version Tracking
49
+ - `pyproject.toml` is the single source of truth for version
50
+ - `publish_to_pypi.sh` creates git tags (`v1.5.3`, etc.)
51
+ - `publish_to_pypi.sh` runs post-publish integration test (install in venv, verify version)
52
+ - Test scripts log version before running
53
+
54
+ ### Cron Jobs (DryDock)
55
+ | Schedule | Script | Purpose |
56
+ |---|---|---|
57
+ | 2 AM daily | `test_full.sh` | Nightly regression (smoke + real backend) |
58
+ | 3 AM daily | `backup.sh` | rsync to NAS |
59
+ | 4 AM daily | `deploy_to_github.sh` | Sync code to GitHub |
60
+ | Every 10 min | `monitor_test_battery.sh` | Monitor/restart long test runs |
61
+
62
+ ### Pre-Publish Checklist
63
+ 1. All smoke tests pass (169 tests)
64
+ 2. Version bumped in pyproject.toml
65
+ 3. Build succeeds
66
+ 4. Upload to PyPI
67
+ 5. Git tag created
68
+ 6. Integration test: install from wheel in temp venv, verify version matches
69
+ 7. Deploy to GitHub
70
+
71
+ ---
72
+
73
+ ## File Locations (CRITICAL for session continuity)
74
+
75
+ ```
76
+ /data3/drydock/ ← Main repo (git)
77
+ ├── drydock/ ← Python package (source code)
78
+ │ ├── core/
79
+ │ │ ├── agent_loop.py ← THE most important file. Loop detection, circuit breaker, auto-delegation
80
+ │ │ ├── prompts/cli.md ← System prompt (debugging rules, tool usage, import rules)
81
+ │ │ ├── tools/builtins/ ← 24 builtin tools
82
+ │ │ ├── agents/ ← Subagent definitions (explore, diagnostic, planner)
83
+ │ │ └── skills/ ← Skill framework
84
+ │ ├── cli/textual_ui/app.py ← TUI application
85
+ │ └── skills/ ← 7 bundled skill markdown files
86
+ ├── tests/
87
+ │ ├── test_smoke.py ← 20 fast tests (imports, branding, safety)
88
+ │ ├── test_loop_detection.py ← 38 loop/circuit breaker tests
89
+ │ ├── test_drydock_*.py ← ~100 regression tests
90
+ │ ├── test_bank_prd.py ← 15 PRD-driven tests (CORE usability tests)
91
+ │ ├── test_bank_prd_extended.py ← 50 extended PRD tests (overnight battery)
92
+ │ ├── test_bank_build.py ← 25 build tests
93
+ │ ├── test_bank_debug.py ← 20 debug tests
94
+ │ ├── test_bank_update.py ← 15 update tests
95
+ │ ├── test_bank_multiagent.py ← 10 multi-agent tests
96
+ │ ├── test_bank_tools.py ← 13 tool integration tests
97
+ │ └── testbank_helpers.py ← Shared test infrastructure
98
+ ├── scripts/
99
+ │ ├── deploy_to_github.sh ← Clone GitHub, sync, push (daily 4 AM)
100
+ │ ├── publish_to_pypi.sh ← Tests → build → PyPI → tag → integration test
101
+ │ ├── test_full.sh ← Smoke + real backend regression (nightly 2 AM)
102
+ │ ├── test_bank.sh ← 83-test bank runner with category selection
103
+ │ ├── monitor_test_battery.sh ← Cron monitor: restart stuck tests, skip repeat failures
104
+ │ ├── backup.sh ← rsync to NAS (daily 3 AM)
105
+ │ └── install.sh ← User installation script
106
+ ├── test_bank_results/ ← Test logs (overnight runs, partial results)
107
+ ├── pyproject.toml ← Version, dependencies, build config
108
+ ├── CLAUDE.md ← Instructions for AI assistants working on this repo
109
+ └── PRD.md ← This file
110
+ ```
111
+
112
+ ```
113
+ /data3/swe_bench_runs/ ← SWE-bench infrastructure (SEPARATE from drydock repo)
114
+ ├── harness.py ← Runs drydock on SWE-bench tasks
115
+ ├── continuous_bench.sh ← Continuous improvement loop (CURRENTLY PAUSED)
116
+ ├── analyze_batch.py ← Post-batch analysis
117
+ ├── auto_fix.py ← Auto-apply prompt fixes
118
+ └── monitor_health.sh ← Worktree cleanup (CURRENTLY PAUSED)
119
+ ```
120
+
121
+ ```
122
+ ~/.config/drydock/
123
+ ├── github_token ← GitHub PAT for push/deploy
124
+ └── pypi_token ← PyPI API token for publishing
125
+ ```
126
+
127
+ ### Key Paths
128
+ - **vLLM server:** http://localhost:8000 (devstral-24B-AWQ-4bit)
129
+ - **NAS backup:** 192.168.50.183 via rsync
130
+ - **Conda env:** `/home/bobef/miniconda3/bin/python3` (ALWAYS use this, never bare `python3`)
131
+ - **Git remotes:** `drydock` → github.com/fbobe321/drydock, `origin` → github.com/mistralai/mistral-vibe
132
+ - **Main branch:** `main` (push to `drydock` remote, not `origin`)
133
+
134
+ ---
135
+
33
136
  ## Test Suite
34
137
 
35
- | Tier | File | Tests | Backend | Time | When |
36
- |------|------|-------|---------|------|------|
138
+ | Tier | File(s) | Tests | Backend | Time | When |
139
+ |------|---------|-------|---------|------|------|
37
140
  | **Smoke** | `test_smoke.py` | 20 | None | <1s | Every deploy |
141
+ | **Loop Detection** | `test_loop_detection.py` | 38 | None | <1s | Every deploy |
142
+ | **Regression** | `test_drydock_*.py` | ~100 | None | ~1min | Every deploy |
38
143
  | **Full Regression** | `test_full_regression.py` | 13 | Real vLLM | 5-10 min | Nightly 2 AM |
144
+ | **PRD Battery** | `test_bank_prd.py` | 15 | Real vLLM | ~20 min | On demand |
145
+ | **Extended PRD** | `test_bank_prd_extended.py` | 50 | Real vLLM | ~3-6 hours | Overnight |
146
+ | **Build/Debug/Update** | `test_bank_*.py` | 83 | Real vLLM | ~90 min | On demand |
147
+
148
+ **Run commands:**
149
+ ```bash
150
+ # Quick smoke (every change)
151
+ python3 -m pytest tests/test_smoke.py tests/test_loop_detection.py -q
152
+
153
+ # All fast tests (before commit)
154
+ python3 -m pytest tests/test_drydock_regression.py tests/test_drydock_tasks.py tests/test_loop_detection.py tests/test_smoke.py -q
155
+
156
+ # PRD battery (user-realistic, needs vLLM)
157
+ python3 -m pytest tests/test_bank_prd.py -v -s
158
+
159
+ # Overnight (needs vLLM, 3-6 hours)
160
+ nohup python3 -m pytest tests/test_bank_prd.py tests/test_bank_prd_extended.py -v --tb=short > test_bank_results/run.log 2>&1 &
161
+ ```
39
162
 
40
163
  ---
41
164
 
42
- ## Continuous Improvement
165
+ ## SWE-bench (CURRENTLY PAUSED)
43
166
 
44
- | System | Schedule | What it does |
45
- |--------|----------|-------------|
46
- | `continuous_bench.sh` | Always running | SWE-bench batches (20 tasks, 600s timeout) |
47
- | `analyze_batch.py` | After each batch | Detects crash patterns, multi-file misses, test edits |
48
- | `auto_fix.py` | After analysis | Applies safe prompt fixes based on patterns |
49
- | `monitor_health.sh` | Every 30 min | Prunes worktrees, checks vLLM, disk space, pass rates |
50
- | `deploy_to_github.sh` | Daily 4 AM | Smoke tests → push to GitHub |
51
- | `backup.sh` | Daily 3 AM | rsync to NAS (192.168.50.183) |
52
- | `@reboot` cron | On restart | Restarts bench loop after 2 min |
167
+ Infrastructure at `/data3/swe_bench_runs/` (not in drydock repo). Paused to focus on usability testing.
53
168
 
54
- **Latest SWE-bench results (Mar 28):**
169
+ **Latest results (Mar 28):**
55
170
  - 2,220/2,294 unique tasks tested (97%)
56
- - Recent pass rate: **39-42%** (up from 17% baseline)
57
- - Net improvement: **+22% pass rate** after bash abuse fix and nudge improvements
171
+ - Pass rate: **39-42%** (up from 17% baseline)
172
+ - Crons removed re-enable with `continuous_bench.sh` when ready
58
173
 
59
174
  ---
60
175
 
@@ -279,3 +394,20 @@ User reported DryDock was unusable — model looped 12+ times running the same c
279
394
  Run with: `./scripts/test_bank.sh` (full) or `./scripts/test_bank.sh quick` (easy only, ~2h)
280
395
 
281
396
  **Removed:** False-positive test file guard in search_replace that blocked any file in a directory containing "test" in its name.
397
+
398
+ ### Phase 12 (Mar 29): Configuration Management + Auto-Delegation + PRD Tests
399
+
400
+ **Config management crisis:** Overnight test battery crashed for 8 hours because cron used system Python (no pytest). All scripts now use explicit `/home/bobef/miniconda3/bin/python3`.
401
+
402
+ **Auto-delegation:** Model wasn't using subagents despite prompt instructions. Fixed by injecting context automatically before the model's first turn:
403
+ - Project file listing (replaces explore subagent)
404
+ - Skill content injection (matches prompt keywords to skills)
405
+ - Planning prompt for complex builds (forces absolute imports, python3 -m)
406
+
407
+ **Circuit breaker reset:** After write_file/search_replace, circuit breaker history clears. Previously-failing commands can be retried after code changes.
408
+
409
+ **Post-success stop:** After 3 successful bash runs, model is told to stop testing and summarize.
410
+
411
+ **PRD-driven test bank:** 65 tests (15 core + 50 extended) that give DryDock a PRD and verify the built project RUNS. Core 15 pass at 100%.
412
+
413
+ **Relative import auto-fix:** When model gets "relative import with no known parent package", agent loop explains absolute imports vs python3 -m and forces search_replace.
@@ -193,6 +193,7 @@ class AgentLoop:
193
193
  self._tool_call_history: dict[str, tuple[int, str]] = {}
194
194
  self._consecutive_circuit_breaker_fires: int = 0
195
195
  self._empty_responses: int = 0
196
+ self._successful_test_runs: int = 0
196
197
 
197
198
  system_prompt = get_universal_system_prompt(
198
199
  self.tool_manager, self.config, self.skill_manager, self.agent_manager
@@ -571,6 +572,10 @@ class AgentLoop:
571
572
  first_edit = not has_made_edit
572
573
  has_made_edit = True
573
574
  bash_count = 0 # Reset on successful edit
575
+ # Reset circuit breaker — the world changed after an edit,
576
+ # so previously-failing commands may now succeed
577
+ self._tool_call_history.clear()
578
+ self._consecutive_circuit_breaker_fires = 0
574
579
  # Track blast radius
575
580
  try:
576
581
  edit_args = json.loads(tc.function.arguments or "{}")
@@ -644,13 +649,13 @@ class AgentLoop:
644
649
  consecutive_bash += 1
645
650
  else:
646
651
  break
647
- if consecutive_bash >= 4:
652
+ if consecutive_bash >= 3:
648
653
  self._inject_system_note(
649
- "You have run 4+ bash commands in a row after editing files. "
650
- "Each one failed or gave the same result. STOP running bash. "
651
- "Read the error message carefully, then use search_replace "
652
- "to fix the actual code. Running the same command again will "
653
- "not give a different result."
654
+ "You have run 3+ bash commands in a row. "
655
+ "If your project is WORKING, you are DONE tell the user the project "
656
+ "is complete and what commands they can use. "
657
+ "If it is FAILING, STOP running bash and use read_file + search_replace "
658
+ "to fix the code. Do NOT keep running the same test."
654
659
  )
655
660
 
656
661
  # Detect bash file creation (touch, echo >, cat <<)
@@ -1169,6 +1174,17 @@ class AgentLoop:
1169
1174
 
1170
1175
  result_dict = result_model.model_dump()
1171
1176
  text = "\n".join(f"{k}: {v}" for k, v in result_dict.items())
1177
+
1178
+ # After a successful bash test of built code, nudge to wrap up
1179
+ if tool_call.tool_name in ("bash", "run_command"):
1180
+ self._successful_test_runs += 1
1181
+ if self._successful_test_runs >= 3:
1182
+ self._inject_system_note(
1183
+ "Your project is WORKING. You have verified it successfully. "
1184
+ "STOP testing. Summarize what you built and tell the user "
1185
+ "how to use it. Do NOT run any more bash commands."
1186
+ )
1187
+
1172
1188
  # Record for circuit breaker
1173
1189
  self._circuit_breaker_record(tool_call, text)
1174
1190
  self._handle_tool_response(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "1.5.2"
3
+ version = "1.5.4"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -7,6 +7,9 @@
7
7
 
8
8
  set -euo pipefail
9
9
 
10
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
11
+ PYTHON="/home/bobef/miniconda3/bin/python3"
12
+
10
13
  DRYDOCK_SRC="/data3/drydock"
11
14
  GITHUB_REPO="https://github.com/fbobe321/drydock.git"
12
15
  TOKEN_FILE="$HOME/.config/drydock/github_token"
@@ -37,8 +40,8 @@ AUTH_URL="https://${GITHUB_TOKEN}@github.com/fbobe321/drydock.git"
37
40
 
38
41
  log "Running regression tests..."
39
42
  cd "$DRYDOCK_SRC"
40
- python3 -m pip install -q "pytest>=9.0" 2>/dev/null
41
- if ! python3 -m pytest tests/test_drydock_regression.py tests/test_drydock_tasks.py tests/test_loop_detection.py tests/test_agent_tasks.py tests/test_integration.py tests/test_user_issues.py tests/test_real_issues.py \
43
+ $PYTHON -m pip install -q "pytest>=9.0" 2>/dev/null
44
+ if ! $PYTHON -m pytest tests/test_drydock_regression.py tests/test_drydock_tasks.py tests/test_loop_detection.py tests/test_agent_tasks.py tests/test_integration.py tests/test_user_issues.py tests/test_real_issues.py \
42
45
  -p no:xdist -p no:cov --override-ini="addopts=" -q 2>&1; then
43
46
  log "TESTS FAILED — deploy aborted. Fix the tests before deploying."
44
47
  exit 1
@@ -9,7 +9,8 @@ set -euo pipefail
9
9
 
10
10
  DRYDOCK_SRC="/data3/drydock"
11
11
  TOKEN_FILE="$HOME/.config/drydock/pypi_token"
12
- PYTHON="python3"
12
+ PYTHON="/home/bobef/miniconda3/bin/python3"
13
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
13
14
 
14
15
  cd "$DRYDOCK_SRC"
15
16
 
@@ -71,4 +72,24 @@ if [ -x "$DRYDOCK_SRC/scripts/deploy_to_github.sh" ]; then
71
72
  "$DRYDOCK_SRC/scripts/deploy_to_github.sh" 2>&1 || log "GitHub deploy failed (non-fatal)"
72
73
  fi
73
74
 
75
+ # --- Git tag ---
76
+ git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION" 2>/dev/null || true
77
+ log "Tagged v$NEW_VERSION"
78
+
79
+ # --- Quick integration test (install in temp venv and verify) ---
80
+ log "Running integration test..."
81
+ TMPVENV=$(mktemp -d)
82
+ $PYTHON -m venv "$TMPVENV/venv" 2>/dev/null
83
+ if "$TMPVENV/venv/bin/pip" install -q "dist/drydock_cli-${NEW_VERSION}-py3-none-any.whl" 2>/dev/null; then
84
+ INSTALLED_VER=$("$TMPVENV/venv/bin/python3" -c "from importlib.metadata import version; print(version('drydock-cli'))" 2>/dev/null || echo "unknown")
85
+ if [ "$INSTALLED_VER" = "$NEW_VERSION" ]; then
86
+ log "Integration test PASSED: installed version $INSTALLED_VER matches"
87
+ else
88
+ log "WARNING: version mismatch — expected $NEW_VERSION, got $INSTALLED_VER"
89
+ fi
90
+ else
91
+ log "WARNING: integration test failed to install (non-fatal)"
92
+ fi
93
+ rm -rf "$TMPVENV"
94
+
74
95
  log "Published drydock-cli $NEW_VERSION to PyPI"
@@ -14,9 +14,19 @@
14
14
  set -euo pipefail
15
15
  cd "$(dirname "$0")/.."
16
16
 
17
- pip install -q "pytest>=9.0" pytest-asyncio httpx 2>/dev/null
17
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
18
+ PYTHON="/home/bobef/miniconda3/bin/python3"
18
19
 
19
- COMMON_ARGS="-v -s -p no:xdist -p no:cov --override-ini=addopts="
20
+ $PYTHON -m pip install -q "pytest>=9.0" pytest-asyncio httpx 2>/dev/null
21
+
22
+ # Version gate — log what we're testing
23
+ VERSION=$($PYTHON -c "import tomli; print(tomli.load(open('pyproject.toml','rb'))['project']['version'])" 2>/dev/null || echo "unknown")
24
+ echo "Testing drydock source version: $VERSION"
25
+ echo "Python: $($PYTHON --version)"
26
+ echo "vLLM: $(curl -s http://localhost:8000/v1/models | python3 -c 'import json,sys; print(json.load(sys.stdin)["data"][0]["id"])' 2>/dev/null || echo 'NOT RUNNING')"
27
+ echo ""
28
+
29
+ COMMON_ARGS="-v -p no:xdist -p no:cov --override-ini=addopts="
20
30
  CATEGORY="${1:-all}"
21
31
  TIMESTAMP=$(date +%Y%m%d_%H%M%S)
22
32
  LOG_DIR="test_bank_results"
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+ # FULL REGRESSION — Run nightly or before releases (5-10 min)
3
+ # Requires vLLM at localhost:8000. Real backend, no mocks.
4
+ set -euo pipefail
5
+ cd "$(dirname "$0")/.."
6
+
7
+ export PATH="/home/bobef/miniconda3/bin:$PATH"
8
+ PYTHON="/home/bobef/miniconda3/bin/python3"
9
+
10
+ $PYTHON -m pip install -q "pytest>=9.0" pytest-asyncio 2>/dev/null
11
+
12
+ VERSION=$(grep '^version' pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
13
+ echo "Drydock v$VERSION — $(date)"
14
+ echo "Python: $($PYTHON --version)"
15
+ echo ""
16
+
17
+ echo "=== SMOKE TESTS ==="
18
+ $PYTHON -m pytest tests/test_smoke.py -p no:xdist -p no:cov --override-ini="addopts=" -q
19
+
20
+ echo ""
21
+ echo "=== FULL REGRESSION (real backend) ==="
22
+ $PYTHON -m pytest tests/test_full_regression.py -v -p no:xdist -p no:cov --override-ini="addopts="
23
+
24
+ echo ""
25
+ echo "=== BUILD PROJECT TESTS (real backend, 30-60 min) ==="
26
+ $PYTHON -m pytest tests/test_build_projects.py -v -s -p no:xdist -p no:cov --override-ini="addopts="
@@ -1,17 +0,0 @@
1
- #!/bin/bash
2
- # FULL REGRESSION — Run nightly or before releases (5-10 min)
3
- # Requires vLLM at localhost:8000. Real backend, no mocks.
4
- set -euo pipefail
5
- cd "$(dirname "$0")/.."
6
- pip install -q "pytest>=9.0" pytest-asyncio 2>/dev/null
7
-
8
- echo "=== SMOKE TESTS ==="
9
- python3 -m pytest tests/test_smoke.py -p no:xdist -p no:cov --override-ini="addopts=" -q
10
-
11
- echo ""
12
- echo "=== FULL REGRESSION (real backend) ==="
13
- python3 -m pytest tests/test_full_regression.py -v -p no:xdist -p no:cov --override-ini="addopts="
14
-
15
- echo ""
16
- echo "=== BUILD PROJECT TESTS (real backend, 30-60 min) ==="
17
- python3 -m pytest tests/test_build_projects.py -v -s -p no:xdist -p no:cov --override-ini="addopts="
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