drydock-cli 2.6.28__tar.gz → 2.6.30__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 (558) hide show
  1. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/PKG-INFO +129 -61
  2. drydock_cli-2.6.30/README.md +270 -0
  3. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agent_loop.py +124 -1
  4. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/format.py +18 -1
  5. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/search_replace.py +61 -0
  6. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/pyproject.toml +6 -3
  7. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown.py +52 -1
  8. drydock_cli-2.6.30/scripts/shakedown_interactive.py +449 -0
  9. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/uv.lock +1 -1
  10. drydock_cli-2.6.28/.auto_release.lock +0 -1
  11. drydock_cli-2.6.28/README.md +0 -202
  12. drydock_cli-2.6.28/log_analyzer/__init__.py +0 -2
  13. drydock_cli-2.6.28/log_analyzer/__main__.py +0 -9
  14. drydock_cli-2.6.28/log_analyzer/analyzer.py +0 -48
  15. drydock_cli-2.6.28/log_analyzer/cli.py +0 -40
  16. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/CODEOWNERS +0 -0
  17. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  18. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  19. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/build-and-upload.yml +0 -0
  21. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/ci.yml +0 -0
  22. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/issue-labeler.yml +0 -0
  23. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.github/workflows/release.yml +0 -0
  24. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.gitignore +0 -0
  25. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.pre-commit-config.yaml +0 -0
  26. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.python-version +0 -0
  27. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.typos.toml +0 -0
  28. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/extensions.json +0 -0
  29. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/launch.json +0 -0
  30. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/.vscode/settings.json +0 -0
  31. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/AGENTS.md +0 -0
  32. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CHANGELOG.md +0 -0
  33. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CLAUDE.md +0 -0
  34. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/CONTRIBUTING.md +0 -0
  35. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/Drydock_rebrand.md +0 -0
  36. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/LICENSE +0 -0
  37. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/NOTICE +0 -0
  38. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/PRD.md +0 -0
  39. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/action.yml +0 -0
  40. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/LICENSE +0 -0
  41. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/extension.toml +0 -0
  42. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/distribution/zed/icons/mistral_vibe.svg +0 -0
  43. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/README.md +0 -0
  44. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/acp-setup.md +0 -0
  45. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/docs/proxy-setup.md +0 -0
  46. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/__init__.py +0 -0
  47. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/__init__.py +0 -0
  48. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/acp_agent_loop.py +0 -0
  49. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/acp_logger.py +0 -0
  50. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/entrypoint.py +0 -0
  51. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/__init__.py +0 -0
  52. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/base.py +0 -0
  53. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/bash.py +0 -0
  54. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/read_file.py +0 -0
  55. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/search_replace.py +0 -0
  56. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/todo.py +0 -0
  57. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/builtins/write_file.py +0 -0
  58. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/tools/session_update.py +0 -0
  59. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/acp/utils.py +0 -0
  60. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/__init__.py +0 -0
  61. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/__init__.py +0 -0
  62. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/base.py +0 -0
  63. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/path_completion.py +0 -0
  64. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/autocompletion/slash_command.py +0 -0
  65. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/cli.py +0 -0
  66. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/clipboard.py +0 -0
  67. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/commands.py +0 -0
  68. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/entrypoint.py +0 -0
  69. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/history_manager.py +0 -0
  70. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  71. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  72. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  73. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/terminal_setup.py +0 -0
  74. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/__init__.py +0 -0
  75. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  76. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/app.py +0 -0
  77. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/app.tcss +0 -0
  78. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/external_editor.py +0 -0
  79. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  80. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  81. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  82. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  83. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  84. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  85. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  86. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  87. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  88. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  89. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  90. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  91. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  92. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  93. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  94. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  95. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  96. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  97. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  98. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  99. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  100. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  101. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  102. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  103. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  104. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  105. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  106. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  107. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  108. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  109. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  110. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  111. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  112. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  113. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  114. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  115. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/history.py +0 -0
  116. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  117. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/textual_ui/windowing/state.py +0 -0
  118. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/__init__.py +0 -0
  119. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  120. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  121. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  122. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  123. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  124. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/update.py +0 -0
  125. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/cli/update_notifier/whats_new.py +0 -0
  126. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/__init__.py +0 -0
  127. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/__init__.py +0 -0
  128. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/manager.py +0 -0
  129. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/agents/models.py +0 -0
  130. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/__init__.py +0 -0
  131. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/crypto.py +0 -0
  132. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/auth/github.py +0 -0
  133. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/__init__.py +0 -0
  134. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/completers.py +0 -0
  135. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  136. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  137. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  138. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  139. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  140. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/fuzzy.py +0 -0
  141. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/path_prompt.py +0 -0
  142. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  143. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/build_orchestrator.py +0 -0
  144. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/__init__.py +0 -0
  145. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/_settings.py +0 -0
  146. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/__init__.py +0 -0
  147. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  148. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/config/harness_files/_paths.py +0 -0
  149. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/consultant.py +0 -0
  150. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/drydock_states.py +0 -0
  151. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/hooks.py +0 -0
  152. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/__init__.py +0 -0
  153. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/anthropic.py +0 -0
  154. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/base.py +0 -0
  155. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/factory.py +0 -0
  156. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/generic.py +0 -0
  157. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/mistral.py +0 -0
  158. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  159. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/backend/vertex.py +0 -0
  160. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/exceptions.py +0 -0
  161. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/message_utils.py +0 -0
  162. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/llm/types.py +0 -0
  163. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/logger.py +0 -0
  164. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/middleware.py +0 -0
  165. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/output_formatters.py +0 -0
  166. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/__init__.py +0 -0
  167. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/_local_config_walk.py +0 -0
  168. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/_vibe_home.py +0 -0
  169. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/paths/conventions.py +0 -0
  170. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/plan_session.py +0 -0
  171. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/plugins.py +0 -0
  172. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/programmatic.py +0 -0
  173. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/__init__.py +0 -0
  174. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/builder.md +0 -0
  175. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/cli.md +0 -0
  176. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/compact.md +0 -0
  177. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/dangerous_directory.md +0 -0
  178. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/diagnostic.md +0 -0
  179. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/explore.md +0 -0
  180. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/gemma4.md +0 -0
  181. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/planner.md +0 -0
  182. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/project_context.md +0 -0
  183. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/prompts/tests.md +0 -0
  184. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/proxy_setup.py +0 -0
  185. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/agent_memory.py +0 -0
  186. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/checkpoints.py +0 -0
  187. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_loader.py +0 -0
  188. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_logger.py +0 -0
  189. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/session_migration.py +0 -0
  190. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session/state_file.py +0 -0
  191. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/session_checker.py +0 -0
  192. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/__init__.py +0 -0
  193. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/manager.py +0 -0
  194. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/models.py +0 -0
  195. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/skills/parser.py +0 -0
  196. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/slug.py +0 -0
  197. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/system_prompt.py +0 -0
  198. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/telemetry/__init__.py +0 -0
  199. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/telemetry/send.py +0 -0
  200. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/errors.py +0 -0
  201. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/git.py +0 -0
  202. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/nuage.py +0 -0
  203. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/teleport.py +0 -0
  204. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/teleport/types.py +0 -0
  205. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/base.py +0 -0
  206. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/_task_manager.py +0 -0
  207. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  208. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/bash.py +0 -0
  209. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/cron.py +0 -0
  210. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  211. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/glob_tool.py +0 -0
  212. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/grep.py +0 -0
  213. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  214. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/lsp.py +0 -0
  215. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  216. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  217. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/powershell.py +0 -0
  218. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  219. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  220. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  221. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  222. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  223. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  224. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  225. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  226. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  227. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  228. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  229. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  230. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  231. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  232. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/task.md +0 -0
  233. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  234. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  235. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  236. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  237. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  238. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  239. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  240. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/read_file.py +0 -0
  241. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/task.py +0 -0
  242. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/todo.py +0 -0
  243. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/tool_search.py +0 -0
  244. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/webfetch.py +0 -0
  245. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/websearch.py +0 -0
  246. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/worktree.py +0 -0
  247. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/builtins/write_file.py +0 -0
  248. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/injection_guard.py +0 -0
  249. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/manager.py +0 -0
  250. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/__init__.py +0 -0
  251. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/registry.py +0 -0
  252. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp/tools.py +0 -0
  253. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/mcp_sampling.py +0 -0
  254. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/ui.py +0 -0
  255. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/tools/utils.py +0 -0
  256. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/trusted_folders.py +0 -0
  257. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/types.py +0 -0
  258. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/core/utils.py +0 -0
  259. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/__init__.py +0 -0
  260. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/base.py +0 -0
  261. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/onboarding.tcss +0 -0
  262. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/__init__.py +0 -0
  263. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/api_key.py +0 -0
  264. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/onboarding/screens/welcome.py +0 -0
  265. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  266. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  267. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/__init__.py +0 -0
  268. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/api-design/SKILL.md +0 -0
  269. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/batch/SKILL.md +0 -0
  270. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/commit-code/SKILL.md +0 -0
  271. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/context-summary/SKILL.md +0 -0
  272. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/create-presentation/SKILL.md +0 -0
  273. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/deep-research/SKILL.md +0 -0
  274. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/deploy/SKILL.md +0 -0
  275. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/diff-review/SKILL.md +0 -0
  276. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/doc-gen/SKILL.md +0 -0
  277. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/explain-code/SKILL.md +0 -0
  278. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/explore-code/SKILL.md +0 -0
  279. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/fix-issue/SKILL.md +0 -0
  280. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/git-ops/SKILL.md +0 -0
  281. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/init-project/SKILL.md +0 -0
  282. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/investigate/SKILL.md +0 -0
  283. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/loop/SKILL.md +0 -0
  284. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/migrate/SKILL.md +0 -0
  285. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/perf-analyze/SKILL.md +0 -0
  286. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/plan-impl/SKILL.md +0 -0
  287. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/pr-review/SKILL.md +0 -0
  288. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/refactor/SKILL.md +0 -0
  289. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/regex-help/SKILL.md +0 -0
  290. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/review/SKILL.md +0 -0
  291. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/security-review/SKILL.md +0 -0
  292. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/ship/SKILL.md +0 -0
  293. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/simplify/SKILL.md +0 -0
  294. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/skills/test-verify/SKILL.md +0 -0
  295. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock/whats_new.md +0 -0
  296. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock-acp.spec +0 -0
  297. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/drydock_terms.md +0 -0
  298. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/flake.lock +0 -0
  299. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/flake.nix +0 -0
  300. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/README.md +0 -0
  301. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/auto_release.sh +0 -0
  302. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/auto_test_loop.sh +0 -0
  303. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/backup.sh +0 -0
  304. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/bump_version.py +0 -0
  305. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/deploy_to_github.sh +0 -0
  306. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/discover_cli_tools.sh +0 -0
  307. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/install.sh +0 -0
  308. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/llm_balancer.py +0 -0
  309. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/monitor_swebench.sh +0 -0
  310. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/monitor_test_battery.sh +0 -0
  311. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/notify_release.py +0 -0
  312. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/overnight_agents_test.sh +0 -0
  313. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/prepare_release.py +0 -0
  314. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/publish_to_pypi.sh +0 -0
  315. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_regression.sh +0 -0
  316. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_suite.sh +0 -0
  317. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/shakedown_variance.sh +0 -0
  318. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/telegram_bot.py +0 -0
  319. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_bank.sh +0 -0
  320. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_full.sh +0 -0
  321. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_smoke.sh +0 -0
  322. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/test_tui_path.py +0 -0
  323. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/tui_test.py +0 -0
  324. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/scripts/vllm_failover.sh +0 -0
  325. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/__init__.py +0 -0
  326. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/conftest.py +0 -0
  327. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_acp.py +0 -0
  328. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_agent_thought.py +0 -0
  329. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_bash.py +0 -0
  330. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_compact_session_updates.py +0 -0
  331. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_content.py +0 -0
  332. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_initialize.py +0 -0
  333. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_list_sessions.py +0 -0
  334. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_load_session.py +0 -0
  335. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_multi_session.py +0 -0
  336. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_new_session.py +0 -0
  337. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_proxy_setup_acp.py +0 -0
  338. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_read_file.py +0 -0
  339. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_search_replace.py +0 -0
  340. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_config_option.py +0 -0
  341. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_mode.py +0 -0
  342. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_set_model.py +0 -0
  343. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_tool_call_session_update.py +0 -0
  344. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_utils.py +0 -0
  345. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/acp/test_write_file.py +0 -0
  346. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_file_indexer.py +0 -0
  347. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_fuzzy.py +0 -0
  348. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  349. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  350. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_completion_controller.py +0 -0
  351. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  352. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_slash_command_controller.py +0 -0
  353. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  354. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/__init__.py +0 -0
  355. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/__init__.py +0 -0
  356. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/fireworks.py +0 -0
  357. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/data/mistral.py +0 -0
  358. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_anthropic_adapter.py +0 -0
  359. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_backend.py +0 -0
  360. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_reasoning_adapter.py +0 -0
  361. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  362. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  363. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  364. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  365. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_bell_notifications.py +0 -0
  366. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_braille_renderer.py +0 -0
  367. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_clipboard.py +0 -0
  368. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_commands.py +0 -0
  369. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_copy_shortcuts.py +0 -0
  370. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_external_editor.py +0 -0
  371. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_no_markup_static.py +0 -0
  372. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_question_app.py +0 -0
  373. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_spinner.py +0 -0
  374. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_switching_mode.py +0 -0
  375. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  376. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  377. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_session_resume.py +0 -0
  378. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/test_ui_skill_dispatch.py +0 -0
  379. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/textual_ui/__init__.py +0 -0
  380. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/cli/textual_ui/test_session_picker.py +0 -0
  381. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/conftest.py +0 -0
  382. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_agents.py +0 -0
  383. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_auth_crypto.py +0 -0
  384. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_auth_github.py +0 -0
  385. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_load_dotenv.py +0 -0
  386. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_paths.py +0 -0
  387. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_config_resolution.py +0 -0
  388. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_file_logging.py +0 -0
  389. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_plan_session.py +0 -0
  390. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_proxy_setup.py +0 -0
  391. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_slug.py +0 -0
  392. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_telemetry_send.py +0 -0
  393. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_git.py +0 -0
  394. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_nuage.py +0 -0
  395. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_teleport_service.py +0 -0
  396. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_trusted_folders.py +0 -0
  397. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/core/test_utils.py +0 -0
  398. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/common.py +0 -0
  399. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/conftest.py +0 -0
  400. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/mock_server.py +0 -0
  401. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  402. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_streaming.py +0 -0
  403. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  404. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/fixtures/doc_qa_system_prd.md +0 -0
  405. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/__init__.py +0 -0
  406. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/mock_backend_factory.py +0 -0
  407. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/mock_entrypoint.py +0 -0
  408. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/mock/utils.py +0 -0
  409. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/onboarding/test_run_onboarding.py +0 -0
  410. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/onboarding/test_ui_onboarding.py +0 -0
  411. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_loader.py +0 -0
  412. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_logger.py +0 -0
  413. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/session/test_session_migration.py +0 -0
  414. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/conftest.py +0 -0
  415. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_manager.py +0 -0
  416. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_models.py +0 -0
  417. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/skills/test_parser.py +0 -0
  418. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  419. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  420. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  421. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  422. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  423. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  424. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  425. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  426. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  427. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  428. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  429. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  430. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  431. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  432. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  433. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  434. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  435. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  436. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  437. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  438. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  439. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  440. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  441. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  442. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  443. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  444. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  445. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  446. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  447. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  448. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  449. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  450. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  451. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  452. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  453. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  454. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  455. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  456. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  457. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  458. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  459. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  460. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  461. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  462. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  463. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  464. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  465. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  466. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  467. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  468. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  469. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  470. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  471. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  472. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  473. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  474. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  475. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  476. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  477. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  478. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/base_snapshot_test_app.py +0 -0
  479. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/conftest.py +0 -0
  480. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/snap_compare.py +0 -0
  481. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  482. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  483. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  484. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  485. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  486. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  487. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  488. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  489. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  490. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  491. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  492. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  493. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  494. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  495. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_backend.py +0 -0
  496. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_client.py +0 -0
  497. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/stubs/fake_tool.py +0 -0
  498. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_auto_compact.py +0 -0
  499. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_backend.py +0 -0
  500. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_observer_streaming.py +0 -0
  501. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_stats.py +0 -0
  502. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_tasks.py +0 -0
  503. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agent_tool_call.py +0 -0
  504. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_agents.py +0 -0
  505. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_build.py +0 -0
  506. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_debug.py +0 -0
  507. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_multiagent.py +0 -0
  508. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_prd.py +0 -0
  509. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_prd_extended.py +0 -0
  510. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_tools.py +0 -0
  511. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_bank_update.py +0 -0
  512. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_build_projects.py +0 -0
  513. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_cli_programmatic_preload.py +0 -0
  514. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_current_bugs.py +0 -0
  515. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_drydock_regression.py +0 -0
  516. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_drydock_tasks.py +0 -0
  517. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_full_regression.py +0 -0
  518. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_history_manager.py +0 -0
  519. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_integration.py +0 -0
  520. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_loop_detection.py +0 -0
  521. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_message_id.py +0 -0
  522. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_message_merging.py +0 -0
  523. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_middleware.py +0 -0
  524. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_multi_agent.py +0 -0
  525. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_failures.py +0 -0
  526. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_issues.py +0 -0
  527. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_real_workflow.py +0 -0
  528. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_reasoning_content.py +0 -0
  529. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_smoke.py +0 -0
  530. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_system_prompt.py +0 -0
  531. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_tagged_text.py +0 -0
  532. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_tool_args.py +0 -0
  533. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_ui_external_editor.py +0 -0
  534. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_ui_input_history.py +0 -0
  535. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_user_issues.py +0 -0
  536. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/test_workloads.py +0 -0
  537. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/testbank_helpers.py +0 -0
  538. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_ask_user_question.py +0 -0
  539. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_bash.py +0 -0
  540. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_exit_plan_mode.py +0 -0
  541. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_grep.py +0 -0
  542. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_invoke_context.py +0 -0
  543. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_manager_get_tool_config.py +0 -0
  544. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_mcp.py +0 -0
  545. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_mcp_sampling.py +0 -0
  546. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_task.py +0 -0
  547. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_ui_bash_execution.py +0 -0
  548. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_webfetch.py +0 -0
  549. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/tools/test_websearch.py +0 -0
  550. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  551. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  552. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_do_update.py +0 -0
  553. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  554. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_github_update_gateway.py +0 -0
  555. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  556. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_ui_update_notification.py +0 -0
  557. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_update_use_case.py +0 -0
  558. {drydock_cli-2.6.28 → drydock_cli-2.6.30}/tests/update_notifier/test_whats_new.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.6.28
4
- Summary: Drydocknautical CLI coding agent
3
+ Version: 2.6.30
4
+ Summary: Local-first CLI coding agent tested with Gemma 4 26B via vLLM
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
7
7
  Project-URL: Issues, https://github.com/fbobe321/drydock/issues
@@ -10,7 +10,7 @@ Author: Drydock contributors, Mistral AI (original)
10
10
  License: Apache-2.0
11
11
  License-File: LICENSE
12
12
  License-File: NOTICE
13
- Keywords: ai,cli,coding-assistant,developer-tools,drydock,llm,nautical
13
+ Keywords: ai,cli,coding-assistant,developer-tools,drydock,gemma,llm,local-llm,tui,vllm
14
14
  Classifier: Development Status :: 5 - Production/Stable
15
15
  Classifier: Intended Audience :: Developers
16
16
  Classifier: License :: OSI Approved :: Apache Software License
@@ -60,41 +60,123 @@ Description-Content-Type: text/markdown
60
60
  [![License](https://img.shields.io/github/license/fbobe321/drydock)](https://github.com/fbobe321/drydock/blob/main/LICENSE)
61
61
 
62
62
  ```
63
- | | |
64
- )_) )_) )_)
65
- )___))___))___)\
66
- )____)____)_____)\\
67
- _____|____|____|____\\\__
68
- ---\ /----
69
- \_________________/
70
- ~~~~ ~~~ ~~~~ ~~~ ~~~~
71
- ~~~ ~~~~ ~~~ ~~~ ~~~
63
+ ____ _ _
64
+ | _ \ _ __ _ _ __| | ___ ___ | | __
65
+ | | | | '__| | | |/ _` |/ _ \ / __|| |/ /
66
+ | |_| | | | |_| | (_| | (_) | (__ | <
67
+ |____/|_| \__, |\__,_|\___/ \___||_|\_\
68
+ |___/
72
69
  ```
73
70
 
74
- **Nautical CLI coding agent. Chart your course. Execute with precision.**
71
+ **Local-first CLI coding agent. Chart your course. Execute with precision.**
75
72
 
76
- DryDock is a command-line coding assistant that works with any LLM provider. It provides a conversational interface to your codebase, allowing you to use natural language to explore, modify, and interact with your projects through a powerful set of tools.
73
+ DryDock is a TUI coding assistant designed to work with **local LLMs**. It provides a conversational interface to your codebase explore, modify, build, and test projects through natural language and a powerful set of tools.
77
74
 
78
- > [!WARNING]
79
- > DryDock works on Windows, but we officially support and target UNIX environments.
75
+ > [!IMPORTANT]
76
+ > DryDock is tested and optimized for **Gemma 4 26B-A4B** (26B MoE, 4B active parameters) served via vLLM. Other models and providers are supported (Mistral, OpenAI, Anthropic, Ollama) but are not as thoroughly tested. If you use a different model, expect to tune prompts and tool settings.
80
77
 
81
- ### Install
78
+ ## Tested Hardware + Model
79
+
80
+ | Component | Spec |
81
+ |-----------|------|
82
+ | GPUs | 2x NVIDIA RTX 4060 Ti 16GB |
83
+ | Model | [Gemma-4-26B-A4B-it-AWQ-4bit](https://huggingface.co/casperhansen/gemma-4-26b-a4b-it-AWQ-4bit) |
84
+ | Serving | vLLM (Docker image `vllm/vllm-openai:gemma4`) |
85
+ | Performance | ~70 tok/s, 131K context, 0% timeouts |
86
+ | Active params | 4B per token (MoE architecture — fast inference) |
87
+
88
+ ### Install the model
89
+
90
+ ```bash
91
+ # Download the model weights (requires HuggingFace access)
92
+ pip install huggingface-hub
93
+ huggingface-cli download casperhansen/gemma-4-26b-a4b-it-AWQ-4bit \
94
+ --local-dir /path/to/models/Gemma-4-26B-A4B-it-AWQ-4bit
95
+ ```
96
+
97
+ ### Start vLLM
98
+
99
+ ```bash
100
+ docker run -d \
101
+ --gpus all \
102
+ --name gemma4 \
103
+ -p 8000:8000 \
104
+ -v /path/to/models:/models \
105
+ --ipc=host \
106
+ vllm/vllm-openai:gemma4 \
107
+ --model /models/Gemma-4-26B-A4B-it-AWQ-4bit \
108
+ --quantization compressed-tensors \
109
+ --tensor-parallel-size 2 \
110
+ --max-model-len 131072 \
111
+ --max-num-seqs 2 \
112
+ --gpu-memory-utilization 0.95 \
113
+ --kv-cache-dtype fp8 \
114
+ --served-model-name gemma4 \
115
+ --trust-remote-code \
116
+ --tool-call-parser gemma4 \
117
+ --enable-auto-tool-choice \
118
+ --attention-backend TRITON_ATTN
119
+ ```
120
+
121
+ Key flags:
122
+ - `--tensor-parallel-size 2` — split across 2 GPUs
123
+ - `--kv-cache-dtype fp8` — reduce KV cache memory for longer contexts
124
+ - `--tool-call-parser gemma4` + `--enable-auto-tool-choice` — required for Gemma 4 tool calling
125
+ - `--max-num-seqs 2` — limit concurrent requests (prevents OOM on 16GB GPUs)
126
+
127
+ Verify the model is running:
128
+ ```bash
129
+ curl http://localhost:8000/v1/models
130
+ ```
131
+
132
+ ### Configure DryDock
133
+
134
+ ```toml
135
+ # ~/.drydock/config.toml
136
+ [models.gemma4]
137
+ name = "gemma4"
138
+ provider = "generic-openai"
139
+ alias = "gemma4"
140
+ temperature = 0.2
141
+ thinking = "high"
142
+
143
+ [providers.generic-openai]
144
+ api_base = "http://localhost:8000/v1"
145
+ api_style = "openai"
146
+ ```
147
+
148
+ ## Install
82
149
 
83
150
  ```bash
84
151
  pip install drydock-cli
85
152
  ```
86
153
 
87
154
  Or with uv:
88
-
89
155
  ```bash
90
156
  uv tool install drydock-cli
91
157
  ```
92
158
 
159
+ ## Quick Start
160
+
161
+ ```bash
162
+ cd your-project/
163
+ drydock
164
+ ```
165
+
166
+ First run creates a config at `~/.drydock/config.toml` and prompts for your provider setup.
167
+
168
+ ```
169
+ > Review the PRD and build the package
170
+ ```
171
+
93
172
  ## Features
94
173
 
95
- - **Interactive Chat**: A conversational AI agent that understands your requests and breaks down complex tasks.
96
- - **Powerful Toolset**: Read, write, and patch files. Execute shell commands. Search code with `grep`. Manage todos. Delegate to subagents.
97
- - **Project-Aware Context**: DryDock automatically scans your project's file structure and Git status.
174
+ - **TUI Interface**: Full terminal UI with streaming output, tool approval, and session management.
175
+ - **Adaptive Thinking**: Automatically adjusts reasoning depth per turn full thinking for planning, fast mode for file writes.
176
+ - **Powerful Toolset**: Read, write, and patch files. Execute shell commands. Search code with `grep`. Delegate to subagents.
177
+ - **Project-Aware**: Scans project structure, loads `AGENTS.md` / `DRYDOCK.md` for context.
178
+ - **Subagent Delegation**: Large tasks can be delegated to builder/planner/explorer subagents with isolated context.
179
+ - **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
98
180
  - **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
99
181
  - **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
100
182
  - **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
@@ -111,21 +193,16 @@ uv tool install drydock-cli
111
193
  drydock --agent plan
112
194
  ```
113
195
 
114
- ## Quick Start
196
+ ### Gemma 4 Optimizations
115
197
 
116
- 1. Navigate to your project directory and run:
198
+ DryDock includes several optimizations specifically tuned for Gemma 4:
117
199
 
118
- ```bash
119
- drydock
120
- ```
121
-
122
- 2. First run creates a config at `~/.drydock/config.toml` and prompts for your API key.
123
-
124
- 3. Start chatting:
125
-
126
- ```
127
- > Can you find all TODO comments in this project?
128
- ```
200
+ - **Simplified prompt** (`gemma4.md`): 20-line system prompt instead of 125 lines. Complex prompts cause Gemma 4 to plan instead of act.
201
+ - **Non-streaming mode**: Streaming breaks Gemma 4 tool call JSON parsing. DryDock automatically disables streaming for Gemma 4.
202
+ - **Thinking token filtering**: Gemma 4 leaks `<|channel>thought<channel|>` tokens into text output. DryDock strips these before storing in context.
203
+ - **Adaptive thinking**: Full thinking for planning (turn 1) and error recovery. Thinking OFF for routine file writes — eliminates 30-120s hangs between files.
204
+ - **search_replace resilience**: Auto-detects already-applied edits, infers missing file paths, fuzzy-matches whitespace differences.
205
+ - **Reduced tool set**: Disables tools that confuse Gemma 4 (`ask_user_question`, `task_create`, etc.).
129
206
 
130
207
  ## Usage
131
208
 
@@ -153,10 +230,6 @@ drydock --prompt "Analyze the codebase" --max-turns 5 --output json
153
230
  drydock --dangerously-skip-permissions -p "Fix all lint errors"
154
231
  ```
155
232
 
156
- ### Trust Folder System
157
-
158
- DryDock includes a trust folder system. When you run DryDock in a directory with a `.drydock` folder, it asks you to confirm trust. Managed via `~/.drydock/trusted_folders.toml`.
159
-
160
233
  ## Configuration
161
234
 
162
235
  DryDock is configured via `config.toml`. It looks first in `./.drydock/config.toml`, then `~/.drydock/config.toml`.
@@ -175,11 +248,10 @@ Keys are saved to `~/.drydock/.env`.
175
248
  Set a smarter model for the `/consult` command:
176
249
 
177
250
  ```toml
178
- # In ~/.drydock/config.toml
179
251
  consultant_model = "gemini-2.5-pro"
180
252
  ```
181
253
 
182
- The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it. The response appears in your conversation so the local model can see it.
254
+ The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it.
183
255
 
184
256
  ### Custom Agents
185
257
 
@@ -192,18 +264,6 @@ system_prompt_id = "redteam"
192
264
  disabled_tools = ["search_replace", "write_file"]
193
265
  ```
194
266
 
195
- ```bash
196
- drydock --agent redteam
197
- ```
198
-
199
- ### Custom Prompts
200
-
201
- Create markdown files in `~/.drydock/prompts/`:
202
-
203
- ```toml
204
- system_prompt_id = "my_custom_prompt"
205
- ```
206
-
207
267
  ### Skills
208
268
 
209
269
  DryDock discovers skills from:
@@ -222,13 +282,27 @@ command = "uvx"
222
282
  args = ["mcp-server-fetch"]
223
283
  ```
224
284
 
225
- ### Custom DryDock Home
285
+ ## Testing
286
+
287
+ DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
226
288
 
227
289
  ```bash
228
- export DRYDOCK_HOME="/path/to/custom/home"
290
+ # Single project test
291
+ python3 scripts/shakedown.py \
292
+ --cwd /path/to/project \
293
+ --prompt "review the PRD and build the package" \
294
+ --pkg package_name
295
+
296
+ # Interactive back-and-forth test
297
+ python3 scripts/shakedown_interactive.py \
298
+ --cwd /path/to/project \
299
+ --pkg package_name
300
+
301
+ # Full regression suite (370 PRDs)
302
+ bash scripts/shakedown_suite.sh
229
303
  ```
230
304
 
231
- This affects where DryDock looks for `config.toml`, `.env`, `agents/`, `prompts/`, `skills/`, and `logs/`.
305
+ Pass criteria: no write loops, no ignored interrupts, no search_replace cascades, package executes, session finishes within time budget.
232
306
 
233
307
  ## Slash Commands
234
308
 
@@ -242,12 +316,6 @@ drydock --resume abc123 # Resume specific session
242
316
  drydock --workdir /path/to/dir # Set working directory
243
317
  ```
244
318
 
245
- ## Resources
246
-
247
- - [CHANGELOG](CHANGELOG.md)
248
- - [CONTRIBUTING](CONTRIBUTING.md)
249
- - [ACP Setup](docs/acp-setup.md) — Editor/IDE integration
250
-
251
319
  ## License
252
320
 
253
321
  Copyright 2025 Mistral AI (original work)
@@ -0,0 +1,270 @@
1
+ # DryDock
2
+
3
+ [![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/downloads/release/python-3120/)
4
+ [![License](https://img.shields.io/github/license/fbobe321/drydock)](https://github.com/fbobe321/drydock/blob/main/LICENSE)
5
+
6
+ ```
7
+ ____ _ _
8
+ | _ \ _ __ _ _ __| | ___ ___ | | __
9
+ | | | | '__| | | |/ _` |/ _ \ / __|| |/ /
10
+ | |_| | | | |_| | (_| | (_) | (__ | <
11
+ |____/|_| \__, |\__,_|\___/ \___||_|\_\
12
+ |___/
13
+ ```
14
+
15
+ **Local-first CLI coding agent. Chart your course. Execute with precision.**
16
+
17
+ DryDock is a TUI coding assistant designed to work with **local LLMs**. It provides a conversational interface to your codebase — explore, modify, build, and test projects through natural language and a powerful set of tools.
18
+
19
+ > [!IMPORTANT]
20
+ > DryDock is tested and optimized for **Gemma 4 26B-A4B** (26B MoE, 4B active parameters) served via vLLM. Other models and providers are supported (Mistral, OpenAI, Anthropic, Ollama) but are not as thoroughly tested. If you use a different model, expect to tune prompts and tool settings.
21
+
22
+ ## Tested Hardware + Model
23
+
24
+ | Component | Spec |
25
+ |-----------|------|
26
+ | GPUs | 2x NVIDIA RTX 4060 Ti 16GB |
27
+ | Model | [Gemma-4-26B-A4B-it-AWQ-4bit](https://huggingface.co/casperhansen/gemma-4-26b-a4b-it-AWQ-4bit) |
28
+ | Serving | vLLM (Docker image `vllm/vllm-openai:gemma4`) |
29
+ | Performance | ~70 tok/s, 131K context, 0% timeouts |
30
+ | Active params | 4B per token (MoE architecture — fast inference) |
31
+
32
+ ### Install the model
33
+
34
+ ```bash
35
+ # Download the model weights (requires HuggingFace access)
36
+ pip install huggingface-hub
37
+ huggingface-cli download casperhansen/gemma-4-26b-a4b-it-AWQ-4bit \
38
+ --local-dir /path/to/models/Gemma-4-26B-A4B-it-AWQ-4bit
39
+ ```
40
+
41
+ ### Start vLLM
42
+
43
+ ```bash
44
+ docker run -d \
45
+ --gpus all \
46
+ --name gemma4 \
47
+ -p 8000:8000 \
48
+ -v /path/to/models:/models \
49
+ --ipc=host \
50
+ vllm/vllm-openai:gemma4 \
51
+ --model /models/Gemma-4-26B-A4B-it-AWQ-4bit \
52
+ --quantization compressed-tensors \
53
+ --tensor-parallel-size 2 \
54
+ --max-model-len 131072 \
55
+ --max-num-seqs 2 \
56
+ --gpu-memory-utilization 0.95 \
57
+ --kv-cache-dtype fp8 \
58
+ --served-model-name gemma4 \
59
+ --trust-remote-code \
60
+ --tool-call-parser gemma4 \
61
+ --enable-auto-tool-choice \
62
+ --attention-backend TRITON_ATTN
63
+ ```
64
+
65
+ Key flags:
66
+ - `--tensor-parallel-size 2` — split across 2 GPUs
67
+ - `--kv-cache-dtype fp8` — reduce KV cache memory for longer contexts
68
+ - `--tool-call-parser gemma4` + `--enable-auto-tool-choice` — required for Gemma 4 tool calling
69
+ - `--max-num-seqs 2` — limit concurrent requests (prevents OOM on 16GB GPUs)
70
+
71
+ Verify the model is running:
72
+ ```bash
73
+ curl http://localhost:8000/v1/models
74
+ ```
75
+
76
+ ### Configure DryDock
77
+
78
+ ```toml
79
+ # ~/.drydock/config.toml
80
+ [models.gemma4]
81
+ name = "gemma4"
82
+ provider = "generic-openai"
83
+ alias = "gemma4"
84
+ temperature = 0.2
85
+ thinking = "high"
86
+
87
+ [providers.generic-openai]
88
+ api_base = "http://localhost:8000/v1"
89
+ api_style = "openai"
90
+ ```
91
+
92
+ ## Install
93
+
94
+ ```bash
95
+ pip install drydock-cli
96
+ ```
97
+
98
+ Or with uv:
99
+ ```bash
100
+ uv tool install drydock-cli
101
+ ```
102
+
103
+ ## Quick Start
104
+
105
+ ```bash
106
+ cd your-project/
107
+ drydock
108
+ ```
109
+
110
+ First run creates a config at `~/.drydock/config.toml` and prompts for your provider setup.
111
+
112
+ ```
113
+ > Review the PRD and build the package
114
+ ```
115
+
116
+ ## Features
117
+
118
+ - **TUI Interface**: Full terminal UI with streaming output, tool approval, and session management.
119
+ - **Adaptive Thinking**: Automatically adjusts reasoning depth per turn — full thinking for planning, fast mode for file writes.
120
+ - **Powerful Toolset**: Read, write, and patch files. Execute shell commands. Search code with `grep`. Delegate to subagents.
121
+ - **Project-Aware**: Scans project structure, loads `AGENTS.md` / `DRYDOCK.md` for context.
122
+ - **Subagent Delegation**: Large tasks can be delegated to builder/planner/explorer subagents with isolated context.
123
+ - **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
124
+ - **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
125
+ - **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
126
+ - **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
127
+ - **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
128
+
129
+ ### Built-in Agents
130
+
131
+ - **`default`**: Standard agent that requires approval for tool executions.
132
+ - **`plan`**: Read-only agent for exploration and planning.
133
+ - **`accept-edits`**: Auto-approves file edits only.
134
+ - **`auto-approve`**: Auto-approves all tool executions.
135
+
136
+ ```bash
137
+ drydock --agent plan
138
+ ```
139
+
140
+ ### Gemma 4 Optimizations
141
+
142
+ DryDock includes several optimizations specifically tuned for Gemma 4:
143
+
144
+ - **Simplified prompt** (`gemma4.md`): 20-line system prompt instead of 125 lines. Complex prompts cause Gemma 4 to plan instead of act.
145
+ - **Non-streaming mode**: Streaming breaks Gemma 4 tool call JSON parsing. DryDock automatically disables streaming for Gemma 4.
146
+ - **Thinking token filtering**: Gemma 4 leaks `<|channel>thought<channel|>` tokens into text output. DryDock strips these before storing in context.
147
+ - **Adaptive thinking**: Full thinking for planning (turn 1) and error recovery. Thinking OFF for routine file writes — eliminates 30-120s hangs between files.
148
+ - **search_replace resilience**: Auto-detects already-applied edits, infers missing file paths, fuzzy-matches whitespace differences.
149
+ - **Reduced tool set**: Disables tools that confuse Gemma 4 (`ask_user_question`, `task_create`, etc.).
150
+
151
+ ## Usage
152
+
153
+ ### Interactive Mode
154
+
155
+ ```bash
156
+ drydock # Start interactive session
157
+ drydock "Fix the login bug" # Start with a prompt
158
+ drydock --continue # Resume last session
159
+ drydock --resume abc123 # Resume specific session
160
+ ```
161
+
162
+ **Keyboard shortcuts:**
163
+ - `Ctrl+C` — Cancel current operation (double-tap to quit)
164
+ - `Shift+Tab` — Toggle auto-approve mode
165
+ - `Ctrl+O` — Toggle tool output
166
+ - `Ctrl+G` — Open external editor
167
+ - `@` — File path autocompletion
168
+ - `!command` — Run shell command directly
169
+
170
+ ### Programmatic Mode
171
+
172
+ ```bash
173
+ drydock --prompt "Analyze the codebase" --max-turns 5 --output json
174
+ drydock --dangerously-skip-permissions -p "Fix all lint errors"
175
+ ```
176
+
177
+ ## Configuration
178
+
179
+ DryDock is configured via `config.toml`. It looks first in `./.drydock/config.toml`, then `~/.drydock/config.toml`.
180
+
181
+ ### API Key
182
+
183
+ ```bash
184
+ drydock --setup # Interactive setup
185
+ export MISTRAL_API_KEY="your_key" # Or set env var
186
+ ```
187
+
188
+ Keys are saved to `~/.drydock/.env`.
189
+
190
+ ### Consultant Model
191
+
192
+ Set a smarter model for the `/consult` command:
193
+
194
+ ```toml
195
+ consultant_model = "gemini-2.5-pro"
196
+ ```
197
+
198
+ The consultant provides read-only advice — it never calls tools. Use `/consult <question>` to ask it.
199
+
200
+ ### Custom Agents
201
+
202
+ Create agent configs in `~/.drydock/agents/`:
203
+
204
+ ```toml
205
+ # ~/.drydock/agents/redteam.toml
206
+ active_model = "devstral-2"
207
+ system_prompt_id = "redteam"
208
+ disabled_tools = ["search_replace", "write_file"]
209
+ ```
210
+
211
+ ### Skills
212
+
213
+ DryDock discovers skills from:
214
+ 1. Custom paths in `config.toml` via `skill_paths`
215
+ 2. Project `.drydock/skills/` or `.agents/skills/`
216
+ 3. Global `~/.drydock/skills/`
217
+ 4. Bundled skills (shipped with the package)
218
+
219
+ ### MCP Servers
220
+
221
+ ```toml
222
+ [[mcp_servers]]
223
+ name = "fetch_server"
224
+ transport = "stdio"
225
+ command = "uvx"
226
+ args = ["mcp-server-fetch"]
227
+ ```
228
+
229
+ ## Testing
230
+
231
+ DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
232
+
233
+ ```bash
234
+ # Single project test
235
+ python3 scripts/shakedown.py \
236
+ --cwd /path/to/project \
237
+ --prompt "review the PRD and build the package" \
238
+ --pkg package_name
239
+
240
+ # Interactive back-and-forth test
241
+ python3 scripts/shakedown_interactive.py \
242
+ --cwd /path/to/project \
243
+ --pkg package_name
244
+
245
+ # Full regression suite (370 PRDs)
246
+ bash scripts/shakedown_suite.sh
247
+ ```
248
+
249
+ Pass criteria: no write loops, no ignored interrupts, no search_replace cascades, package executes, session finishes within time budget.
250
+
251
+ ## Slash Commands
252
+
253
+ Type `/help` in the input for available commands. Create custom slash commands via the skills system.
254
+
255
+ ## Session Management
256
+
257
+ ```bash
258
+ drydock --continue # Continue last session
259
+ drydock --resume abc123 # Resume specific session
260
+ drydock --workdir /path/to/dir # Set working directory
261
+ ```
262
+
263
+ ## License
264
+
265
+ Copyright 2025 Mistral AI (original work)
266
+ Copyright 2026 DryDock contributors (modifications)
267
+
268
+ Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details.
269
+
270
+ DryDock is a fork of [mistralai/mistral-vibe](https://github.com/mistralai/mistral-vibe) (Apache 2.0). See [NOTICE](NOTICE) for attribution.