drydock-cli 2.6.27__tar.gz → 2.6.29__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 (556) hide show
  1. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/PKG-INFO +1 -1
  2. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/agent_loop.py +68 -2
  3. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/format.py +18 -1
  4. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/search_replace.py +61 -0
  5. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/pyproject.toml +1 -1
  6. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/shakedown.py +51 -1
  7. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/shakedown_regression.sh +7 -2
  8. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/uv.lock +1 -1
  9. drydock_cli-2.6.27/.auto_release.lock +0 -1
  10. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/CODEOWNERS +0 -0
  11. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  12. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  13. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  14. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/workflows/build-and-upload.yml +0 -0
  15. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/workflows/ci.yml +0 -0
  16. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/workflows/issue-labeler.yml +0 -0
  17. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.github/workflows/release.yml +0 -0
  18. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.gitignore +0 -0
  19. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.pre-commit-config.yaml +0 -0
  20. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.python-version +0 -0
  21. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.typos.toml +0 -0
  22. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.vscode/extensions.json +0 -0
  23. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.vscode/launch.json +0 -0
  24. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/.vscode/settings.json +0 -0
  25. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/AGENTS.md +0 -0
  26. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/CHANGELOG.md +0 -0
  27. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/CLAUDE.md +0 -0
  28. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/CONTRIBUTING.md +0 -0
  29. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/Drydock_rebrand.md +0 -0
  30. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/LICENSE +0 -0
  31. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/NOTICE +0 -0
  32. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/PRD.md +0 -0
  33. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/README.md +0 -0
  34. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/action.yml +0 -0
  35. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/distribution/zed/LICENSE +0 -0
  36. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/distribution/zed/extension.toml +0 -0
  37. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/distribution/zed/icons/mistral_vibe.svg +0 -0
  38. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/docs/README.md +0 -0
  39. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/docs/acp-setup.md +0 -0
  40. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/docs/proxy-setup.md +0 -0
  41. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/__init__.py +0 -0
  42. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/__init__.py +0 -0
  43. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/acp_agent_loop.py +0 -0
  44. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/acp_logger.py +0 -0
  45. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/entrypoint.py +0 -0
  46. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/__init__.py +0 -0
  47. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/base.py +0 -0
  48. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/bash.py +0 -0
  49. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/read_file.py +0 -0
  50. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/search_replace.py +0 -0
  51. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/todo.py +0 -0
  52. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/builtins/write_file.py +0 -0
  53. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/tools/session_update.py +0 -0
  54. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/acp/utils.py +0 -0
  55. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/__init__.py +0 -0
  56. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/autocompletion/__init__.py +0 -0
  57. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/autocompletion/base.py +0 -0
  58. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/autocompletion/path_completion.py +0 -0
  59. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/autocompletion/slash_command.py +0 -0
  60. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/cli.py +0 -0
  61. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/clipboard.py +0 -0
  62. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/commands.py +0 -0
  63. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/entrypoint.py +0 -0
  64. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/history_manager.py +0 -0
  65. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  66. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  67. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  68. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/terminal_setup.py +0 -0
  69. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/__init__.py +0 -0
  70. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  71. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/app.py +0 -0
  72. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/app.tcss +0 -0
  73. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/external_editor.py +0 -0
  74. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  75. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  76. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  77. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  78. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  79. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  80. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  81. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  82. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  83. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  84. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  85. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  86. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  87. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  88. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  89. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  90. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  91. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  92. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  93. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  94. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  95. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  96. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  97. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  98. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  99. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  100. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  101. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  102. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  103. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  104. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  105. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  106. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  107. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  108. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  109. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  110. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/history.py +0 -0
  111. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  112. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/textual_ui/windowing/state.py +0 -0
  113. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/__init__.py +0 -0
  114. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  115. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  116. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  117. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  118. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  119. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/update.py +0 -0
  120. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/cli/update_notifier/whats_new.py +0 -0
  121. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/__init__.py +0 -0
  122. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/agents/__init__.py +0 -0
  123. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/agents/manager.py +0 -0
  124. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/agents/models.py +0 -0
  125. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/auth/__init__.py +0 -0
  126. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/auth/crypto.py +0 -0
  127. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/auth/github.py +0 -0
  128. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/__init__.py +0 -0
  129. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/completers.py +0 -0
  130. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  131. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  132. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  133. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  134. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  135. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/fuzzy.py +0 -0
  136. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/path_prompt.py +0 -0
  137. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  138. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/build_orchestrator.py +0 -0
  139. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/config/__init__.py +0 -0
  140. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/config/_settings.py +0 -0
  141. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/config/harness_files/__init__.py +0 -0
  142. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  143. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/config/harness_files/_paths.py +0 -0
  144. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/consultant.py +0 -0
  145. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/drydock_states.py +0 -0
  146. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/hooks.py +0 -0
  147. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/__init__.py +0 -0
  148. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/anthropic.py +0 -0
  149. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/base.py +0 -0
  150. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/factory.py +0 -0
  151. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/generic.py +0 -0
  152. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/mistral.py +0 -0
  153. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  154. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/backend/vertex.py +0 -0
  155. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/exceptions.py +0 -0
  156. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/message_utils.py +0 -0
  157. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/llm/types.py +0 -0
  158. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/logger.py +0 -0
  159. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/middleware.py +0 -0
  160. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/output_formatters.py +0 -0
  161. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/paths/__init__.py +0 -0
  162. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/paths/_local_config_walk.py +0 -0
  163. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/paths/_vibe_home.py +0 -0
  164. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/paths/conventions.py +0 -0
  165. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/plan_session.py +0 -0
  166. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/plugins.py +0 -0
  167. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/programmatic.py +0 -0
  168. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/__init__.py +0 -0
  169. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/builder.md +0 -0
  170. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/cli.md +0 -0
  171. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/compact.md +0 -0
  172. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/dangerous_directory.md +0 -0
  173. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/diagnostic.md +0 -0
  174. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/explore.md +0 -0
  175. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/gemma4.md +0 -0
  176. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/planner.md +0 -0
  177. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/project_context.md +0 -0
  178. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/prompts/tests.md +0 -0
  179. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/proxy_setup.py +0 -0
  180. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/agent_memory.py +0 -0
  181. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/checkpoints.py +0 -0
  182. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/session_loader.py +0 -0
  183. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/session_logger.py +0 -0
  184. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/session_migration.py +0 -0
  185. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session/state_file.py +0 -0
  186. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/session_checker.py +0 -0
  187. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/skills/__init__.py +0 -0
  188. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/skills/manager.py +0 -0
  189. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/skills/models.py +0 -0
  190. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/skills/parser.py +0 -0
  191. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/slug.py +0 -0
  192. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/system_prompt.py +0 -0
  193. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/telemetry/__init__.py +0 -0
  194. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/telemetry/send.py +0 -0
  195. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/teleport/errors.py +0 -0
  196. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/teleport/git.py +0 -0
  197. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/teleport/nuage.py +0 -0
  198. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/teleport/teleport.py +0 -0
  199. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/teleport/types.py +0 -0
  200. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/base.py +0 -0
  201. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/_task_manager.py +0 -0
  202. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  203. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/bash.py +0 -0
  204. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/cron.py +0 -0
  205. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  206. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/glob_tool.py +0 -0
  207. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/grep.py +0 -0
  208. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  209. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/lsp.py +0 -0
  210. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  211. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  212. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/powershell.py +0 -0
  213. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  214. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  215. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  216. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  217. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  218. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  219. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  220. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  221. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  222. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  223. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  224. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  225. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  226. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  227. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/task.md +0 -0
  228. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  229. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  230. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  231. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  232. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  233. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  234. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  235. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/read_file.py +0 -0
  236. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/task.py +0 -0
  237. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/todo.py +0 -0
  238. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/tool_search.py +0 -0
  239. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/webfetch.py +0 -0
  240. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/websearch.py +0 -0
  241. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/worktree.py +0 -0
  242. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/builtins/write_file.py +0 -0
  243. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/injection_guard.py +0 -0
  244. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/manager.py +0 -0
  245. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/mcp/__init__.py +0 -0
  246. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/mcp/registry.py +0 -0
  247. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/mcp/tools.py +0 -0
  248. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/mcp_sampling.py +0 -0
  249. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/ui.py +0 -0
  250. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/tools/utils.py +0 -0
  251. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/trusted_folders.py +0 -0
  252. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/types.py +0 -0
  253. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/core/utils.py +0 -0
  254. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/__init__.py +0 -0
  255. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/base.py +0 -0
  256. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/onboarding.tcss +0 -0
  257. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/__init__.py +0 -0
  258. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/api_key.py +0 -0
  259. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/onboarding/screens/welcome.py +0 -0
  260. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  261. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  262. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/__init__.py +0 -0
  263. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/api-design/SKILL.md +0 -0
  264. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/batch/SKILL.md +0 -0
  265. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/commit-code/SKILL.md +0 -0
  266. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/context-summary/SKILL.md +0 -0
  267. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/create-presentation/SKILL.md +0 -0
  268. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/deep-research/SKILL.md +0 -0
  269. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/deploy/SKILL.md +0 -0
  270. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/diff-review/SKILL.md +0 -0
  271. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/doc-gen/SKILL.md +0 -0
  272. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/explain-code/SKILL.md +0 -0
  273. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/explore-code/SKILL.md +0 -0
  274. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/fix-issue/SKILL.md +0 -0
  275. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/git-ops/SKILL.md +0 -0
  276. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/init-project/SKILL.md +0 -0
  277. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/investigate/SKILL.md +0 -0
  278. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/loop/SKILL.md +0 -0
  279. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/migrate/SKILL.md +0 -0
  280. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/perf-analyze/SKILL.md +0 -0
  281. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/plan-impl/SKILL.md +0 -0
  282. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/pr-review/SKILL.md +0 -0
  283. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/refactor/SKILL.md +0 -0
  284. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/regex-help/SKILL.md +0 -0
  285. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/review/SKILL.md +0 -0
  286. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/security-review/SKILL.md +0 -0
  287. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/ship/SKILL.md +0 -0
  288. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/simplify/SKILL.md +0 -0
  289. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/skills/test-verify/SKILL.md +0 -0
  290. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock/whats_new.md +0 -0
  291. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock-acp.spec +0 -0
  292. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/drydock_terms.md +0 -0
  293. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/flake.lock +0 -0
  294. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/flake.nix +0 -0
  295. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/log_analyzer/__init__.py +0 -0
  296. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/log_analyzer/__main__.py +0 -0
  297. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/log_analyzer/analyzer.py +0 -0
  298. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/log_analyzer/cli.py +0 -0
  299. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/README.md +0 -0
  300. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/auto_release.sh +0 -0
  301. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/auto_test_loop.sh +0 -0
  302. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/backup.sh +0 -0
  303. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/bump_version.py +0 -0
  304. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/deploy_to_github.sh +0 -0
  305. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/discover_cli_tools.sh +0 -0
  306. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/install.sh +0 -0
  307. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/llm_balancer.py +0 -0
  308. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/monitor_swebench.sh +0 -0
  309. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/monitor_test_battery.sh +0 -0
  310. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/notify_release.py +0 -0
  311. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/overnight_agents_test.sh +0 -0
  312. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/prepare_release.py +0 -0
  313. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/publish_to_pypi.sh +0 -0
  314. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/shakedown_suite.sh +0 -0
  315. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/shakedown_variance.sh +0 -0
  316. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/telegram_bot.py +0 -0
  317. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/test_bank.sh +0 -0
  318. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/test_full.sh +0 -0
  319. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/test_smoke.sh +0 -0
  320. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/test_tui_path.py +0 -0
  321. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/tui_test.py +0 -0
  322. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/scripts/vllm_failover.sh +0 -0
  323. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/__init__.py +0 -0
  324. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/conftest.py +0 -0
  325. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_acp.py +0 -0
  326. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_agent_thought.py +0 -0
  327. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_bash.py +0 -0
  328. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_compact_session_updates.py +0 -0
  329. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_content.py +0 -0
  330. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_initialize.py +0 -0
  331. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_list_sessions.py +0 -0
  332. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_load_session.py +0 -0
  333. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_multi_session.py +0 -0
  334. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_new_session.py +0 -0
  335. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_proxy_setup_acp.py +0 -0
  336. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_read_file.py +0 -0
  337. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_search_replace.py +0 -0
  338. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_set_config_option.py +0 -0
  339. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_set_mode.py +0 -0
  340. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_set_model.py +0 -0
  341. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_tool_call_session_update.py +0 -0
  342. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_utils.py +0 -0
  343. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/acp/test_write_file.py +0 -0
  344. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_file_indexer.py +0 -0
  345. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_fuzzy.py +0 -0
  346. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  347. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  348. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_path_completion_controller.py +0 -0
  349. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  350. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_slash_command_controller.py +0 -0
  351. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  352. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/__init__.py +0 -0
  353. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/data/__init__.py +0 -0
  354. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/data/fireworks.py +0 -0
  355. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/data/mistral.py +0 -0
  356. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/test_anthropic_adapter.py +0 -0
  357. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/test_backend.py +0 -0
  358. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/test_reasoning_adapter.py +0 -0
  359. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  360. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  361. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  362. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  363. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_bell_notifications.py +0 -0
  364. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_braille_renderer.py +0 -0
  365. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_clipboard.py +0 -0
  366. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_commands.py +0 -0
  367. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_copy_shortcuts.py +0 -0
  368. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_external_editor.py +0 -0
  369. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_no_markup_static.py +0 -0
  370. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_question_app.py +0 -0
  371. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_spinner.py +0 -0
  372. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_switching_mode.py +0 -0
  373. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  374. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  375. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_ui_session_resume.py +0 -0
  376. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/test_ui_skill_dispatch.py +0 -0
  377. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/textual_ui/__init__.py +0 -0
  378. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/cli/textual_ui/test_session_picker.py +0 -0
  379. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/conftest.py +0 -0
  380. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_agents.py +0 -0
  381. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_auth_crypto.py +0 -0
  382. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_auth_github.py +0 -0
  383. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_config_load_dotenv.py +0 -0
  384. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_config_paths.py +0 -0
  385. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_config_resolution.py +0 -0
  386. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_file_logging.py +0 -0
  387. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_plan_session.py +0 -0
  388. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_proxy_setup.py +0 -0
  389. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_slug.py +0 -0
  390. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_telemetry_send.py +0 -0
  391. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_teleport_git.py +0 -0
  392. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_teleport_nuage.py +0 -0
  393. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_teleport_service.py +0 -0
  394. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_trusted_folders.py +0 -0
  395. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/core/test_utils.py +0 -0
  396. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/common.py +0 -0
  397. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/conftest.py +0 -0
  398. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/mock_server.py +0 -0
  399. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  400. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_streaming.py +0 -0
  401. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  402. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/fixtures/doc_qa_system_prd.md +0 -0
  403. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/mock/__init__.py +0 -0
  404. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/mock/mock_backend_factory.py +0 -0
  405. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/mock/mock_entrypoint.py +0 -0
  406. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/mock/utils.py +0 -0
  407. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/onboarding/test_run_onboarding.py +0 -0
  408. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/onboarding/test_ui_onboarding.py +0 -0
  409. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/session/test_session_loader.py +0 -0
  410. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/session/test_session_logger.py +0 -0
  411. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/session/test_session_migration.py +0 -0
  412. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/skills/conftest.py +0 -0
  413. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/skills/test_manager.py +0 -0
  414. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/skills/test_models.py +0 -0
  415. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/skills/test_parser.py +0 -0
  416. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  417. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  418. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  419. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  420. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  421. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  422. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  423. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  424. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  425. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  426. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  427. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  428. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  429. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  430. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  431. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  432. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  433. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  434. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  435. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  436. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  437. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  438. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  439. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  440. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  441. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  442. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  443. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  444. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  445. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  446. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  447. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  448. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  449. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  450. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  451. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  452. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  453. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  454. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  455. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  456. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  457. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  458. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  459. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  460. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  461. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  462. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  463. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  464. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  465. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  466. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  467. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  468. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  469. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  470. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  471. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  472. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  473. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  474. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  475. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  476. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/base_snapshot_test_app.py +0 -0
  477. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/conftest.py +0 -0
  478. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/snap_compare.py +0 -0
  479. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  480. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  481. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  482. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  483. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  484. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  485. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  486. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  487. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  488. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  489. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  490. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  491. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  492. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  493. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/stubs/fake_backend.py +0 -0
  494. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/stubs/fake_client.py +0 -0
  495. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/stubs/fake_tool.py +0 -0
  496. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_auto_compact.py +0 -0
  497. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_backend.py +0 -0
  498. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_observer_streaming.py +0 -0
  499. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_stats.py +0 -0
  500. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_tasks.py +0 -0
  501. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agent_tool_call.py +0 -0
  502. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_agents.py +0 -0
  503. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_build.py +0 -0
  504. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_debug.py +0 -0
  505. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_multiagent.py +0 -0
  506. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_prd.py +0 -0
  507. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_prd_extended.py +0 -0
  508. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_tools.py +0 -0
  509. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_bank_update.py +0 -0
  510. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_build_projects.py +0 -0
  511. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_cli_programmatic_preload.py +0 -0
  512. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_current_bugs.py +0 -0
  513. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_drydock_regression.py +0 -0
  514. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_drydock_tasks.py +0 -0
  515. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_full_regression.py +0 -0
  516. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_history_manager.py +0 -0
  517. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_integration.py +0 -0
  518. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_loop_detection.py +0 -0
  519. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_message_id.py +0 -0
  520. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_message_merging.py +0 -0
  521. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_middleware.py +0 -0
  522. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_multi_agent.py +0 -0
  523. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_real_failures.py +0 -0
  524. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_real_issues.py +0 -0
  525. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_real_workflow.py +0 -0
  526. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_reasoning_content.py +0 -0
  527. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_smoke.py +0 -0
  528. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_system_prompt.py +0 -0
  529. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_tagged_text.py +0 -0
  530. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_tool_args.py +0 -0
  531. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_ui_external_editor.py +0 -0
  532. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_ui_input_history.py +0 -0
  533. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_user_issues.py +0 -0
  534. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/test_workloads.py +0 -0
  535. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/testbank_helpers.py +0 -0
  536. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_ask_user_question.py +0 -0
  537. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_bash.py +0 -0
  538. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_exit_plan_mode.py +0 -0
  539. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_grep.py +0 -0
  540. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_invoke_context.py +0 -0
  541. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_manager_get_tool_config.py +0 -0
  542. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_mcp.py +0 -0
  543. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_mcp_sampling.py +0 -0
  544. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_task.py +0 -0
  545. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_ui_bash_execution.py +0 -0
  546. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_webfetch.py +0 -0
  547. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/tools/test_websearch.py +0 -0
  548. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  549. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  550. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_do_update.py +0 -0
  551. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  552. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_github_update_gateway.py +0 -0
  553. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  554. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_ui_update_notification.py +0 -0
  555. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_update_use_case.py +0 -0
  556. {drydock_cli-2.6.27 → drydock_cli-2.6.29}/tests/update_notifier/test_whats_new.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.6.27
3
+ Version: 2.6.29
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
@@ -653,6 +653,36 @@ class AgentLoop:
653
653
  return
654
654
  last_message = self.messages[-1]
655
655
 
656
+ # Detect thinking-only stall: model produced no visible content
657
+ # AND no tool calls. This happens when Gemma 4 leaks thinking
658
+ # tokens that get stripped, leaving an empty assistant message.
659
+ # If the previous message was a tool result (model was mid-work),
660
+ # inject a nudge to keep it going instead of silently ending.
661
+ if (
662
+ not last_message.content
663
+ and not last_message.tool_calls
664
+ and len(self.messages) >= 3
665
+ ):
666
+ prev_role = self.messages[-2].role if len(self.messages) >= 2 else None
667
+ if prev_role == Role.tool:
668
+ # Track consecutive empty turns to avoid infinite nudge loops
669
+ empty_turns = getattr(self, "_consecutive_empty_turns", 0) + 1
670
+ self._consecutive_empty_turns = empty_turns
671
+ if empty_turns <= 2:
672
+ logger.info("Thinking-only stall detected (attempt %d) — nudging model to continue", empty_turns)
673
+ # Remove the empty assistant message and inject a nudge
674
+ self.messages.pop()
675
+ self._inject_system_note(
676
+ "Continue working. Use a tool (read_file, write_file, "
677
+ "search_replace, bash) or say what you want to do next."
678
+ )
679
+ return # will re-enter _perform_llm_turn on the next loop iteration
680
+ else:
681
+ logger.info("Thinking-only stall persists after %d nudges — letting session end", empty_turns)
682
+ else:
683
+ # Reset counter on any productive turn
684
+ self._consecutive_empty_turns = 0
685
+
656
686
  # Detect repetitive text generation (Gemma 4 sometimes loops text within one response)
657
687
  if last_message.content and len(last_message.content) > 200:
658
688
  text = last_message.content
@@ -1219,7 +1249,15 @@ class AgentLoop:
1219
1249
  f"the CODE is. Use read_file to inspect the source, then write_file or "
1220
1250
  f"search_replace to fix the bug. Do not re-run the same command again."
1221
1251
  )
1222
- if stuck_tool in ("write_file", "search_replace"):
1252
+ if stuck_tool == "search_replace":
1253
+ return (
1254
+ f"STOP: You are calling search_replace with the same arguments "
1255
+ f"repeatedly. If the tool said 'ALREADY APPLIED', the edit is DONE. "
1256
+ f"If it said 'not found', you need to read_file FIRST to see the "
1257
+ f"actual file contents, then use the EXACT text from the file. "
1258
+ f"Do NOT retry the same search_replace again."
1259
+ )
1260
+ if stuck_tool == "write_file":
1223
1261
  return (
1224
1262
  f"You have written the same file multiple times in a row. "
1225
1263
  f"Move to the NEXT file in your plan. If no next file, run the code "
@@ -1405,6 +1443,12 @@ class AgentLoop:
1405
1443
  start_time = time.perf_counter()
1406
1444
  # Use temperature override if set (loop detection bumps it)
1407
1445
  temp = active_model.temperature
1446
+ # Cap max_tokens for Gemma 4 to prevent infinite thinking loops.
1447
+ # Without a cap, the model can generate 100K+ thinking tokens
1448
+ # (filling the 131K context), hanging for 20+ minutes per turn.
1449
+ effective_max_tokens = max_tokens
1450
+ if effective_max_tokens is None and "gemma" in active_model.name.lower():
1451
+ effective_max_tokens = 8192
1408
1452
  result = await self.backend.complete(
1409
1453
  model=active_model,
1410
1454
  messages=self.messages,
@@ -1412,7 +1456,7 @@ class AgentLoop:
1412
1456
  tools=available_tools,
1413
1457
  tool_choice=tool_choice,
1414
1458
  extra_headers=self._get_extra_headers(provider),
1415
- max_tokens=max_tokens,
1459
+ max_tokens=effective_max_tokens,
1416
1460
  metadata=self.entrypoint_metadata.model_dump()
1417
1461
  if self.entrypoint_metadata
1418
1462
  else None,
@@ -1742,6 +1786,28 @@ class AgentLoop:
1742
1786
 
1743
1787
  def _check_tool_call_repetition(self) -> str | None:
1744
1788
  """Check if recent tool calls are repeating. Returns 'FORCE_STOP', 'WARNING', or None."""
1789
+
1790
+ # Early check: search_replace with the same file + old_string twice
1791
+ # in a row. This is the #1 user-pain loop — the model retries an
1792
+ # edit that already succeeded or that keeps failing with the same
1793
+ # "not found" error. Nudge after just 2 identical attempts.
1794
+ recent_sr: list[str] = []
1795
+ for msg in reversed(self.messages[-20:]):
1796
+ if msg.role == Role.assistant and msg.tool_calls:
1797
+ for tc in msg.tool_calls:
1798
+ if tc.function and tc.function.name == "search_replace":
1799
+ try:
1800
+ args = json.loads(tc.function.arguments or "{}")
1801
+ # Build a key from file_path + old_string (content block)
1802
+ key = f"{args.get('file_path', '')}:{args.get('content', '')}"
1803
+ recent_sr.append(key)
1804
+ except (json.JSONDecodeError, AttributeError):
1805
+ pass
1806
+ if len(recent_sr) >= 4:
1807
+ break
1808
+ if len(recent_sr) >= 2 and recent_sr[0] == recent_sr[1]:
1809
+ return "WARNING|search_replace"
1810
+
1745
1811
  sigs: list[str] = []
1746
1812
  tool_names: list[str] = []
1747
1813
  lookback = 0
@@ -76,9 +76,26 @@ class APIToolFormatHandler:
76
76
  return "auto"
77
77
 
78
78
  def process_api_response_message(self, message: Any) -> LLMMessage:
79
+ # Strip ALL Gemma 4 leaked channel tokens from content.
80
+ # The model emits various formats:
81
+ # <|channel>thought...<channel|> (thinking tokens)
82
+ # <|channel>call:tool_name{...}<tool_call|> (malformed tool calls)
83
+ # <|channel><|channel>list_mcp_resources{...}<tool_call|> (double channel)
84
+ # Keeping them wastes context and confuses subsequent turns.
85
+ content = message.content
86
+ if content and "<|channel>" in content:
87
+ import re as _re
88
+ # Strip any <|channel>...<channel|> or <|channel>...<tool_call|> blocks
89
+ content = _re.sub(
90
+ r"<\|channel\>.*?(?:<channel\|>|<tool_call\|>)",
91
+ "",
92
+ content,
93
+ flags=_re.DOTALL,
94
+ ).strip() or None
95
+
79
96
  clean_message = {
80
97
  "role": message.role,
81
- "content": message.content,
98
+ "content": content,
82
99
  "reasoning_content": getattr(message, "reasoning_content", None),
83
100
  "reasoning_signature": getattr(message, "reasoning_signature", None),
84
101
  }
@@ -224,6 +224,38 @@ class SearchReplace(
224
224
  if path_match:
225
225
  file_path_str = path_match.group(1)
226
226
 
227
+ # Last resort: if file_path is still missing but we have SEARCH text,
228
+ # scan project files for a match. Gemma 4 frequently drops file_path.
229
+ # Limit scan to avoid hanging on large repos.
230
+ if not file_path_str and content:
231
+ blocks = self._parse_search_replace_blocks(content)
232
+ if blocks:
233
+ search_text = blocks[0].search.strip()
234
+ if search_text and len(search_text) >= 10:
235
+ project_root = Path.cwd()
236
+ candidates: list[Path] = []
237
+ files_checked = 0
238
+ for ext in ("*.py",): # Only scan Python files
239
+ for f in project_root.rglob(ext):
240
+ if files_checked > 200:
241
+ break
242
+ if "__pycache__" in str(f) or ".git" in str(f):
243
+ continue
244
+ files_checked += 1
245
+ try:
246
+ text = f.read_text(encoding="utf-8", errors="replace")
247
+ if len(text) > 100_000:
248
+ continue
249
+ if search_text in text:
250
+ candidates.append(f)
251
+ except Exception:
252
+ continue
253
+ if len(candidates) == 1:
254
+ file_path_str = str(candidates[0])
255
+ elif candidates:
256
+ candidates.sort(key=lambda p: len(str(p)))
257
+ file_path_str = str(candidates[0])
258
+
227
259
  if not file_path_str:
228
260
  raise ToolError(
229
261
  "File path is required. Use: search_replace(file_path='path/to/file.py', content='...')"
@@ -333,6 +365,35 @@ class SearchReplace(
333
365
 
334
366
  for i, (search, replace) in enumerate(blocks, 1):
335
367
  if search not in current_content:
368
+ # Check if this change was ALREADY APPLIED — the replacement
369
+ # text is in the file but the search text is not. This is the
370
+ # #1 cause of edit loops: the model successfully edits a file
371
+ # then retries the same edit because it doesn't realise it
372
+ # already worked.
373
+ if (replace and replace.strip()
374
+ and len(replace.strip()) >= 10
375
+ and replace.strip() in current_content):
376
+ warnings.append(
377
+ f"Block {i}: ALREADY APPLIED — the replacement text already "
378
+ f"exists in {filepath.name}. The search text is gone because "
379
+ f"a previous edit already made this change. "
380
+ f"Move on to the next task."
381
+ )
382
+ # Count as "applied" so we don't error — the file is correct
383
+ applied += 1
384
+ continue
385
+ # Also detect deletion that already happened (search text removed,
386
+ # replace is empty — the line is simply gone). Only trigger
387
+ # for meaningful search strings to avoid false positives.
388
+ if (not replace or not replace.strip()) and len(search.strip()) >= 10:
389
+ warnings.append(
390
+ f"Block {i}: ALREADY APPLIED — the text you want to remove "
391
+ f"is already absent from {filepath.name}. "
392
+ f"Move on to the next task."
393
+ )
394
+ applied += 1
395
+ continue
396
+
336
397
  # Try auto-applying high-confidence fuzzy match (>= 0.95 similarity)
337
398
  auto_apply_threshold = max(fuzzy_threshold, 0.95)
338
399
  best_match = SearchReplace._find_best_fuzzy_match(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.6.27"
3
+ version = "2.6.29"
4
4
  description = "Drydock — nautical CLI coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -400,6 +400,27 @@ class DrydockDriver:
400
400
  time.sleep(0.2)
401
401
  self.child.send("\r") # submit
402
402
 
403
+ def dismiss_trust_dialog(self) -> bool:
404
+ """Detect and dismiss the 'Trust this folder?' dialog.
405
+
406
+ This dialog can appear AFTER spawn() — e.g., when drydock lazily
407
+ resolves the project folder. If we don't catch it, the prompt
408
+ gets eaten by the dialog and the session never starts.
409
+ """
410
+ if self.child is None:
411
+ return False
412
+ try:
413
+ recent = self.child.before or ""
414
+ except Exception:
415
+ return False
416
+ if "Trust this folder" in recent or "trust this folder" in recent.lower():
417
+ self.child.send("\x1b[D") # Left arrow (No → Yes)
418
+ time.sleep(0.2)
419
+ self.child.send("\r") # Enter
420
+ time.sleep(2)
421
+ return True
422
+ return False
423
+
403
424
  def dismiss_permission_prompts(self) -> bool:
404
425
  """Detect and auto-approve any tool permission dialog.
405
426
 
@@ -528,6 +549,13 @@ def run_test(cwd: Path, prompt: str, pkg: str) -> int:
528
549
  print(f"\n[*] TUI exited at {int(elapsed)}s")
529
550
  break
530
551
 
552
+ # Trust dialog check — can appear AFTER spawn, eating the prompt
553
+ if driver.dismiss_trust_dialog():
554
+ print(f" [{int(elapsed):4d}s] Trust dialog dismissed — re-sending prompt")
555
+ time.sleep(1)
556
+ driver.type_message(prompt)
557
+ time.sleep(2)
558
+
531
559
  # Permission dialog check — fast, just peeks at buffer
532
560
  if driver.dismiss_permission_prompts():
533
561
  print(f" [{int(elapsed):4d}s] permission dialog auto-approved")
@@ -588,8 +616,30 @@ def run_test(cwd: Path, prompt: str, pkg: str) -> int:
588
616
  print(f"\n[*] Model finished (text response, no tool call)")
589
617
  break
590
618
 
591
- # True dead silence: no new MESSAGES of any kind
619
+ # True dead silence: no new MESSAGES of any kind.
620
+ # But first: if the package already works, the model just
621
+ # stalled after finishing — that's a PASS, not a FAIL.
622
+ # Gemma 4 often goes silent for 5+ min on a final thinking
623
+ # turn after successfully writing all files.
592
624
  if detector.silent_seconds() > DEAD_SILENCE_SECONDS:
625
+ # Early-exit check: does the package already work?
626
+ if pkg_dir.exists():
627
+ try:
628
+ check = subprocess.run(
629
+ ["python3", "-m", pkg, "--help"],
630
+ cwd=str(cwd),
631
+ capture_output=True,
632
+ text=True,
633
+ timeout=10,
634
+ )
635
+ if check.returncode == 0 and len(check.stdout.strip()) > 0:
636
+ print(
637
+ f"\n[*] Model silent {int(detector.silent_seconds())}s "
638
+ f"but {pkg} --help works — treating as done"
639
+ )
640
+ break # exit cleanly — no fail_reason added
641
+ except Exception:
642
+ pass
593
643
  fail_reasons.append(
594
644
  f"dead silence for {int(detector.silent_seconds())}s "
595
645
  f"(no new messages of any kind)"
@@ -79,8 +79,13 @@ for proj in "${projs[@]}"; do
79
79
  dir="$PROJECTS_DIR/$proj"
80
80
  done_n=$((done_n + 1))
81
81
 
82
- # Derive package name: strip leading "<num>_" from dir
83
- pkg=$(echo "$proj" | sed 's/^[0-9]*_//')
82
+ # Derive package name from the PRD's "## Package Name" section if it
83
+ # exists, otherwise fall back to stripping the leading number from the
84
+ # directory name. Many PRDs use a different package name than the dir
85
+ # (e.g., dir=08_todo_list but PRD says `todo_manager`).
86
+ pkg=$(grep -A1 "## Package Name" "$dir/PRD.md" 2>/dev/null \
87
+ | tail -1 | grep -oP '`\K[a-z0-9_]+(?=`)' | head -1)
88
+ [ -z "$pkg" ] && pkg=$(echo "$proj" | sed 's/^[0-9]*_//')
84
89
 
85
90
  # Snapshot PRD if no master exists yet
86
91
  if [ -f "$dir/PRD.md" ] && [ ! -f "$dir/PRD.master.md" ]; then
@@ -326,7 +326,7 @@ wheels = [
326
326
 
327
327
  [[package]]
328
328
  name = "drydock-cli"
329
- version = "2.4.7"
329
+ version = "2.6.28"
330
330
  source = { editable = "." }
331
331
  dependencies = [
332
332
  { name = "agent-client-protocol" },
@@ -1 +0,0 @@
1
- 306344
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