drydock-cli 2.7.24__tar.gz → 2.7.25__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 (678) hide show
  1. drydock_cli-2.7.25/.auto_release.lock +1 -0
  2. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/PKG-INFO +1 -1
  3. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/agent_loop.py +7 -0
  4. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/search_replace.py +24 -0
  5. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/pyproject.toml +1 -1
  6. drydock_cli-2.7.25/tests/tools/test_search_replace_malformed_block.py +131 -0
  7. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/trip_log.md +89 -0
  8. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/uv.lock +1 -1
  9. drydock_cli-2.7.24/.auto_release.lock +0 -1
  10. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.claude/scheduled_tasks.lock +0 -0
  11. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/CODEOWNERS +0 -0
  12. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  13. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  14. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  15. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/workflows/build-and-upload.yml +0 -0
  16. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/workflows/ci.yml +0 -0
  17. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/workflows/issue-labeler.yml +0 -0
  18. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.github/workflows/release.yml +0 -0
  19. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.gitignore +0 -0
  20. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.pre-commit-config.yaml +0 -0
  21. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.python-version +0 -0
  22. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.typos.toml +0 -0
  23. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.vscode/extensions.json +0 -0
  24. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.vscode/launch.json +0 -0
  25. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/.vscode/settings.json +0 -0
  26. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/AGENTS.md +0 -0
  27. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/Admiral.md +0 -0
  28. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/BASELINE_412.md +0 -0
  29. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/CHANGELOG.md +0 -0
  30. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/CLAUDE.md +0 -0
  31. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/CONTRIBUTING.md +0 -0
  32. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/DEPLOYMENT.md +0 -0
  33. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/Drydock_rebrand.md +0 -0
  34. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/LICENSE +0 -0
  35. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/MODEL_SHORTCOMINGS.md +0 -0
  36. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/NOTICE +0 -0
  37. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/OVERNIGHT_PROGRESS.md +0 -0
  38. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  39. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/PRD.md +0 -0
  40. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/README.md +0 -0
  41. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/action.yml +0 -0
  42. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/README.md +0 -0
  43. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results1.tsv +0 -0
  44. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results13.tsv +0 -0
  45. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results14.tsv +0 -0
  46. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results15.tsv +0 -0
  47. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results16.tsv +0 -0
  48. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results17.tsv +0 -0
  49. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results18.tsv +0 -0
  50. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results19.tsv +0 -0
  51. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results2.tsv +0 -0
  52. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results20.tsv +0 -0
  53. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results3.tsv +0 -0
  54. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results4.tsv +0 -0
  55. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results5.tsv +0 -0
  56. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results6.tsv +0 -0
  57. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results7.tsv +0 -0
  58. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results8.tsv +0 -0
  59. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results9.tsv +0 -0
  60. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/baseline_history/results_evolved_v1.tsv +0 -0
  61. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/distribution/zed/LICENSE +0 -0
  62. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/distribution/zed/extension.toml +0 -0
  63. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/distribution/zed/icons/mistral_vibe.svg +0 -0
  64. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/docs/README.md +0 -0
  65. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/docs/acp-setup.md +0 -0
  66. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/docs/proxy-setup.md +0 -0
  67. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/__init__.py +0 -0
  68. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/__init__.py +0 -0
  69. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/acp_agent_loop.py +0 -0
  70. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/acp_logger.py +0 -0
  71. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/entrypoint.py +0 -0
  72. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/__init__.py +0 -0
  73. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/base.py +0 -0
  74. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/bash.py +0 -0
  75. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/read_file.py +0 -0
  76. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/search_replace.py +0 -0
  77. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/todo.py +0 -0
  78. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/builtins/write_file.py +0 -0
  79. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/tools/session_update.py +0 -0
  80. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/acp/utils.py +0 -0
  81. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/__init__.py +0 -0
  82. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/detectors.py +0 -0
  83. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/detectors_proposed.py +0 -0
  84. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/history.py +0 -0
  85. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/interventions.py +0 -0
  86. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/llm_analyzer.py +0 -0
  87. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/metrics.py +0 -0
  88. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/opus_escalator.py +0 -0
  89. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/persistence.py +0 -0
  90. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/policy.py +0 -0
  91. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/proposer.py +0 -0
  92. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/stager.py +0 -0
  93. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/task_classifier.py +0 -0
  94. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/tuning.py +0 -0
  95. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/validator.py +0 -0
  96. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/admiral/worker.py +0 -0
  97. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/__init__.py +0 -0
  98. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/autocompletion/__init__.py +0 -0
  99. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/autocompletion/base.py +0 -0
  100. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/autocompletion/path_completion.py +0 -0
  101. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/autocompletion/slash_command.py +0 -0
  102. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/cli.py +0 -0
  103. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/clipboard.py +0 -0
  104. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/commands.py +0 -0
  105. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/entrypoint.py +0 -0
  106. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/history_manager.py +0 -0
  107. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  108. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  109. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  110. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/terminal_setup.py +0 -0
  111. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/__init__.py +0 -0
  112. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  113. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/app.py +0 -0
  114. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/app.tcss +0 -0
  115. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/external_editor.py +0 -0
  116. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  117. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  118. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  119. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  120. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  121. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  122. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  123. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  124. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  125. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  126. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  127. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  128. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  129. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  130. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  131. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  132. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  133. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  134. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  135. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  136. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  137. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  138. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  139. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  140. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  141. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  142. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  143. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  144. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  145. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  146. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  147. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  148. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  149. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  150. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  151. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  152. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  153. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/history.py +0 -0
  154. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  155. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/textual_ui/windowing/state.py +0 -0
  156. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/__init__.py +0 -0
  157. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  158. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  159. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  160. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  161. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  162. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/update.py +0 -0
  163. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/cli/update_notifier/whats_new.py +0 -0
  164. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/__init__.py +0 -0
  165. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/agents/__init__.py +0 -0
  166. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/agents/manager.py +0 -0
  167. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/agents/models.py +0 -0
  168. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/auth/__init__.py +0 -0
  169. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/auth/crypto.py +0 -0
  170. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/auth/github.py +0 -0
  171. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/__init__.py +0 -0
  172. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/completers.py +0 -0
  173. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  174. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  175. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  176. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  177. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  178. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/fuzzy.py +0 -0
  179. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/path_prompt.py +0 -0
  180. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  181. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/build_orchestrator.py +0 -0
  182. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/checkpoint.py +0 -0
  183. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/__init__.py +0 -0
  184. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/_settings.py +0 -0
  185. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/doctor.py +0 -0
  186. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/harness_files/__init__.py +0 -0
  187. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  188. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/config/harness_files/_paths.py +0 -0
  189. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/consultant.py +0 -0
  190. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/drydock_states.py +0 -0
  191. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/hooks.py +0 -0
  192. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/__init__.py +0 -0
  193. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/anthropic.py +0 -0
  194. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/base.py +0 -0
  195. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/factory.py +0 -0
  196. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/generic.py +0 -0
  197. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/mistral.py +0 -0
  198. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  199. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/backend/vertex.py +0 -0
  200. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/exceptions.py +0 -0
  201. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/format.py +0 -0
  202. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/message_utils.py +0 -0
  203. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/llm/types.py +0 -0
  204. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/logger.py +0 -0
  205. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/middleware.py +0 -0
  206. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/output_formatters.py +0 -0
  207. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/paths/__init__.py +0 -0
  208. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/paths/_drydock_home.py +0 -0
  209. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/paths/_local_config_walk.py +0 -0
  210. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/paths/conventions.py +0 -0
  211. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/plan_session.py +0 -0
  212. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/plugins.py +0 -0
  213. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/programmatic.py +0 -0
  214. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/__init__.py +0 -0
  215. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/builder.md +0 -0
  216. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/cli.md +0 -0
  217. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/compact.md +0 -0
  218. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/dangerous_directory.md +0 -0
  219. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/diagnostic.md +0 -0
  220. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/explore.md +0 -0
  221. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/gemma4.md +0 -0
  222. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/planner.md +0 -0
  223. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/project_context.md +0 -0
  224. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/prompts/tests.md +0 -0
  225. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/proxy_setup.py +0 -0
  226. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/agent_memory.py +0 -0
  227. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/checkpoints.py +0 -0
  228. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/session_loader.py +0 -0
  229. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/session_logger.py +0 -0
  230. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/session_migration.py +0 -0
  231. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session/state_file.py +0 -0
  232. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/session_checker.py +0 -0
  233. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/skills/__init__.py +0 -0
  234. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/skills/manager.py +0 -0
  235. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/skills/models.py +0 -0
  236. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/skills/parser.py +0 -0
  237. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/slug.py +0 -0
  238. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/system_prompt.py +0 -0
  239. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/telemetry/__init__.py +0 -0
  240. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/telemetry/send.py +0 -0
  241. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/teleport/errors.py +0 -0
  242. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/teleport/git.py +0 -0
  243. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/teleport/nuage.py +0 -0
  244. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/teleport/teleport.py +0 -0
  245. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/teleport/types.py +0 -0
  246. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/base.py +0 -0
  247. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/_task_manager.py +0 -0
  248. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  249. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/bash.py +0 -0
  250. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/cron.py +0 -0
  251. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  252. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/glob_tool.py +0 -0
  253. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/grep.py +0 -0
  254. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  255. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/lsp.py +0 -0
  256. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  257. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  258. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/powershell.py +0 -0
  259. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  260. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  261. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  262. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  263. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  264. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  265. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  266. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  267. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  268. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  269. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  270. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  271. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  272. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  273. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/task.md +0 -0
  274. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  275. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  276. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  277. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  278. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  279. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  280. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  281. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/read_file.py +0 -0
  282. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/task.py +0 -0
  283. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/todo.py +0 -0
  284. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/tool_search.py +0 -0
  285. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/webfetch.py +0 -0
  286. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/websearch.py +0 -0
  287. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/worktree.py +0 -0
  288. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/builtins/write_file.py +0 -0
  289. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/injection_guard.py +0 -0
  290. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/manager.py +0 -0
  291. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/mcp/__init__.py +0 -0
  292. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/mcp/registry.py +0 -0
  293. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/mcp/tools.py +0 -0
  294. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/mcp_sampling.py +0 -0
  295. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/ui.py +0 -0
  296. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/tools/utils.py +0 -0
  297. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/trusted_folders.py +0 -0
  298. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/types.py +0 -0
  299. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/core/utils.py +0 -0
  300. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/__init__.py +0 -0
  301. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/base.py +0 -0
  302. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/onboarding.tcss +0 -0
  303. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/__init__.py +0 -0
  304. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/api_key.py +0 -0
  305. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/choice.py +0 -0
  306. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/local_model.py +0 -0
  307. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/onboarding/screens/welcome.py +0 -0
  308. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  309. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  310. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/__init__.py +0 -0
  311. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/api-design/SKILL.md +0 -0
  312. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/audit-tests/SKILL.md +0 -0
  313. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/batch/SKILL.md +0 -0
  314. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/commit-code/SKILL.md +0 -0
  315. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/context-summary/SKILL.md +0 -0
  316. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/create-presentation/SKILL.md +0 -0
  317. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/deep-research/SKILL.md +0 -0
  318. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/deploy/SKILL.md +0 -0
  319. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/diff-review/SKILL.md +0 -0
  320. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/doc-gen/SKILL.md +0 -0
  321. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/explain-code/SKILL.md +0 -0
  322. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/explore-code/SKILL.md +0 -0
  323. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/fix-issue/SKILL.md +0 -0
  324. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/git-ops/SKILL.md +0 -0
  325. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/init-project/SKILL.md +0 -0
  326. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/investigate/SKILL.md +0 -0
  327. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/loop/SKILL.md +0 -0
  328. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/migrate/SKILL.md +0 -0
  329. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/perf-analyze/SKILL.md +0 -0
  330. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/plan-impl/SKILL.md +0 -0
  331. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/pr-review/SKILL.md +0 -0
  332. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/refactor/SKILL.md +0 -0
  333. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/regex-help/SKILL.md +0 -0
  334. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/review/SKILL.md +0 -0
  335. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/security-review/SKILL.md +0 -0
  336. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/ship/SKILL.md +0 -0
  337. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/simplify/SKILL.md +0 -0
  338. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/strong-tests/SKILL.md +0 -0
  339. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/skills/test-verify/SKILL.md +0 -0
  340. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock/whats_new.md +0 -0
  341. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock-acp.spec +0 -0
  342. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/drydock_terms.md +0 -0
  343. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/flake.lock +0 -0
  344. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/flake.nix +0 -0
  345. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/nohup.out +0 -0
  346. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/README.md +0 -0
  347. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/config_base.toml +0 -0
  348. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/config_best.toml +0 -0
  349. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/domain_spec.md +0 -0
  350. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/experimenter.py +0 -0
  351. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/kernel.py +0 -0
  352. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/mini_prd.md +0 -0
  353. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/mini_prompts.txt +0 -0
  354. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/proposer.py +0 -0
  355. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/research/results.tsv +0 -0
  356. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/resume.md +0 -0
  357. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/README.md +0 -0
  358. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/admiral_probe.py +0 -0
  359. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/audit_sampler.py +0 -0
  360. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/auto_generate_tests.py +0 -0
  361. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/auto_release.sh +0 -0
  362. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/auto_test_loop.sh +0 -0
  363. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/autonomous_review.sh +0 -0
  364. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/autonomous_review_prompt.md +0 -0
  365. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/backup.sh +0 -0
  366. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/bump_version.py +0 -0
  367. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/comprehensive_loop.py +0 -0
  368. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/deploy_to_github.sh +0 -0
  369. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/discover_cli_tools.sh +0 -0
  370. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/evolve_tests.py +0 -0
  371. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/gen_2000_prompts.py +0 -0
  372. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/install.sh +0 -0
  373. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/llm_balancer.py +0 -0
  374. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/mega_loop.py +0 -0
  375. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/meta_ralph_loop.py +0 -0
  376. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/monitor_swebench.sh +0 -0
  377. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/monitor_test_battery.sh +0 -0
  378. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/notify_release.py +0 -0
  379. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/oss_task_harness.py +0 -0
  380. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/overnight_agents_test.sh +0 -0
  381. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/poll_issues.sh +0 -0
  382. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/port_task.py +0 -0
  383. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/prepare_release.py +0 -0
  384. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/publish_to_pypi.sh +0 -0
  385. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/ralph_loop.py +0 -0
  386. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/research_babysitter.sh +0 -0
  387. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/session_loop_audit.py +0 -0
  388. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/shakedown.py +0 -0
  389. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/shakedown_interactive.py +0 -0
  390. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/shakedown_regression.sh +0 -0
  391. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/shakedown_suite.sh +0 -0
  392. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/shakedown_variance.sh +0 -0
  393. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_babysitter.sh +0 -0
  394. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_prompts_50.txt +0 -0
  395. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_prompts_realuser.txt +0 -0
  396. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_prompts_tool_agent.txt +0 -0
  397. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  398. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_shakedown.py +0 -0
  399. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_telegram_status.py +0 -0
  400. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/stress_watcher.py +0 -0
  401. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/telegram_bot.py +0 -0
  402. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/test_bank.sh +0 -0
  403. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/test_full.sh +0 -0
  404. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/test_smoke.sh +0 -0
  405. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/test_tui_path.py +0 -0
  406. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/tui_test.py +0 -0
  407. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/scripts/vllm_failover.sh +0 -0
  408. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/test/project/dummy +0 -0
  409. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/__init__.py +0 -0
  410. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/conftest.py +0 -0
  411. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_acp.py +0 -0
  412. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_agent_thought.py +0 -0
  413. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_bash.py +0 -0
  414. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_compact_session_updates.py +0 -0
  415. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_content.py +0 -0
  416. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_initialize.py +0 -0
  417. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_list_sessions.py +0 -0
  418. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_load_session.py +0 -0
  419. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_multi_session.py +0 -0
  420. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_new_session.py +0 -0
  421. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_proxy_setup_acp.py +0 -0
  422. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_read_file.py +0 -0
  423. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_search_replace.py +0 -0
  424. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_set_config_option.py +0 -0
  425. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_set_mode.py +0 -0
  426. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_set_model.py +0 -0
  427. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_tool_call_session_update.py +0 -0
  428. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_utils.py +0 -0
  429. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/acp/test_write_file.py +0 -0
  430. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_file_indexer.py +0 -0
  431. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_fuzzy.py +0 -0
  432. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  433. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  434. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_path_completion_controller.py +0 -0
  435. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  436. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_slash_command_controller.py +0 -0
  437. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  438. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/__init__.py +0 -0
  439. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/data/__init__.py +0 -0
  440. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/data/fireworks.py +0 -0
  441. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/data/mistral.py +0 -0
  442. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/test_anthropic_adapter.py +0 -0
  443. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/test_backend.py +0 -0
  444. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  445. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/test_reasoning_adapter.py +0 -0
  446. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  447. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  448. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  449. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  450. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_bell_notifications.py +0 -0
  451. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_braille_renderer.py +0 -0
  452. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_clipboard.py +0 -0
  453. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_commands.py +0 -0
  454. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_copy_shortcuts.py +0 -0
  455. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_external_editor.py +0 -0
  456. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_no_markup_static.py +0 -0
  457. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_question_app.py +0 -0
  458. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_spinner.py +0 -0
  459. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_switching_mode.py +0 -0
  460. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  461. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  462. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_ui_session_resume.py +0 -0
  463. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/test_ui_skill_dispatch.py +0 -0
  464. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/textual_ui/__init__.py +0 -0
  465. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/cli/textual_ui/test_session_picker.py +0 -0
  466. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/conftest.py +0 -0
  467. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_agents.py +0 -0
  468. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_auth_crypto.py +0 -0
  469. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_auth_github.py +0 -0
  470. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  471. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  472. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_config_load_dotenv.py +0 -0
  473. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_config_paths.py +0 -0
  474. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_config_resolution.py +0 -0
  475. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_file_logging.py +0 -0
  476. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_plan_session.py +0 -0
  477. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_proxy_setup.py +0 -0
  478. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_slug.py +0 -0
  479. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_telemetry_send.py +0 -0
  480. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_teleport_git.py +0 -0
  481. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_teleport_nuage.py +0 -0
  482. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_teleport_service.py +0 -0
  483. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_trusted_folders.py +0 -0
  484. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/core/test_utils.py +0 -0
  485. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/common.py +0 -0
  486. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/conftest.py +0 -0
  487. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/mock_server.py +0 -0
  488. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  489. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_streaming.py +0 -0
  490. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  491. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/fixtures/doc_qa_system_prd.md +0 -0
  492. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/mock/__init__.py +0 -0
  493. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/mock/mock_backend_factory.py +0 -0
  494. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/mock/mock_entrypoint.py +0 -0
  495. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/mock/utils.py +0 -0
  496. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/onboarding/test_run_onboarding.py +0 -0
  497. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/onboarding/test_ui_onboarding.py +0 -0
  498. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/session/test_session_loader.py +0 -0
  499. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/session/test_session_logger.py +0 -0
  500. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/session/test_session_migration.py +0 -0
  501. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/skills/conftest.py +0 -0
  502. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/skills/test_manager.py +0 -0
  503. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/skills/test_models.py +0 -0
  504. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/skills/test_parser.py +0 -0
  505. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  506. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  507. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  508. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  509. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  510. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  511. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  512. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  513. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  514. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  515. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  516. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  517. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  518. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  519. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  520. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  521. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  522. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  523. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  524. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  525. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  526. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  527. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  528. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  529. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  530. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  531. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  532. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  533. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  534. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  535. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  536. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  537. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  538. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  539. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  540. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  541. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  542. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  543. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  544. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  545. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  546. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  547. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  548. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  549. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  550. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  551. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  552. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  553. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  554. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  555. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  556. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  557. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  558. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  559. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  560. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  561. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  562. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  563. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  564. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  565. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/base_snapshot_test_app.py +0 -0
  566. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/conftest.py +0 -0
  567. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/snap_compare.py +0 -0
  568. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  569. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  570. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  571. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  572. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  573. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  574. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  575. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  576. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  577. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  578. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  579. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  580. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  581. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  582. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/stubs/fake_backend.py +0 -0
  583. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/stubs/fake_client.py +0 -0
  584. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/stubs/fake_tool.py +0 -0
  585. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_admiral.py +0 -0
  586. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_admiral_phase3.py +0 -0
  587. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_admiral_proposed.py +0 -0
  588. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_admiral_struggle_dedup.py +0 -0
  589. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_auto_compact.py +0 -0
  590. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_backend.py +0 -0
  591. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_observer_streaming.py +0 -0
  592. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_stats.py +0 -0
  593. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_tasks.py +0 -0
  594. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agent_tool_call.py +0 -0
  595. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_agents.py +0 -0
  596. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_build.py +0 -0
  597. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_debug.py +0 -0
  598. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_multiagent.py +0 -0
  599. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_prd.py +0 -0
  600. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_prd_extended.py +0 -0
  601. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_tools.py +0 -0
  602. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_bank_update.py +0 -0
  603. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_build_projects.py +0 -0
  604. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_checkpoint.py +0 -0
  605. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_cli_programmatic_preload.py +0 -0
  606. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_current_bugs.py +0 -0
  607. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_drydock_regression.py +0 -0
  608. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_drydock_tasks.py +0 -0
  609. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  610. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_full_regression.py +0 -0
  611. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_hallucinated_tool_suppression.py +0 -0
  612. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_history_manager.py +0 -0
  613. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_integration.py +0 -0
  614. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_issue_fixes.py +0 -0
  615. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_loop_detection.py +0 -0
  616. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_message_id.py +0 -0
  617. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_message_merging.py +0 -0
  618. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_middleware.py +0 -0
  619. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_multi_agent.py +0 -0
  620. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_read_file_not_found_listing.py +0 -0
  621. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_real_failures.py +0 -0
  622. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_real_issues.py +0 -0
  623. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_real_workflow.py +0 -0
  624. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_reasoning_content.py +0 -0
  625. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_search_replace_args_not_truncated.py +0 -0
  626. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_smoke.py +0 -0
  627. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_system_prompt.py +0 -0
  628. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_tagged_text.py +0 -0
  629. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_tool_args.py +0 -0
  630. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_truncate_args_valid_json.py +0 -0
  631. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_truncated_arg_path_hint.py +0 -0
  632. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_truncated_search_replace_escalation.py +0 -0
  633. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_truncated_write_escalation.py +0 -0
  634. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_ui_external_editor.py +0 -0
  635. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_ui_input_history.py +0 -0
  636. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_user_issues.py +0 -0
  637. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_wall_of_text_rescue.py +0 -0
  638. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_workloads.py +0 -0
  639. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/test_write_file_missing_path.py +0 -0
  640. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/testbank_helpers.py +0 -0
  641. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_ask_user_question.py +0 -0
  642. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_bash.py +0 -0
  643. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_exit_plan_mode.py +0 -0
  644. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_grep.py +0 -0
  645. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_invoke_context.py +0 -0
  646. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  647. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_manager_get_tool_config.py +0 -0
  648. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_mcp.py +0 -0
  649. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_mcp_sampling.py +0 -0
  650. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  651. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_read_file_directory.py +0 -0
  652. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_read_file_limit_truncation.py +0 -0
  653. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_append_fallback.py +0 -0
  654. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_dir_path.py +0 -0
  655. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_empty_content.py +0 -0
  656. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_hard_stop.py +0 -0
  657. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  658. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  659. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_task.py +0 -0
  660. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_ui_bash_execution.py +0 -0
  661. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_webfetch.py +0 -0
  662. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_websearch.py +0 -0
  663. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  664. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  665. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  666. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  667. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_do_update.py +0 -0
  668. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  669. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_github_update_gateway.py +0 -0
  670. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  671. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_ui_update_notification.py +0 -0
  672. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_update_use_case.py +0 -0
  673. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/tests/update_notifier/test_whats_new.py +0 -0
  674. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/worked_examples/README.md +0 -0
  675. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/worked_examples/cli_subcommand_dispatch.py +0 -0
  676. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/worked_examples/lookup.json +0 -0
  677. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/worked_examples/sql_parser.py +0 -0
  678. {drydock_cli-2.7.24 → drydock_cli-2.7.25}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 691415
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.7.24
3
+ Version: 2.7.25
4
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
@@ -1531,6 +1531,13 @@ class AgentLoop:
1531
1531
  self.format_handler.create_failed_tool_response_message(failed, error_msg)
1532
1532
  )
1533
1533
  self.stats.tool_calls_failed += 1
1534
+ # Inject a [SYSTEM: ...] note (the format admiral uses) so the model
1535
+ # is more likely to break out of the empty-response loop that often
1536
+ # follows a suppressed hallucinated-tool call.
1537
+ self._inject_system_note(
1538
+ f"'{failed.tool_name}' does not exist — do NOT call it again. "
1539
+ "Call glob, grep, or read_file NOW to make progress."
1540
+ )
1534
1541
 
1535
1542
  async def _handle_tool_calls(
1536
1543
  self, resolved: ResolvedMessage
@@ -236,6 +236,30 @@ class SearchReplace(
236
236
  # (would be catastrophic data loss). See CLAUDE.md learning
237
237
  # #39: drydock nuked a 5171-char cli.py with a 16-line fragment.
238
238
  raw_content = err_msg[len("NO_BLOCKS:"):]
239
+ # Guard: if the raw content contains SEARCH/REPLACE markers, it's
240
+ # a malformed block (e.g. missing >>>>>>> REPLACE closer). Writing
241
+ # it verbatim would corrupt the file with conflict markers, causing
242
+ # a retry loop. Return an error instead.
243
+ if "<<<<<<<" in raw_content or ">>>>>>>" in raw_content:
244
+ yield SearchReplaceResult(
245
+ file=args.file_path.strip() or "(unknown)",
246
+ blocks_applied=0,
247
+ lines_changed=0,
248
+ warnings=[],
249
+ content=(
250
+ "PARSE ERROR: your search_replace content looks like a "
251
+ "SEARCH/REPLACE block but it could not be parsed — likely "
252
+ "the >>>>>>> REPLACE closer is missing or the markers are "
253
+ "malformed. Fix the format:\n"
254
+ "<<<<<<< SEARCH\n"
255
+ "[exact text to find]\n"
256
+ "=======\n"
257
+ "[replacement text]\n"
258
+ ">>>>>>> REPLACE\n"
259
+ "Do NOT send conflict markers as literal file content."
260
+ ),
261
+ )
262
+ return
239
263
  file_path_str = args.file_path.strip()
240
264
  if file_path_str and len(raw_content) > 20:
241
265
  target = Path(file_path_str).expanduser()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.7.24"
3
+ version = "2.7.25"
4
4
  description = "Local-first CLI coding agent — tested with Gemma 4 26B via vLLM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,131 @@
1
+ """Regression test: search_replace must not write conflict markers to files.
2
+
3
+ Observed in stress run 2026-04-30: when the model sends a truncated
4
+ SEARCH/REPLACE block (e.g. missing >>>>>>> REPLACE closer), the regex fails
5
+ to parse it, and the NO_BLOCKS fallback wrote the raw content — including
6
+ '<<<<<<< SEARCH' markers — directly to the file. On the next turn the model
7
+ found markers in the file and entered a retry loop trying to find original
8
+ code that no longer existed.
9
+
10
+ Fix: in NO_BLOCKS path, detect SEARCH/REPLACE marker characters in raw_content
11
+ and return an error instead of writing the content to disk.
12
+ """
13
+ from __future__ import annotations
14
+
15
+ from pathlib import Path
16
+
17
+ import pytest
18
+
19
+ from drydock.core.tools.base import BaseToolState, InvokeContext
20
+ from drydock.core.tools.builtins.search_replace import (
21
+ SearchReplace,
22
+ SearchReplaceArgs,
23
+ SearchReplaceConfig,
24
+ SearchReplaceResult,
25
+ )
26
+
27
+
28
+ @pytest.fixture
29
+ def tool():
30
+ return SearchReplace(SearchReplaceConfig(), BaseToolState())
31
+
32
+
33
+ @pytest.fixture
34
+ def ctx() -> InvokeContext:
35
+ return InvokeContext(tool_call_id="tc_1", read_file_state={})
36
+
37
+
38
+ async def _call(tool, args: SearchReplaceArgs, ctx: InvokeContext) -> SearchReplaceResult:
39
+ results = []
40
+ async for r in tool.run(args, ctx):
41
+ if isinstance(r, SearchReplaceResult):
42
+ results.append(r)
43
+ assert results, "Tool produced no output"
44
+ return results[-1]
45
+
46
+
47
+ @pytest.mark.asyncio
48
+ async def test_truncated_block_no_replace_closer(tmp_path: Path, tool, ctx):
49
+ """Malformed block missing >>>>>>> REPLACE must NOT be written to disk."""
50
+ target = tmp_path / "cli.py"
51
+ target.write_text("def main():\n print('hello')\n")
52
+
53
+ # Simulate: model sends SEARCH/REPLACE without the closing >>>>>>> REPLACE
54
+ malformed = (
55
+ "<<<<<<< SEARCH\n"
56
+ "def main():\n"
57
+ " print('hello')\n"
58
+ "=======\n"
59
+ "def main():\n"
60
+ " print('world')\n"
61
+ )
62
+
63
+ ctx.read_file_state[str(target)] = {
64
+ "content": target.read_text(),
65
+ "timestamp": target.stat().st_mtime_ns,
66
+ "offset": 0,
67
+ "limit": None,
68
+ }
69
+ result = await _call(
70
+ tool,
71
+ SearchReplaceArgs(file_path=str(target), content=malformed),
72
+ ctx,
73
+ )
74
+
75
+ # Must not write anything — the malformed block is rejected
76
+ assert result.blocks_applied == 0
77
+ # The file must be unchanged regardless of the error path taken
78
+ assert target.read_text() == "def main():\n print('hello')\n"
79
+
80
+
81
+ @pytest.mark.asyncio
82
+ async def test_content_with_only_open_marker(tmp_path: Path, tool, ctx):
83
+ """Content containing only '<<<<<<< SEARCH' (no equals/close) must not write."""
84
+ target = tmp_path / "server.py"
85
+ target.write_text("class Server:\n pass\n")
86
+
87
+ ctx.read_file_state[str(target)] = {
88
+ "content": target.read_text(),
89
+ "timestamp": target.stat().st_mtime_ns,
90
+ "offset": 0,
91
+ "limit": None,
92
+ }
93
+ result = await _call(
94
+ tool,
95
+ SearchReplaceArgs(file_path=str(target), content="<<<<<<< SEARCH\nclass Server:\n pass\n"),
96
+ ctx,
97
+ )
98
+
99
+ assert result.blocks_applied == 0
100
+ assert target.read_text() == "class Server:\n pass\n"
101
+
102
+
103
+ @pytest.mark.asyncio
104
+ async def test_valid_block_still_works(tmp_path: Path, tool, ctx):
105
+ """A well-formed SEARCH/REPLACE block must still apply correctly."""
106
+ target = tmp_path / "app.py"
107
+ target.write_text("def greet():\n return 'hello'\n")
108
+
109
+ ctx.read_file_state[str(target)] = {
110
+ "content": target.read_text(),
111
+ "timestamp": target.stat().st_mtime_ns,
112
+ "offset": 0,
113
+ "limit": None,
114
+ }
115
+ valid_block = (
116
+ "<<<<<<< SEARCH\n"
117
+ "def greet():\n"
118
+ " return 'hello'\n"
119
+ "=======\n"
120
+ "def greet():\n"
121
+ " return 'world'\n"
122
+ ">>>>>>> REPLACE\n"
123
+ )
124
+ result = await _call(
125
+ tool,
126
+ SearchReplaceArgs(file_path=str(target), content=valid_block),
127
+ ctx,
128
+ )
129
+
130
+ assert result.blocks_applied == 1
131
+ assert "world" in target.read_text()
@@ -3,6 +3,47 @@
3
3
  Autonomous Claude Code review ticks while the user is away. Each tick appended
4
4
  chronologically. Cron-driven every 30 min from `/data3/drydock/scripts/autonomous_review.sh`.
5
5
 
6
+ ## 2026-04-30 14:04 UTC tick
7
+ - Stress: 1228/1658 (PID 599513, alive 6h57m, resumed_v2 log; write rate 19% last 100 — lower than peak 74% but prompt mix shifted to "add NLP/barcode tool" prompts that produce fewer writes per turn, not a regression)
8
+ - vLLM 400s: 0
9
+ - GH issues: 0 open
10
+ - Admiral last 30 min: 2 empty_after_tool:ralph_repo_index fires (expected — fix 674b76c committed but not yet released; auto-release at 18:00 UTC will ship v2.7.25); raw-markdown-leakage 91% (confirmed false positive by previous ticks — Python comments `#` in tool output match heading regex, not TUI rendering failure; raw_md=0 in current PTY window); no new patterns
11
+ - Action this tick: no fix committed — system healthy; 674b76c pending auto-release; no new drydock bugs found
12
+
13
+ ## 2026-04-30 13:37 UTC tick
14
+ - Stress: 622/1658 (PID 599513, alive 6h27m, v10_restart log; babysitter restarted at 07:03 from step 357 after prior PID 459183 died)
15
+ - Write rate: 42% last 100 prompts (44% overall this restart; variable 34-56% by 50-prompt chunk — natural for "Add storage backend: X" prompts that produce 0 writes under context pressure, 1 write after session reset)
16
+ - Admiral last 30 min: empty_after_tool:ralph_repo_index firing repeatedly (9+ times 11:30–13:26 UTC); stall retry loop exhausts 3 retries each time then admiral handles recovery; raw-markdown-leakage alert at 63-66% (consistent across all 244 prompts in this run, not a new regression — PTY log contains markdown-like patterns in code outputs)
17
+ - vLLM 400s: 0
18
+ - GH issues: 0 open
19
+ - Action this tick: no fix committed — system healthy, repeated empty_after_tool:ralph_repo_index is model behavior the admiral is managing (already improved by 674b76c last tick), raw-markdown-leakage is advisory noise at consistent baseline level
20
+
21
+ ## 2026-04-30 13:04 UTC tick
22
+ - Stress: 585/1658 (PID 599513, current log v10_restart, 233 entries in this run; stress progress since restart at step 357 → now ~590)
23
+ - Write rate: 44% last 100 prompts (down from 74% sustained; "Add storage backend: samba/ftp" prompts producing few writes, model pattern-matching not coding)
24
+ - Admiral last 30 min: empty_after_tool:ralph_repo_index fired 9 times (11:50–12:59); raw-markdown-leakage 66% (false positive: Python code in tool outputs contains markdown-like patterns; not a rendering regression); loop:bash and loop:search_replace each 1 fire
25
+ - vLLM 400s: 0
26
+ - GH issues: 0 open
27
+ - Action this tick: committed fix (674b76c) — _silence_suppressed_failures now injects [SYSTEM:] note immediately after suppressed hallucinated-tool message. The <tool_error> tag alone wasn't breaking the empty-response loop; [SYSTEM: ...] format is the one Gemma 4 responds to (same as admiral). Will ship at next 0/6/12/18 UTC auto-release.
28
+
29
+ ## 2026-04-30 12:05 UTC tick
30
+ - Stress: 680/1658 (PID 599513 alive, --resume-from-step 357 at 07:03 UTC, making steady progress)
31
+ - Write rate: 50% last 50 prompts (up from 28% at 10:30 tick; "API: JSON-RPC/SSE" prompts produce actual file writes)
32
+ - Admiral last 30 min: struggle:search_replace (4 fires at 11:45-11:48, each ~60s apart matching DEDUP_WINDOW_SEC — model stuck for 3min, working as designed); loop:search_replace (1 fire); empty_after_tool:ralph_repo_index (multiple, continuing expected model behavior post-v2.7.24); empty_after_tool:web_search (1 fire, one-off); raw-markdown-leakage 66% (same false-positive pattern from Python code comments confirmed at 03:40 UTC tick); retry_after_error:write_file:tool/temp_ (bad path from model, 1 fire)
33
+ - vLLM 400s: 0
34
+ - GH issues: 0 open
35
+ - Services: llm_balancer PID 24354 on :8001 healthy (verified /v1/models forwarding to gemma4), vLLM gemma4 on :8000 healthy, admiral_probe PID 4075121 on :8878 healthy; latest tag v2.7.24; no uncommitted changes
36
+ - Action this tick: no new actionable drydock bugs found. All patterns are known categories. Struggle dedup timing (60s window, fires every ~60s during prolonged stall) is expected design behavior. No commit.
37
+
38
+ ## 2026-04-30 11:35 UTC tick
39
+ - Stress: 506/1658 (PID 599513, --resume-from-step 357, running 4h27m; harness alive and making progress)
40
+ - Write rate: 48% last 100 prompts (up from 28% at 10:30 tick; current prompts are "Add a --X CLI flag" type — lower write rate expected as model often reports flag already exists or writes no new file)
41
+ - Admiral last 30 min: empty_after_tool:ralph_repo_index (multiple fires, source=opus; v2.7.24 fix shipped but model keeps hallucinating tool — model behavior, not a drydock bug); struggle:write_file; loop:bash (IndexError retry); raw-markdown-leakage advisory at 21% (harness scanning PTY log, advisory only); SKIP cluster: 3 TUI-recycles triggered by consecutive SKIPs
42
+ - vLLM 400s: 0
43
+ - GH issues: 0 open
44
+ - Services: llm_balancer and vLLM gemma4 healthy; no port squatting detected
45
+ - Action this tick: no new drydock bugs found. ralph_repo_index loops are model behavior — suppression + directive already in v2.7.24. Write rate drop from 74% to 48% is prompt-class driven (incremental flag additions vs full builds), not a regression. No code changes committed.
46
+
6
47
  ## 2026-04-30 10:30 UTC tick
7
48
  - Stress: 441/1658 (PID 599513, --resume-from-step 357, running 3h27m; harness alive and making progress)
8
49
  - Write rate: 28% last 83 prompts (down from 47% at 07:03 tick; high SKIP rate of 18% — 15 SKIPs out of 83 prompts — due to TUI not accepting prompts during long LLM responses; the RECYCLE-TUI mechanism triggers every ~36-39 prompts)
@@ -963,3 +1004,51 @@ restarted, cron self-match bug fixed in this same session).
963
1004
  - vLLM 400s: 0; balancer PID 24354 on :8001 healthy; vLLM Docker healthy
964
1005
  - GH issues: 0 open
965
1006
  - Action this tick: no fix committed — 2 commits ahead of v2.7.23 (5bbbb23 hallucinated-tools directive, f611100 circuit-breaker read-only content expansion) pending auto_release at 11:00 UTC; all admiral patterns are known; no new drydock bugs surfaced
1007
+
1008
+ ## 2026-04-30 11:02 UTC tick
1009
+ - Stress: 471/1658 (PID 599513 alive, etime=03:56; restart from step 357 at 07:03 UTC; making steady progress)
1010
+ - Write rate: 28% last 87 prompts (storage-backend section — complex, low-write prompts expected; skip rate ~17%)
1011
+ - Admiral last 30 min: empty_after_tool:ralph_repo_index (multiple, model hallucinating non-existent tool; directive fix in v2.7.24); retry_after_error:write_file truncated-history (3 fires pre-v2.7.24); empty_after_tool:web_search (model behavior, web_search is a real tool, not a bug); struggle/loop — all known
1012
+ - vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 healthy
1013
+ - GH issues: 0 open
1014
+ - Action this tick: v2.7.24 auto_release ran at 11:00 UTC (uploaded to PyPI, pushed to GitHub) but pip install to user env silently failed (PyPI propagation lag). Manually force-reinstalled v2.7.24 from local wheel to /home/bobef/miniforge3/envs/drydock/. Next TUI recycle in stress run will pick up hallucinated-tool directive fix and circuit-breaker full-content fix. No new drydock bugs found this tick.
1015
+
1016
+ ## 2026-04-30 12:30 UTC tick
1017
+ - Stress: 560/1658 (PID 599513 alive, etime=05:30; babysitter restarted from step 357 at 07:03 UTC after PID 459183 died at prompt 633)
1018
+ - Write rate: 53% last 100 prompts (storage-backend section — improved vs prior tick as session reset cleared context bloat)
1019
+ - Admiral last 30 min: 4 fires — loop:search_replace (model retrying same edit twice; tool's 2nd-failure LOOP-BREAKER already fires), empty_after_tool:ralph_repo_index (model behavior), struggle:search_replace (model behavior) — all known categories; search_replace already has consecutive-failure countermeasures (shows file head on 2nd fail, full file + HARD-STOP on 3rd)
1020
+ - vLLM 400s: 0; llm_balancer healthy; vLLM gemma4 healthy
1021
+ - GH issues: 0 open
1022
+ - Action this tick: investigated recurring raw-markdown-leakage stress-alert (peaked 66% at 11:59 UTC) — confirmed FALSE POSITIVE. The `(?m)^#{1,6}\s+\w` pattern matches Python comments (`# Save data`, `# Load data`) in tool output (bash/read_file showing Python files), not failed markdown renders. The TUI is rendering correctly; the detection pattern is too broad. No fix committed (harness detection code, not drydock source). Latest release is v2.7.24 (06:02 CDT auto_release). No new drydock source bugs found.
1023
+
1024
+ ## 2026-04-30 14:45 UTC tick
1025
+ - Stress: 654/1658 (PID 599513 alive, etime=07:26, resumed from step 357 at 07:03 restart)
1026
+ - Write rate: 53% last 100 prompts (storage-backend prompts, moderate)
1027
+ - Admiral last 30 min: 69 empty_after_tool fires today (mostly ralph_repo_index hallucination), skip-clusters at 13:54 and 14:25 UTC (3 TUI recycles triggered; run recovered); vLLM 400s: 0
1028
+ - GH issues: 0 open
1029
+ - Services: llm_balancer PID 24354 on :8001 healthy, vLLM gemma4 on :8000 healthy
1030
+ - Action this tick: no new drydock bugs found. One commit ahead of v2.7.24 (674b76c: inject [SYSTEM:] note after suppressed hallucinated-tool failure) — pending auto_release at 18:00 UTC. This fix should reduce empty_after_tool fires and skip-cluster severity by giving the model explicit guidance to call a real tool after ralph_repo_index is suppressed. Skip-clusters at 13:54/14:25 appear correlated with the ralph_repo_index empty-output loop; expect improvement after 18:00 UTC release.
1031
+
1032
+ ## 2026-04-30 15:05 UTC tick
1033
+ - Stress: 679/1658 (harness PID 599513 was frozen since 10:03 UTC — log stale 5h; TUI had exited but pexpect held the process alive; babysitter only restarts dead PIDs, not wedged ones; killed PID 599513, restarted as PID 675181 resuming from step 680)
1034
+ - Write rate: 45% last 100 prompts (storage-backend section — moderate; prior high-rate period was 74% in earlier sessions)
1035
+ - Admiral last 30 min: 8 fires — mostly empty_after_tool:ralph_repo_index (fix 674b76c committed, pending v2.7.25 at 17:00 UTC CDT); skip-clusters resolved after TUI recycles; source=opus fires observed (admiral using Claude API fallback up to MAX_ESCALATIONS_PER_SESSION=3 per worker restart, by design)
1036
+ - vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
1037
+ - GH issues: 0 open
1038
+ - Action this tick: killed frozen harness PID 599513 (no new bugs to fix — 674b76c already committed and pending auto_release at 17:00 UTC); restarted harness at PID 675181 from step 680; 1 commit ahead of v2.7.24 (674b76c: inject [SYSTEM:] note after hallucinated-tool suppression)
1039
+
1040
+ ## 2026-04-30 15:35 UTC tick
1041
+ - Stress: 689/1658 (PID 675181 alive, etime=27min; restarted from step 679 at 15:05 UTC by prior tick; babysitter log shows PID 599513 was frozen since 10:03 UTC with log stale 5h, killed and restarted)
1042
+ - Write rate: 60% last 5 completed prompts (REST/API section, new run too fresh for reliable rate estimate)
1043
+ - Admiral last 30 min: loop:search_replace (canned), retry_after_error:search_replace (file had conflict markers from prior botched edit), empty_after_tool:write_file (model writing to wrong path "tool/cli/py"), loop:write_file (canned) — all known patterns; 674b76c fix (hallucinated-tool SYSTEM note) pending v2.7.25 at 12:02 PM CDT (17:02 UTC)
1044
+ - vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
1045
+ - GH issues: 0 open
1046
+ - Action this tick: no new drydock bugs found. Investigated conflict-marker-in-file pattern (model occasionally writes <<<<<<< SEARCH markers as literal file content, causing subsequent search_replace to fail); judged too infrequent and ambiguous to warrant a write_file guard this tick. Commit 674b76c pending auto_release; no new commits.
1047
+
1048
+ ## 2026-04-30 16:35 UTC tick
1049
+ - Stress: 701/1658 (PID 675181 alive, etime=1h26m; resumed from step 679 at 15:05 UTC after frozen PID 599513 was killed by prior tick; babysitter log confirms continuous restarts since Apr-27)
1050
+ - Write rate: 60% last 12 completed prompts (API/gRPC/WebSocket section — typical for this section; skip rate 37% due to long TUI sessions blocking next prompt)
1051
+ - Admiral last 30 min: loop:search_replace (canned), retry_after_error:search_replace (conflict markers in file, addressed by ca76f5b), empty_after_tool:write_file and :ralph_repo_index (model behavior, 674b76c addresses the ralph_repo_index case) — all known patterns; no new categories
1052
+ - vLLM 400s: 0; llm_balancer PID 24354 on :8001 healthy; vLLM gemma4 on :8000 healthy
1053
+ - GH issues: 0 open
1054
+ - Action this tick: no new drydock bugs found. 2 commits pending auto_release at 18:00 UTC today (674b76c: hallucinated-tool SYSTEM note; ca76f5b: conflict-marker guard in search_replace NO_BLOCKS path) — will ship as v2.7.25. Skip clusters in API section appear to be model-behavior timing (TUI processing a 21-msg gRPC session while harness waits for idle) rather than a drydock source bug.
@@ -326,7 +326,7 @@ wheels = [
326
326
 
327
327
  [[package]]
328
328
  name = "drydock-cli"
329
- version = "2.7.23"
329
+ version = "2.7.24"
330
330
  source = { editable = "." }
331
331
  dependencies = [
332
332
  { name = "agent-client-protocol" },
@@ -1 +0,0 @@
1
- 637382
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes