drydock-cli 2.7.37__tar.gz → 2.7.38__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 (743) hide show
  1. drydock_cli-2.7.38/.auto_release.lock +1 -0
  2. drydock_cli-2.7.38/HLE_PRD.md +193 -0
  3. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/PKG-INFO +1 -1
  4. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/bash.py +25 -0
  5. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/pyproject.toml +1 -1
  6. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/hle_eval.py +107 -22
  7. drydock_cli-2.7.38/tests/tools/test_bash_heredoc_confirmation.py +76 -0
  8. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/trip_log.md +104 -0
  9. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/uv.lock +1 -1
  10. drydock_cli-2.7.37/.auto_release.lock +0 -1
  11. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.claude/scheduled_tasks.lock +0 -0
  12. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/CODEOWNERS +0 -0
  13. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  14. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  15. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/workflows/build-and-upload.yml +0 -0
  17. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/workflows/ci.yml +0 -0
  18. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/workflows/issue-labeler.yml +0 -0
  19. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.github/workflows/release.yml +0 -0
  20. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.gitignore +0 -0
  21. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.perf_baseline_done +0 -0
  22. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.pre-commit-config.yaml +0 -0
  23. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.python-version +0 -0
  24. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.typos.toml +0 -0
  25. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.vscode/extensions.json +0 -0
  26. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.vscode/launch.json +0 -0
  27. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/.vscode/settings.json +0 -0
  28. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/AGENTS.md +0 -0
  29. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/Admiral.md +0 -0
  30. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/BASELINE_412.md +0 -0
  31. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/CHANGELOG.md +0 -0
  32. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/CLAUDE.md +0 -0
  33. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/CONTRIBUTING.md +0 -0
  34. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/DEPLOYMENT.md +0 -0
  35. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/Drydock_rebrand.md +0 -0
  36. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/JETSON_BENCH.md +0 -0
  37. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/LICENSE +0 -0
  38. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/MODEL_SHORTCOMINGS.md +0 -0
  39. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/NOTICE +0 -0
  40. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/OVERNIGHT_PROGRESS.md +0 -0
  41. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  42. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/PERF_SWEEP_PLAN.md +0 -0
  43. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/PRD.md +0 -0
  44. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/README.md +0 -0
  45. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/SOVEREIGN_PRD.md +0 -0
  46. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/TRIAGE_v1.md +0 -0
  47. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/action.yml +0 -0
  48. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/README.md +0 -0
  49. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results1.tsv +0 -0
  50. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results13.tsv +0 -0
  51. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results14.tsv +0 -0
  52. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results15.tsv +0 -0
  53. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results16.tsv +0 -0
  54. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results17.tsv +0 -0
  55. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results18.tsv +0 -0
  56. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results19.tsv +0 -0
  57. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results2.tsv +0 -0
  58. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results20.tsv +0 -0
  59. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results3.tsv +0 -0
  60. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results4.tsv +0 -0
  61. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results5.tsv +0 -0
  62. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results6.tsv +0 -0
  63. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results7.tsv +0 -0
  64. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results8.tsv +0 -0
  65. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results9.tsv +0 -0
  66. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/baseline_history/results_evolved_v1.tsv +0 -0
  67. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/distribution/zed/LICENSE +0 -0
  68. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/distribution/zed/extension.toml +0 -0
  69. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/distribution/zed/icons/mistral_vibe.svg +0 -0
  70. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/docs/README.md +0 -0
  71. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/docs/acp-setup.md +0 -0
  72. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/docs/proxy-setup.md +0 -0
  73. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/__init__.py +0 -0
  74. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/__init__.py +0 -0
  75. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/acp_agent_loop.py +0 -0
  76. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/acp_logger.py +0 -0
  77. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/entrypoint.py +0 -0
  78. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/__init__.py +0 -0
  79. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/base.py +0 -0
  80. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/bash.py +0 -0
  81. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/read_file.py +0 -0
  82. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/search_replace.py +0 -0
  83. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/todo.py +0 -0
  84. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/builtins/write_file.py +0 -0
  85. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/tools/session_update.py +0 -0
  86. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/acp/utils.py +0 -0
  87. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/__init__.py +0 -0
  88. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/detectors.py +0 -0
  89. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/detectors_proposed.py +0 -0
  90. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/history.py +0 -0
  91. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/interventions.py +0 -0
  92. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/llm_analyzer.py +0 -0
  93. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/metrics.py +0 -0
  94. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/opus_escalator.py +0 -0
  95. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/persistence.py +0 -0
  96. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/policy.py +0 -0
  97. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/proposer.py +0 -0
  98. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/stager.py +0 -0
  99. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/task_classifier.py +0 -0
  100. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/tuning.py +0 -0
  101. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/validator.py +0 -0
  102. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/admiral/worker.py +0 -0
  103. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/__init__.py +0 -0
  104. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/autocompletion/__init__.py +0 -0
  105. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/autocompletion/base.py +0 -0
  106. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/autocompletion/path_completion.py +0 -0
  107. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/autocompletion/slash_command.py +0 -0
  108. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/cli.py +0 -0
  109. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/clipboard.py +0 -0
  110. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/commands.py +0 -0
  111. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/entrypoint.py +0 -0
  112. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/history_manager.py +0 -0
  113. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  114. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  115. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  116. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/terminal_setup.py +0 -0
  117. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/__init__.py +0 -0
  118. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  119. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/app.py +0 -0
  120. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/app.tcss +0 -0
  121. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/external_editor.py +0 -0
  122. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  123. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  124. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  125. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  126. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  127. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  128. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  129. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  130. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  131. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  132. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  133. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  134. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  135. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  136. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  137. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  138. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  139. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  140. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  141. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  142. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  143. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  144. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  145. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  146. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  147. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  148. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  149. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  150. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  151. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  152. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  153. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  154. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  155. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  156. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  157. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  158. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  159. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/history.py +0 -0
  160. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  161. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/textual_ui/windowing/state.py +0 -0
  162. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/__init__.py +0 -0
  163. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  164. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  165. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  166. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  167. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  168. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/update.py +0 -0
  169. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/cli/update_notifier/whats_new.py +0 -0
  170. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/__init__.py +0 -0
  171. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/agent_loop.py +0 -0
  172. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/agents/__init__.py +0 -0
  173. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/agents/manager.py +0 -0
  174. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/agents/models.py +0 -0
  175. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/auth/__init__.py +0 -0
  176. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/auth/crypto.py +0 -0
  177. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/auth/github.py +0 -0
  178. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/__init__.py +0 -0
  179. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/completers.py +0 -0
  180. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  181. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  182. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  183. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  184. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  185. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/fuzzy.py +0 -0
  186. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/path_prompt.py +0 -0
  187. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  188. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/build_orchestrator.py +0 -0
  189. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/checkpoint.py +0 -0
  190. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/__init__.py +0 -0
  191. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/__main__.py +0 -0
  192. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/classifier.py +0 -0
  193. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/dispatcher.py +0 -0
  194. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/rules.py +0 -0
  195. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/classifier/signal.py +0 -0
  196. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/__init__.py +0 -0
  197. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/_settings.py +0 -0
  198. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/doctor.py +0 -0
  199. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/harness_files/__init__.py +0 -0
  200. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  201. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/harness_files/_paths.py +0 -0
  202. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/config/local_detect.py +0 -0
  203. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/consultant.py +0 -0
  204. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/context_recovery.py +0 -0
  205. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/drydock_states.py +0 -0
  206. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/hooks.py +0 -0
  207. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/__init__.py +0 -0
  208. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/anthropic.py +0 -0
  209. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/base.py +0 -0
  210. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/factory.py +0 -0
  211. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/generic.py +0 -0
  212. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/mistral.py +0 -0
  213. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  214. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/backend/vertex.py +0 -0
  215. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/exceptions.py +0 -0
  216. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/format.py +0 -0
  217. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/message_utils.py +0 -0
  218. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/llm/types.py +0 -0
  219. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/logger.py +0 -0
  220. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/middleware.py +0 -0
  221. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/output_formatters.py +0 -0
  222. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/paths/__init__.py +0 -0
  223. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/paths/_drydock_home.py +0 -0
  224. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/paths/_local_config_walk.py +0 -0
  225. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/paths/conventions.py +0 -0
  226. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/plan_session.py +0 -0
  227. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/plugins.py +0 -0
  228. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/programmatic.py +0 -0
  229. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/__init__.py +0 -0
  230. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/builder.md +0 -0
  231. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/cli.md +0 -0
  232. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/compact.md +0 -0
  233. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/dangerous_directory.md +0 -0
  234. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/diagnostic.md +0 -0
  235. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/explore.md +0 -0
  236. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/gemma4.md +0 -0
  237. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/planner.md +0 -0
  238. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/project_context.md +0 -0
  239. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/prompts/tests.md +0 -0
  240. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/proxy_setup.py +0 -0
  241. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/agent_memory.py +0 -0
  242. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/checkpoints.py +0 -0
  243. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/session_loader.py +0 -0
  244. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/session_logger.py +0 -0
  245. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/session_migration.py +0 -0
  246. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session/state_file.py +0 -0
  247. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/session_checker.py +0 -0
  248. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/skills/__init__.py +0 -0
  249. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/skills/manager.py +0 -0
  250. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/skills/models.py +0 -0
  251. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/skills/parser.py +0 -0
  252. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/slug.py +0 -0
  253. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/steering_hook.py +0 -0
  254. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/system_prompt.py +0 -0
  255. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/telemetry/__init__.py +0 -0
  256. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/telemetry/send.py +0 -0
  257. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/teleport/errors.py +0 -0
  258. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/teleport/git.py +0 -0
  259. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/teleport/nuage.py +0 -0
  260. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/teleport/teleport.py +0 -0
  261. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/teleport/types.py +0 -0
  262. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/base.py +0 -0
  263. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/_task_manager.py +0 -0
  264. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  265. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/cron.py +0 -0
  266. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  267. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/glob_tool.py +0 -0
  268. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/grep.py +0 -0
  269. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  270. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/lsp.py +0 -0
  271. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  272. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  273. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/powershell.py +0 -0
  274. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  275. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  276. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  277. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  278. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  279. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  280. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  281. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  282. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  283. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  284. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  285. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  286. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  287. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  288. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  289. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/task.md +0 -0
  290. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  291. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  292. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  293. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  294. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  295. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  296. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  297. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/read_file.py +0 -0
  298. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/retrieve.py +0 -0
  299. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/search_replace.py +0 -0
  300. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/task.py +0 -0
  301. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/todo.py +0 -0
  302. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/tool_search.py +0 -0
  303. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/webfetch.py +0 -0
  304. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/websearch.py +0 -0
  305. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/worktree.py +0 -0
  306. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/builtins/write_file.py +0 -0
  307. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/injection_guard.py +0 -0
  308. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/manager.py +0 -0
  309. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/mcp/__init__.py +0 -0
  310. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/mcp/registry.py +0 -0
  311. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/mcp/tools.py +0 -0
  312. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/mcp_sampling.py +0 -0
  313. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/ui.py +0 -0
  314. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/tools/utils.py +0 -0
  315. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/trusted_folders.py +0 -0
  316. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/types.py +0 -0
  317. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/core/utils.py +0 -0
  318. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/__init__.py +0 -0
  319. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/__main__.py +0 -0
  320. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/code_indexer.py +0 -0
  321. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/retriever.py +0 -0
  322. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/storage.py +0 -0
  323. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/graphrag/text_indexer.py +0 -0
  324. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/__init__.py +0 -0
  325. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/base.py +0 -0
  326. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/onboarding.tcss +0 -0
  327. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/__init__.py +0 -0
  328. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/api_key.py +0 -0
  329. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/choice.py +0 -0
  330. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/local_model.py +0 -0
  331. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/onboarding/screens/welcome.py +0 -0
  332. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  333. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  334. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/__init__.py +0 -0
  335. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/api-design/SKILL.md +0 -0
  336. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/audit-tests/SKILL.md +0 -0
  337. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/batch/SKILL.md +0 -0
  338. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/commit-code/SKILL.md +0 -0
  339. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/context-summary/SKILL.md +0 -0
  340. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/create-presentation/SKILL.md +0 -0
  341. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/deep-research/SKILL.md +0 -0
  342. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/deploy/SKILL.md +0 -0
  343. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/diff-review/SKILL.md +0 -0
  344. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/doc-gen/SKILL.md +0 -0
  345. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/explain-code/SKILL.md +0 -0
  346. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/explore-code/SKILL.md +0 -0
  347. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/fix-issue/SKILL.md +0 -0
  348. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/git-ops/SKILL.md +0 -0
  349. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/init-project/SKILL.md +0 -0
  350. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/investigate/SKILL.md +0 -0
  351. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/loop/SKILL.md +0 -0
  352. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/migrate/SKILL.md +0 -0
  353. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/perf-analyze/SKILL.md +0 -0
  354. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/plan-impl/SKILL.md +0 -0
  355. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/pr-review/SKILL.md +0 -0
  356. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/refactor/SKILL.md +0 -0
  357. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/regex-help/SKILL.md +0 -0
  358. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/review/SKILL.md +0 -0
  359. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/security-review/SKILL.md +0 -0
  360. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/ship/SKILL.md +0 -0
  361. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/simplify/SKILL.md +0 -0
  362. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/strong-tests/SKILL.md +0 -0
  363. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/skills/test-verify/SKILL.md +0 -0
  364. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/__init__.py +0 -0
  365. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/__main__.py +0 -0
  366. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/applier.py +0 -0
  367. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/config.py +0 -0
  368. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/registry.py +0 -0
  369. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/sandbox.py +0 -0
  370. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/steering/vectors.py +0 -0
  371. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock/whats_new.md +0 -0
  372. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock-acp.spec +0 -0
  373. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/drydock_terms.md +0 -0
  374. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/flake.lock +0 -0
  375. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/flake.nix +0 -0
  376. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/nohup.out +0 -0
  377. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777672181.json +0 -0
  378. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777672218.json +0 -0
  379. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777672322.json +0 -0
  380. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777732278.json +0 -0
  381. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777811293.json +0 -0
  382. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/perf_results/baseline_1777811401.json +0 -0
  383. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/README.md +0 -0
  384. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/config_base.toml +0 -0
  385. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/config_best.toml +0 -0
  386. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/domain_spec.md +0 -0
  387. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/experimenter.py +0 -0
  388. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/kernel.py +0 -0
  389. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/mini_prd.md +0 -0
  390. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/mini_prompts.txt +0 -0
  391. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/proposer.py +0 -0
  392. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/research/results.tsv +0 -0
  393. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/resume.md +0 -0
  394. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/README.md +0 -0
  395. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/admiral_probe.py +0 -0
  396. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/audit_sampler.py +0 -0
  397. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/auto_generate_tests.py +0 -0
  398. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/auto_release.sh +0 -0
  399. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/auto_test_loop.sh +0 -0
  400. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/autonomous_review.sh +0 -0
  401. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/autonomous_review_prompt.md +0 -0
  402. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/backup.sh +0 -0
  403. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/bump_version.py +0 -0
  404. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/classify_pulse.sh +0 -0
  405. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/comprehensive_loop.py +0 -0
  406. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/consume_retrieval_queue.py +0 -0
  407. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/deploy_to_github.sh +0 -0
  408. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/discover_cli_tools.sh +0 -0
  409. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/evolve_tests.py +0 -0
  410. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/gen_2000_prompts.py +0 -0
  411. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/hle_eval_seed.jsonl +0 -0
  412. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/install.sh +0 -0
  413. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/llm_balancer.py +0 -0
  414. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/mega_loop.py +0 -0
  415. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/meta_ralph_loop.py +0 -0
  416. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/monitor_swebench.sh +0 -0
  417. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/monitor_test_battery.sh +0 -0
  418. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/notify_release.py +0 -0
  419. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/oss_task_harness.py +0 -0
  420. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/overnight_agents_test.sh +0 -0
  421. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/perf_baseline_when_idle.sh +0 -0
  422. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/perf_sweep.py +0 -0
  423. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/poll_issues.sh +0 -0
  424. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/port_task.py +0 -0
  425. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/prepare_release.py +0 -0
  426. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/publish_to_pypi.sh +0 -0
  427. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/queue_top.py +0 -0
  428. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/ralph_loop.py +0 -0
  429. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/research_babysitter.sh +0 -0
  430. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/session_loop_audit.py +0 -0
  431. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/shakedown.py +0 -0
  432. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/shakedown_interactive.py +0 -0
  433. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/shakedown_regression.sh +0 -0
  434. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/shakedown_suite.sh +0 -0
  435. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/shakedown_variance.sh +0 -0
  436. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_babysitter.sh +0 -0
  437. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_prompts_50.txt +0 -0
  438. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_prompts_realuser.txt +0 -0
  439. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_prompts_tool_agent.txt +0 -0
  440. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  441. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_shakedown.py +0 -0
  442. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_telegram_status.py +0 -0
  443. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/stress_watcher.py +0 -0
  444. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/telegram_bot.py +0 -0
  445. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/test_bank.sh +0 -0
  446. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/test_full.sh +0 -0
  447. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/test_smoke.sh +0 -0
  448. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/test_tui_path.py +0 -0
  449. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/tui_test.py +0 -0
  450. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/scripts/vllm_failover.sh +0 -0
  451. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/test/project/dummy +0 -0
  452. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/__init__.py +0 -0
  453. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/conftest.py +0 -0
  454. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_acp.py +0 -0
  455. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_agent_thought.py +0 -0
  456. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_bash.py +0 -0
  457. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_compact_session_updates.py +0 -0
  458. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_content.py +0 -0
  459. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_initialize.py +0 -0
  460. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_list_sessions.py +0 -0
  461. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_load_session.py +0 -0
  462. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_multi_session.py +0 -0
  463. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_new_session.py +0 -0
  464. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_proxy_setup_acp.py +0 -0
  465. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_read_file.py +0 -0
  466. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_search_replace.py +0 -0
  467. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_set_config_option.py +0 -0
  468. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_set_mode.py +0 -0
  469. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_set_model.py +0 -0
  470. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_tool_call_session_update.py +0 -0
  471. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_utils.py +0 -0
  472. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/acp/test_write_file.py +0 -0
  473. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_file_indexer.py +0 -0
  474. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_fuzzy.py +0 -0
  475. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  476. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  477. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_path_completion_controller.py +0 -0
  478. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  479. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_slash_command_controller.py +0 -0
  480. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  481. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/__init__.py +0 -0
  482. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/data/__init__.py +0 -0
  483. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/data/fireworks.py +0 -0
  484. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/data/mistral.py +0 -0
  485. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/test_anthropic_adapter.py +0 -0
  486. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/test_backend.py +0 -0
  487. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  488. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/test_reasoning_adapter.py +0 -0
  489. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  490. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  491. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  492. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  493. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_bell_notifications.py +0 -0
  494. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_braille_renderer.py +0 -0
  495. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_clipboard.py +0 -0
  496. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_commands.py +0 -0
  497. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_copy_shortcuts.py +0 -0
  498. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_external_editor.py +0 -0
  499. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_no_markup_static.py +0 -0
  500. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_question_app.py +0 -0
  501. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_spinner.py +0 -0
  502. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_switching_mode.py +0 -0
  503. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  504. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  505. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_ui_session_resume.py +0 -0
  506. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/test_ui_skill_dispatch.py +0 -0
  507. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/textual_ui/__init__.py +0 -0
  508. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/cli/textual_ui/test_session_picker.py +0 -0
  509. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/conftest.py +0 -0
  510. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_agents.py +0 -0
  511. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_auth_crypto.py +0 -0
  512. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_auth_github.py +0 -0
  513. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  514. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  515. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_config_load_dotenv.py +0 -0
  516. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_config_paths.py +0 -0
  517. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_config_resolution.py +0 -0
  518. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_file_logging.py +0 -0
  519. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_plan_session.py +0 -0
  520. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_proxy_setup.py +0 -0
  521. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_slug.py +0 -0
  522. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_telemetry_send.py +0 -0
  523. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_teleport_git.py +0 -0
  524. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_teleport_nuage.py +0 -0
  525. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_teleport_service.py +0 -0
  526. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_trusted_folders.py +0 -0
  527. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/core/test_utils.py +0 -0
  528. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/common.py +0 -0
  529. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/conftest.py +0 -0
  530. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/mock_server.py +0 -0
  531. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  532. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_streaming.py +0 -0
  533. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  534. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/fixtures/doc_qa_system_prd.md +0 -0
  535. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/mock/__init__.py +0 -0
  536. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/mock/mock_backend_factory.py +0 -0
  537. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/mock/mock_entrypoint.py +0 -0
  538. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/mock/utils.py +0 -0
  539. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/onboarding/test_run_onboarding.py +0 -0
  540. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/onboarding/test_ui_onboarding.py +0 -0
  541. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/session/test_session_loader.py +0 -0
  542. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/session/test_session_logger.py +0 -0
  543. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/session/test_session_migration.py +0 -0
  544. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/skills/conftest.py +0 -0
  545. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/skills/test_manager.py +0 -0
  546. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/skills/test_models.py +0 -0
  547. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/skills/test_parser.py +0 -0
  548. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  549. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  550. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  551. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  552. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  553. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  554. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  555. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  556. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  557. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  558. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  559. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  560. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  561. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  562. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  563. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  564. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  565. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  566. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  567. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  568. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  569. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  570. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  571. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  572. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  573. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  574. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  575. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  576. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  577. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  578. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  579. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  580. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  581. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  582. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  583. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  584. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  585. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  586. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  587. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  588. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  589. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  590. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  591. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  592. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  593. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  594. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  595. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  596. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  597. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  598. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  599. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  600. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  601. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  602. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  603. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  604. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  605. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  606. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  607. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  608. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/base_snapshot_test_app.py +0 -0
  609. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/conftest.py +0 -0
  610. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/snap_compare.py +0 -0
  611. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  612. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  613. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  614. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  615. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  616. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  617. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  618. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  619. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  620. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  621. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  622. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  623. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  624. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  625. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/stubs/fake_backend.py +0 -0
  626. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/stubs/fake_client.py +0 -0
  627. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/stubs/fake_tool.py +0 -0
  628. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_admiral.py +0 -0
  629. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_admiral_phase3.py +0 -0
  630. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_admiral_proposed.py +0 -0
  631. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_admiral_struggle_dedup.py +0 -0
  632. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_auto_compact.py +0 -0
  633. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_backend.py +0 -0
  634. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_observer_streaming.py +0 -0
  635. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_stats.py +0 -0
  636. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_tasks.py +0 -0
  637. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agent_tool_call.py +0 -0
  638. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_agents.py +0 -0
  639. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_build.py +0 -0
  640. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_debug.py +0 -0
  641. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_multiagent.py +0 -0
  642. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_prd.py +0 -0
  643. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_prd_extended.py +0 -0
  644. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_tools.py +0 -0
  645. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_bank_update.py +0 -0
  646. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_build_projects.py +0 -0
  647. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_checkpoint.py +0 -0
  648. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_classifier.py +0 -0
  649. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_cli_programmatic_preload.py +0 -0
  650. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_context_recovery.py +0 -0
  651. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_current_bugs.py +0 -0
  652. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_dispatcher.py +0 -0
  653. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_drydock_regression.py +0 -0
  654. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_drydock_tasks.py +0 -0
  655. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  656. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_full_regression.py +0 -0
  657. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_graphrag.py +0 -0
  658. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_hallucinated_tool_suppression.py +0 -0
  659. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_history_manager.py +0 -0
  660. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_integration.py +0 -0
  661. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_issue_fixes.py +0 -0
  662. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_local_detect.py +0 -0
  663. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_loop_detection.py +0 -0
  664. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_message_id.py +0 -0
  665. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_message_merging.py +0 -0
  666. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_middleware.py +0 -0
  667. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_multi_agent.py +0 -0
  668. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_read_file_not_found_listing.py +0 -0
  669. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_real_failures.py +0 -0
  670. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_real_issues.py +0 -0
  671. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_real_workflow.py +0 -0
  672. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_reasoning_content.py +0 -0
  673. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_retrieval_consumer.py +0 -0
  674. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_retrieve_tool.py +0 -0
  675. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_search_replace_args_not_truncated.py +0 -0
  676. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_smoke.py +0 -0
  677. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_steering.py +0 -0
  678. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_steering_hook.py +0 -0
  679. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_system_prompt.py +0 -0
  680. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_tagged_text.py +0 -0
  681. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_task_complete_nudge.py +0 -0
  682. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_tool_args.py +0 -0
  683. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_truncate_args_valid_json.py +0 -0
  684. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_truncated_arg_path_hint.py +0 -0
  685. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_truncated_search_replace_escalation.py +0 -0
  686. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_truncated_write_escalation.py +0 -0
  687. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_ui_external_editor.py +0 -0
  688. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_ui_input_history.py +0 -0
  689. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_user_issues.py +0 -0
  690. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_wall_of_text_rescue.py +0 -0
  691. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_workloads.py +0 -0
  692. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/test_write_file_missing_path.py +0 -0
  693. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/testbank_helpers.py +0 -0
  694. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_ask_user_question.py +0 -0
  695. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash.py +0 -0
  696. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  697. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_consec_empty_search.py +0 -0
  698. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  699. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  700. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  701. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  702. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_exit_plan_mode.py +0 -0
  703. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_grep.py +0 -0
  704. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  705. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_invoke_context.py +0 -0
  706. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  707. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_manager_get_tool_config.py +0 -0
  708. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_mcp.py +0 -0
  709. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_mcp_sampling.py +0 -0
  710. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  711. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  712. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_read_file_directory.py +0 -0
  713. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_read_file_limit_truncation.py +0 -0
  714. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_append_fallback.py +0 -0
  715. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_dir_path.py +0 -0
  716. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_empty_content.py +0 -0
  717. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_file_not_found.py +0 -0
  718. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  719. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_hard_stop.py +0 -0
  720. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_malformed_block.py +0 -0
  721. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  722. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_placeholder.py +0 -0
  723. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  724. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_task.py +0 -0
  725. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_ui_bash_execution.py +0 -0
  726. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_webfetch.py +0 -0
  727. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_websearch.py +0 -0
  728. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  729. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  730. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  731. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  732. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_do_update.py +0 -0
  733. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  734. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_github_update_gateway.py +0 -0
  735. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  736. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_ui_update_notification.py +0 -0
  737. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_update_use_case.py +0 -0
  738. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/tests/update_notifier/test_whats_new.py +0 -0
  739. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/worked_examples/README.md +0 -0
  740. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/worked_examples/cli_subcommand_dispatch.py +0 -0
  741. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/worked_examples/lookup.json +0 -0
  742. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/worked_examples/sql_parser.py +0 -0
  743. {drydock_cli-2.7.37 → drydock_cli-2.7.38}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 2617636
@@ -0,0 +1,193 @@
1
+ # HLE PRD — drydock + GraphRAG + Deep Noir vs Humanity's Last Exam
2
+
3
+ **Status as of 2026-05-04 00:40 UTC.** Update on resume.
4
+
5
+ ## Thesis
6
+
7
+ > drydock + GraphRAG + Deep Noir working together should be able to solve
8
+ > any problem.
9
+
10
+ HLE is the hardest possible PRD — explicitly designed to defeat frontier
11
+ models. Reaching a defensible local-26B score against it validates that
12
+ the three-leg architecture generalizes. Failures expose which leg is weak.
13
+
14
+ **Critical rule:** drydock IS the harness. Eval drives questions through
15
+ the real TUI. Never wrap the model directly. Every failure is a drydock-
16
+ or-leg bug to fix, not a harness limitation. See
17
+ `memory/feedback_drydock_is_the_harness.md`.
18
+
19
+ ## The three legs and their current strength
20
+
21
+ | Leg | What it owns | State | Evidence |
22
+ |-----|--------------|-------|----------|
23
+ | **drydock** | agent loop, tool use, prompts, harness fixes | **strongest** | 70% SWE-bench file match; 49/52 PRD functional tests; 16K+ harness queue actively drained |
24
+ | **GraphRAG** | factual recall over indexed code/text | **medium** | infra works (1842 symbols, 75 chunks); only cwd source ingested; **no general knowledge corpus** |
25
+ | **Deep Noir** | reasoning-mode steering | **weakest** | scaffolding shipped (`drydock/steering/`), `LogitBiasSteeringApplier` wired, hook in agent_loop; **zero vectors trained** — hook is a no-op |
26
+
27
+ ## Phase plan
28
+
29
+ ### Phase 1 — baseline (in flight)
30
+
31
+ Goal: bare drydock + bare GraphRAG (cwd only) + zero Deep Noir vs HLE.
32
+ This number is the floor.
33
+
34
+ - ✅ `scripts/hle_eval.py` — single-file orchestrator
35
+ - ✅ `scripts/hle_eval_seed.jsonl` — 7 undergrad questions for pipeline validation
36
+ - ✅ Pipeline validated: 7/7 = 100% on seed (commit 7c3a2d9 + earlier)
37
+ - ✅ HF token landed at `~/.config/drydock/hf_token` (chmod 600)
38
+ - ✅ HLE accessible: 2500 questions total, 2158 text-only, 342 multimodal (skipped)
39
+ - 🟡 **N=200 overnight baseline running** (PID in `/tmp/hle_overnight.pid`,
40
+ log `/tmp/hle_overnight.log`, results dir under `/data3/drydock/hle_results/`).
41
+ Started 2026-05-04 00:46 UTC (restarted with Telegram wiring).
42
+ Expected runtime ~10-16h based on q1's 6 min pace. Each question
43
+ writes a line to `results.jsonl` incrementally — partial progress
44
+ is always visible mid-run.
45
+ - 🟡 **Telegram pings configured** (commit ed7f6de, SOTA ref 45.9%):
46
+ start ping fired; milestone every 50 completions; final + breakdown
47
+ on completion; crash + resume command on error.
48
+ - ⏳ Phase 1 deliverable: a number — Gemma 4 + bare drydock baseline on HLE
49
+
50
+ Realistic baseline expectation per pre-run analysis:
51
+ - Bare 26B-A4B without retrieval/steering: ~5–10% on HLE
52
+ - Reaching ~22–25% would be defensible vs ~25–30% frontier scores
53
+
54
+ ### Phase 2 — GraphRAG with knowledge corpus
55
+
56
+ Goal: ingest enough general knowledge that retrieve answers fact-recall
57
+ questions. Re-run, measure delta.
58
+
59
+ - ⏳ Identify corpus (Wikipedia subset / arXiv abstracts / textbook chunks)
60
+ - ⏳ Extend `drydock/graphrag/code_indexer.py` ingest path for non-code text
61
+ (it already supports text via `text_indexer.py`; just needs corpus)
62
+ - ⏳ Bulk ingest into `~/.drydock/graphrag.sqlite`
63
+ - ⏳ Re-run HLE Phase 1 with corpus loaded; measure delta
64
+ - Expected delta: +3 to +7 points if corpus is good, +0 if not
65
+
66
+ ### Phase 3 — Deep Noir reasoning vectors
67
+
68
+ Goal: train activation-steering vectors on reasoning-failure pairs from
69
+ admiral_history; deposit into `~/.drydock/steering/vectors/`; the
70
+ existing hook applies them. This is the user's research domain.
71
+
72
+ - ⏳ Extract pairs from admiral_history (model-output / correct-intervention)
73
+ - ⏳ Train vectors per direction: "verify-before-answer", "show-work-explicitly",
74
+ "consider-units", "minimal-patch"
75
+ - ⏳ Deposit `.npy + .toml` per mode under `~/.drydock/steering/vectors/<mode>/`
76
+ - ⏳ Set `DRYDOCK_STEERING_MODES=<mode1>,<mode2>` env at TUI launch
77
+ - ⏳ Re-run HLE; measure delta vs Phase 2
78
+ - Expected delta: 0 to +3 points; high variance, open research
79
+
80
+ ## Currently running / in flight
81
+
82
+ | Thing | PID | Log | Notes |
83
+ |-------|-----|-----|-------|
84
+ | stress harness | `/tmp/stress_pid.txt` (was 2219727) | `/tmp/stress_*.log` | 1d 9h+ uptime, ~76% through 1658-prompt suite |
85
+ | llm_balancer | 2462362 (rotates) | `/data3/drydock/logs/balancer.log` | :8001, ~10h uptime |
86
+ | HLE N=200 overnight | `/tmp/hle_overnight.pid` (was 2567027) | `/tmp/hle_overnight.log` | output `/data3/drydock/hle_results/run_*/`; expected 10-16h |
87
+
88
+ ## Resume checklist (if connection dropped)
89
+
90
+ ```bash
91
+ # 1. Where are we?
92
+ date -u
93
+ git -C /data3/drydock log --oneline --since="6 hours ago"
94
+ git -C /data3/drydock describe --tags --abbrev=0 # current PyPI tag
95
+
96
+ # 2. HLE run status
97
+ ps -p $(cat /tmp/hle_overnight.pid 2>/dev/null) -o pid,etime,comm
98
+ ls /data3/drydock/hle_results/
99
+ tail -50 /tmp/hle_overnight.log
100
+ n_done=$(wc -l < /data3/drydock/hle_results/run_*/results.jsonl 2>/dev/null)
101
+ echo "completed: $n_done / 200"
102
+
103
+ # 3. If HLE crashed mid-flight, RESUME (skip already-done IDs)
104
+ RUN_DIR=$(ls -td /data3/drydock/hle_results/run_* | head -1)
105
+ nohup /home/bobef/miniconda3/bin/python3 /data3/drydock/scripts/hle_eval.py \
106
+ --source hle --limit 200 --shuffle --seed 42 --resume "$RUN_DIR" \
107
+ > /tmp/hle_resume.log 2>&1 &
108
+
109
+ # 4. If complete, see the score
110
+ cat /data3/drydock/hle_results/run_*/summary.json | python3 -m json.tool
111
+
112
+ # 5. Infra health
113
+ ps -p 2462362 -o pid,etime
114
+ curl -s --max-time 3 http://localhost:8001/v1/models | head -1
115
+ gh issue list --repo fbobe321/drydock --state open --limit 5
116
+ ```
117
+
118
+ ## Known issues + workarounds
119
+
120
+ 1. **`web_search` tool requires permission approval** by default
121
+ (`ToolPermission.ASK`). In batch eval the harness can't see/respond
122
+ to the prompt → session stalls. **Workaround:**
123
+ `--dangerously-skip-permissions` flag passed by `hle_eval.py`.
124
+ **Real fix:** auto-approve read-only tools when stdin is non-TTY
125
+ or `DRYDOCK_BATCH_MODE=1`. Memory:
126
+ `memory/project_hle_phase1_findings.md`.
127
+
128
+ 2. **TUI input handler corrupts rapid char-by-char multi-line pexpect
129
+ input.** Internal `\n` chars get partially eaten + spurious newlines
130
+ inserted on long prompts. **Workaround:** single-line prompts in
131
+ `hle_eval.py`. **Real fix:** debug `drydock/cli/textual_ui/` input
132
+ buffer.
133
+
134
+ 3. **Auto_release at 06:00/12:00/18:00/00:00 UTC overwrites site-packages.**
135
+ In-flight HLE runs survive (each new question is a fresh TUI spawn that
136
+ picks up the new binary), but if you direct-edit site-packages your
137
+ changes vanish. Always commit to source. Pause via:
138
+ `touch /data3/drydock/.pause_auto_release`.
139
+
140
+ 4. **PRD contamination: model edits `PRD.md` mid-session.** HLE doesn't
141
+ touch this — every HLE question gets a fresh empty cwd. Not a concern
142
+ for HLE; relevant for shakedown PRD runs.
143
+
144
+ 5. **Sessions take real time.** HLE questions involve web_search +
145
+ multi-step reasoning. Seed q's took 30-60s; HLE q's appear to take
146
+ 5+ min each (q1: 5 min in and still working). Expect N=20 to take
147
+ 1-2 hours, N=100 overnight.
148
+
149
+ ## Sentinels currently set
150
+
151
+ - `/data3/drydock_test_projects/.pause_watchdog` — watchdog cron paused
152
+ - `/data3/drydock/.pause_auto_release` — NOT set (auto_release is active)
153
+ - `/data3/drydock/research/STOP` — research loop sentinel (per gitignore)
154
+
155
+ ## Tomorrow morning's first action
156
+
157
+ If overnight run completed:
158
+ 1. `cat /data3/drydock/hle_results/run_*/summary.json` for the baseline number
159
+ 2. If <10%, the diagnosis is in the per-question `verdict` and `judge_reasoning`
160
+ fields. Sort by category to see if math/physics/CS dominate the failures.
161
+ 3. Commit the results JSON (with HLE content redacted to just IDs+verdicts —
162
+ never commit the question text per HLE license).
163
+ 4. Decide Phase 2 corpus based on category distribution of failures.
164
+
165
+ If overnight run crashed:
166
+ 1. `--resume` flag re-enters where it stopped (skip-by-id from results.jsonl).
167
+ 2. Likely failure modes: vLLM OOM on a long-thinking question, balancer
168
+ crash from a port conflict, drydock TUI hang on a tool error.
169
+ Investigate via the per-question `tui_logs/<id>.tui.log` files.
170
+
171
+ ## File map
172
+
173
+ ```
174
+ /data3/drydock/
175
+ ├── scripts/
176
+ │ ├── hle_eval.py # the orchestrator (this PRD's main artifact)
177
+ │ ├── hle_eval_seed.jsonl # 7 hand-crafted seed questions
178
+ │ └── consume_retrieval_queue.py # GraphRAG-leg autonomy (28× perf-fixed)
179
+ ├── hle_results/ # gitignored — per-run outputs
180
+ │ └── run_<ts>/
181
+ │ ├── config.json
182
+ │ ├── results.jsonl
183
+ │ ├── summary.json
184
+ │ ├── tui_logs/<id>.tui.log
185
+ │ └── work/<id>/ # per-question fresh cwd
186
+ ├── HLE_PRD.md # this file
187
+ └── ~/.config/drydock/hf_token # gated cais/hle access
188
+ ```
189
+
190
+ ## What "done" looks like for Phase 1
191
+
192
+ A number. With distribution. Per-category and overall. Writeup in this
193
+ PRD. Commit the writeup, not the questions. Decide Phase 2 from there.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.7.37
3
+ Version: 2.7.38
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
@@ -550,6 +550,31 @@ class Bash(
550
550
 
551
551
  returncode = proc.returncode or 0
552
552
 
553
+ # Proactive heredoc-write confirmation. When `cat <<EOF > file`
554
+ # succeeds silently (empty stdout, rc=0), the model can't tell the
555
+ # file landed and re-runs the same heredoc. Check the file on disk
556
+ # and confirm immediately so the model moves on without a retry.
557
+ import re as _re_hd
558
+ import os as _os_hd
559
+ _hd_match = _re_hd.search(
560
+ r"cat\s+<<\s*['\"]?[A-Za-z_]*['\"]?\s+>+\s*(\S+)", args.command
561
+ )
562
+ if _hd_match and returncode == 0 and not stdout.strip():
563
+ _hd_path = _hd_match.group(1).strip().rstrip(";")
564
+ if _os_hd.path.exists(_hd_path):
565
+ _hd_size = _os_hd.path.getsize(_hd_path)
566
+ _hd_lines = 0
567
+ try:
568
+ with open(_hd_path, "r", errors="replace") as _hdf:
569
+ _hd_lines = sum(1 for _ in _hdf)
570
+ except Exception:
571
+ pass
572
+ stdout = (
573
+ f"[File written: {_hd_path} ({_hd_lines} lines, "
574
+ f"{_hd_size} bytes). "
575
+ f"The file is on disk — do not re-run this command.]"
576
+ )
577
+
553
578
  # Mechanical loop-breaker (ADVISORY ONLY — never raise
554
579
  # ToolError; see feedback_no_tool_errors_for_loop_detection.md).
555
580
  # Two complementary checks:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.7.37"
3
+ version = "2.7.38"
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"
@@ -53,7 +53,10 @@ from pathlib import Path
53
53
 
54
54
  REPO = Path("/data3/drydock")
55
55
  SHAKEDOWN = REPO / "scripts" / "shakedown_interactive.py"
56
+ NOTIFY = REPO / "scripts" / "notify_release.py"
56
57
  RESULTS_ROOT = REPO / "hle_results"
58
+ MILESTONE_EVERY = 50 # send a Telegram progress ping every N completions
59
+ SOTA_REFERENCE = 45.9 # current HLE SOTA per user (2026-05-04); used in pings
57
60
  SEED_PATH = Path(os.environ.get("HLE_SEED_PATH",
58
61
  str(REPO / "scripts" / "hle_eval_seed.jsonl")))
59
62
  HF_TOKEN_FILE = Path.home() / ".config" / "drydock" / "hf_token"
@@ -203,6 +206,26 @@ def score_answer(q: dict, pred: str) -> dict:
203
206
  }
204
207
 
205
208
 
209
+ # ── Telegram notifications ────────────────────────────────────────────
210
+ def notify_telegram(tag: str, message: str) -> None:
211
+ """Fire-and-forget Telegram ping via the existing notify_release.py.
212
+
213
+ All HLE runs notify on start, every MILESTONE_EVERY completions, and
214
+ on final completion (or crash). Failures are silent — a missed
215
+ Telegram is never worth crashing the eval.
216
+ """
217
+ if not NOTIFY.exists():
218
+ return
219
+ import subprocess
220
+ try:
221
+ subprocess.run(
222
+ [sys.executable, str(NOTIFY), tag, message],
223
+ timeout=15, capture_output=True,
224
+ )
225
+ except Exception:
226
+ pass
227
+
228
+
206
229
  # ── TUI runner per question ───────────────────────────────────────────
207
230
  def _question_prompt(q: dict) -> str:
208
231
  """Wrap the HLE question with a thin instruction so the model knows it's
@@ -379,27 +402,77 @@ def main() -> int:
379
402
  sk = _load_shakedown()
380
403
  results_file = run_dir / "results.jsonl"
381
404
 
382
- for i, q in enumerate(questions, 1):
383
- print(f"\n[{i}/{len(questions)}] {q['id']} ({q.get('category','?')})")
384
- print(f" Q: {q['question'][:120]}")
385
- try:
386
- outcome = run_one(q, sk, run_dir)
387
- except Exception as e:
388
- outcome = {
389
- "id": q["id"], "category": q.get("category", "?"),
390
- "answer_type": q.get("answer_type", "text"),
391
- "elapsed_s": 0.0, "msg_count": 0,
392
- "predicted": "", "ground_truth": q["answer"],
393
- "session_dir": "", "runner_error": repr(e),
394
- }
395
- score = score_answer(q, outcome["predicted"])
396
- outcome.update(score)
397
- print(f" pred: {outcome['predicted'][:120]}")
398
- print(f" gold: {q['answer'][:120]}")
399
- print(f" {outcome['verdict']:8s} ({outcome['method']}, "
400
- f"{outcome['elapsed_s']:.0f}s, {outcome['msg_count']} msgs)")
401
- with results_file.open("a") as f:
402
- f.write(json.dumps(outcome) + "\n")
405
+ # Pre-count what's already in results.jsonl (for --resume)
406
+ prior_done = 0
407
+ prior_correct = 0
408
+ if results_file.exists():
409
+ for ln in results_file.read_text().splitlines():
410
+ if not ln.strip():
411
+ continue
412
+ try:
413
+ r = json.loads(ln)
414
+ prior_done += 1
415
+ if r.get("correct"):
416
+ prior_correct += 1
417
+ except Exception:
418
+ pass
419
+
420
+ notify_telegram(
421
+ "hle-start",
422
+ f"HLE eval started — {args.source} N={args.limit} "
423
+ f"(resuming with {prior_done} done, {prior_correct} correct). "
424
+ f"Will ping every {MILESTONE_EVERY} completions and at final. "
425
+ f"SOTA reference: {SOTA_REFERENCE}%."
426
+ )
427
+
428
+ completed = prior_done
429
+ running_correct = prior_correct
430
+ last_milestone = (prior_done // MILESTONE_EVERY) * MILESTONE_EVERY
431
+
432
+ try:
433
+ for i, q in enumerate(questions, 1):
434
+ print(f"\n[{i}/{len(questions)}] {q['id']} ({q.get('category','?')})")
435
+ print(f" Q: {q['question'][:120]}")
436
+ try:
437
+ outcome = run_one(q, sk, run_dir)
438
+ except Exception as e:
439
+ outcome = {
440
+ "id": q["id"], "category": q.get("category", "?"),
441
+ "answer_type": q.get("answer_type", "text"),
442
+ "elapsed_s": 0.0, "msg_count": 0,
443
+ "predicted": "", "ground_truth": q["answer"],
444
+ "session_dir": "", "runner_error": repr(e),
445
+ }
446
+ score = score_answer(q, outcome["predicted"])
447
+ outcome.update(score)
448
+ print(f" pred: {outcome['predicted'][:120]}")
449
+ print(f" gold: {q['answer'][:120]}")
450
+ print(f" → {outcome['verdict']:8s} ({outcome['method']}, "
451
+ f"{outcome['elapsed_s']:.0f}s, {outcome['msg_count']} msgs)")
452
+ with results_file.open("a") as f:
453
+ f.write(json.dumps(outcome) + "\n")
454
+ completed += 1
455
+ if outcome.get("correct"):
456
+ running_correct += 1
457
+ # Milestone ping every MILESTONE_EVERY completions
458
+ if completed >= last_milestone + MILESTONE_EVERY:
459
+ last_milestone = (completed // MILESTONE_EVERY) * MILESTONE_EVERY
460
+ pct = (running_correct / completed * 100) if completed else 0
461
+ gap = pct - SOTA_REFERENCE
462
+ notify_telegram(
463
+ "hle-progress",
464
+ f"HLE progress {completed}/{args.limit}: "
465
+ f"{running_correct}/{completed} = {pct:.1f}% "
466
+ f"(SOTA {SOTA_REFERENCE}%, gap {gap:+.1f})"
467
+ )
468
+ except Exception as e:
469
+ notify_telegram(
470
+ "hle-crash",
471
+ f"HLE run crashed at {completed}/{args.limit} "
472
+ f"({running_correct}/{completed} so far). Error: {e!r}. "
473
+ f"Resume with --resume {run_dir.name}"
474
+ )
475
+ raise
403
476
 
404
477
  # Aggregate
405
478
  n = 0
@@ -431,9 +504,21 @@ def main() -> int:
431
504
  print(f"\n{'='*60}")
432
505
  print(f" HLE BASELINE: {correct}/{n} = {summary['score']*100:.1f}%")
433
506
  print(f"{'='*60}")
507
+ cat_lines = []
434
508
  for cat, v in summary["by_category"].items():
435
- print(f" {cat:30s} {v['correct']}/{v['total']} ({v['score']*100:.0f}%)")
509
+ line = f" {cat:30s} {v['correct']}/{v['total']} ({v['score']*100:.0f}%)"
510
+ print(line)
511
+ cat_lines.append(line.strip())
436
512
  print(f"\n Results: {run_dir}")
513
+
514
+ pct = summary["score"] * 100
515
+ gap = pct - SOTA_REFERENCE
516
+ notify_telegram(
517
+ "hle-final",
518
+ f"HLE FINAL: {correct}/{n} = {pct:.1f}% "
519
+ f"(SOTA {SOTA_REFERENCE}%, gap {gap:+.1f})\n\n"
520
+ f"By category:\n" + "\n".join(cat_lines)
521
+ )
437
522
  return 0
438
523
 
439
524
 
@@ -0,0 +1,76 @@
1
+ """Regression test: bash tool proactive heredoc-write confirmation.
2
+
3
+ Stress run on 2026-05-03 showed 311 admiral `harness:bash:heredoc_loop`
4
+ fires (dispatch queue). Pattern: model writes a plugin file via bash
5
+ heredoc (`cat <<EOF > file.py`), gets empty stdout (rc=0), doesn't know
6
+ the file was created, and re-runs the same heredoc. The old dedup check
7
+ only fired a hint on the 3rd identical run; by then the model had already
8
+ looped twice.
9
+
10
+ Fix: detect heredoc-write on the FIRST call. If rc=0 and stdout is empty
11
+ and the target file now exists on disk, inject a "File written: path
12
+ (N lines, N bytes)" confirmation immediately. The model sees the file
13
+ landed, moves on, and never retries.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import pytest
18
+
19
+ from tests.mock.utils import collect_result
20
+ from drydock.core.tools.base import BaseToolState, ToolPermission
21
+ from drydock.core.tools.builtins.bash import Bash, BashArgs, BashToolConfig
22
+
23
+
24
+ @pytest.fixture
25
+ def bash(tmp_path, monkeypatch):
26
+ monkeypatch.chdir(tmp_path)
27
+ config = BashToolConfig()
28
+ return Bash(config=config, state=BaseToolState())
29
+
30
+
31
+ @pytest.mark.asyncio
32
+ async def test_heredoc_write_confirmation_first_call(bash, tmp_path):
33
+ """First heredoc write to a new file gets 'File written' confirmation."""
34
+ target = tmp_path / "plugin.py"
35
+ cmd = f"cat <<EOF > {target}\nprint('hello')\nEOF"
36
+ result = await collect_result(bash.run(BashArgs(command=cmd)))
37
+ assert "File written" in result.stdout
38
+ assert str(target) in result.stdout or target.name in result.stdout
39
+ assert "lines" in result.stdout
40
+ assert "bytes" in result.stdout
41
+
42
+
43
+ @pytest.mark.asyncio
44
+ async def test_heredoc_write_confirmation_quoted_eof(bash, tmp_path):
45
+ """Quoted 'EOF' marker also gets confirmation."""
46
+ target = tmp_path / "config.py"
47
+ cmd = f"cat << 'EOF' > {target}\nx = 1\nEOF"
48
+ result = await collect_result(bash.run(BashArgs(command=cmd)))
49
+ assert "File written" in result.stdout
50
+
51
+
52
+ @pytest.mark.asyncio
53
+ async def test_heredoc_write_confirmation_append(bash, tmp_path):
54
+ """Append redirect (>>) also triggers confirmation when file exists."""
55
+ target = tmp_path / "data.txt"
56
+ target.write_text("line1\n")
57
+ cmd = f"cat <<EOF >> {target}\nline2\nEOF"
58
+ result = await collect_result(bash.run(BashArgs(command=cmd)))
59
+ assert "File written" in result.stdout or "lines" in result.stdout
60
+
61
+
62
+ @pytest.mark.asyncio
63
+ async def test_heredoc_write_no_confirmation_when_file_missing(bash, tmp_path):
64
+ """If file doesn't exist after write (e.g. permission error), no false positive."""
65
+ # A path in a non-existent dir — the cat will fail with rc != 0
66
+ cmd = f"cat <<EOF > /nonexistent_dir_xyz/plugin.py\nprint('x')\nEOF"
67
+ result = await collect_result(bash.run(BashArgs(command=cmd)))
68
+ assert "File written" not in result.stdout
69
+
70
+
71
+ @pytest.mark.asyncio
72
+ async def test_non_heredoc_command_unaffected(bash):
73
+ """Regular commands that produce empty stdout are not mis-labeled."""
74
+ cmd = "true"
75
+ result = await collect_result(bash.run(BashArgs(command=cmd)))
76
+ assert "File written" not in result.stdout
@@ -3,6 +3,51 @@
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-05-04 05:31 UTC tick
7
+ - Stress: 1351/1658 (PID 2219727 alive, 1d 13h elapsed); in "Perf:" section (1310-1658)
8
+ - Write rate: 9% last 91 done prompts (Perf: prompts are advisory, near-0% expected); 15% SKIP rate (31/200) from TUI busy during long Perf responses — harness recycling TUI to recover
9
+ - vLLM 400s: 0; balancer up (pid 2462362 on :8001); gemma4 Docker up 10 days; GH issues: 0 open
10
+ - Dispatch queue: harness=20555 (recent: thinking_stall=204, bash_generic=197, search_replace_not_found=40, heredoc_loop=34 post-fix); retrieval=12, all already ingested
11
+ - Action this tick: no fix committed — heredoc_loop fires (34) are post c637042 but model ignores 1st confirmation; pattern is model behavior not a code gap; all other top patterns are already handled; system healthy, 4 pending commits (heredoc + HLE docs) ship at next auto_release
12
+
13
+ ## 2026-05-04 04:05 UTC tick
14
+ - Stress: 1334/1658 (PID 2219727 alive, 1d 13h elapsed); at tail of "Perf:" prompts, approaching final sections
15
+ - Write rate: 5% last 200 prompts (Perf/API sections: near-0% expected — "API: gRPC", "API: WebSocket" prompts can't produce stdlib writes); overall run trend shows 36-70% on regular prompts, drops to 0-2% on API sections
16
+ - vLLM 400s: 0; balancer up (pid 2462362 on :8001); gemma4 Docker up; GH issues: 0 open
17
+ - Dispatch queue: harness=20270 (today: thinking_stall=81, bash_generic=81, search_replace_not_found=16, heredoc_loop=12); retrieval=12, 0 actionable (all already ingested)
18
+ - Action this tick: no fix committed — all today's heredoc_loop fires (02:30+03:12 UTC) are PRE-FIX (c637042 fix(bash): proactive heredoc confirmation ships at ~05:00 UTC auto_release as v2.7.38); thinking_stall fires are model behavior hitting MAX_STALL_RETRIES=3 — existing inline handler is working; no new actionable drydock bugs identified
19
+
20
+ ## 2026-05-04 03:30 UTC tick
21
+ - Stress: 1326/1658 (PID 2219727 alive, 1d 12h elapsed); progressing through "Perf:" + "Doc:" sections
22
+ - Write rate: 7% last 93 prompts (Doc: 3%, Perf: 23%) — low but expected for doc/conceptual prompts; no regression
23
+ - vLLM 400s: 0; balancer up; gemma4 Docker up; GH issues: 0 open
24
+ - Dispatch queue: harness=19968 (top patterns: bash_heredoc_loop, thinking_stall, bash_generic — all addressed); retrieval=12, 0 actionable (all recently ingested)
25
+ - Action this tick: no fix committed — c637042 heredoc fix (committed earlier today) already addresses top dispatch pattern; thinking_stall handling already in agent_loop.py; bash_generic is model behavior not a drydock bug; no new source bugs found in recent session logs; retrieval drain ran (0 ingested)
26
+
27
+ ## 2026-05-04 02:30 UTC tick
28
+ - Stress: 1303/1658 (PID 2219727 alive, 1d 11h elapsed); done=1169, skip=133, recycle=112
29
+ - Write rate: 3% last 95 prompts — **DEGRADED**: "Perf:" prompts causing near-universal SKIP
30
+ - vLLM 400s: 0; balancer up; gemma4 Docker up; GH issues: 0 open
31
+ - Dispatch queue: harness=18833 (top: search_replace:not_found_loop 0.85, bash_generic 0.6); retrieval=12
32
+ - Action this tick: investigated SKIP spiral — root cause is recycle + SessionWatcher.find_session() returns None for active sessions (meta.json only written at session exit, per CLAUDE.md learning #37). After any recycle, `_wait_until_tui_ready` immediately returns True (0 msgs = stable), prompt is typed to unready TUI, watcher never confirms, 3×120s retries → SKIP → another recycle. Spiral is self-sustaining. The "Perf:" prompts may be faster/shorter so sessions exit before confirmation window, or recycles are more frequent here. No source fix committed (harness code is off-limits per CLAUDE.md). User should review `find_session()` to use directory mtime instead of meta.json cwd match for in-flight session detection.
33
+
34
+ ## 2026-05-04 02:20 UTC tick
35
+ - Stress: 1299/1658 (PID 2219727, 1d 11h elapsed, "Perf:" section — prompts like "Perf: cache result of pure function"); skip=125, recycle=107
36
+ - Write rate: 3% last 96 prompts (Perf: prompts are abstract performance concepts, model responds in text; overall run cumulative write rate stable)
37
+ - vLLM 400s: 0 in last 30 min; balancer healthy on :8001 (PID 2462362); gemma4 Docker up
38
+ - GH issues: 0 open
39
+ - Dispatch queue: harness=18328 total (recent 200: thinking_stall=91, bash_generic=77, search_replace:not_found_loop=25 — all addressed by prior commits); retrieval=12 entries, 0 actionable (all recently ingested)
40
+ - Action this tick: no fix committed — system healthy, all dispatch patterns already addressed in source. 4 unreleased commits (c637042 heredoc-write fix + 3 HLE docs) pending, will ship at next 05:00 UTC auto_release tick.
41
+
42
+ ## 2026-05-04 01:08 UTC tick
43
+ - Stress: 1293/1658 (PID 2219727, 1d 10h elapsed, "Perf:" section — short conceptual prompts, model replies in text not file writes); total SKIPs=144, productive writes=342
44
+ - Write rate: 2% last 100 prompts (Perf: prompts don't require file writes; overall run cumulative write rate ~26%)
45
+ - Admiral last 30 min: dispatch queue recent 100 entries — thinking_stall=52, bash_generic=34, search_replace:not_found_loop=10; all patterns already addressed in source
46
+ - vLLM 400s: 0 in last 30 min
47
+ - GH issues: 0 open
48
+ - Dispatch queue: harness=17774 total entries (recent patterns already addressed), retrieval=0 actionable (all ingested), steering=n/a
49
+ - Action this tick: no action — healthy; c637042 heredoc fix (311 historical fires) unreleased, will ship at next 0/6/12/18 UTC auto_release tick
50
+
6
51
  ## 2026-05-03 22:35 UTC tick
7
52
  - Stress: 1180/1658 (PID 2219727, 1d 8h elapsed, "Documentation" section — prompts like "Doc: changelog entry for E"; done=1068, skip=117)
8
53
  - Write rate: 2% last 100 prompts (Doc prompts use abstract placeholders, model replies with text not file writes; overall run write rate 29%)
@@ -1347,3 +1392,62 @@ restarted, cron self-match bug fixed in this same session).
1347
1392
  - Dispatch queue: harness=14200 total; top recent-1000: thinking_stall=504, bash_generic=358, search_replace:not_found_loop=102 — all same patterns addressed by commits from the last 24h (d2de14f, a29a76c, e8be997); skip count 117 cumulative (~10%), stable
1348
1393
  - Retrieval drain: consume_retrieval_queue.py timed out at 15s on both attempts; 0 projects ingested this tick; retrieval queue has 12 entries (unchanged from prior ticks); may be hanging on GraphRAG ingest for a missing-index project
1349
1394
  - Action this tick: no new drydock bug found; system healthy; no commit warranted
1395
+
1396
+ ## 2026-05-03 23:15 UTC tick
1397
+ - Stress: 1221/1658 (in doc-prompt zone; write rate 2% expected for text-only doc prompts)
1398
+ - Write rate: 2% last 100 (all "Doc:" prompts — model responds with text, no file writes)
1399
+ - Admiral last 30 min: N/A (admiral_history.log not checked by timestamp this tick)
1400
+ - vLLM 400s: 0 last 30min
1401
+ - GH issues: 0 open
1402
+ - Dispatch queue: harness=15415 total; top patterns: bash_generic=6024, thinking_stall=3752, hallucinated_name=3594, search_replace:not_found_loop=1513, heredoc_loop=311
1403
+ - Retrieval drain: 12 queue entries, 0 actionable (all recently ingested)
1404
+ - Action this tick: committed fix for harness:bash:heredoc_loop (c637042) — proactive "File written: N lines/bytes" confirmation on first heredoc write so model doesn't re-run. 5 regression tests, 63/63 smoke+loop tests pass. Will ship at next auto-release tick (0/6/12/18 UTC).
1405
+
1406
+ ## 2026-05-03 23:55 UTC tick
1407
+ - Stress: 1262/1658 (76.1%), PID 2219727, alive (1d 9h elapsed), log /tmp/stress_2000_1777732347.log
1408
+ - Write rate: 2% last 100 prompts — expected; current batch is "Doc:" documentation prompts + "Perf:" prompts (1250-1262 range); model responds with text, no file writes; not a regression
1409
+ - vLLM 400s: 0 last 30min; llm_balancer healthy on :8001 (PID 2462362); gemma4 docker up
1410
+ - GH issues: 0 open
1411
+ - Dispatch queue: harness=16019 total; top recent-200 patterns: thinking_stall=94 (ralph_repo_index dominates, already handled by _silence_suppressed_failures + system note), bash_generic=79 (admiral already intervening), search_replace:not_found_loop=19 (file-head embed already in place); retrieval=12 entries (0 actionable, all recently ingested)
1412
+ - Tests: 63/63 smoke+loop pass post c637042
1413
+ - Action this tick: no new drydock bug found; all top dispatch patterns addressed by prior commits; retrieval drain 0 new ingests; system healthy — no commit warranted
1414
+
1415
+ ## 2026-05-04 00:25 UTC tick
1416
+ - Stress: 1275/1658 (76.9%), PID 2219727, alive (1d 9h+ elapsed), log /tmp/stress_2000_1777732347.log
1417
+ - Write rate: 2% last 100 prompts — expected; batch is "Doc:"/"Perf:" prompts (1259–1275 range); model responds with text; SKIP rate ~9% (119 total, 18 FORCE-RESETs), consistent with prior baseline
1418
+ - vLLM 400s: 0 last 30min; gemma4 docker up
1419
+ - GH issues: 0 open
1420
+ - Dispatch queue: harness=16619, retrieval=12 (all already ingested), steering=0
1421
+ - Top recent-500 admiral patterns: loop:bash=41, struggle:none=40, empty_after_tool:ralph_repo_index=37 (redirect already in _silence_suppressed_failures+format.py), retry_after_error:search_replace=9, retry_after_error:bash=8, empty_after_tool:bash=7
1422
+ - Current tag: v2.7.37; latest commit: c637042 (heredoc-write confirmation, shipped)
1423
+ - Action this tick: no new drydock bug found; all top patterns have prior fixes in place; retrieval queue already drained; system healthy — no commit warranted
1424
+
1425
+ ## 2026-05-04 00:33 UTC tick
1426
+ - Stress: 1284/1658 (77.4%), PID 2219727, alive (1d 9h+ elapsed), log /tmp/stress_2000_1777732347.log
1427
+ - Write rate: 2% last 97 prompts — expected; batch is "Perf:" prompts (1278-1284 range); model responds with text; 122 total SKIPs (~9.5%), consistent with prior baseline
1428
+ - vLLM 400s: 0 last 30min; llm_balancer healthy on :8001 (PID 2462362); gemma4 docker up; admiral_probe on :8878
1429
+ - GH issues: 0 open
1430
+ - Dispatch queue: harness=17207, retrieval=12 (all already ingested), steering=0; top patterns: bash_generic=6729, thinking_stall=4594, hallucinated_name=3621, search_replace:not_found_loop=1686 — all have prior fixes in agent_loop, bash.py, search_replace.py
1431
+ - Current tag: v2.7.37; latest unshipped commit: c637042 (heredoc-write proactive confirmation — ships at next 06:00 UTC auto-release tick)
1432
+ - Retrieval drain: 12 queue entries, 0 actionable (all recently ingested)
1433
+ - Action this tick: no new actionable drydock bug found; all top dispatch patterns addressed by prior commits; system healthy — no commit warranted
1434
+
1435
+ ## 2026-05-04 03:04 UTC tick
1436
+ - Stress: 1322/1658 (79.7%), PID 2219727, alive (1d 12h+ elapsed); currently stuck — run has not progressed past 1322 for 5+ min; harness cycling RECYCLE-TUI on every prompt (SKIP: TUI did not accept after 3 retries); rec-check shows log_size=1001717313 (1GB session log) which suggests harness may be watching a stale pre-recycle session instead of the new TUI spawned at 030152 — harness tracking issue, not a drydock source bug
1437
+ - Write rate: 7% last 93 prompts — low but consistent with "Perf:" prompt category (model responds with analysis, not file writes)
1438
+ - vLLM 400s: 0; llm_balancer healthy on :8001 (PID 2462362); gemma4 docker up; admiral 17 interventions today
1439
+ - GH issues: 0 open
1440
+ - Dispatch queue: harness=19624, retrieval=12 (0 actionable), steering=0; recent top patterns: thinking_stall=91, loop:bash_generic=75, search_replace:not_found_loop=19 — all addressed by prior commits; no new actionable pattern found
1441
+ - Investigated: escape_loop (128 total) already fixed in bash.py lines 650-707; tool_error_raised (25) fixed by 9bdd8a3; search_replace not_found_loop (1951) fixed by file-head embed; heredoc_loop fixed by c637042
1442
+ - Retrieval drain: 12 entries, 0 actionable (all recently ingested)
1443
+ - Action this tick: no new drydock bug found; stress run stuck due to harness session-tracking issue after RECYCLE-TUI (not a drydock source issue — per CLAUDE.md rules, harness parameters not to be tuned); no commit warranted; babysitter will restart if stall continues past 900s threshold
1444
+
1445
+ ## 2026-05-04 02:33 UTC tick
1446
+ - Stress: 1314/1658 (79.3%), PID 2219727, alive (1d 11h+ elapsed), log /tmp/stress_2000_1777732347.log
1447
+ - Write rate: 6% last 94 prompts — expected; batch is "Perf:" prompts (1285-1314 range, cycling "batch DB writes / stream large file / compress old logs" etc.); model responds with analysis not edits; not a regression
1448
+ - vLLM 400s: 0 last 30min; llm_balancer healthy on :8001 (PID 2462362); gemma4 docker up 10 days
1449
+ - GH issues: 0 open
1450
+ - Dispatch queue: harness=19260, retrieval=12 (0 actionable, all recently ingested); top recent patterns: bash_generic=8, thinking_stall=6, search_replace:not_found_loop=4, heredoc_loop=2 — all addressed by prior commits (agent_loop inline retry, bash.py proactive confirmation, search_replace file-head embed)
1451
+ - HLE eval: 18/200 complete (1 correct / 5%), PID 2567969 alive (1h47m), currently on q19 which hit a web_search loop (20 identical calls) — harness 8-min timeout fires ~30s from now; normal operation; 4 commits since v2.7.37 are HLE-infra (Telegram + PRD) not shipped yet
1452
+ - Retrieval drain: 0 actionable
1453
+ - Action this tick: no new drydock bug found; all top dispatch patterns covered by prior fixes; system healthy — no commit warranted
@@ -326,7 +326,7 @@ wheels = [
326
326
 
327
327
  [[package]]
328
328
  name = "drydock-cli"
329
- version = "2.7.36"
329
+ version = "2.7.37"
330
330
  source = { editable = "." }
331
331
  dependencies = [
332
332
  { name = "agent-client-protocol" },
@@ -1 +0,0 @@
1
- 2549736
File without changes