drydock-cli 2.8.49__tar.gz → 2.8.51__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 (829) hide show
  1. drydock_cli-2.8.51/.auto_release.lock +1 -0
  2. drydock_cli-2.8.51/.drydock/graphrag.sqlite +0 -0
  3. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/CLAUDE.md +45 -41
  4. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/PKG-INFO +1 -1
  5. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/app.py +51 -0
  6. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/approval_app.py +43 -0
  7. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/agent_loop.py +30 -11
  8. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/retrieve.py +9 -0
  9. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/pyproject.toml +1 -1
  10. drydock_cli-2.8.51/scripts/_archived_eval_harness/README.md +38 -0
  11. drydock_cli-2.8.49/scripts/hle_eval.py → drydock_cli-2.8.51/scripts/_archived_eval_harness/hle_eval.py.deprecated +1 -1
  12. drydock_cli-2.8.51/tests/cli/textual_ui/__init__.py +0 -0
  13. drydock_cli-2.8.51/tests/mock/__init__.py +0 -0
  14. drydock_cli-2.8.51/tests/test_approval_modal_stray_keys.py +92 -0
  15. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/trip_log.md +100 -0
  16. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/uv.lock +15 -1
  17. drydock_cli-2.8.49/.auto_release.lock +0 -1
  18. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/CODEOWNERS +0 -0
  19. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  20. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  21. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/workflows/build-and-upload.yml +0 -0
  23. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/workflows/ci.yml +0 -0
  24. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/workflows/issue-labeler.yml +0 -0
  25. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.github/workflows/release.yml +0 -0
  26. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.gitignore +0 -0
  27. /drydock_cli-2.8.49/.pause_stress → /drydock_cli-2.8.51/.pause_hle_babysitter +0 -0
  28. /drydock_cli-2.8.49/drydock/acp/__init__.py → /drydock_cli-2.8.51/.pause_hle_burndown +0 -0
  29. /drydock_cli-2.8.49/drydock/acp/tools/__init__.py → /drydock_cli-2.8.51/.pause_hle_burndown_keepalive +0 -0
  30. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.pre-commit-config.yaml +0 -0
  31. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.python-version +0 -0
  32. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.typos.toml +0 -0
  33. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.vscode/extensions.json +0 -0
  34. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.vscode/launch.json +0 -0
  35. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/.vscode/settings.json +0 -0
  36. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/AGENTS.md +0 -0
  37. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/Admiral.md +0 -0
  38. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/CHANGELOG.md +0 -0
  39. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/CONTRIBUTING.md +0 -0
  40. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/DEEP_NOIR_PRD.md +0 -0
  41. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/DEPLOYMENT.md +0 -0
  42. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/DRYDOCK.md +0 -0
  43. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/HLE_PRD.md +0 -0
  44. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/JETSON_BENCH.md +0 -0
  45. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/LICENSE +0 -0
  46. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/MODEL_SHORTCOMINGS.md +0 -0
  47. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/NOTICE +0 -0
  48. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/README.md +0 -0
  49. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/SOVEREIGN_PRD.md +0 -0
  50. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/TRIAGE_v1.md +0 -0
  51. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/action.yml +0 -0
  52. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/README.md +0 -0
  53. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results1.tsv +0 -0
  54. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results13.tsv +0 -0
  55. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results14.tsv +0 -0
  56. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results15.tsv +0 -0
  57. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results16.tsv +0 -0
  58. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results17.tsv +0 -0
  59. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results18.tsv +0 -0
  60. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results19.tsv +0 -0
  61. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results2.tsv +0 -0
  62. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results20.tsv +0 -0
  63. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results3.tsv +0 -0
  64. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results4.tsv +0 -0
  65. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results5.tsv +0 -0
  66. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results6.tsv +0 -0
  67. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results7.tsv +0 -0
  68. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results8.tsv +0 -0
  69. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results9.tsv +0 -0
  70. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/baseline_history/results_evolved_v1.tsv +0 -0
  71. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/distribution/zed/LICENSE +0 -0
  72. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/distribution/zed/extension.toml +0 -0
  73. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/distribution/zed/icons/mistral_vibe.svg +0 -0
  74. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/README.md +0 -0
  75. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/acp-setup.md +0 -0
  76. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/BASELINE_412.md +0 -0
  77. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/Drydock_rebrand.md +0 -0
  78. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  79. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  80. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  81. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/PRD.md +0 -0
  82. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/drydock_terms.md +0 -0
  83. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/archive/resume.md +0 -0
  84. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/docs/proxy-setup.md +0 -0
  85. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/__init__.py +0 -0
  86. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/__main__.py +0 -0
  87. {drydock_cli-2.8.49/drydock/cli → drydock_cli-2.8.51/drydock/acp}/__init__.py +0 -0
  88. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/acp_agent_loop.py +0 -0
  89. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/acp_logger.py +0 -0
  90. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/entrypoint.py +0 -0
  91. {drydock_cli-2.8.49/drydock/cli/autocompletion → drydock_cli-2.8.51/drydock/acp/tools}/__init__.py +0 -0
  92. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/base.py +0 -0
  93. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/builtins/bash.py +0 -0
  94. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/builtins/read_file.py +0 -0
  95. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/builtins/search_replace.py +0 -0
  96. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/builtins/todo.py +0 -0
  97. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/builtins/write_file.py +0 -0
  98. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/tools/session_update.py +0 -0
  99. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/acp/utils.py +0 -0
  100. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/__init__.py +0 -0
  101. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/detectors.py +0 -0
  102. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/detectors_proposed.py +0 -0
  103. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/history.py +0 -0
  104. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/interventions.py +0 -0
  105. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/llm_analyzer.py +0 -0
  106. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/metrics.py +0 -0
  107. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/opus_escalator.py +0 -0
  108. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/persistence.py +0 -0
  109. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/policy.py +0 -0
  110. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/proposer.py +0 -0
  111. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/stager.py +0 -0
  112. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/task_classifier.py +0 -0
  113. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/tuning.py +0 -0
  114. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/validator.py +0 -0
  115. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/admiral/worker.py +0 -0
  116. {drydock_cli-2.8.49/drydock/cli/textual_ui → drydock_cli-2.8.51/drydock/cli}/__init__.py +0 -0
  117. {drydock_cli-2.8.49/drydock/cli/textual_ui/notifications/adapters → drydock_cli-2.8.51/drydock/cli/autocompletion}/__init__.py +0 -0
  118. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/autocompletion/base.py +0 -0
  119. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/autocompletion/path_completion.py +0 -0
  120. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/autocompletion/slash_command.py +0 -0
  121. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/cli.py +0 -0
  122. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/clipboard.py +0 -0
  123. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/commands.py +0 -0
  124. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/entrypoint.py +0 -0
  125. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/fix_windows_path.py +0 -0
  126. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/history_manager.py +0 -0
  127. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  128. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  129. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  130. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/terminal_setup.py +0 -0
  131. {drydock_cli-2.8.49/drydock/cli/textual_ui/notifications/ports → drydock_cli-2.8.51/drydock/cli/textual_ui}/__init__.py +0 -0
  132. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  133. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/app.tcss +0 -0
  134. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/external_editor.py +0 -0
  135. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  136. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  137. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  138. {drydock_cli-2.8.49/drydock/cli/textual_ui/widgets → drydock_cli-2.8.51/drydock/cli/textual_ui/notifications/adapters}/__init__.py +0 -0
  139. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  140. {drydock_cli-2.8.49/drydock/core/autocompletion → drydock_cli-2.8.51/drydock/cli/textual_ui/notifications/ports}/__init__.py +0 -0
  141. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  142. {drydock_cli-2.8.49/drydock/core/llm → drydock_cli-2.8.51/drydock/cli/textual_ui/widgets}/__init__.py +0 -0
  143. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  144. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  145. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  146. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  147. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  148. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  149. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  150. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  151. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  152. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  153. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  154. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  155. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  156. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  157. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  158. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  159. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  160. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  161. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  162. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  163. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  164. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  165. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  166. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  167. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  168. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  169. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  170. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  171. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/windowing/history.py +0 -0
  172. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  173. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/textual_ui/windowing/state.py +0 -0
  174. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/__init__.py +0 -0
  175. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  176. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  177. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  178. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  179. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  180. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/update.py +0 -0
  181. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/cli/update_notifier/whats_new.py +0 -0
  182. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/__init__.py +0 -0
  183. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/agents/__init__.py +0 -0
  184. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/agents/manager.py +0 -0
  185. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/agents/models.py +0 -0
  186. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/auth/__init__.py +0 -0
  187. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/auth/crypto.py +0 -0
  188. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/auth/github.py +0 -0
  189. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/auto_solve.py +0 -0
  190. {drydock_cli-2.8.49/drydock/core/telemetry → drydock_cli-2.8.51/drydock/core/autocompletion}/__init__.py +0 -0
  191. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/completers.py +0 -0
  192. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  193. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  194. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  195. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  196. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  197. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/fuzzy.py +0 -0
  198. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/path_prompt.py +0 -0
  199. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  200. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/build_orchestrator.py +0 -0
  201. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/checkpoint.py +0 -0
  202. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/__init__.py +0 -0
  203. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/__main__.py +0 -0
  204. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/classifier.py +0 -0
  205. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/dispatcher.py +0 -0
  206. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/rules.py +0 -0
  207. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/classifier/signal.py +0 -0
  208. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/__init__.py +0 -0
  209. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/_dotenv.py +0 -0
  210. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/_settings.py +0 -0
  211. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/doctor.py +0 -0
  212. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/harness_files/__init__.py +0 -0
  213. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  214. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/harness_files/_paths.py +0 -0
  215. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/local_detect.py +0 -0
  216. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/config/migrate.py +0 -0
  217. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/constraint_extract.py +0 -0
  218. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/constraint_hint.py +0 -0
  219. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/consultant.py +0 -0
  220. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/context_recovery.py +0 -0
  221. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/drydock_states.py +0 -0
  222. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/goal.py +0 -0
  223. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/hooks.py +0 -0
  224. {drydock_cli-2.8.49/drydock/core/tools/builtins/prompts → drydock_cli-2.8.51/drydock/core/llm}/__init__.py +0 -0
  225. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/anthropic.py +0 -0
  226. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/base.py +0 -0
  227. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/factory.py +0 -0
  228. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/generic.py +0 -0
  229. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/mistral.py +0 -0
  230. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  231. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/backend/vertex.py +0 -0
  232. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/exceptions.py +0 -0
  233. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/format.py +0 -0
  234. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/message_utils.py +0 -0
  235. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/llm/types.py +0 -0
  236. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/logger.py +0 -0
  237. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/middleware.py +0 -0
  238. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/output_formatters.py +0 -0
  239. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/paths/__init__.py +0 -0
  240. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/paths/_drydock_home.py +0 -0
  241. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/paths/_local_config_walk.py +0 -0
  242. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/paths/conventions.py +0 -0
  243. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/plan_session.py +0 -0
  244. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/plugins.py +0 -0
  245. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/programmatic.py +0 -0
  246. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/__init__.py +0 -0
  247. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/builder.md +0 -0
  248. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/cli.md +0 -0
  249. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/compact.md +0 -0
  250. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/dangerous_directory.md +0 -0
  251. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/diagnostic.md +0 -0
  252. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/explore.md +0 -0
  253. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/gemma4.md +0 -0
  254. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/planner.md +0 -0
  255. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/project_context.md +0 -0
  256. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/prompts/tests.md +0 -0
  257. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/proxy_setup.py +0 -0
  258. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/agent_memory.py +0 -0
  259. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/checkpoints.py +0 -0
  260. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/session_loader.py +0 -0
  261. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/session_logger.py +0 -0
  262. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/session_migration.py +0 -0
  263. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session/state_file.py +0 -0
  264. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/session_checker.py +0 -0
  265. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/skills/__init__.py +0 -0
  266. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/skills/manager.py +0 -0
  267. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/skills/models.py +0 -0
  268. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/skills/parser.py +0 -0
  269. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/slug.py +0 -0
  270. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/steering_hook.py +0 -0
  271. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/system_prompt.py +0 -0
  272. {drydock_cli-2.8.49/drydock/skills → drydock_cli-2.8.51/drydock/core/telemetry}/__init__.py +0 -0
  273. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/telemetry/send.py +0 -0
  274. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/teleport/errors.py +0 -0
  275. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/teleport/git.py +0 -0
  276. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/teleport/nuage.py +0 -0
  277. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/teleport/teleport.py +0 -0
  278. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/teleport/types.py +0 -0
  279. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/base.py +0 -0
  280. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/_task_manager.py +0 -0
  281. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  282. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  283. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/bash.py +0 -0
  284. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  285. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/count_tool.py +0 -0
  286. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/cron.py +0 -0
  287. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  288. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/glob_tool.py +0 -0
  289. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/grep.py +0 -0
  290. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  291. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  292. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/logic_tool.py +0 -0
  293. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/lsp.py +0 -0
  294. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/math_tool.py +0 -0
  295. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  296. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/memory_tool.py +0 -0
  297. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  298. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  299. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/powershell.py +0 -0
  300. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prolog_tool.py +0 -0
  301. {drydock_cli-2.8.49/tests/backend → drydock_cli-2.8.51/drydock/core/tools/builtins/prompts}/__init__.py +0 -0
  302. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  303. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  304. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  305. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  306. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  307. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  308. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  309. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  310. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  311. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  312. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  313. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  314. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  315. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  316. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/task.md +0 -0
  317. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  318. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  319. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  320. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  321. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  322. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  323. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  324. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/read_file.py +0 -0
  325. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/search_replace.py +0 -0
  326. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/set_tool.py +0 -0
  327. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/solve_tool.py +0 -0
  328. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/stats_tool.py +0 -0
  329. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/task.py +0 -0
  330. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/todo.py +0 -0
  331. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/tool_search.py +0 -0
  332. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/units_tool.py +0 -0
  333. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/verify_tool.py +0 -0
  334. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/webfetch.py +0 -0
  335. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/websearch.py +0 -0
  336. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/worktree.py +0 -0
  337. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/builtins/write_file.py +0 -0
  338. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/injection_guard.py +0 -0
  339. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/manager.py +0 -0
  340. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/mcp/__init__.py +0 -0
  341. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/mcp/registry.py +0 -0
  342. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/mcp/tools.py +0 -0
  343. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/mcp_sampling.py +0 -0
  344. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/ui.py +0 -0
  345. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/tools/utils.py +0 -0
  346. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/trusted_folders.py +0 -0
  347. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/types.py +0 -0
  348. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/core/utils.py +0 -0
  349. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/__init__.py +0 -0
  350. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/__main__.py +0 -0
  351. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/gap_detector.py +0 -0
  352. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/item.py +0 -0
  353. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/queue.py +0 -0
  354. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/curiosity/surprise.py +0 -0
  355. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/__init__.py +0 -0
  356. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/__main__.py +0 -0
  357. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/code_indexer.py +0 -0
  358. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/retriever.py +0 -0
  359. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/storage.py +0 -0
  360. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/graphrag/text_indexer.py +0 -0
  361. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/__init__.py +0 -0
  362. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/base.py +0 -0
  363. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/onboarding.tcss +0 -0
  364. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/screens/__init__.py +0 -0
  365. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/screens/api_key.py +0 -0
  366. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/screens/choice.py +0 -0
  367. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/screens/local_model.py +0 -0
  368. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/onboarding/screens/welcome.py +0 -0
  369. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  370. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  371. {drydock_cli-2.8.49/tests/cli/textual_ui → drydock_cli-2.8.51/drydock/skills}/__init__.py +0 -0
  372. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/api-design/SKILL.md +0 -0
  373. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/audit-tests/SKILL.md +0 -0
  374. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/batch/SKILL.md +0 -0
  375. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/commit-code/SKILL.md +0 -0
  376. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  377. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/context-summary/SKILL.md +0 -0
  378. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/create-presentation/SKILL.md +0 -0
  379. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/deep-research/SKILL.md +0 -0
  380. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/deploy/SKILL.md +0 -0
  381. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/diff-review/SKILL.md +0 -0
  382. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/doc-gen/SKILL.md +0 -0
  383. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/explain-code/SKILL.md +0 -0
  384. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/explore-code/SKILL.md +0 -0
  385. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/fix-issue/SKILL.md +0 -0
  386. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/git-ops/SKILL.md +0 -0
  387. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/init-project/SKILL.md +0 -0
  388. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/investigate/SKILL.md +0 -0
  389. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/logic/SKILL.md +0 -0
  390. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  391. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/loop/SKILL.md +0 -0
  392. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/migrate/SKILL.md +0 -0
  393. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/perf-analyze/SKILL.md +0 -0
  394. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/plan-impl/SKILL.md +0 -0
  395. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/pr-review/SKILL.md +0 -0
  396. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/prove/SKILL.md +0 -0
  397. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/refactor/SKILL.md +0 -0
  398. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/regex-help/SKILL.md +0 -0
  399. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/review/SKILL.md +0 -0
  400. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/security-review/SKILL.md +0 -0
  401. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/ship/SKILL.md +0 -0
  402. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/simplify/SKILL.md +0 -0
  403. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/strong-tests/SKILL.md +0 -0
  404. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/skills/test-verify/SKILL.md +0 -0
  405. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/__init__.py +0 -0
  406. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/__main__.py +0 -0
  407. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/applier.py +0 -0
  408. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/config.py +0 -0
  409. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/registry.py +0 -0
  410. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sandbox.py +0 -0
  411. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sidecar/__init__.py +0 -0
  412. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sidecar/header_parser.py +0 -0
  413. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sidecar/hooks.py +0 -0
  414. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sidecar/loader.py +0 -0
  415. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/sidecar/server.py +0 -0
  416. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/train/__init__.py +0 -0
  417. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/train/capture.py +0 -0
  418. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/train/compute_vector.py +0 -0
  419. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/train/extract_pairs.py +0 -0
  420. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/train/scan_sessions.py +0 -0
  421. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/steering/vectors.py +0 -0
  422. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock/whats_new.md +0 -0
  423. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/drydock-acp.spec +0 -0
  424. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/flake.lock +0 -0
  425. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/flake.nix +0 -0
  426. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/outlook_draft_assistant.tar.gz +0 -0
  427. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/README.md +0 -0
  428. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/config_base.toml +0 -0
  429. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/config_best.toml +0 -0
  430. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/deep_noir/pairs/empty_after_bash.jsonl +0 -0
  431. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/deep_noir/pairs/scan_empty_after_bash.jsonl +0 -0
  432. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/domain_spec.md +0 -0
  433. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/experimenter.py +0 -0
  434. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/kernel.py +0 -0
  435. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/mini_prd.md +0 -0
  436. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/mini_prompts.txt +0 -0
  437. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/proposer.py +0 -0
  438. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/research/results.tsv +0 -0
  439. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/resume.md +0 -0
  440. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/README.md +0 -0
  441. /drydock_cli-2.8.49/scripts/auto_solve_audit.py → /drydock_cli-2.8.51/scripts/_archived_eval_harness/auto_solve_audit.py.deprecated +0 -0
  442. /drydock_cli-2.8.49/scripts/hle_babysitter.sh → /drydock_cli-2.8.51/scripts/_archived_eval_harness/hle_babysitter.sh.deprecated +0 -0
  443. /drydock_cli-2.8.49/scripts/hle_burndown.sh → /drydock_cli-2.8.51/scripts/_archived_eval_harness/hle_burndown.sh.deprecated +0 -0
  444. /drydock_cli-2.8.49/scripts/hle_burndown_keepalive.sh → /drydock_cli-2.8.51/scripts/_archived_eval_harness/hle_burndown_keepalive.sh.deprecated +0 -0
  445. /drydock_cli-2.8.49/scripts/hle_burndown_status.py → /drydock_cli-2.8.51/scripts/_archived_eval_harness/hle_burndown_status.py.deprecated +0 -0
  446. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/admiral_probe.py +0 -0
  447. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/auto_test_loop.sh +0 -0
  448. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/monitor_test_battery.sh +0 -0
  449. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/overnight_agents_test.sh +0 -0
  450. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/test_bank.sh +0 -0
  451. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/test_full.sh +0 -0
  452. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/test_smoke.sh +0 -0
  453. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/archive/tui_test.py +0 -0
  454. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/audit_sampler.py +0 -0
  455. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/auto_generate_tests.py +0 -0
  456. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/auto_release.sh +0 -0
  457. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/autonomous_review.sh +0 -0
  458. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/autonomous_review_prompt.md +0 -0
  459. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/backfill_hle_curiosity.py +0 -0
  460. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/backup.sh +0 -0
  461. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/bench_inference.py +0 -0
  462. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/bump_version.py +0 -0
  463. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/classify_pulse.sh +0 -0
  464. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/consume_retrieval_queue.py +0 -0
  465. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/curiosity_idle_cycle.sh +0 -0
  466. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/dedupe_dispatch_queues.py +0 -0
  467. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/deploy_to_github.sh +0 -0
  468. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/dispatch_report.py +0 -0
  469. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/drydock_status.sh +0 -0
  470. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/fetch_arxiv_abstracts.py +0 -0
  471. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/gen_2000_prompts.py +0 -0
  472. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/hle_aggregate.py +0 -0
  473. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/hle_eval_seed.jsonl +0 -0
  474. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/llm_balancer.py +0 -0
  475. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/notify_release.py +0 -0
  476. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/perf_baseline_when_idle.sh +0 -0
  477. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/perf_sweep.py +0 -0
  478. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/poll_issues.sh +0 -0
  479. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/publish_to_pypi.sh +0 -0
  480. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/queue_top.py +0 -0
  481. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/ralph_loop.py +0 -0
  482. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/rejudge_hle.py +0 -0
  483. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/research_babysitter.sh +0 -0
  484. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/shakedown.py +0 -0
  485. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/shakedown_interactive.py +0 -0
  486. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/shakedown_suite.sh +0 -0
  487. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/shakedown_variance.sh +0 -0
  488. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/start_steering_sidecar.sh +0 -0
  489. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_babysitter.sh +0 -0
  490. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_prompts_50.txt +0 -0
  491. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_prompts_realuser.txt +0 -0
  492. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_prompts_tool_agent.txt +0 -0
  493. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  494. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_shakedown.py +0 -0
  495. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_telegram_status.py +0 -0
  496. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/stress_watcher.py +0 -0
  497. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/telegram_bot.py +0 -0
  498. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/tool_usage_report.py +0 -0
  499. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/scripts/vllm_failover.sh +0 -0
  500. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/__init__.py +0 -0
  501. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/conftest.py +0 -0
  502. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_acp.py +0 -0
  503. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_agent_thought.py +0 -0
  504. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_bash.py +0 -0
  505. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_compact_session_updates.py +0 -0
  506. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_content.py +0 -0
  507. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_initialize.py +0 -0
  508. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_list_sessions.py +0 -0
  509. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_load_session.py +0 -0
  510. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_multi_session.py +0 -0
  511. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_new_session.py +0 -0
  512. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_proxy_setup_acp.py +0 -0
  513. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_read_file.py +0 -0
  514. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_search_replace.py +0 -0
  515. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_set_config_option.py +0 -0
  516. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_set_mode.py +0 -0
  517. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_set_model.py +0 -0
  518. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_tool_call_session_update.py +0 -0
  519. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_utils.py +0 -0
  520. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/acp/test_write_file.py +0 -0
  521. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_file_indexer.py +0 -0
  522. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_fuzzy.py +0 -0
  523. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  524. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  525. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_path_completion_controller.py +0 -0
  526. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  527. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_slash_command_controller.py +0 -0
  528. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  529. {drydock_cli-2.8.49/tests/mock → drydock_cli-2.8.51/tests/backend}/__init__.py +0 -0
  530. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/data/__init__.py +0 -0
  531. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/data/fireworks.py +0 -0
  532. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/data/mistral.py +0 -0
  533. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/test_anthropic_adapter.py +0 -0
  534. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/test_backend.py +0 -0
  535. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  536. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/test_reasoning_adapter.py +0 -0
  537. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  538. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  539. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  540. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  541. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_bell_notifications.py +0 -0
  542. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_braille_renderer.py +0 -0
  543. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_clipboard.py +0 -0
  544. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_commands.py +0 -0
  545. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_copy_shortcuts.py +0 -0
  546. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_external_editor.py +0 -0
  547. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_no_markup_static.py +0 -0
  548. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_question_app.py +0 -0
  549. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_spinner.py +0 -0
  550. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_switching_mode.py +0 -0
  551. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  552. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  553. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_ui_session_resume.py +0 -0
  554. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/test_ui_skill_dispatch.py +0 -0
  555. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/cli/textual_ui/test_session_picker.py +0 -0
  556. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/conftest.py +0 -0
  557. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_agents.py +0 -0
  558. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_auth_crypto.py +0 -0
  559. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_auth_github.py +0 -0
  560. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  561. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  562. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_config_load_dotenv.py +0 -0
  563. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_config_paths.py +0 -0
  564. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_config_resolution.py +0 -0
  565. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_file_logging.py +0 -0
  566. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_plan_session.py +0 -0
  567. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_proxy_setup.py +0 -0
  568. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_slug.py +0 -0
  569. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_telemetry_send.py +0 -0
  570. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_teleport_git.py +0 -0
  571. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_teleport_nuage.py +0 -0
  572. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_teleport_service.py +0 -0
  573. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_trusted_folders.py +0 -0
  574. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/core/test_utils.py +0 -0
  575. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/common.py +0 -0
  576. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/conftest.py +0 -0
  577. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/mock_server.py +0 -0
  578. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  579. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/test_cli_tui_streaming.py +0 -0
  580. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  581. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/fixtures/doc_qa_system_prd.md +0 -0
  582. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/mock/mock_backend_factory.py +0 -0
  583. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/mock/mock_entrypoint.py +0 -0
  584. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/mock/utils.py +0 -0
  585. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/onboarding/test_run_onboarding.py +0 -0
  586. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/onboarding/test_ui_onboarding.py +0 -0
  587. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/session/test_session_loader.py +0 -0
  588. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/session/test_session_logger.py +0 -0
  589. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/session/test_session_migration.py +0 -0
  590. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/skills/conftest.py +0 -0
  591. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/skills/test_manager.py +0 -0
  592. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/skills/test_models.py +0 -0
  593. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/skills/test_parser.py +0 -0
  594. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  595. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  596. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  597. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  598. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  599. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  600. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  601. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  602. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  603. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  604. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  605. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  606. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  607. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  608. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  609. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  610. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  611. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  612. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  613. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  614. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  615. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  616. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  617. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  618. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  619. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  620. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  621. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  622. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  623. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  624. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  625. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  626. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  627. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  628. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  629. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  630. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  631. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  632. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  633. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  634. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  635. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  636. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  637. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  638. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  639. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  640. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  641. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  642. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  643. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  644. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  645. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  646. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  647. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  648. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  649. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  650. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  651. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  652. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  653. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  654. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/base_snapshot_test_app.py +0 -0
  655. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/conftest.py +0 -0
  656. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/snap_compare.py +0 -0
  657. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  658. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  659. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  660. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  661. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  662. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  663. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  664. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  665. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  666. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  667. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  668. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  669. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  670. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  671. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/stubs/fake_backend.py +0 -0
  672. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/stubs/fake_client.py +0 -0
  673. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/stubs/fake_tool.py +0 -0
  674. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral.py +0 -0
  675. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  676. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_intervention_outcome.py +0 -0
  677. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_phase3.py +0 -0
  678. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_proposed.py +0 -0
  679. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_session_id.py +0 -0
  680. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_admiral_struggle_dedup.py +0 -0
  681. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_auto_compact.py +0 -0
  682. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_backend.py +0 -0
  683. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_observer_streaming.py +0 -0
  684. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_stats.py +0 -0
  685. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_tasks.py +0 -0
  686. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agent_tool_call.py +0 -0
  687. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_agents.py +0 -0
  688. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_algebra_tool.py +0 -0
  689. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_api_error_recovery.py +0 -0
  690. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  691. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_auto_solve.py +0 -0
  692. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_build.py +0 -0
  693. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_debug.py +0 -0
  694. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_multiagent.py +0 -0
  695. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_prd.py +0 -0
  696. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_prd_extended.py +0 -0
  697. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_tools.py +0 -0
  698. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_bank_update.py +0 -0
  699. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_build_projects.py +0 -0
  700. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_checkpoint.py +0 -0
  701. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_chemistry_tool.py +0 -0
  702. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_classifier.py +0 -0
  703. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_cli_programmatic_preload.py +0 -0
  704. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_config_migration.py +0 -0
  705. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_constraint_extract.py +0 -0
  706. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_constraint_hint.py +0 -0
  707. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_context_recovery.py +0 -0
  708. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_count_tool.py +0 -0
  709. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_curiosity.py +0 -0
  710. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_current_bugs.py +0 -0
  711. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_dispatch_report.py +0 -0
  712. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_dispatcher.py +0 -0
  713. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_drydock_regression.py +0 -0
  714. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_drydock_tasks.py +0 -0
  715. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  716. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_full_regression.py +0 -0
  717. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_goal.py +0 -0
  718. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_graphrag.py +0 -0
  719. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_graphrag_worked_examples.py +0 -0
  720. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_hallucinated_tool_suppression.py +0 -0
  721. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_history_manager.py +0 -0
  722. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_hle_aggregate.py +0 -0
  723. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_hle_score_method_split.py +0 -0
  724. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_hle_typing.py +0 -0
  725. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_integration.py +0 -0
  726. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_issue_fixes.py +0 -0
  727. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_linear_algebra_tool.py +0 -0
  728. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_local_detect.py +0 -0
  729. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_logic_tool.py +0 -0
  730. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_loop_detection.py +0 -0
  731. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_math_tool.py +0 -0
  732. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_mcp_settings.py +0 -0
  733. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_memory_tool.py +0 -0
  734. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_message_id.py +0 -0
  735. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_message_merging.py +0 -0
  736. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_middleware.py +0 -0
  737. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_multi_agent.py +0 -0
  738. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_number_theory_tool.py +0 -0
  739. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_prolog_tool.py +0 -0
  740. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_read_file_not_found_listing.py +0 -0
  741. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_real_failures.py +0 -0
  742. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_real_issues.py +0 -0
  743. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_real_workflow.py +0 -0
  744. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_reasoning_content.py +0 -0
  745. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_rejudge_hle.py +0 -0
  746. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_retrieval_consumer.py +0 -0
  747. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_retrieve_tool.py +0 -0
  748. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_search_replace_args_not_truncated.py +0 -0
  749. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_set_tool.py +0 -0
  750. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_smoke.py +0 -0
  751. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_solve_tool.py +0 -0
  752. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_stats_tool.py +0 -0
  753. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering.py +0 -0
  754. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_capture.py +0 -0
  755. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_compute_vector.py +0 -0
  756. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_extract_pairs.py +0 -0
  757. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_hook.py +0 -0
  758. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  759. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_steering_sidecar_hooks.py +0 -0
  760. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_system_prompt.py +0 -0
  761. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_tagged_text.py +0 -0
  762. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_task_complete_nudge.py +0 -0
  763. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_tool_args.py +0 -0
  764. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_truncate_args_valid_json.py +0 -0
  765. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_truncated_arg_path_hint.py +0 -0
  766. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_truncated_search_replace_escalation.py +0 -0
  767. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_truncated_write_escalation.py +0 -0
  768. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_ui_external_editor.py +0 -0
  769. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_ui_input_history.py +0 -0
  770. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_units_tool.py +0 -0
  771. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_user_issues.py +0 -0
  772. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_verify_tool.py +0 -0
  773. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_wall_of_text_rescue.py +0 -0
  774. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_workloads.py +0 -0
  775. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/test_write_file_missing_path.py +0 -0
  776. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/testbank_helpers.py +0 -0
  777. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_ask_user_question.py +0 -0
  778. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash.py +0 -0
  779. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  780. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_consec_empty_search.py +0 -0
  781. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  782. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  783. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  784. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  785. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  786. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  787. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  788. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_exit_plan_mode.py +0 -0
  789. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_grep.py +0 -0
  790. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  791. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_invoke_context.py +0 -0
  792. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  793. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_manager_get_tool_config.py +0 -0
  794. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_mcp.py +0 -0
  795. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_mcp_sampling.py +0 -0
  796. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  797. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  798. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_read_file_directory.py +0 -0
  799. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_read_file_limit_truncation.py +0 -0
  800. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_append_fallback.py +0 -0
  801. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_dir_path.py +0 -0
  802. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_empty_content.py +0 -0
  803. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_file_not_found.py +0 -0
  804. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  805. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_hard_stop.py +0 -0
  806. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_malformed_block.py +0 -0
  807. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  808. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_placeholder.py +0 -0
  809. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  810. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_task.py +0 -0
  811. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_ui_bash_execution.py +0 -0
  812. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_webfetch.py +0 -0
  813. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_websearch.py +0 -0
  814. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  815. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  816. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  817. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  818. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_do_update.py +0 -0
  819. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  820. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_github_update_gateway.py +0 -0
  821. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  822. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_ui_update_notification.py +0 -0
  823. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_update_use_case.py +0 -0
  824. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/tests/update_notifier/test_whats_new.py +0 -0
  825. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/worked_examples/README.md +0 -0
  826. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/worked_examples/cli_subcommand_dispatch.py +0 -0
  827. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/worked_examples/lookup.json +0 -0
  828. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/worked_examples/sql_parser.py +0 -0
  829. {drydock_cli-2.8.49 → drydock_cli-2.8.51}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 2484742
@@ -43,57 +43,61 @@ Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
43
43
  - **370 PRDs** at /data3/drydock_test_projects/ — the benchmark suite
44
44
  - **Current version:** v2.8.27 on PyPI (auto-released every 6h from `main`)
45
45
  - **Active continuous loops:** stress harness (hourly), autonomous_review
46
- (30-min), classify_pulse (10-min), telegram_bot keepalive (2-min),
47
- hle_babysitter (hourly @ :45 10-Q HLE batch per tick, see
48
- HLE_PRD §"Continuous HLE evaluation"), **hle_burndown daemon** (back-to-back
49
- batches, runs as background process via `scripts/hle_burndown.sh start`;
50
- keepalive cron at `*/15` resurrects if it dies). Both HLE loops share
51
- `/tmp/hle_continuous.pid` whichever owns the lock keeps it; the other
52
- exits/skips. Anything new the operator adds should not run at :00 or
53
- :30 (autonomous_review owns those).
54
-
55
- ## Current plan (2026-05-14)
56
-
57
- Three vectors moving in parallel. Each has a queue of concrete fixes
58
- tracked as TaskCreate items; the high-level shape is:
59
-
60
- 1. **HLE** keep pushing the floor up from 6.7% on Math. The
61
- `scripts/hle_babysitter.sh` cron runs 10-Q Math batches every hour.
62
- Open work: rotate categories beyond Math; build a multi-batch
63
- aggregator (`scripts/hle_aggregate.py`); produce a clean Q3 vs Q4
64
- stall-rate comparison once 30+ Q3 Math attempts have accumulated;
65
- verify the gemma4.md tool-inventory change (e47cc4e) actually
66
- lifted math/count/memory/verify call rates.
67
-
68
- 2. **GraphRAG** — the auto-prefetch hook is shipping good chunks on
69
- trivia but not on hard symbolic Math. Two concrete moves: lower
46
+ (30-min), classify_pulse (10-min), telegram_bot keepalive (2-min).
47
+ HLE eval loops were removed 2026-05-17 per operator directive see
48
+ the "NO CUSTOM EVAL HARNESSES" rule below.
49
+ - 🚨 **NO CUSTOM EVAL HARNESSES (2026-05-17).** The user has banned
50
+ bespoke evaluation infrastructure (HLE eval scripts, burndown
51
+ daemons, batch runners, judge-prompt pipelines, telemetry-aggregator
52
+ cron jobs, etc.). Even when such a harness drives the real TUI via
53
+ pexpect, the *concept* tempts the agent to fix harness-specific
54
+ issues (timeout tuning, env-var-gated behaviour, judge edge cases)
55
+ that don't help real users. Improving drydock comes from USING
56
+ drydock interactively as a real user does — the operator notices
57
+ pain, the agent fixes the pain. If you need a regression check,
58
+ write a unit test against the drydock library. If you need a
59
+ benchmark, run prompts through the TUI by hand and observe. Do
60
+ NOT spin up background eval daemons. Archived scripts at
61
+ `scripts/_archived_eval_harness/` leave them archived.
62
+
63
+ ## Current plan (2026-05-17)
64
+
65
+ Focus is on **TUI experience** — the operator uses drydock interactively;
66
+ the agent fixes what the operator hits. No HLE eval loops, no custom
67
+ benchmark daemons (see the "NO CUSTOM EVAL HARNESSES" rule above).
68
+
69
+ 1. **TUI bugs the operator notices in real use** error recovery
70
+ paths, slash commands, tool reliability. Recent ships: /undo,
71
+ /back, /goal, vision (--mmproj), recovery meta-fix.
72
+
73
+ 2. **GraphRAG** — the auto-prefetch hook ships good chunks on trivia
74
+ but not on hard symbolic Math. Two concrete moves: lower
70
75
  `QUALITY_THRESHOLD` (currently 8.0 in `agent_loop.py:3391`) once
71
- we know the real score distribution, and add an arxiv-corpus
72
- fallback (`/data3/arxiv_corpus/graphrag.sqlite`) when the primary
73
- index returns nothing above threshold.
76
+ we know the real score distribution, and the arxiv-corpus
77
+ fallback (`/data3/arxiv_corpus/graphrag.sqlite`) is wired.
74
78
 
75
79
  3. **Deep Noir** — sidecar/hooks/capture/train all coded; the
76
80
  `apply_chat_template` API-drift fix shipped 2026-05-14 (f02aa4b).
77
- Real blocker for v1 vectors: contrastive-pair extraction is
78
- currently broken admiral records full UUIDs (e.g.
79
- `5b55aacd-3606-4656-ad4b-eacf86506eda`) but session dirs are named
80
- `session_<date>_<time>_<short_uuid>` where the `short_uuid` is the
81
- first 8 chars of the SESSION's own UUID, not admiral's recorded
82
- one. `extract_pairs._find_session_dir` matches on session_dir name
83
- endswith(admiral_short) which only succeeds for the rare case
84
- where both happen to match. Yield on `empty_after_tool:bash`:
85
- 2 / 88 derailed sessions found. Needs a real mapping layer
86
- (meta.json admiral) or admiral has to be fixed to record the
87
- short hash used by session dirs.
81
+ Contrastive-pair extraction was fixed by **706f226 (2026-05-10)**:
82
+ admiral now records the live `agent_loop.session_id` (which IS the
83
+ short hash used by session dirs), and `extract_pairs._find_session_dir`
84
+ builds a `{meta.session_id dir}` map from the on-disk
85
+ meta.json files. Both pieces work.
86
+ Real remaining issue: **admiral_state.json has ~3000 pre-fix
87
+ findings (recorded 2026-04-19 to 2026-05-10) whose UUIDs are
88
+ phantom they don't resolve to any on-disk session_dir**.
89
+ `extract_pairs` correctly yields only the post-fix findings (~20
90
+ sessions across all categories as of 2026-05-17). The training
91
+ set will fill in as new findings accumulate. Pre-fix findings
92
+ are unrecoverable; consider GC'ing them out of admiral_state.json
93
+ so future audits aren't misleading.
88
94
 
89
95
  Operator controls for the continuous loops:
90
96
 
91
97
  ```bash
92
- touch /data3/drydock/.pause_hle_babysitter # pause hourly HLE cron
93
- touch /data3/drydock/.pause_hle_burndown # pause back-to-back burndown daemon
94
- touch /data3/drydock/.pause_hle_burndown_keepalive # disable burndown auto-resurrection
95
98
  touch /data3/drydock_test_projects/.pause_watchdog
96
99
  touch /data3/drydock/.pause_auto_release # pause 6h PyPI publish
100
+ touch /data3/drydock/.pause_stress # pause stress harness restarts
97
101
  ```
98
102
 
99
103
  ## Build & Test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.49
3
+ Version: 2.8.51
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
@@ -480,9 +480,58 @@ class DrydockApp(App): # noqa: PLR0904
480
480
 
481
481
  await self._handle_user_message(value)
482
482
 
483
+ async def on_approval_app_stray_key(
484
+ self, message: ApprovalApp.StrayKey
485
+ ) -> None:
486
+ """The approval modal forwarded a stray keystroke (user started
487
+ typing chat input while the modal was up). Buffer printable chars
488
+ into a scratch string; flush as one pending message on Enter.
489
+
490
+ Without this, real users hitting an approval modal mid-type lose
491
+ every character they tap — the modal swallows everything not in
492
+ its 1/y/2/3/n/up/down/enter bindings. Stress harness exposed it
493
+ as 30% SKIP rate; root cause is the same for real interactive
494
+ users."""
495
+ if not hasattr(self, "_stray_key_buffer"):
496
+ self._stray_key_buffer: str = ""
497
+ if not hasattr(self, "_pending_messages"):
498
+ self._pending_messages: list[str] = []
499
+
500
+ if message.is_enter:
501
+ buf = self._stray_key_buffer.strip()
502
+ if buf:
503
+ self._pending_messages.append(buf)
504
+ self._stray_key_buffer = ""
505
+ # Tell the user we caught their stray input
506
+ try:
507
+ await self._mount_and_scroll(UserCommandMessage(
508
+ f"_Queued chat input typed during approval modal "
509
+ f"({len(buf)} chars): \"{buf[:60]}…\". Will run "
510
+ f"after the modal closes._"
511
+ ))
512
+ except Exception:
513
+ pass
514
+ return
515
+
516
+ if message.text:
517
+ self._stray_key_buffer += message.text
518
+
519
+ def _flush_stray_key_buffer(self) -> None:
520
+ """Move any buffered stray-key text to _pending_messages.
521
+ Called from every approval-close path so chars typed during the
522
+ modal aren't lost even if the user didn't press Enter."""
523
+ buf = getattr(self, "_stray_key_buffer", "").strip()
524
+ if not buf:
525
+ return
526
+ if not hasattr(self, "_pending_messages"):
527
+ self._pending_messages = []
528
+ self._pending_messages.append(buf)
529
+ self._stray_key_buffer = ""
530
+
483
531
  async def on_approval_app_approval_granted(
484
532
  self, message: ApprovalApp.ApprovalGranted
485
533
  ) -> None:
534
+ self._flush_stray_key_buffer()
486
535
  if self._pending_approval and not self._pending_approval.done():
487
536
  self._pending_approval.set_result((ApprovalResponse.YES, None))
488
537
 
@@ -491,6 +540,7 @@ class DrydockApp(App): # noqa: PLR0904
491
540
  async def on_approval_app_approval_granted_always_tool(
492
541
  self, message: ApprovalApp.ApprovalGrantedAlwaysTool
493
542
  ) -> None:
543
+ self._flush_stray_key_buffer()
494
544
  self._set_tool_permission_always(
495
545
  message.tool_name, save_permanently=message.save_permanently
496
546
  )
@@ -503,6 +553,7 @@ class DrydockApp(App): # noqa: PLR0904
503
553
  async def on_approval_app_approval_rejected(
504
554
  self, message: ApprovalApp.ApprovalRejected
505
555
  ) -> None:
556
+ self._flush_stray_key_buffer()
506
557
  if self._pending_approval and not self._pending_approval.done():
507
558
  feedback = str(
508
559
  get_user_cancellation_message(CancellationReason.OPERATION_CANCELLED)
@@ -45,6 +45,25 @@ class ApprovalApp(Container):
45
45
  self.tool_args = tool_args
46
46
  self.save_permanently = save_permanently
47
47
 
48
+ class StrayKey(Message):
49
+ """User started typing chat input while the modal was up.
50
+
51
+ Real users (and the pexpect-based stress harness) hit this when
52
+ an approval modal appears mid-conversation: their keystrokes get
53
+ routed to ApprovalApp, which only binds up/down/enter/1/y/2/3/n
54
+ and silently drops everything else. Before this fix, those
55
+ characters disappeared into the void; the user assumed the TUI
56
+ was ignoring them and re-typed (or gave up).
57
+
58
+ Now we forward stray printable characters AND Enter to the main
59
+ app, which appends them to `_pending_messages` so they replay
60
+ into the chat input after the modal closes.
61
+ """
62
+ def __init__(self, text: str, is_enter: bool = False) -> None:
63
+ super().__init__()
64
+ self.text = text
65
+ self.is_enter = is_enter
66
+
48
67
  class ApprovalRejected(Message):
49
68
  def __init__(self, tool_name: str, tool_args: BaseModel) -> None:
50
69
  super().__init__()
@@ -138,6 +157,30 @@ class ApprovalApp(Container):
138
157
  else:
139
158
  widget.add_class("approval-option-no")
140
159
 
160
+ async def on_key(self, event: events.Key) -> None:
161
+ """Catch printable characters that aren't in BINDINGS and forward
162
+ them to the main app's pending-messages queue instead of silently
163
+ dropping them. Without this, a user (or pexpect harness) who types
164
+ chat input while the modal is up loses every keystroke.
165
+
166
+ Bound keys (up/down/enter/1/y/2/3/n) are handled by Textual's
167
+ binding system BEFORE on_key fires for unmatched events — so we
168
+ only ever see the stray ones here.
169
+
170
+ We accept any single printable character. Enter is treated as a
171
+ message-send boundary: flush the buffered stray-key text as one
172
+ pending message. The flush boundary lives on the App side so we
173
+ can preserve typing rhythm across multiple modals."""
174
+ if event.character and event.character.isprintable():
175
+ self.post_message(self.StrayKey(text=event.character, is_enter=False))
176
+ event.stop()
177
+ elif event.key == "enter":
178
+ # Enter without any pending stray text means the user
179
+ # confirmed the focused option — let the BINDINGS handle it.
180
+ # (This on_key won't fire for "enter" if the binding consumed
181
+ # it first.) Forward as flush marker just in case.
182
+ self.post_message(self.StrayKey(text="", is_enter=True))
183
+
141
184
  def action_move_up(self) -> None:
142
185
  self.selected_option = (self.selected_option - 1) % 3
143
186
  self._update_options()
@@ -1369,7 +1369,8 @@ class AgentLoop:
1369
1369
  prev_tool_name = assistant_msg.tool_calls[-1].function.name if assistant_msg.tool_calls[-1].function else None
1370
1370
  _readonly_tools = {"read_file", "grep", "glob", "ls", "pwd",
1371
1371
  "ralph_repo_index", "ralph_file_summary",
1372
- "retrieve", "search_files", "lsp"}
1372
+ "retrieve", "search_files", "lsp",
1373
+ "web_search", "web_fetch"}
1373
1374
  _write_tools = {"write_file", "search_replace"}
1374
1375
  _prev_was_read = prev_tool_name in _readonly_tools
1375
1376
  _prev_was_write = prev_tool_name in _write_tools
@@ -1471,10 +1472,12 @@ class AgentLoop:
1471
1472
  )
1472
1473
  elif _prev_was_read:
1473
1474
  _tool_name_str = prev_tool_name or "read_file"
1475
+ _generic_suffix = os.environ.get("DRYDOCK_STOP_NOW_SUFFIX", "")
1474
1476
  note = (
1475
1477
  f"You called {_tool_name_str} but produced no output. "
1476
- f"Now use write_file, search_replace, or bash "
1477
- f"to make changes — do NOT call {_tool_name_str} again."
1478
+ f"Now respond in text — write your answer or make changes. "
1479
+ f"Do NOT call {_tool_name_str} again."
1480
+ + (f" {_generic_suffix}" if _generic_suffix else "")
1478
1481
  )
1479
1482
  elif _prev_write_success:
1480
1483
  note = (
@@ -1534,11 +1537,12 @@ class AgentLoop:
1534
1537
  )
1535
1538
  elif _prev_was_read:
1536
1539
  _tool_name_str = prev_tool_name or "read_file"
1540
+ _generic_suffix = os.environ.get("DRYDOCK_STOP_NOW_SUFFIX", "")
1537
1541
  note = (
1538
1542
  f"You sent an empty response after calling {_tool_name_str}. "
1539
- f"Call write_file or search_replace NOW to apply "
1540
- f"what you read OR state in one sentence why you "
1541
- f"cannot proceed. Do NOT call {_tool_name_str} again."
1543
+ f"Respond in text now write your answer or apply what you read. "
1544
+ f"Do NOT call {_tool_name_str} again."
1545
+ + (f" {_generic_suffix}" if _generic_suffix else "")
1542
1546
  )
1543
1547
  elif _prev_was_write:
1544
1548
  _tool_name_str = prev_tool_name or "write_file"
@@ -1589,11 +1593,12 @@ class AgentLoop:
1589
1593
  )
1590
1594
  elif prev_tool_name in _readonly_tools:
1591
1595
  _tool_name_str = prev_tool_name or "read_file"
1596
+ _generic_suffix = os.environ.get("DRYDOCK_STOP_NOW_SUFFIX", "")
1592
1597
  note = (
1593
1598
  f"THIRD empty response after {_tool_name_str}. "
1594
- "Stop reading call write_file or search_replace NOW to apply "
1595
- "the change, or respond in text explaining why you cannot proceed. "
1599
+ "Stop — respond in text with your analysis or best answer. "
1596
1600
  f"Do NOT call {_tool_name_str} again."
1601
+ + (f" {_generic_suffix}" if _generic_suffix else "")
1597
1602
  )
1598
1603
  elif _prev_was_write:
1599
1604
  _tool_name_str = prev_tool_name or "write_file"
@@ -3642,9 +3647,23 @@ class AgentLoop:
3642
3647
  # corpus at /data3/arxiv_corpus/graphrag.sqlite (1.18M chunks)
3643
3648
  # has much better recall. The fallback path is operator-tunable
3644
3649
  # via DRYDOCK_GRAPHRAG_FALLBACK_DB; set to empty to disable.
3645
- primary_db = os.environ.get("DRYDOCK_GRAPHRAG_DB") or str(
3646
- Path.home() / ".drydock" / "graphrag.sqlite"
3647
- )
3650
+ # Primary DB selection mirrors retrieve._resolve_db_path so the
3651
+ # auto-prefetch and the model-issued retrieve calls always agree
3652
+ # on which corpus to search:
3653
+ # 1. DRYDOCK_GRAPHRAG_DB env override
3654
+ # 2. <cwd>/.drydock/graphrag.sqlite (per-project index)
3655
+ # 3. ~/.drydock/graphrag.sqlite (home fallback)
3656
+ # Without #2, a user with a populated home DB never saw their
3657
+ # own project's chunks because home always won.
3658
+ env_db = os.environ.get("DRYDOCK_GRAPHRAG_DB")
3659
+ if env_db:
3660
+ primary_db = env_db
3661
+ else:
3662
+ project_db = Path.cwd() / ".drydock" / "graphrag.sqlite"
3663
+ if project_db.is_file():
3664
+ primary_db = str(project_db)
3665
+ else:
3666
+ primary_db = str(Path.home() / ".drydock" / "graphrag.sqlite")
3648
3667
  fallback_default = "/data3/arxiv_corpus/graphrag.sqlite"
3649
3668
  fallback_db_raw = os.environ.get(
3650
3669
  "DRYDOCK_GRAPHRAG_FALLBACK_DB", fallback_default
@@ -78,6 +78,15 @@ def _resolve_db_path(arg: str) -> Path:
78
78
  project_db = Path.cwd() / ".drydock" / "graphrag.sqlite"
79
79
  if project_db.is_file():
80
80
  return project_db
81
+ # If we're inside a real project that doesn't yet have its own index,
82
+ # PREFER to create a per-project index over falling back to the home
83
+ # index (which is contaminated with other projects' content and
84
+ # answers wrong queries about THIS project). The home index is only
85
+ # the right answer for ad-hoc use outside any project — e.g. when
86
+ # the user runs drydock from their home dir.
87
+ cwd = Path.cwd()
88
+ if _looks_like_project(cwd):
89
+ return project_db # will be auto-ingested by Retrieve.run
81
90
  return Path.home() / ".drydock" / "graphrag.sqlite"
82
91
 
83
92
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.49"
3
+ version = "2.8.51"
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,38 @@
1
+ # Archived 2026-05-17 — DO NOT RESURRECT
2
+
3
+ These scripts implemented a custom HLE eval harness that drove drydock
4
+ via pexpect. The infrastructure was technically TUI-based (it spawned
5
+ the real `drydock` binary), but the user objected to the entire
6
+ *concept* of building bespoke evaluation infrastructure on the side:
7
+
8
+ > "STOP trying to create custom harnesses for evals. Improving drydock
9
+ > is what matters. And using drydock can't be headless, you have to
10
+ > actually use it like the user would."
11
+
12
+ The principle: **drydock improvements should come from USING drydock
13
+ as a real user would** — interactively, with the user noticing pain
14
+ points and the agent fixing them. A custom eval harness:
15
+
16
+ 1. Tempts the agent to fix harness-specific issues (timeout tuning,
17
+ env-var-gated behavior, judge-prompt edge cases) that don't help
18
+ real users.
19
+ 2. Introduces operational overhead (cron jobs, keepalive daemons,
20
+ telemetry pipelines) that's parallel to the actual product.
21
+ 3. Distracts from the headline goal: make drydock better at what
22
+ real users do, not at what an eval suite measures.
23
+
24
+ If you (future Claude) are tempted to build a new HLE-style eval
25
+ harness, STOP. Read `~/.claude/projects/-data3-drydock/memory/
26
+ feedback_no_custom_eval_harness.md` first. The user has been very
27
+ clear on this and will push back hard.
28
+
29
+ What to do instead:
30
+ - Use the drydock TUI yourself (or watch the user use it) to find
31
+ real bugs.
32
+ - Read open GH issues at fbobe321/drydock for user-reported pain.
33
+ - Fix things that affect interactive UX: error recovery, slash
34
+ commands, tool reliability.
35
+ - If you really need a regression-style check, write a unit test
36
+ against the drydock library — not a long-running eval daemon.
37
+
38
+ Files preserved here for git history continuity; do not run them.
@@ -65,7 +65,7 @@ HF_TOKEN_FILE = Path.home() / ".config" / "drydock" / "hf_token"
65
65
  # Coding-style PRDs in shakedown allow 600s for harder steps; QA should be
66
66
  # faster since there's no file-writing iteration, but Gemma 4 thinking can
67
67
  # still chew through several minutes on a hard question.
68
- QUESTION_TIMEOUT = 480 # 8 min per question
68
+ QUESTION_TIMEOUT = 600 # 10 min per question — 480s left 3/196 recent cases killed mid-generation
69
69
  IDLE_GRACE = 8.0 # seconds of no new messages before declaring done
70
70
 
71
71
 
File without changes
File without changes
@@ -0,0 +1,92 @@
1
+ """Regression tests for the approval-modal-eats-keystrokes fix.
2
+
3
+ Bug: when ApprovalApp had focus, any printable character that wasn't
4
+ in its BINDINGS (up/down/enter/1/y/2/3/n) was silently swallowed.
5
+ Real users typing chat input mid-modal lost every keystroke. The
6
+ stress harness surfaced it as a 30% SKIP rate ("TUI did not accept
7
+ after 3 retries") because pexpect can't see the modal and just
8
+ types — the modal ate the prompt, harness re-tried 3x, gave up.
9
+
10
+ Fix: ApprovalApp.on_key catches stray printable chars and forwards
11
+ them to the main app via a StrayKey message. The main app buffers
12
+ them and either:
13
+ - Flushes the buffer on Enter (treats it as a queued chat input)
14
+ - Flushes on modal close (approval granted / always-tool / rejected)
15
+ into `_pending_messages` so they replay after the modal closes.
16
+ """
17
+ from __future__ import annotations
18
+
19
+ import inspect
20
+
21
+ from drydock.cli.textual_ui.widgets.approval_app import ApprovalApp
22
+
23
+
24
+ # ── ApprovalApp must expose StrayKey + on_key ───────────────────────────
25
+
26
+ def test_stray_key_message_class_exists():
27
+ """ApprovalApp.StrayKey is the message contract the main app
28
+ listens for. Must accept text + is_enter."""
29
+ cls = getattr(ApprovalApp, "StrayKey", None)
30
+ assert cls is not None
31
+ msg = cls(text="abc", is_enter=False)
32
+ assert msg.text == "abc"
33
+ assert msg.is_enter is False
34
+ msg2 = cls(text="", is_enter=True)
35
+ assert msg2.is_enter is True
36
+
37
+
38
+ def test_on_key_handler_exists_and_is_async():
39
+ """Without on_key, the modal's BINDINGS still swallow everything
40
+ not in {up,down,enter,1,y,2,3,n}. on_key must catch the rest."""
41
+ method = getattr(ApprovalApp, "on_key", None)
42
+ assert method is not None
43
+ assert inspect.iscoroutinefunction(method)
44
+
45
+
46
+ def test_on_key_source_forwards_printable_chars():
47
+ """String-grep regression — catches future refactors that remove
48
+ the StrayKey forwarding."""
49
+ src = inspect.getsource(ApprovalApp.on_key)
50
+ assert "StrayKey" in src
51
+ assert "post_message" in src
52
+ assert "isprintable" in src
53
+
54
+
55
+ # ── Main app handler ────────────────────────────────────────────────────
56
+
57
+ def test_main_app_has_stray_key_handler():
58
+ """app.py must implement on_approval_app_stray_key — Textual's
59
+ automatic event routing relies on the snake_case naming
60
+ convention `on_<sender_class>_<message_class>`."""
61
+ from drydock.cli.textual_ui.app import DrydockApp
62
+ method = getattr(DrydockApp, "on_approval_app_stray_key", None)
63
+ assert method is not None
64
+ assert inspect.iscoroutinefunction(method)
65
+
66
+
67
+ def test_main_app_flushes_buffer_on_approval_close():
68
+ """All three approval-close paths (granted / always-tool / rejected)
69
+ must call _flush_stray_key_buffer so chars typed during the modal
70
+ aren't lost even if the user didn't press Enter."""
71
+ from drydock.cli.textual_ui.app import DrydockApp
72
+ for handler_name in (
73
+ "on_approval_app_approval_granted",
74
+ "on_approval_app_approval_granted_always_tool",
75
+ "on_approval_app_approval_rejected",
76
+ ):
77
+ handler = getattr(DrydockApp, handler_name, None)
78
+ assert handler is not None
79
+ src = inspect.getsource(handler)
80
+ assert "_flush_stray_key_buffer" in src, (
81
+ f"{handler_name} must call _flush_stray_key_buffer "
82
+ f"so the stray-key buffer doesn't leak across modals"
83
+ )
84
+
85
+
86
+ def test_flush_method_exists():
87
+ from drydock.cli.textual_ui.app import DrydockApp
88
+ method = getattr(DrydockApp, "_flush_stray_key_buffer", None)
89
+ assert method is not None
90
+ src = inspect.getsource(method)
91
+ assert "_stray_key_buffer" in src
92
+ assert "_pending_messages" in src
@@ -1,5 +1,95 @@
1
1
  # Drydock Trip Log
2
2
 
3
+ ## 2026-05-17 16:00 UTC tick
4
+ - Stress: step 26/1658, just restarted at 16:00 UTC by hourly babysitter (stress PID 2482864, .pause_stress sentinel present but stress running — babysitter may not check it)
5
+ - Write rate: N/A (just restarted this tick)
6
+ - Admiral last 30 min: N/A
7
+ - vLLM 400s: 0 errors in llamacpp-gemma4 last 30m
8
+ - GH issues: 0 open
9
+ - Dispatch queue: harness=7 (all stale thinking_stall, resolved by v2.8.47+v2.8.48), retrieval=0 actionable, curiosity=2546 pending (409 hle_failure, 2137 unknown_term — all HLE-related, HLE paused via sentinels)
10
+ - Action this tick: no action — system healthy; queued harness items all historical; top curiosity items are hard-math HLE timeouts which cannot be evaluated with HLE paused per operator directive (CLAUDE.md 2026-05-17); retrieval queue already up to date
11
+
12
+ ## 2026-05-17 15:30 UTC tick
13
+ - Stress: PAUSED (.pause_stress sentinel active)
14
+ - HLE burndown: running (PID 2465533 engineering batch, slot 59, ~51 min elapsed), lifetime 115/848 = 13.6% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.3%, Chem 8.7%); babysitter skipping correctly while burndown active
15
+ - Write rate: N/A (stress paused)
16
+ - Admiral last 30 min: not checked (stress paused)
17
+ - vLLM 400s: 0 observed
18
+ - GH issues: 0 open
19
+ - Dispatch queue: harness=7 (all thinking_stall from 2026-05-15, already addressed by recent commits), retrieval=3 (0 actionable — all already ingested), steering=0, curiosity=2546 pending (top 3 are hle_failure/no-FINAL-ANSWER pattern, covered by commits a9f16ae/4909542/d500234)
20
+ - retrieval-drain: 0 projects ingested (nothing new)
21
+ - Model: Q3_K_M via llama.cpp :8000 healthy; balancer :8001 healthy
22
+ - Action this tick: no action — healthy; recent 24h commits are actively addressing HLE stall/FINAL-ANSWER pattern; curiosity top items already covered
23
+
24
+ ## 2026-05-17 14:30 UTC tick
25
+ - Stress: PAUSED (.pause_stress sentinel active)
26
+ - HLE burndown: running (PID 2452616 chemistry batch in progress), lifetime 115/841 = 13.7% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.3%, Chem 8.7%, Other 18.2%, Engineering 4.7%, Hum/SS 14.3%); latest batch chemistry 1/10
27
+ - Write rate: N/A (stress paused)
28
+ - vLLM 400s: 0; llamacpp-gemma4 healthy; balancer on :8001 healthy
29
+ - GH issues: 0 open
30
+ - Dispatch queue: harness=7 (all thinking_stall, stale pre-fix), retrieval=3 (nothing actionable), curiosity=2934 total/2525 pending/406 consumed
31
+ - Action this tick: committed fix a9f16ae (addresses curiosity:01c0f4dc34d97142, :fbe7b3456bdbb0ca, :4ffd02384a890963) — stall-retry _prev_was_read notes at attempts 0 and 1 now append DRYDOCK_STOP_NOW_SUFFIX ("FINAL ANSWER: <answer>") which 4909542 only did for attempt 2; also neutralized coding-task wording ("write_file, search_replace") to context-neutral ("respond in text — write your answer or make changes"). No-op for coding sessions (suffix unset by default).
32
+
33
+ ## 2026-05-17 14:00 UTC tick
34
+ - Stress: PAUSED (.pause_stress sentinel active)
35
+ - HLE burndown: running (PID 2452616, slot 58 chemistry), lifetime 114/837 = 13.6% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.3%, Chem 7.8%); recent batch Physics 20%
36
+ - Write rate: N/A (stress paused)
37
+ - Admiral last 30 min: N/A
38
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (25h uptime)
39
+ - GH issues: 0 open
40
+ - Dispatch queue: harness=1305 total (8 in last 24h, thinking_stall, already addressed by v2.8.47+), retrieval=3 (nothing actionable), curiosity=2931 total (2524 pending, 403 consumed)
41
+ - Action this tick: consumed curiosity acf1a1892044a747 (thinking-budget timeout case — addressed by 2973dd1 QUESTION_TIMEOUT 480→600s). Investigated ongoing empty-pred failures in physics batch (3 questions produced pred='' in run_1779013132 after FINAL ANSWER fixes) — these are hard-QA questions where model likely times out during inference before producing output; pattern requires deeper session log analysis, leaving for next autonomous_review tick.
42
+
43
+ ## 2026-05-17 13:30 UTC tick
44
+ - Stress: PAUSED (.pause_stress sentinel active)
45
+ - HLE burndown: running (PID 1742185, 3+ days elapsed), lifetime 114/832 = 13.7% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.3%, Chem 8.5%); recent batches: Humanities 30%, Physics 20%, Physics 10%
46
+ - Write rate: N/A (stress paused)
47
+ - vLLM 400s: 0 in last 30min (llamacpp-gemma4 Q3_K_M healthy on :8000, balancer :8001 up)
48
+ - GH issues: 0 open
49
+ - Dispatch queue: harness=8 (all historical thinking_stall, resolved v2.8.47), retrieval=3 (all recently ingested, 0 actionable), curiosity=2513 pending (409 hle_failure, 2107 unknown_term)
50
+ - Action this tick: consumed 3 stale hle_failure curiosity items (da424f73, 5c2ad87e, 4f4de190 — empty:no_final_answer cases addressed by d500234/4909542 stall-retry FINAL ANSWER suffix fixes); observed 1 new empty:no_response at 601s in Humanities batch (poetry question) — non-streaming HTTP timeout still hitting first-turn for some questions; no code change this tick as system otherwise healthy and autonomous_review just completed 13:00Z tick
51
+
52
+ ## 2026-05-17 13:00 UTC tick
53
+ - Stress: PAUSED (.pause_stress sentinel active)
54
+ - HLE burndown: running (PID 2440503, 27min elapsed), lifetime 112/825 = 13.6% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.3%, Chem 8.5%); recent batches variable (0-50%)
55
+ - Write rate: N/A (stress paused)
56
+ - Admiral last 30 min: N/A (stress paused)
57
+ - vLLM 400s: N/A (llamacpp container, not vLLM)
58
+ - GH issues: 0 open
59
+ - Dispatch queue: harness=8 (all historical, thinking_stall resolved v2.8.47), retrieval=3 (all already ingested), curiosity=2504 pending
60
+ - Action this tick: consumed 3 stale pre-fix curiosity items (FINAL ANSWER + timeout artifacts addressed by d500234/4909542/2973dd1); no new bugs found; autonomous_review running concurrently at 13:00Z
61
+
62
+ ## 2026-05-17 12:30 UTC tick
63
+ - Stress: PAUSED (.pause_stress sentinel active)
64
+ - HLE burndown: running slot 56 (PID 2425424, 69min elapsed, physics batch — Q10 in progress), lifetime 111/821 = 13.5% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 8.5%, Chem 8.5%, Other unchanged)
65
+ - Write rate: N/A (stress paused)
66
+ - vLLM 400s: 0 in last 30min, llamacpp-gemma4 healthy (Q3_K_M)
67
+ - GH issues: 0 open
68
+ - Dispatch queue: harness=8 (all stale thinking_stall, resolved v2.8.47); retrieval=0 actionable (3 entries, all recently ingested); curiosity=2488 pending — consumed 3 stale hle_failure artifacts (532e9d22, 77d0d52, 44f4d505 — hard theoretical questions: Tate-graph/μ-fixpoint, DomSet complexity, SU(N) structure constants; model capability gap, not addressable by prompt rules)
69
+ - 12:00Z autonomous_review tick hit $1 USD budget cap and exited early (exit=1)
70
+ - Action this tick: no code change — system nominal; consumed 3 curiosity items; retrieval drain 0 new ingestions
71
+
72
+ ## 2026-05-17 12:00 UTC tick
73
+ - Stress: PAUSED (.pause_stress sentinel active)
74
+ - HLE burndown: running (PID 2425424, physics batch in progress), lifetime 110/817 = 13.5% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 7.5%, Chem 8.5%, Other 18.2%)
75
+ - Write rate: N/A (stress paused)
76
+ - Admiral: autonomous_review tick started at 12:00Z
77
+ - vLLM 400s: 0 in last 30min, model healthy
78
+ - GH issues: 0 open
79
+ - Dispatch queue: harness=9 (all thinking_stall, stale from 2026-05-16); retrieval=0 actionable; curiosity=2488 pending (hle_failure=407, unknown_term=2081)
80
+ - Action this tick: committed fix — QUESTION_TIMEOUT 480→600s in hle_eval.py; all 3 recent empty:no_final_answer cases elapsed exactly at deadline (model killed mid-generation); retrieval drain: 0 actionable; curiosity top item (threshold-sig scheme) marked consumed (42e0bdf8)
81
+
82
+ ## 2026-05-17 11:30 UTC tick
83
+ - Stress: PAUSED (.pause_stress sentinel active)
84
+ - HLE burndown: running (PID 2425424, 08:50 elapsed, physics slot 56 active), lifetime 109/813 = 13.4% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Physics 6.3%, Chem 8.5%, Other 18.2%)
85
+ - Write rate: N/A (stress paused)
86
+ - Admiral last 30 min: autonomous_review tick started at 11:30Z
87
+ - vLLM 400s: 3 matches in docker grep (benign — reasoning-budget activation noise, Q3_K_M healthy, 23376 tok prompt for physics slot)
88
+ - GH issues: 0 open
89
+ - Dispatch queue: harness=9 (all stale, thinking_stall resolved by v2.8.47); retrieval=0 actionable; curiosity=2478 pending (top 3 are today's physics no_response failures — spinor/scalar field + Z-boson EW + virial series; model timed out at 480s with msg_count=1; not addressable by prompt changes)
90
+ - Retrieval drain: 0 projects (3 queue entries, all already ingested)
91
+ - Action this tick: no code change — system nominal; harness:thinking_stall pattern confirmed stale (last dispatch evidence says "fully resolved by v2.8.47"); top curiosity items are empty:no_response physics timeouts where model never starts within 480s, distinct from the empty:no_final_answer cases targeted by recent FINAL ANSWER suffix commits
92
+
3
93
  ## 2026-05-17 10:30 UTC tick
4
94
  - Stress: PAUSED (.pause_stress sentinel active)
5
95
  - HLE burndown: running (PID 2412661, physics batch active, 12min elapsed), lifetime 108/803 = 13.4% (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%, Chem 8.5%, Other 18.2%)
@@ -7365,3 +7455,13 @@ restarted, cron self-match bug fixed in this same session).
7365
7455
  - Previous batch (23:52 UTC, 10 Math questions): 0/10 — all 480s timeouts on hard questions (fuzzy logic, semilattice functors, Boolean prime implicants); model outputs show reasoning fragments not clean FINAL ANSWER — capability gap, not a drydock bug
7366
7456
  - Current batch (01:13 UTC): 2/4 correct so far (chess Q1 YES exact, Cauchy Q3 YES fuzzy) after recent stall-retry fixes; still running
7367
7457
  - Action this tick: consumed curiosity:982cd07192229b9e (LSH-threshold model-used-tools-but-no-FINAL-ANSWER — addressed by 23f65dc + e20fb7b stall-retry guards); no code fix committed — system healthy, recent fixes still being evaluated by burndown daemon
7458
+
7459
+ ## 2026-05-17 11:00 UTC tick
7460
+ - Stress: paused via .pause_stress sentinel (expected)
7461
+ - Write rate: N/A (stress paused)
7462
+ - Admiral last 30 min: N/A
7463
+ - vLLM 400s: 10 (within llamacpp normal range, no errors logged)
7464
+ - GH issues: 0 open
7465
+ - Dispatch queue: harness=9 (all stale thinking_stall, addressed by v2.8.47+v2.8.48), retrieval=0 actionable, curiosity=2468 pending (402 hle_failure, 2066 unknown_term)
7466
+ - HLE: lifetime 13.5% across 809 questions (Math 17.8%, CS/AI 6.8%, Bio/Med 13.2%); burndown daemon running (PID 2412661, physics batch)
7467
+ - Action this tick: committed fix (4909542) — readonly-tool stall-retry note was saying "call write_file or search_replace NOW" (wrong for HLE) and omitting DRYDOCK_STOP_NOW_SUFFIX; fixed to say "respond in text with analysis/best answer" and append the FINAL ANSWER suffix; consumed curiosity:87cf3274e4ba6912