drydock-cli 2.6.148__tar.gz → 2.7.0__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 (650) hide show
  1. drydock_cli-2.7.0/.auto_release.lock +1 -0
  2. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/CHANGELOG.md +85 -0
  3. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/PKG-INFO +1 -1
  4. drydock_cli-2.7.0/drydock/core/prompts/__init__.py +56 -0
  5. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/pyproject.toml +1 -1
  6. drydock_cli-2.7.0/research/config_best.toml +145 -0
  7. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/experimenter.py +25 -1
  8. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/kernel.py +65 -8
  9. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/proposer.py +42 -4
  10. drydock_cli-2.7.0/research/results.tsv +2 -0
  11. drydock_cli-2.7.0/research/staged/exp_1776806574_0001.toml +145 -0
  12. drydock_cli-2.7.0/research/staged/exp_1776806920_0002.toml +145 -0
  13. drydock_cli-2.7.0/research/staged/exp_1776807004_0001.toml +145 -0
  14. drydock_cli-2.7.0/research/staged/exp_1776807135_0001.toml +145 -0
  15. drydock_cli-2.7.0/research/traces/exp_1776806574_0001/summary.json +14 -0
  16. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/auto_release.sh +18 -8
  17. drydock_cli-2.7.0/tests/mock/__init__.py +0 -0
  18. drydock_cli-2.6.148/.auto_release.lock +0 -1
  19. drydock_cli-2.6.148/drydock/core/prompts/__init__.py +0 -36
  20. drydock_cli-2.6.148/research/results.tsv +0 -1
  21. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.claude/scheduled_tasks.lock +0 -0
  22. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/CODEOWNERS +0 -0
  23. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  24. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  25. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  26. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/workflows/build-and-upload.yml +0 -0
  27. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/workflows/ci.yml +0 -0
  28. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/workflows/issue-labeler.yml +0 -0
  29. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.github/workflows/release.yml +0 -0
  30. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.gitignore +0 -0
  31. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.pre-commit-config.yaml +0 -0
  32. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.python-version +0 -0
  33. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.typos.toml +0 -0
  34. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.vscode/extensions.json +0 -0
  35. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.vscode/launch.json +0 -0
  36. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/.vscode/settings.json +0 -0
  37. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/AGENTS.md +0 -0
  38. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/Admiral.md +0 -0
  39. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/BASELINE_412.md +0 -0
  40. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/CLAUDE.md +0 -0
  41. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/CONTRIBUTING.md +0 -0
  42. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/DEPLOYMENT.md +0 -0
  43. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/Drydock_rebrand.md +0 -0
  44. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/LICENSE +0 -0
  45. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/MODEL_SHORTCOMINGS.md +0 -0
  46. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/NOTICE +0 -0
  47. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/OVERNIGHT_PROGRESS.md +0 -0
  48. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  49. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/PRD.md +0 -0
  50. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/README.md +0 -0
  51. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/action.yml +0 -0
  52. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/README.md +0 -0
  53. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results1.tsv +0 -0
  54. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results13.tsv +0 -0
  55. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results14.tsv +0 -0
  56. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results15.tsv +0 -0
  57. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results16.tsv +0 -0
  58. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results17.tsv +0 -0
  59. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results18.tsv +0 -0
  60. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results19.tsv +0 -0
  61. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results2.tsv +0 -0
  62. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results20.tsv +0 -0
  63. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results3.tsv +0 -0
  64. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results4.tsv +0 -0
  65. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results5.tsv +0 -0
  66. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results6.tsv +0 -0
  67. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results7.tsv +0 -0
  68. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results8.tsv +0 -0
  69. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results9.tsv +0 -0
  70. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/baseline_history/results_evolved_v1.tsv +0 -0
  71. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/distribution/zed/LICENSE +0 -0
  72. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/distribution/zed/extension.toml +0 -0
  73. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/distribution/zed/icons/mistral_vibe.svg +0 -0
  74. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/docs/README.md +0 -0
  75. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/docs/acp-setup.md +0 -0
  76. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/docs/proxy-setup.md +0 -0
  77. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/__init__.py +0 -0
  78. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/__init__.py +0 -0
  79. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/acp_agent_loop.py +0 -0
  80. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/acp_logger.py +0 -0
  81. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/entrypoint.py +0 -0
  82. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/__init__.py +0 -0
  83. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/base.py +0 -0
  84. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/builtins/bash.py +0 -0
  85. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/builtins/read_file.py +0 -0
  86. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/builtins/search_replace.py +0 -0
  87. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/builtins/todo.py +0 -0
  88. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/builtins/write_file.py +0 -0
  89. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/tools/session_update.py +0 -0
  90. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/acp/utils.py +0 -0
  91. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/__init__.py +0 -0
  92. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/detectors.py +0 -0
  93. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/history.py +0 -0
  94. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/interventions.py +0 -0
  95. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/llm_analyzer.py +0 -0
  96. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/metrics.py +0 -0
  97. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/opus_escalator.py +0 -0
  98. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/persistence.py +0 -0
  99. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/policy.py +0 -0
  100. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/proposer.py +0 -0
  101. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/stager.py +0 -0
  102. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/task_classifier.py +0 -0
  103. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/tuning.py +0 -0
  104. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/validator.py +0 -0
  105. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/admiral/worker.py +0 -0
  106. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/__init__.py +0 -0
  107. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/autocompletion/__init__.py +0 -0
  108. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/autocompletion/base.py +0 -0
  109. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/autocompletion/path_completion.py +0 -0
  110. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/autocompletion/slash_command.py +0 -0
  111. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/cli.py +0 -0
  112. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/clipboard.py +0 -0
  113. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/commands.py +0 -0
  114. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/entrypoint.py +0 -0
  115. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/history_manager.py +0 -0
  116. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  117. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  118. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  119. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/terminal_setup.py +0 -0
  120. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/__init__.py +0 -0
  121. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  122. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/app.py +0 -0
  123. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/app.tcss +0 -0
  124. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/external_editor.py +0 -0
  125. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  126. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  127. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  128. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  129. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  130. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  131. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  132. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  133. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  134. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  135. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  136. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  137. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  138. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  139. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  140. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  141. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  142. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  143. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  144. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  145. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  146. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  147. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  148. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  149. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  150. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  151. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  152. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  153. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  154. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  155. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  156. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  157. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  158. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  159. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  160. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  161. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  162. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/windowing/history.py +0 -0
  163. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  164. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/textual_ui/windowing/state.py +0 -0
  165. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/__init__.py +0 -0
  166. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  167. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  168. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  169. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  170. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  171. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/update.py +0 -0
  172. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/cli/update_notifier/whats_new.py +0 -0
  173. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/__init__.py +0 -0
  174. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/agent_loop.py +0 -0
  175. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/agents/__init__.py +0 -0
  176. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/agents/manager.py +0 -0
  177. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/agents/models.py +0 -0
  178. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/auth/__init__.py +0 -0
  179. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/auth/crypto.py +0 -0
  180. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/auth/github.py +0 -0
  181. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/__init__.py +0 -0
  182. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/completers.py +0 -0
  183. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  184. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  185. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  186. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  187. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  188. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/fuzzy.py +0 -0
  189. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/path_prompt.py +0 -0
  190. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  191. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/build_orchestrator.py +0 -0
  192. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/checkpoint.py +0 -0
  193. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/__init__.py +0 -0
  194. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/_settings.py +0 -0
  195. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/doctor.py +0 -0
  196. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/harness_files/__init__.py +0 -0
  197. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  198. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/config/harness_files/_paths.py +0 -0
  199. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/consultant.py +0 -0
  200. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/drydock_states.py +0 -0
  201. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/hooks.py +0 -0
  202. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/__init__.py +0 -0
  203. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/anthropic.py +0 -0
  204. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/base.py +0 -0
  205. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/factory.py +0 -0
  206. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/generic.py +0 -0
  207. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/mistral.py +0 -0
  208. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  209. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/backend/vertex.py +0 -0
  210. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/exceptions.py +0 -0
  211. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/format.py +0 -0
  212. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/message_utils.py +0 -0
  213. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/llm/types.py +0 -0
  214. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/logger.py +0 -0
  215. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/middleware.py +0 -0
  216. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/output_formatters.py +0 -0
  217. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/paths/__init__.py +0 -0
  218. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/paths/_drydock_home.py +0 -0
  219. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/paths/_local_config_walk.py +0 -0
  220. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/paths/conventions.py +0 -0
  221. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/plan_session.py +0 -0
  222. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/plugins.py +0 -0
  223. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/programmatic.py +0 -0
  224. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/builder.md +0 -0
  225. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/cli.md +0 -0
  226. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/compact.md +0 -0
  227. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/dangerous_directory.md +0 -0
  228. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/diagnostic.md +0 -0
  229. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/explore.md +0 -0
  230. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/gemma4.md +0 -0
  231. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/planner.md +0 -0
  232. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/project_context.md +0 -0
  233. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/prompts/tests.md +0 -0
  234. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/proxy_setup.py +0 -0
  235. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/agent_memory.py +0 -0
  236. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/checkpoints.py +0 -0
  237. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/session_loader.py +0 -0
  238. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/session_logger.py +0 -0
  239. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/session_migration.py +0 -0
  240. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session/state_file.py +0 -0
  241. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/session_checker.py +0 -0
  242. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/skills/__init__.py +0 -0
  243. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/skills/manager.py +0 -0
  244. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/skills/models.py +0 -0
  245. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/skills/parser.py +0 -0
  246. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/slug.py +0 -0
  247. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/system_prompt.py +0 -0
  248. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/telemetry/__init__.py +0 -0
  249. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/telemetry/send.py +0 -0
  250. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/teleport/errors.py +0 -0
  251. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/teleport/git.py +0 -0
  252. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/teleport/nuage.py +0 -0
  253. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/teleport/teleport.py +0 -0
  254. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/teleport/types.py +0 -0
  255. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/base.py +0 -0
  256. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/_task_manager.py +0 -0
  257. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  258. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/bash.py +0 -0
  259. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/cron.py +0 -0
  260. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  261. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/glob_tool.py +0 -0
  262. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/grep.py +0 -0
  263. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  264. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/lsp.py +0 -0
  265. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  266. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  267. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/powershell.py +0 -0
  268. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  269. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  270. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  271. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  272. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  273. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  274. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  275. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  276. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  277. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  278. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  279. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  280. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  281. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  282. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/task.md +0 -0
  283. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  284. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  285. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  286. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  287. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  288. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  289. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  290. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/read_file.py +0 -0
  291. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/search_replace.py +0 -0
  292. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/task.py +0 -0
  293. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/todo.py +0 -0
  294. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/tool_search.py +0 -0
  295. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/webfetch.py +0 -0
  296. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/websearch.py +0 -0
  297. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/worktree.py +0 -0
  298. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/builtins/write_file.py +0 -0
  299. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/injection_guard.py +0 -0
  300. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/manager.py +0 -0
  301. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/mcp/__init__.py +0 -0
  302. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/mcp/registry.py +0 -0
  303. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/mcp/tools.py +0 -0
  304. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/mcp_sampling.py +0 -0
  305. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/ui.py +0 -0
  306. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/tools/utils.py +0 -0
  307. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/trusted_folders.py +0 -0
  308. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/types.py +0 -0
  309. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/core/utils.py +0 -0
  310. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/__init__.py +0 -0
  311. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/base.py +0 -0
  312. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/onboarding.tcss +0 -0
  313. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/screens/__init__.py +0 -0
  314. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/screens/api_key.py +0 -0
  315. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/screens/choice.py +0 -0
  316. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/screens/local_model.py +0 -0
  317. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/onboarding/screens/welcome.py +0 -0
  318. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  319. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  320. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/__init__.py +0 -0
  321. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/api-design/SKILL.md +0 -0
  322. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/audit-tests/SKILL.md +0 -0
  323. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/batch/SKILL.md +0 -0
  324. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/commit-code/SKILL.md +0 -0
  325. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/context-summary/SKILL.md +0 -0
  326. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/create-presentation/SKILL.md +0 -0
  327. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/deep-research/SKILL.md +0 -0
  328. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/deploy/SKILL.md +0 -0
  329. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/diff-review/SKILL.md +0 -0
  330. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/doc-gen/SKILL.md +0 -0
  331. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/explain-code/SKILL.md +0 -0
  332. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/explore-code/SKILL.md +0 -0
  333. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/fix-issue/SKILL.md +0 -0
  334. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/git-ops/SKILL.md +0 -0
  335. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/init-project/SKILL.md +0 -0
  336. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/investigate/SKILL.md +0 -0
  337. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/loop/SKILL.md +0 -0
  338. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/migrate/SKILL.md +0 -0
  339. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/perf-analyze/SKILL.md +0 -0
  340. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/plan-impl/SKILL.md +0 -0
  341. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/pr-review/SKILL.md +0 -0
  342. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/refactor/SKILL.md +0 -0
  343. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/regex-help/SKILL.md +0 -0
  344. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/review/SKILL.md +0 -0
  345. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/security-review/SKILL.md +0 -0
  346. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/ship/SKILL.md +0 -0
  347. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/simplify/SKILL.md +0 -0
  348. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/strong-tests/SKILL.md +0 -0
  349. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/skills/test-verify/SKILL.md +0 -0
  350. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock/whats_new.md +0 -0
  351. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock-acp.spec +0 -0
  352. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/drydock_terms.md +0 -0
  353. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/flake.lock +0 -0
  354. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/flake.nix +0 -0
  355. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/README.md +0 -0
  356. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/config_base.toml +0 -0
  357. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/domain_spec.md +0 -0
  358. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/mini_prd.md +0 -0
  359. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/research/mini_prompts.txt +0 -0
  360. /drydock_cli-2.6.148/tests/backend/__init__.py → /drydock_cli-2.7.0/research/traces/exp_1776806574_0001/rec_check.jsonl +0 -0
  361. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/README.md +0 -0
  362. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/admiral_probe.py +0 -0
  363. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/audit_sampler.py +0 -0
  364. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/auto_generate_tests.py +0 -0
  365. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/auto_test_loop.sh +0 -0
  366. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/backup.sh +0 -0
  367. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/bump_version.py +0 -0
  368. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/comprehensive_loop.py +0 -0
  369. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/deploy_to_github.sh +0 -0
  370. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/discover_cli_tools.sh +0 -0
  371. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/evolve_tests.py +0 -0
  372. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/gen_2000_prompts.py +0 -0
  373. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/install.sh +0 -0
  374. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/llm_balancer.py +0 -0
  375. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/mega_loop.py +0 -0
  376. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/meta_ralph_loop.py +0 -0
  377. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/monitor_swebench.sh +0 -0
  378. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/monitor_test_battery.sh +0 -0
  379. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/notify_release.py +0 -0
  380. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/oss_task_harness.py +0 -0
  381. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/overnight_agents_test.sh +0 -0
  382. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/poll_issues.sh +0 -0
  383. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/port_task.py +0 -0
  384. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/prepare_release.py +0 -0
  385. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/publish_to_pypi.sh +0 -0
  386. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/ralph_loop.py +0 -0
  387. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/session_loop_audit.py +0 -0
  388. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/shakedown.py +0 -0
  389. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/shakedown_interactive.py +0 -0
  390. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/shakedown_regression.sh +0 -0
  391. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/shakedown_suite.sh +0 -0
  392. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/shakedown_variance.sh +0 -0
  393. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_babysitter.sh +0 -0
  394. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_prompts_50.txt +0 -0
  395. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_prompts_realuser.txt +0 -0
  396. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_prompts_tool_agent.txt +0 -0
  397. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  398. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_shakedown.py +0 -0
  399. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_telegram_status.py +0 -0
  400. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/stress_watcher.py +0 -0
  401. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/telegram_bot.py +0 -0
  402. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/test_bank.sh +0 -0
  403. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/test_full.sh +0 -0
  404. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/test_smoke.sh +0 -0
  405. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/test_tui_path.py +0 -0
  406. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/tui_test.py +0 -0
  407. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/scripts/vllm_failover.sh +0 -0
  408. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/__init__.py +0 -0
  409. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/conftest.py +0 -0
  410. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_acp.py +0 -0
  411. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_agent_thought.py +0 -0
  412. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_bash.py +0 -0
  413. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_compact_session_updates.py +0 -0
  414. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_content.py +0 -0
  415. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_initialize.py +0 -0
  416. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_list_sessions.py +0 -0
  417. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_load_session.py +0 -0
  418. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_multi_session.py +0 -0
  419. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_new_session.py +0 -0
  420. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_proxy_setup_acp.py +0 -0
  421. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_read_file.py +0 -0
  422. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_search_replace.py +0 -0
  423. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_set_config_option.py +0 -0
  424. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_set_mode.py +0 -0
  425. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_set_model.py +0 -0
  426. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_tool_call_session_update.py +0 -0
  427. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_utils.py +0 -0
  428. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/acp/test_write_file.py +0 -0
  429. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_file_indexer.py +0 -0
  430. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_fuzzy.py +0 -0
  431. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  432. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  433. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_path_completion_controller.py +0 -0
  434. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  435. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_slash_command_controller.py +0 -0
  436. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  437. {drydock_cli-2.6.148/tests/cli/textual_ui → drydock_cli-2.7.0/tests/backend}/__init__.py +0 -0
  438. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/data/__init__.py +0 -0
  439. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/data/fireworks.py +0 -0
  440. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/data/mistral.py +0 -0
  441. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/test_anthropic_adapter.py +0 -0
  442. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/test_backend.py +0 -0
  443. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/test_reasoning_adapter.py +0 -0
  444. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  445. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  446. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  447. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  448. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_bell_notifications.py +0 -0
  449. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_braille_renderer.py +0 -0
  450. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_clipboard.py +0 -0
  451. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_commands.py +0 -0
  452. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_copy_shortcuts.py +0 -0
  453. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_external_editor.py +0 -0
  454. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_no_markup_static.py +0 -0
  455. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_question_app.py +0 -0
  456. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_spinner.py +0 -0
  457. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_switching_mode.py +0 -0
  458. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  459. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  460. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_ui_session_resume.py +0 -0
  461. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/test_ui_skill_dispatch.py +0 -0
  462. {drydock_cli-2.6.148/tests/mock → drydock_cli-2.7.0/tests/cli/textual_ui}/__init__.py +0 -0
  463. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/cli/textual_ui/test_session_picker.py +0 -0
  464. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/conftest.py +0 -0
  465. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_agents.py +0 -0
  466. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_auth_crypto.py +0 -0
  467. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_auth_github.py +0 -0
  468. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_config_load_dotenv.py +0 -0
  469. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_config_paths.py +0 -0
  470. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_config_resolution.py +0 -0
  471. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_file_logging.py +0 -0
  472. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_plan_session.py +0 -0
  473. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_proxy_setup.py +0 -0
  474. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_slug.py +0 -0
  475. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_telemetry_send.py +0 -0
  476. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_teleport_git.py +0 -0
  477. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_teleport_nuage.py +0 -0
  478. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_teleport_service.py +0 -0
  479. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_trusted_folders.py +0 -0
  480. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/core/test_utils.py +0 -0
  481. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/common.py +0 -0
  482. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/conftest.py +0 -0
  483. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/mock_server.py +0 -0
  484. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  485. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/test_cli_tui_streaming.py +0 -0
  486. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  487. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/fixtures/doc_qa_system_prd.md +0 -0
  488. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/mock/mock_backend_factory.py +0 -0
  489. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/mock/mock_entrypoint.py +0 -0
  490. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/mock/utils.py +0 -0
  491. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/onboarding/test_run_onboarding.py +0 -0
  492. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/onboarding/test_ui_onboarding.py +0 -0
  493. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/session/test_session_loader.py +0 -0
  494. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/session/test_session_logger.py +0 -0
  495. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/session/test_session_migration.py +0 -0
  496. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/skills/conftest.py +0 -0
  497. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/skills/test_manager.py +0 -0
  498. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/skills/test_models.py +0 -0
  499. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/skills/test_parser.py +0 -0
  500. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  501. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  502. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  503. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  504. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  505. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  506. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  507. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  508. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  509. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  510. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  511. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  512. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  513. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  514. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  515. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  516. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  517. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  518. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  519. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  520. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  521. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  522. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  523. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  524. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  525. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  526. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  527. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  528. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  529. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  530. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  531. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  532. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  533. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  534. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  535. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  536. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  537. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  538. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  539. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  540. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  541. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  542. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  543. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  544. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  545. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  546. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  547. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  548. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  549. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  550. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  551. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  552. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  553. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  554. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  555. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  556. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  557. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  558. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  559. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  560. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/base_snapshot_test_app.py +0 -0
  561. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/conftest.py +0 -0
  562. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/snap_compare.py +0 -0
  563. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  564. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  565. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  566. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  567. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  568. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  569. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  570. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  571. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  572. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  573. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  574. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  575. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  576. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  577. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/stubs/fake_backend.py +0 -0
  578. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/stubs/fake_client.py +0 -0
  579. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/stubs/fake_tool.py +0 -0
  580. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_admiral.py +0 -0
  581. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_admiral_phase3.py +0 -0
  582. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_auto_compact.py +0 -0
  583. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_backend.py +0 -0
  584. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_observer_streaming.py +0 -0
  585. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_stats.py +0 -0
  586. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_tasks.py +0 -0
  587. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agent_tool_call.py +0 -0
  588. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_agents.py +0 -0
  589. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_build.py +0 -0
  590. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_debug.py +0 -0
  591. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_multiagent.py +0 -0
  592. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_prd.py +0 -0
  593. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_prd_extended.py +0 -0
  594. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_tools.py +0 -0
  595. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_bank_update.py +0 -0
  596. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_build_projects.py +0 -0
  597. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_checkpoint.py +0 -0
  598. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_cli_programmatic_preload.py +0 -0
  599. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_current_bugs.py +0 -0
  600. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_drydock_regression.py +0 -0
  601. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_drydock_tasks.py +0 -0
  602. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_full_regression.py +0 -0
  603. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_history_manager.py +0 -0
  604. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_integration.py +0 -0
  605. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_issue_fixes.py +0 -0
  606. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_loop_detection.py +0 -0
  607. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_message_id.py +0 -0
  608. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_message_merging.py +0 -0
  609. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_middleware.py +0 -0
  610. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_multi_agent.py +0 -0
  611. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_real_failures.py +0 -0
  612. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_real_issues.py +0 -0
  613. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_real_workflow.py +0 -0
  614. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_reasoning_content.py +0 -0
  615. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_smoke.py +0 -0
  616. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_system_prompt.py +0 -0
  617. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_tagged_text.py +0 -0
  618. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_tool_args.py +0 -0
  619. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_ui_external_editor.py +0 -0
  620. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_ui_input_history.py +0 -0
  621. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_user_issues.py +0 -0
  622. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/test_workloads.py +0 -0
  623. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/testbank_helpers.py +0 -0
  624. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_ask_user_question.py +0 -0
  625. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_bash.py +0 -0
  626. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_exit_plan_mode.py +0 -0
  627. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_grep.py +0 -0
  628. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_invoke_context.py +0 -0
  629. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_manager_get_tool_config.py +0 -0
  630. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_mcp.py +0 -0
  631. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_mcp_sampling.py +0 -0
  632. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_task.py +0 -0
  633. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_ui_bash_execution.py +0 -0
  634. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_webfetch.py +0 -0
  635. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/tools/test_websearch.py +0 -0
  636. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  637. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  638. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_do_update.py +0 -0
  639. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  640. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_github_update_gateway.py +0 -0
  641. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  642. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_ui_update_notification.py +0 -0
  643. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_update_use_case.py +0 -0
  644. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/tests/update_notifier/test_whats_new.py +0 -0
  645. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/uv.lock +0 -0
  646. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/worked_examples/README.md +0 -0
  647. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/worked_examples/cli_subcommand_dispatch.py +0 -0
  648. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/worked_examples/lookup.json +0 -0
  649. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/worked_examples/sql_parser.py +0 -0
  650. {drydock_cli-2.6.148 → drydock_cli-2.7.0}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 2797280
@@ -5,6 +5,91 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.7.0] - 2026-04-21
9
+
10
+ ### Added
11
+
12
+ - **Meta-Harness autoresearch loop** (`research/` subsystem). Opus-driven
13
+ search over a bounded mutation surface. Fixed 5-minute kernel,
14
+ append-only results log, contrastive proposer with access to source +
15
+ top/bottom traces. See `research/domain_spec.md` for the design.
16
+ - **Admiral actuator**: `scripts/stress_watcher.py` sends SIGUSR1 to the
17
+ stress harness on unrecoverable TUI wedges; the harness respawns its
18
+ drydock child at the next iteration boundary. Rate-limited. First loop
19
+ where admiral *acts* on its observations.
20
+ - **Env override surface** for experiments:
21
+ `DRYDOCK_AUTO_CONTINUE_DISABLE`,
22
+ `DRYDOCK_STRESS_{SESSION_RESET_EVERY,MAX_CONSECUTIVE_SKIPS_BEFORE_RESET,SEND_PROMPT_RETRY_COUNT,SEND_PROMPT_WAIT_PER_RETRY_SEC}`,
23
+ `DRYDOCK_ADMIRAL_{REPEAT_WARNING_THRESHOLD,REPEAT_FORCE_STOP_THRESHOLD,EMPTY_RESULT_THRESHOLD,SAME_TOOL_NAME_REPEAT_LIMIT_{BASH,READ}}`,
24
+ `DRYDOCK_PROMPTS_DIR`. All default to the prior hardcoded values;
25
+ production behavior unchanged.
26
+ - **`DEPLOYMENT.md`**: known-working hardware + vLLM Docker flags +
27
+ `~/.drydock/config.toml` template + env var table + diagnostic
28
+ checklist. Answers the "works on your machine, not mine" question.
29
+ - **`scripts/stress_babysitter.sh`**: hourly monitor cron that
30
+ auto-restarts long stress runs from the last successful step. Silent
31
+ when healthy; Telegrams only on state change.
32
+ - **Check 0 empty-result loop detector** in `agent_loop.py`. Fires
33
+ FORCE_STOP at 3 identical tool calls when the result matches an
34
+ empty pattern (`total_count: 0`, `no todos`, `no tasks`,
35
+ `no matches`, blank). Catches todo / task / grep-empty loops that
36
+ Check 1's threshold-of-8 is too lax for.
37
+ - **Proactive write-oscillation prune** in
38
+ `_sanitize_message_ordering`. Any path with ≥3 `write_file` history
39
+ entries gets its older copies pruned before the next LLM call, so
40
+ context stays below Gemma 4's 131K ceiling instead of waiting for
41
+ a 400.
42
+ - **Raw-markdown leakage detector** in stress harness + admiral.
43
+ Surfaces TUI rendering regressions as `stress-alert/raw-markdown-
44
+ leakage` on the admiral dashboard.
45
+ - **`OVERNIGHT_PROGRESS.md`** session-continuity doc template.
46
+
47
+ ### Changed
48
+
49
+ - **`should_break_loop`** in `agent_loop.py:876` — the condition
50
+ `tool_turns == 0` was unreachable since the file's current structure
51
+ landed. Text-only assistant responses now cleanly close the user
52
+ turn instead of regenerating until `PER_PROMPT_BUDGET_SEC` times
53
+ out. **This is a behavior fix users will notice immediately** —
54
+ questions the model asks now wait for input.
55
+ - **Continue-loop**: env-gated via `DRYDOCK_AUTO_CONTINUE_DISABLE=1`
56
+ so stress runs (and any workflow hitting text-only prompt loops)
57
+ can opt out.
58
+ - **`SESSION_ROOT` resolution** in `scripts/shakedown_interactive.py`:
59
+ now reads the path from `~/.drydock/config.toml`'s
60
+ `[session_logging].save_dir` instead of hardcoding
61
+ `~/.drydock/logs/session/`. Fixes false-SKIP reporting on any
62
+ machine whose drydock config has the newer default
63
+ `~/.vibe/logs/session/`.
64
+ - **Todo tool** (`todo.py`): empty-read response now escalates.
65
+ First empty: *"No todos yet. Write one or proceed with the task."*
66
+ Second+: *"Still no todos. Stop calling read. Empty state will
67
+ not change on its own."* Closes GitHub #10.
68
+ - **Fresh-start wipe** in stress harness: wipes cwd to fixtures
69
+ (PRD/AGENTS/functional_tests) instead of accumulating prior
70
+ runs' half-written artifacts.
71
+ - **Raw-markdown detector** patterns tightened (`**bold**`,
72
+ `##heading`, `[link](url)` only — dropped bullet + numbered-list
73
+ patterns that matched rendered lists and generated 45 % false
74
+ positives).
75
+
76
+ ### Infrastructure
77
+
78
+ - First clean 1658-prompt stress run completed 2026-04-21.
79
+ ~1622 successful prompts (run + babysitter auto-restart),
80
+ 35 SKIPs, 0 TIMEOUTs, ~60 admiral-initiated TUI recycles.
81
+ ~46-hour wall-clock. Reference baseline for future experiments.
82
+ - `scripts/auto_release.sh` supports `DRYDOCK_FORCE_VERSION` for
83
+ MINOR / MAJOR bumps (the ordinary PATCH-bumper would have taken
84
+ us to 2.6.149, not 2.7.0).
85
+
86
+ ### Known follow-ups
87
+
88
+ - Meta-Harness median-of-3 replication before promotion (currently
89
+ single-sample).
90
+ - TUI Markdown widget regression surfaced by admiral but not yet
91
+ fixed.
92
+
8
93
  ## [2.4.2] - 2026-03-12
9
94
 
10
95
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.6.148
3
+ Version: 2.7.0
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
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from enum import StrEnum, auto
5
+ from pathlib import Path
6
+
7
+ from drydock import DRYDOCK_ROOT
8
+
9
+ _PROMPTS_DIR = DRYDOCK_ROOT / "core" / "prompts"
10
+
11
+
12
+ def _resolve_prompt_path(name: str) -> Path:
13
+ """Return the .md file for a prompt name.
14
+
15
+ If DRYDOCK_PROMPTS_DIR is set and contains a matching file, use that
16
+ override. Falls back to the shipped prompt. Used by the Meta-Harness
17
+ research kernel (research/kernel.py) to swap in per-experiment
18
+ prompt variants without mutating the installed package.
19
+
20
+ Missing override file = use shipped (not an error) so experiments
21
+ can mutate only gemma4 without also overriding every other prompt.
22
+ """
23
+ override_dir = os.environ.get("DRYDOCK_PROMPTS_DIR", "")
24
+ if override_dir:
25
+ candidate = Path(override_dir) / f"{name}.md"
26
+ if candidate.is_file():
27
+ return candidate
28
+ return (_PROMPTS_DIR / name).with_suffix(".md")
29
+
30
+
31
+ class Prompt(StrEnum):
32
+ @property
33
+ def path(self) -> Path:
34
+ return _resolve_prompt_path(self.value)
35
+
36
+ def read(self) -> str:
37
+ return self.path.read_text(encoding="utf-8").strip()
38
+
39
+
40
+ class SystemPrompt(Prompt):
41
+ CLI = auto()
42
+ EXPLORE = auto()
43
+ TESTS = auto()
44
+ BUILDER = auto()
45
+ PLANNER = auto()
46
+ DIAGNOSTIC = auto()
47
+ GEMMA4 = auto()
48
+
49
+
50
+ class UtilityPrompt(Prompt):
51
+ COMPACT = auto()
52
+ DANGEROUS_DIRECTORY = auto()
53
+ PROJECT_CONTEXT = auto()
54
+
55
+
56
+ __all__ = ["SystemPrompt", "UtilityPrompt"]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.6.148"
3
+ version = "2.7.0"
4
4
  description = "Local-first CLI coding agent — tested with Gemma 4 26B via vLLM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,145 @@
1
+ [target]
2
+ model = "mistral-vibe-cli-latest"
3
+ task = "unknown"
4
+
5
+ [[knob]]
6
+ name = "per_prompt_budget_sec"
7
+ default = 300
8
+ min = 300
9
+ max = 3600
10
+ mutable = true
11
+ why = "Hard ceiling on a single user turn. Too low wastes work; too high lets loops run wild."
12
+ value = 600
13
+
14
+ [[knob]]
15
+ name = "hard_stop_tool_calls"
16
+ default = 100
17
+ min = 30
18
+ max = 250
19
+ mutable = true
20
+ why = "HARD_STOP_CALLS in agent_loop. Cap on tool-call depth per user turn."
21
+
22
+ [[knob]]
23
+ name = "wrap_up_warn_at"
24
+ default = 40
25
+ min = 10
26
+ max = 100
27
+ mutable = true
28
+ why = "First progressive nudge. Earlier = tighter turns, may lose quality."
29
+
30
+ [[knob]]
31
+ name = "stop_now_warn_at"
32
+ default = 60
33
+ min = 20
34
+ max = 150
35
+ mutable = true
36
+ why = "Second progressive nudge. Gemma often ignores the wrap-up; this is the harder prod."
37
+
38
+ [[knob]]
39
+ name = "temperature"
40
+ default = 0.3
41
+ min = 0.0
42
+ max = 0.9
43
+ mutable = true
44
+ why = "Sampling temperature. Lower = more deterministic; higher = more exploration."
45
+
46
+ [[knob]]
47
+ name = "loop_detector_window"
48
+ default = 3
49
+ min = 2
50
+ max = 6
51
+ mutable = true
52
+ why = "How many consecutive identical tool calls trigger the loop advisor."
53
+
54
+ [[knob]]
55
+ name = "struggle_threshold"
56
+ default = 20
57
+ min = 10
58
+ max = 40
59
+ mutable = true
60
+ why = "Reads-without-a-write before admiral fires the struggle directive."
61
+
62
+ [env_flags]
63
+ DRYDOCK_AUTO_CONTINUE_DISABLE = "1"
64
+
65
+ [prompts.gemma4]
66
+ source_path = ""
67
+ mutable = true
68
+ why = "Single highest-leverage mutable target. Governs how Gemma 4 interprets every turn."
69
+
70
+ [prompts.cli]
71
+ source_path = ""
72
+ mutable = true
73
+ why = "Alternate non-Gemma system prompt. Rarely the right target but available for cross-model experiments."
74
+
75
+ [[harness_threshold]]
76
+ name = "MAX_CONSECUTIVE_SKIPS_BEFORE_RESET"
77
+ default = 2
78
+ min = 1
79
+ max = 5
80
+ mutable = true
81
+ why = "Force ESC+/clear after N consecutive SKIPs. Lower = aggressive recycling; higher = tolerant of transient wedges."
82
+
83
+ [[harness_threshold]]
84
+ name = "SESSION_RESET_EVERY"
85
+ default = 15
86
+ min = 5
87
+ max = 50
88
+ mutable = true
89
+ why = "Periodic /clear cadence in prompts. Tight cadence bounds context but costs reset overhead every N prompts."
90
+
91
+ [[harness_threshold]]
92
+ name = "SEND_PROMPT_RETRY_COUNT"
93
+ default = 3
94
+ min = 1
95
+ max = 6
96
+ mutable = true
97
+ why = "How many times send_prompt_and_confirm re-types before marking SKIP. Each retry is ~120s."
98
+
99
+ [[harness_threshold]]
100
+ name = "SEND_PROMPT_WAIT_PER_RETRY_SEC"
101
+ default = 120
102
+ min = 30
103
+ max = 300
104
+ mutable = true
105
+ why = "Seconds to wait for user-msg confirmation before retyping. Tighter = faster SKIP, may miss slow prompts."
106
+
107
+ [[admiral_detector]]
108
+ name = "REPEAT_WARNING_THRESHOLD"
109
+ default = 4
110
+ min = 2
111
+ max = 8
112
+ mutable = true
113
+ why = "Consecutive identical tool calls before a WARNING. Lower = early nudge; higher = tolerant of legit repetition."
114
+
115
+ [[admiral_detector]]
116
+ name = "REPEAT_FORCE_STOP_THRESHOLD"
117
+ default = 8
118
+ min = 4
119
+ max = 20
120
+ mutable = true
121
+ why = "Consecutive identical tool calls before FORCE_STOP. Must be >= REPEAT_WARNING_THRESHOLD."
122
+
123
+ [[admiral_detector]]
124
+ name = "EMPTY_RESULT_THRESHOLD"
125
+ default = 3
126
+ min = 2
127
+ max = 6
128
+ mutable = true
129
+ why = "Check 0 (empty-result loop). Fire FORCE_STOP after N identical-call + empty-result in a row."
130
+
131
+ [[admiral_detector]]
132
+ name = "SAME_TOOL_NAME_REPEAT_LIMIT_BASH"
133
+ default = 5
134
+ min = 3
135
+ max = 10
136
+ mutable = true
137
+ why = "Same-tool repetition limit for bash. Different from read/grep which need more headroom."
138
+
139
+ [[admiral_detector]]
140
+ name = "SAME_TOOL_NAME_REPEAT_LIMIT_READ"
141
+ default = 7
142
+ min = 4
143
+ max = 12
144
+ mutable = true
145
+ why = "Same-tool repetition limit for read_file + grep. Investigation tools legitimately repeat more."
@@ -135,10 +135,34 @@ def mutate_opus(cfg: dict) -> tuple[dict, str] | None:
135
135
  elif target == "env_flag":
136
136
  flags = new.setdefault("env_flags", {})
137
137
  flags[name] = str(value)
138
+ elif target == "prompt":
139
+ # Materialize the proposed prompt to a candidate-local file and
140
+ # point the variant's source_path at it. The kernel will copy
141
+ # this into the isolated HOME's DRYDOCK_PROMPTS_DIR at spawn.
142
+ # Staging dir mirrors the variant toml: one sibling per exp.
143
+ # Using a stable-per-variant name (no exp_id here yet — caller
144
+ # provides it via the outer staged path). We write into the
145
+ # per-variant staged_prompts subdir and let the kernel resolve.
146
+ prompts = new.setdefault("prompts", {})
147
+ prompt_entry = prompts.setdefault(name, {})
148
+ prompts_dir = STAGED_DIR / "prompts"
149
+ prompts_dir.mkdir(parents=True, exist_ok=True)
150
+ # Use a content-hash so concurrent / retried variants don't
151
+ # stomp each other. Kernel reads the file by source_path.
152
+ import hashlib as _hashlib
153
+ h = _hashlib.sha1(str(value).encode()).hexdigest()[:12]
154
+ target_file = prompts_dir / f"{name}_{h}.md"
155
+ target_file.write_text(str(value))
156
+ prompt_entry["source_path"] = str(target_file)
157
+ prompt_entry["mutable"] = True
138
158
  else:
139
159
  return None
140
160
 
141
- desc = f"opus {target}:{name} -> {value} ({reason})"
161
+ if target == "prompt":
162
+ size = len(str(value))
163
+ desc = f"opus prompt:{name} -> [{size} chars] ({reason})"
164
+ else:
165
+ desc = f"opus {target}:{name} -> {value} ({reason})"
142
166
  return new, desc
143
167
 
144
168
 
@@ -93,14 +93,46 @@ def setup_isolated_home(tmpdir: Path, cfg: dict) -> tuple[Path, Path, Path]:
93
93
  drydock_dir.mkdir(parents=True)
94
94
  cwd.mkdir(parents=True)
95
95
 
96
- # Drydock config — point session_logging at the isolated session dir.
97
- # Everything else falls back to drydock defaults.
98
- (drydock_dir / "config.toml").write_text(
99
- '[session_logging]\n'
100
- f'save_dir = "{session_root}"\n'
101
- 'session_prefix = "session"\n'
102
- 'enabled = true\n'
103
- )
96
+ # Drydock config — parse the USER'S real ~/.drydock/config.toml
97
+ # (so providers + models + tool permissions + MCP servers carry
98
+ # through) and overwrite ONLY [session_logging] with the
99
+ # per-experiment path. First pass just appended a second
100
+ # [session_logging] table, which tomllib correctly rejects with
101
+ # "Cannot declare ('session_logging',) twice". Parse → mutate →
102
+ # re-serialize is the only safe overlay.
103
+ real_config = Path.home() / ".drydock" / "config.toml"
104
+ base: dict = {}
105
+ if real_config.is_file():
106
+ try:
107
+ with real_config.open("rb") as f:
108
+ base = tomllib.load(f)
109
+ except (tomllib.TOMLDecodeError, OSError):
110
+ base = {}
111
+ base["session_logging"] = {
112
+ "save_dir": str(session_root),
113
+ "session_prefix": "session",
114
+ "enabled": True,
115
+ }
116
+ try:
117
+ import tomli_w
118
+ with (drydock_dir / "config.toml").open("wb") as f:
119
+ tomli_w.dump(base, f)
120
+ except ImportError:
121
+ # Fallback: if tomli_w isn't available, write just the minimal
122
+ # config. Drydock will start but without the user's providers
123
+ # — experiments will fail, but at least with a clear error.
124
+ (drydock_dir / "config.toml").write_text(
125
+ '[session_logging]\n'
126
+ f'save_dir = "{session_root}"\n'
127
+ 'session_prefix = "session"\n'
128
+ 'enabled = true\n'
129
+ )
130
+ # Trust the isolated cwd so drydock doesn't pop the modal — this
131
+ # is what shakedown_interactive's harness handles inline, but from
132
+ # a fresh HOME there's nothing to answer yet.
133
+ trusted = drydock_dir / "trusted_folders.toml"
134
+ if not trusted.exists():
135
+ trusted.write_text(f'trusted_folders = ["{cwd}"]\n')
104
136
 
105
137
  # Admiral tuning — write variant knobs keyed on (model, task).
106
138
  knobs = validate_and_collect_knobs(cfg)
@@ -170,6 +202,31 @@ def run_kernel(variant_path: Path, results_tsv: Path,
170
202
  if name and val is not None:
171
203
  env[f"DRYDOCK_ADMIRAL_{name}"] = str(val)
172
204
 
205
+ # Variant prompt overrides. For each [prompts.<name>] with a
206
+ # non-empty source_path, copy into the isolated HOME's prompts
207
+ # dir. DRYDOCK_PROMPTS_DIR tells drydock (see core/prompts/__init__.py)
208
+ # to check there before the shipped prompt. Unset prompts fall
209
+ # through to the installed package defaults.
210
+ prompts_override_dir = home / ".drydock" / "prompts"
211
+ prompts_override_dir.mkdir(parents=True, exist_ok=True)
212
+ any_prompt_override = False
213
+ for prompt_name, entry in (cfg.get("prompts") or {}).items():
214
+ if not isinstance(entry, dict):
215
+ continue
216
+ source_path = entry.get("source_path", "")
217
+ if not source_path:
218
+ continue
219
+ try:
220
+ src = Path(source_path)
221
+ if src.is_file():
222
+ dest = prompts_override_dir / f"{prompt_name}.md"
223
+ dest.write_bytes(src.read_bytes())
224
+ any_prompt_override = True
225
+ except OSError:
226
+ continue
227
+ if any_prompt_override:
228
+ env["DRYDOCK_PROMPTS_DIR"] = str(prompts_override_dir)
229
+
173
230
  log_path = tmpdir / "tui.log"
174
231
  start = time.time()
175
232
 
@@ -19,12 +19,20 @@ Scope (v1 — overnight build):
19
19
 
20
20
  Contract: returns either
21
21
  {
22
- "target": "knob" | "harness_threshold" | "admiral_detector" | "env_flag",
22
+ "target": "knob" | "harness_threshold" | "admiral_detector"
23
+ | "env_flag" | "prompt",
23
24
  "name": "<field-name>",
24
- "value": <numeric or string>,
25
+ "value": <numeric or string; for target=prompt, the FULL new
26
+ prompt text as a string>,
25
27
  "reason": "<≤200 char human-readable>",
26
28
  }
27
29
  or None on any failure — experimenter then falls through to random.
30
+
31
+ For target="prompt", `name` must match a [prompts.<name>] entry with
32
+ mutable=true in config_base.toml (currently "gemma4" or "cli"). The
33
+ value is the complete replacement prompt. The kernel writes it to
34
+ the candidate's isolated prompts dir and the TUI picks it up via
35
+ DRYDOCK_PROMPTS_DIR.
28
36
  """
29
37
  from __future__ import annotations
30
38
 
@@ -38,7 +46,7 @@ import tomllib
38
46
  from pathlib import Path
39
47
 
40
48
  RESEARCH_DIR = Path(__file__).resolve().parent
41
- DRYDOCK_ROOT = RESEARCH_DIR.parent
49
+ DRYDOCK_ROOT = RESEARCH_DIR.parent # /data3/drydock — repo root
42
50
  OPUS_MODEL = "claude-opus-4-7"
43
51
  OPUS_TIMEOUT_SEC = 120
44
52
  MAX_TRACES_EACH_SIDE = 3 # top-N + bottom-N contrastive
@@ -206,6 +214,27 @@ def _build_prompt(config_base: dict, config_best: dict,
206
214
  for r in bottom
207
215
  )
208
216
 
217
+ # Include the current gemma4.md baseline when the proposer might
218
+ # want to mutate it. Opus needs to see what it's replacing.
219
+ def _current_prompt(name: str) -> str:
220
+ prompt_file = DRYDOCK_ROOT / "drydock" / "core" / "prompts" / f"{name}.md"
221
+ try:
222
+ return prompt_file.read_text()
223
+ except OSError:
224
+ return f"<{name}.md unreadable>"
225
+
226
+ prompts_cfg = config_base.get("prompts", {})
227
+ mutable_prompts = {n: e for n, e in prompts_cfg.items()
228
+ if isinstance(e, dict) and e.get("mutable")}
229
+ prompt_bodies_section = ""
230
+ if mutable_prompts:
231
+ prompt_bodies_section = "\n# MUTABLE PROMPT BODIES (current)\n\n"
232
+ for name in mutable_prompts:
233
+ body = _current_prompt(name)
234
+ prompt_bodies_section += (
235
+ f"## prompts.{name}\n\n```\n{body}\n```\n\n"
236
+ )
237
+
209
238
  return f"""You are Meta-Harness Proposer for drydock. Your job is to \
210
239
  propose ONE mutation to the stress-harness config that will improve the \
211
240
  `effective_rate` metric (done_per_minute, cliff at >50% failure).
@@ -221,7 +250,8 @@ within the bounded surface declared in config_base.toml.
221
250
  "harness_thresholds": [h["name"] for h in config_base.get("harness_threshold", [])],
222
251
  "admiral_detectors": [d["name"] for d in config_base.get("admiral_detector", [])],
223
252
  "env_flags": list(config_base.get("env_flags", {}).keys()),
224
- }, indent=2)}
253
+ "prompts": list(mutable_prompts.keys()),
254
+ }, indent=2)}{prompt_bodies_section}
225
255
 
226
256
  # CURRENT-BEST CONFIG
227
257
 
@@ -348,6 +378,14 @@ def _validate_mutation(m: dict, config_base: dict) -> bool:
348
378
  if target == "env_flag":
349
379
  flags = config_base.get("env_flags", {})
350
380
  return name in flags and isinstance(value, str)
381
+ if target == "prompt":
382
+ prompts = config_base.get("prompts", {})
383
+ entry = prompts.get(name)
384
+ if not isinstance(entry, dict) or not entry.get("mutable"):
385
+ return False
386
+ # Prompt value must be a non-empty string; set a sanity cap so
387
+ # a hallucinated 200KB prompt can't blow up context.
388
+ return isinstance(value, str) and 0 < len(value) <= 50_000
351
389
  return False
352
390
 
353
391
 
@@ -0,0 +1,2 @@
1
+ ts exp_id git_commit config_sha metric done skip timeout recycle elapsed_s note
2
+ 1776806910 exp_1776806574_0001 74075e4 81d102021a 0.000 0 6 0 0 329.5 opus knob:per_prompt_budget_sec -> 600 (No trace history yet. Seed search from a tighter per-turn budget (600s vs defaul
@@ -0,0 +1,145 @@
1
+ [target]
2
+ model = "mistral-vibe-cli-latest"
3
+ task = "unknown"
4
+
5
+ [[knob]]
6
+ name = "per_prompt_budget_sec"
7
+ default = 300
8
+ min = 300
9
+ max = 3600
10
+ mutable = true
11
+ why = "Hard ceiling on a single user turn. Too low wastes work; too high lets loops run wild."
12
+ value = 600
13
+
14
+ [[knob]]
15
+ name = "hard_stop_tool_calls"
16
+ default = 100
17
+ min = 30
18
+ max = 250
19
+ mutable = true
20
+ why = "HARD_STOP_CALLS in agent_loop. Cap on tool-call depth per user turn."
21
+
22
+ [[knob]]
23
+ name = "wrap_up_warn_at"
24
+ default = 40
25
+ min = 10
26
+ max = 100
27
+ mutable = true
28
+ why = "First progressive nudge. Earlier = tighter turns, may lose quality."
29
+
30
+ [[knob]]
31
+ name = "stop_now_warn_at"
32
+ default = 60
33
+ min = 20
34
+ max = 150
35
+ mutable = true
36
+ why = "Second progressive nudge. Gemma often ignores the wrap-up; this is the harder prod."
37
+
38
+ [[knob]]
39
+ name = "temperature"
40
+ default = 0.3
41
+ min = 0.0
42
+ max = 0.9
43
+ mutable = true
44
+ why = "Sampling temperature. Lower = more deterministic; higher = more exploration."
45
+
46
+ [[knob]]
47
+ name = "loop_detector_window"
48
+ default = 3
49
+ min = 2
50
+ max = 6
51
+ mutable = true
52
+ why = "How many consecutive identical tool calls trigger the loop advisor."
53
+
54
+ [[knob]]
55
+ name = "struggle_threshold"
56
+ default = 20
57
+ min = 10
58
+ max = 40
59
+ mutable = true
60
+ why = "Reads-without-a-write before admiral fires the struggle directive."
61
+
62
+ [env_flags]
63
+ DRYDOCK_AUTO_CONTINUE_DISABLE = "1"
64
+
65
+ [prompts.gemma4]
66
+ source_path = ""
67
+ mutable = true
68
+ why = "Single highest-leverage mutable target. Governs how Gemma 4 interprets every turn."
69
+
70
+ [prompts.cli]
71
+ source_path = ""
72
+ mutable = true
73
+ why = "Alternate non-Gemma system prompt. Rarely the right target but available for cross-model experiments."
74
+
75
+ [[harness_threshold]]
76
+ name = "MAX_CONSECUTIVE_SKIPS_BEFORE_RESET"
77
+ default = 2
78
+ min = 1
79
+ max = 5
80
+ mutable = true
81
+ why = "Force ESC+/clear after N consecutive SKIPs. Lower = aggressive recycling; higher = tolerant of transient wedges."
82
+
83
+ [[harness_threshold]]
84
+ name = "SESSION_RESET_EVERY"
85
+ default = 15
86
+ min = 5
87
+ max = 50
88
+ mutable = true
89
+ why = "Periodic /clear cadence in prompts. Tight cadence bounds context but costs reset overhead every N prompts."
90
+
91
+ [[harness_threshold]]
92
+ name = "SEND_PROMPT_RETRY_COUNT"
93
+ default = 3
94
+ min = 1
95
+ max = 6
96
+ mutable = true
97
+ why = "How many times send_prompt_and_confirm re-types before marking SKIP. Each retry is ~120s."
98
+
99
+ [[harness_threshold]]
100
+ name = "SEND_PROMPT_WAIT_PER_RETRY_SEC"
101
+ default = 120
102
+ min = 30
103
+ max = 300
104
+ mutable = true
105
+ why = "Seconds to wait for user-msg confirmation before retyping. Tighter = faster SKIP, may miss slow prompts."
106
+
107
+ [[admiral_detector]]
108
+ name = "REPEAT_WARNING_THRESHOLD"
109
+ default = 4
110
+ min = 2
111
+ max = 8
112
+ mutable = true
113
+ why = "Consecutive identical tool calls before a WARNING. Lower = early nudge; higher = tolerant of legit repetition."
114
+
115
+ [[admiral_detector]]
116
+ name = "REPEAT_FORCE_STOP_THRESHOLD"
117
+ default = 8
118
+ min = 4
119
+ max = 20
120
+ mutable = true
121
+ why = "Consecutive identical tool calls before FORCE_STOP. Must be >= REPEAT_WARNING_THRESHOLD."
122
+
123
+ [[admiral_detector]]
124
+ name = "EMPTY_RESULT_THRESHOLD"
125
+ default = 3
126
+ min = 2
127
+ max = 6
128
+ mutable = true
129
+ why = "Check 0 (empty-result loop). Fire FORCE_STOP after N identical-call + empty-result in a row."
130
+
131
+ [[admiral_detector]]
132
+ name = "SAME_TOOL_NAME_REPEAT_LIMIT_BASH"
133
+ default = 5
134
+ min = 3
135
+ max = 10
136
+ mutable = true
137
+ why = "Same-tool repetition limit for bash. Different from read/grep which need more headroom."
138
+
139
+ [[admiral_detector]]
140
+ name = "SAME_TOOL_NAME_REPEAT_LIMIT_READ"
141
+ default = 7
142
+ min = 4
143
+ max = 12
144
+ mutable = true
145
+ why = "Same-tool repetition limit for read_file + grep. Investigation tools legitimately repeat more."