drydock-cli 2.8.33__tar.gz → 2.8.35__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 (813) hide show
  1. drydock_cli-2.8.35/.auto_release.lock +1 -0
  2. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/PKG-INFO +1 -1
  3. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/agent_loop.py +24 -3
  4. drydock_cli-2.8.35/drydock/core/constraint_hint.py +302 -0
  5. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/pyproject.toml +1 -1
  6. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_babysitter.sh +5 -0
  7. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_burndown.sh +6 -3
  8. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_eval.py +4 -2
  9. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_constraint_hint.py +20 -1
  10. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/trip_log.md +117 -0
  11. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/uv.lock +18 -1
  12. drydock_cli-2.8.33/.auto_release.lock +0 -1
  13. drydock_cli-2.8.33/drydock/core/constraint_hint.py +0 -181
  14. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/CODEOWNERS +0 -0
  15. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  16. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  17. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  18. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/workflows/build-and-upload.yml +0 -0
  19. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/workflows/ci.yml +0 -0
  20. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/workflows/issue-labeler.yml +0 -0
  21. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.github/workflows/release.yml +0 -0
  22. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.gitignore +0 -0
  23. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.pre-commit-config.yaml +0 -0
  24. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.python-version +0 -0
  25. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.typos.toml +0 -0
  26. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.vscode/extensions.json +0 -0
  27. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.vscode/launch.json +0 -0
  28. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/.vscode/settings.json +0 -0
  29. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/AGENTS.md +0 -0
  30. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/Admiral.md +0 -0
  31. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/CHANGELOG.md +0 -0
  32. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/CLAUDE.md +0 -0
  33. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/CONTRIBUTING.md +0 -0
  34. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/DEEP_NOIR_PRD.md +0 -0
  35. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/DEPLOYMENT.md +0 -0
  36. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/DRYDOCK.md +0 -0
  37. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/HLE_PRD.md +0 -0
  38. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/JETSON_BENCH.md +0 -0
  39. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/LICENSE +0 -0
  40. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/MODEL_SHORTCOMINGS.md +0 -0
  41. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/NOTICE +0 -0
  42. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/README.md +0 -0
  43. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/SOVEREIGN_PRD.md +0 -0
  44. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/TRIAGE_v1.md +0 -0
  45. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/action.yml +0 -0
  46. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/README.md +0 -0
  47. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results1.tsv +0 -0
  48. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results13.tsv +0 -0
  49. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results14.tsv +0 -0
  50. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results15.tsv +0 -0
  51. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results16.tsv +0 -0
  52. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results17.tsv +0 -0
  53. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results18.tsv +0 -0
  54. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results19.tsv +0 -0
  55. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results2.tsv +0 -0
  56. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results20.tsv +0 -0
  57. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results3.tsv +0 -0
  58. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results4.tsv +0 -0
  59. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results5.tsv +0 -0
  60. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results6.tsv +0 -0
  61. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results7.tsv +0 -0
  62. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results8.tsv +0 -0
  63. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results9.tsv +0 -0
  64. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/baseline_history/results_evolved_v1.tsv +0 -0
  65. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/distribution/zed/LICENSE +0 -0
  66. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/distribution/zed/extension.toml +0 -0
  67. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/distribution/zed/icons/mistral_vibe.svg +0 -0
  68. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/README.md +0 -0
  69. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/acp-setup.md +0 -0
  70. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/BASELINE_412.md +0 -0
  71. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/Drydock_rebrand.md +0 -0
  72. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  73. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  74. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  75. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/PRD.md +0 -0
  76. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/drydock_terms.md +0 -0
  77. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/archive/resume.md +0 -0
  78. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/docs/proxy-setup.md +0 -0
  79. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/__init__.py +0 -0
  80. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/__main__.py +0 -0
  81. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/__init__.py +0 -0
  82. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/acp_agent_loop.py +0 -0
  83. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/acp_logger.py +0 -0
  84. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/entrypoint.py +0 -0
  85. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/__init__.py +0 -0
  86. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/base.py +0 -0
  87. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/builtins/bash.py +0 -0
  88. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/builtins/read_file.py +0 -0
  89. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/builtins/search_replace.py +0 -0
  90. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/builtins/todo.py +0 -0
  91. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/builtins/write_file.py +0 -0
  92. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/tools/session_update.py +0 -0
  93. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/acp/utils.py +0 -0
  94. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/__init__.py +0 -0
  95. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/detectors.py +0 -0
  96. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/detectors_proposed.py +0 -0
  97. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/history.py +0 -0
  98. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/interventions.py +0 -0
  99. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/llm_analyzer.py +0 -0
  100. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/metrics.py +0 -0
  101. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/opus_escalator.py +0 -0
  102. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/persistence.py +0 -0
  103. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/policy.py +0 -0
  104. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/proposer.py +0 -0
  105. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/stager.py +0 -0
  106. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/task_classifier.py +0 -0
  107. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/tuning.py +0 -0
  108. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/validator.py +0 -0
  109. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/admiral/worker.py +0 -0
  110. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/__init__.py +0 -0
  111. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/autocompletion/__init__.py +0 -0
  112. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/autocompletion/base.py +0 -0
  113. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/autocompletion/path_completion.py +0 -0
  114. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/autocompletion/slash_command.py +0 -0
  115. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/cli.py +0 -0
  116. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/clipboard.py +0 -0
  117. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/commands.py +0 -0
  118. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/entrypoint.py +0 -0
  119. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/fix_windows_path.py +0 -0
  120. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/history_manager.py +0 -0
  121. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  122. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  123. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  124. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/terminal_setup.py +0 -0
  125. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/__init__.py +0 -0
  126. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  127. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/app.py +0 -0
  128. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/app.tcss +0 -0
  129. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/external_editor.py +0 -0
  130. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  131. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  132. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  133. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  134. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  135. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  136. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  137. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  138. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  139. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  140. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  141. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  142. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  143. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  144. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  145. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  146. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  147. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  148. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  149. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  150. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  151. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  152. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  153. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  154. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  155. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  156. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  157. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  158. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  159. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  160. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  161. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  162. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  163. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  164. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  165. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  166. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  167. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/windowing/history.py +0 -0
  168. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  169. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/textual_ui/windowing/state.py +0 -0
  170. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/__init__.py +0 -0
  171. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  172. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  173. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  174. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  175. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  176. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/update.py +0 -0
  177. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/cli/update_notifier/whats_new.py +0 -0
  178. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/__init__.py +0 -0
  179. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/agents/__init__.py +0 -0
  180. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/agents/manager.py +0 -0
  181. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/agents/models.py +0 -0
  182. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/auth/__init__.py +0 -0
  183. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/auth/crypto.py +0 -0
  184. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/auth/github.py +0 -0
  185. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/__init__.py +0 -0
  186. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/completers.py +0 -0
  187. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  188. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  189. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  190. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  191. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  192. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/fuzzy.py +0 -0
  193. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/path_prompt.py +0 -0
  194. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  195. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/build_orchestrator.py +0 -0
  196. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/checkpoint.py +0 -0
  197. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/__init__.py +0 -0
  198. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/__main__.py +0 -0
  199. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/classifier.py +0 -0
  200. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/dispatcher.py +0 -0
  201. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/rules.py +0 -0
  202. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/classifier/signal.py +0 -0
  203. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/__init__.py +0 -0
  204. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/_dotenv.py +0 -0
  205. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/_settings.py +0 -0
  206. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/doctor.py +0 -0
  207. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/harness_files/__init__.py +0 -0
  208. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  209. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/harness_files/_paths.py +0 -0
  210. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/local_detect.py +0 -0
  211. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/config/migrate.py +0 -0
  212. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/consultant.py +0 -0
  213. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/context_recovery.py +0 -0
  214. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/drydock_states.py +0 -0
  215. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/hooks.py +0 -0
  216. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/__init__.py +0 -0
  217. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/anthropic.py +0 -0
  218. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/base.py +0 -0
  219. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/factory.py +0 -0
  220. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/generic.py +0 -0
  221. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/mistral.py +0 -0
  222. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  223. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/backend/vertex.py +0 -0
  224. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/exceptions.py +0 -0
  225. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/format.py +0 -0
  226. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/message_utils.py +0 -0
  227. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/llm/types.py +0 -0
  228. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/logger.py +0 -0
  229. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/middleware.py +0 -0
  230. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/output_formatters.py +0 -0
  231. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/paths/__init__.py +0 -0
  232. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/paths/_drydock_home.py +0 -0
  233. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/paths/_local_config_walk.py +0 -0
  234. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/paths/conventions.py +0 -0
  235. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/plan_session.py +0 -0
  236. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/plugins.py +0 -0
  237. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/programmatic.py +0 -0
  238. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/__init__.py +0 -0
  239. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/builder.md +0 -0
  240. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/cli.md +0 -0
  241. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/compact.md +0 -0
  242. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/dangerous_directory.md +0 -0
  243. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/diagnostic.md +0 -0
  244. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/explore.md +0 -0
  245. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/gemma4.md +0 -0
  246. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/planner.md +0 -0
  247. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/project_context.md +0 -0
  248. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/prompts/tests.md +0 -0
  249. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/proxy_setup.py +0 -0
  250. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/agent_memory.py +0 -0
  251. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/checkpoints.py +0 -0
  252. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/session_loader.py +0 -0
  253. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/session_logger.py +0 -0
  254. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/session_migration.py +0 -0
  255. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session/state_file.py +0 -0
  256. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/session_checker.py +0 -0
  257. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/skills/__init__.py +0 -0
  258. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/skills/manager.py +0 -0
  259. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/skills/models.py +0 -0
  260. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/skills/parser.py +0 -0
  261. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/slug.py +0 -0
  262. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/steering_hook.py +0 -0
  263. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/system_prompt.py +0 -0
  264. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/telemetry/__init__.py +0 -0
  265. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/telemetry/send.py +0 -0
  266. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/teleport/errors.py +0 -0
  267. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/teleport/git.py +0 -0
  268. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/teleport/nuage.py +0 -0
  269. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/teleport/teleport.py +0 -0
  270. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/teleport/types.py +0 -0
  271. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/base.py +0 -0
  272. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/_task_manager.py +0 -0
  273. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  274. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  275. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/bash.py +0 -0
  276. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  277. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/count_tool.py +0 -0
  278. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/cron.py +0 -0
  279. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  280. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/glob_tool.py +0 -0
  281. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/grep.py +0 -0
  282. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  283. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  284. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/logic_tool.py +0 -0
  285. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/lsp.py +0 -0
  286. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/math_tool.py +0 -0
  287. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  288. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/memory_tool.py +0 -0
  289. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  290. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  291. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/powershell.py +0 -0
  292. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  293. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  294. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  295. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  296. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  297. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  298. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  299. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  300. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  301. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  302. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  303. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  304. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  305. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  306. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  307. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/task.md +0 -0
  308. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  309. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  310. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  311. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  312. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  313. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  314. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  315. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/read_file.py +0 -0
  316. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/retrieve.py +0 -0
  317. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/search_replace.py +0 -0
  318. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/set_tool.py +0 -0
  319. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/solve_tool.py +0 -0
  320. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/stats_tool.py +0 -0
  321. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/task.py +0 -0
  322. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/todo.py +0 -0
  323. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/tool_search.py +0 -0
  324. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/units_tool.py +0 -0
  325. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/verify_tool.py +0 -0
  326. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/webfetch.py +0 -0
  327. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/websearch.py +0 -0
  328. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/worktree.py +0 -0
  329. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/builtins/write_file.py +0 -0
  330. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/injection_guard.py +0 -0
  331. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/manager.py +0 -0
  332. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/mcp/__init__.py +0 -0
  333. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/mcp/registry.py +0 -0
  334. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/mcp/tools.py +0 -0
  335. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/mcp_sampling.py +0 -0
  336. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/ui.py +0 -0
  337. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/tools/utils.py +0 -0
  338. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/trusted_folders.py +0 -0
  339. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/types.py +0 -0
  340. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/core/utils.py +0 -0
  341. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/__init__.py +0 -0
  342. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/__main__.py +0 -0
  343. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/gap_detector.py +0 -0
  344. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/item.py +0 -0
  345. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/queue.py +0 -0
  346. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/curiosity/surprise.py +0 -0
  347. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/__init__.py +0 -0
  348. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/__main__.py +0 -0
  349. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/code_indexer.py +0 -0
  350. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/retriever.py +0 -0
  351. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/storage.py +0 -0
  352. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/graphrag/text_indexer.py +0 -0
  353. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/__init__.py +0 -0
  354. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/base.py +0 -0
  355. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/onboarding.tcss +0 -0
  356. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/screens/__init__.py +0 -0
  357. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/screens/api_key.py +0 -0
  358. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/screens/choice.py +0 -0
  359. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/screens/local_model.py +0 -0
  360. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/onboarding/screens/welcome.py +0 -0
  361. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  362. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  363. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/__init__.py +0 -0
  364. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/api-design/SKILL.md +0 -0
  365. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/audit-tests/SKILL.md +0 -0
  366. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/batch/SKILL.md +0 -0
  367. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/commit-code/SKILL.md +0 -0
  368. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  369. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/context-summary/SKILL.md +0 -0
  370. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/create-presentation/SKILL.md +0 -0
  371. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/deep-research/SKILL.md +0 -0
  372. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/deploy/SKILL.md +0 -0
  373. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/diff-review/SKILL.md +0 -0
  374. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/doc-gen/SKILL.md +0 -0
  375. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/explain-code/SKILL.md +0 -0
  376. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/explore-code/SKILL.md +0 -0
  377. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/fix-issue/SKILL.md +0 -0
  378. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/git-ops/SKILL.md +0 -0
  379. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/init-project/SKILL.md +0 -0
  380. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/investigate/SKILL.md +0 -0
  381. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/logic/SKILL.md +0 -0
  382. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  383. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/loop/SKILL.md +0 -0
  384. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/migrate/SKILL.md +0 -0
  385. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/perf-analyze/SKILL.md +0 -0
  386. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/plan-impl/SKILL.md +0 -0
  387. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/pr-review/SKILL.md +0 -0
  388. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/prove/SKILL.md +0 -0
  389. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/refactor/SKILL.md +0 -0
  390. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/regex-help/SKILL.md +0 -0
  391. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/review/SKILL.md +0 -0
  392. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/security-review/SKILL.md +0 -0
  393. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/ship/SKILL.md +0 -0
  394. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/simplify/SKILL.md +0 -0
  395. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/strong-tests/SKILL.md +0 -0
  396. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/skills/test-verify/SKILL.md +0 -0
  397. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/__init__.py +0 -0
  398. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/__main__.py +0 -0
  399. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/applier.py +0 -0
  400. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/config.py +0 -0
  401. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/registry.py +0 -0
  402. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sandbox.py +0 -0
  403. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sidecar/__init__.py +0 -0
  404. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sidecar/header_parser.py +0 -0
  405. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sidecar/hooks.py +0 -0
  406. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sidecar/loader.py +0 -0
  407. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/sidecar/server.py +0 -0
  408. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/train/__init__.py +0 -0
  409. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/train/capture.py +0 -0
  410. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/train/compute_vector.py +0 -0
  411. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/train/extract_pairs.py +0 -0
  412. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/train/scan_sessions.py +0 -0
  413. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/steering/vectors.py +0 -0
  414. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock/whats_new.md +0 -0
  415. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/drydock-acp.spec +0 -0
  416. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/flake.lock +0 -0
  417. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/flake.nix +0 -0
  418. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/outlook_draft_assistant.tar.gz +0 -0
  419. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/README.md +0 -0
  420. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/config_base.toml +0 -0
  421. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/config_best.toml +0 -0
  422. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/deep_noir/pairs/empty_after_bash.jsonl +0 -0
  423. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/deep_noir/pairs/scan_empty_after_bash.jsonl +0 -0
  424. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/domain_spec.md +0 -0
  425. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/experimenter.py +0 -0
  426. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/kernel.py +0 -0
  427. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/mini_prd.md +0 -0
  428. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/mini_prompts.txt +0 -0
  429. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/proposer.py +0 -0
  430. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/research/results.tsv +0 -0
  431. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/resume.md +0 -0
  432. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/README.md +0 -0
  433. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/admiral_probe.py +0 -0
  434. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/auto_test_loop.sh +0 -0
  435. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/monitor_test_battery.sh +0 -0
  436. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/overnight_agents_test.sh +0 -0
  437. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/test_bank.sh +0 -0
  438. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/test_full.sh +0 -0
  439. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/test_smoke.sh +0 -0
  440. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/archive/tui_test.py +0 -0
  441. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/audit_sampler.py +0 -0
  442. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/auto_generate_tests.py +0 -0
  443. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/auto_release.sh +0 -0
  444. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/autonomous_review.sh +0 -0
  445. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/autonomous_review_prompt.md +0 -0
  446. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/backfill_hle_curiosity.py +0 -0
  447. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/backup.sh +0 -0
  448. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/bench_inference.py +0 -0
  449. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/bump_version.py +0 -0
  450. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/classify_pulse.sh +0 -0
  451. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/consume_retrieval_queue.py +0 -0
  452. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/curiosity_idle_cycle.sh +0 -0
  453. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/dedupe_dispatch_queues.py +0 -0
  454. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/deploy_to_github.sh +0 -0
  455. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/dispatch_report.py +0 -0
  456. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/drydock_status.sh +0 -0
  457. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/fetch_arxiv_abstracts.py +0 -0
  458. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/gen_2000_prompts.py +0 -0
  459. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_aggregate.py +0 -0
  460. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_burndown_keepalive.sh +0 -0
  461. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/hle_eval_seed.jsonl +0 -0
  462. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/llm_balancer.py +0 -0
  463. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/notify_release.py +0 -0
  464. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/perf_baseline_when_idle.sh +0 -0
  465. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/perf_sweep.py +0 -0
  466. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/poll_issues.sh +0 -0
  467. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/publish_to_pypi.sh +0 -0
  468. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/queue_top.py +0 -0
  469. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/ralph_loop.py +0 -0
  470. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/rejudge_hle.py +0 -0
  471. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/research_babysitter.sh +0 -0
  472. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/shakedown.py +0 -0
  473. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/shakedown_interactive.py +0 -0
  474. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/shakedown_suite.sh +0 -0
  475. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/shakedown_variance.sh +0 -0
  476. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/start_steering_sidecar.sh +0 -0
  477. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_babysitter.sh +0 -0
  478. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_prompts_50.txt +0 -0
  479. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_prompts_realuser.txt +0 -0
  480. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_prompts_tool_agent.txt +0 -0
  481. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  482. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_shakedown.py +0 -0
  483. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_telegram_status.py +0 -0
  484. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/stress_watcher.py +0 -0
  485. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/telegram_bot.py +0 -0
  486. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/tool_usage_report.py +0 -0
  487. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/scripts/vllm_failover.sh +0 -0
  488. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/__init__.py +0 -0
  489. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/conftest.py +0 -0
  490. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_acp.py +0 -0
  491. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_agent_thought.py +0 -0
  492. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_bash.py +0 -0
  493. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_compact_session_updates.py +0 -0
  494. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_content.py +0 -0
  495. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_initialize.py +0 -0
  496. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_list_sessions.py +0 -0
  497. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_load_session.py +0 -0
  498. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_multi_session.py +0 -0
  499. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_new_session.py +0 -0
  500. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_proxy_setup_acp.py +0 -0
  501. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_read_file.py +0 -0
  502. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_search_replace.py +0 -0
  503. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_set_config_option.py +0 -0
  504. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_set_mode.py +0 -0
  505. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_set_model.py +0 -0
  506. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_tool_call_session_update.py +0 -0
  507. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_utils.py +0 -0
  508. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/acp/test_write_file.py +0 -0
  509. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_file_indexer.py +0 -0
  510. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_fuzzy.py +0 -0
  511. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  512. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  513. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_path_completion_controller.py +0 -0
  514. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  515. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_slash_command_controller.py +0 -0
  516. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  517. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/__init__.py +0 -0
  518. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/data/__init__.py +0 -0
  519. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/data/fireworks.py +0 -0
  520. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/data/mistral.py +0 -0
  521. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/test_anthropic_adapter.py +0 -0
  522. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/test_backend.py +0 -0
  523. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  524. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/test_reasoning_adapter.py +0 -0
  525. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  526. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  527. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  528. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  529. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_bell_notifications.py +0 -0
  530. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_braille_renderer.py +0 -0
  531. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_clipboard.py +0 -0
  532. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_commands.py +0 -0
  533. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_copy_shortcuts.py +0 -0
  534. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_external_editor.py +0 -0
  535. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_no_markup_static.py +0 -0
  536. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_question_app.py +0 -0
  537. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_spinner.py +0 -0
  538. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_switching_mode.py +0 -0
  539. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  540. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  541. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_ui_session_resume.py +0 -0
  542. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/test_ui_skill_dispatch.py +0 -0
  543. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/textual_ui/__init__.py +0 -0
  544. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/cli/textual_ui/test_session_picker.py +0 -0
  545. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/conftest.py +0 -0
  546. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_agents.py +0 -0
  547. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_auth_crypto.py +0 -0
  548. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_auth_github.py +0 -0
  549. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  550. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  551. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_config_load_dotenv.py +0 -0
  552. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_config_paths.py +0 -0
  553. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_config_resolution.py +0 -0
  554. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_file_logging.py +0 -0
  555. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_plan_session.py +0 -0
  556. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_proxy_setup.py +0 -0
  557. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_slug.py +0 -0
  558. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_telemetry_send.py +0 -0
  559. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_teleport_git.py +0 -0
  560. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_teleport_nuage.py +0 -0
  561. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_teleport_service.py +0 -0
  562. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_trusted_folders.py +0 -0
  563. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/core/test_utils.py +0 -0
  564. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/common.py +0 -0
  565. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/conftest.py +0 -0
  566. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/mock_server.py +0 -0
  567. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  568. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/test_cli_tui_streaming.py +0 -0
  569. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  570. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/fixtures/doc_qa_system_prd.md +0 -0
  571. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/mock/__init__.py +0 -0
  572. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/mock/mock_backend_factory.py +0 -0
  573. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/mock/mock_entrypoint.py +0 -0
  574. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/mock/utils.py +0 -0
  575. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/onboarding/test_run_onboarding.py +0 -0
  576. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/onboarding/test_ui_onboarding.py +0 -0
  577. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/session/test_session_loader.py +0 -0
  578. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/session/test_session_logger.py +0 -0
  579. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/session/test_session_migration.py +0 -0
  580. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/skills/conftest.py +0 -0
  581. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/skills/test_manager.py +0 -0
  582. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/skills/test_models.py +0 -0
  583. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/skills/test_parser.py +0 -0
  584. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  585. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  586. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  587. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  588. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  589. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  590. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  591. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  592. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  593. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  594. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  595. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  596. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  597. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  598. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  599. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  600. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  601. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  602. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  603. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  604. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  605. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  606. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  607. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  608. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  609. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  610. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  611. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  612. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  613. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  614. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  615. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  616. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  617. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  618. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  619. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  620. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  621. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  622. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  623. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  624. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  625. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  626. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  627. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  628. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  629. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  630. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  631. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  632. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  633. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  634. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  635. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  636. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  637. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  638. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  639. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  640. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  641. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  642. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  643. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  644. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/base_snapshot_test_app.py +0 -0
  645. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/conftest.py +0 -0
  646. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/snap_compare.py +0 -0
  647. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  648. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  649. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  650. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  651. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  652. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  653. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  654. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  655. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  656. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  657. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  658. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  659. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  660. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  661. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/stubs/fake_backend.py +0 -0
  662. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/stubs/fake_client.py +0 -0
  663. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/stubs/fake_tool.py +0 -0
  664. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral.py +0 -0
  665. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  666. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_intervention_outcome.py +0 -0
  667. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_phase3.py +0 -0
  668. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_proposed.py +0 -0
  669. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_session_id.py +0 -0
  670. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_admiral_struggle_dedup.py +0 -0
  671. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_auto_compact.py +0 -0
  672. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_backend.py +0 -0
  673. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_observer_streaming.py +0 -0
  674. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_stats.py +0 -0
  675. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_tasks.py +0 -0
  676. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agent_tool_call.py +0 -0
  677. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_agents.py +0 -0
  678. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_algebra_tool.py +0 -0
  679. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  680. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_build.py +0 -0
  681. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_debug.py +0 -0
  682. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_multiagent.py +0 -0
  683. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_prd.py +0 -0
  684. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_prd_extended.py +0 -0
  685. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_tools.py +0 -0
  686. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_bank_update.py +0 -0
  687. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_build_projects.py +0 -0
  688. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_checkpoint.py +0 -0
  689. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_chemistry_tool.py +0 -0
  690. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_classifier.py +0 -0
  691. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_cli_programmatic_preload.py +0 -0
  692. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_config_migration.py +0 -0
  693. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_context_recovery.py +0 -0
  694. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_count_tool.py +0 -0
  695. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_curiosity.py +0 -0
  696. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_current_bugs.py +0 -0
  697. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_dispatch_report.py +0 -0
  698. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_dispatcher.py +0 -0
  699. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_drydock_regression.py +0 -0
  700. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_drydock_tasks.py +0 -0
  701. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  702. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_full_regression.py +0 -0
  703. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_graphrag.py +0 -0
  704. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_graphrag_worked_examples.py +0 -0
  705. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_hallucinated_tool_suppression.py +0 -0
  706. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_history_manager.py +0 -0
  707. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_hle_aggregate.py +0 -0
  708. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_hle_score_method_split.py +0 -0
  709. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_hle_typing.py +0 -0
  710. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_integration.py +0 -0
  711. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_issue_fixes.py +0 -0
  712. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_linear_algebra_tool.py +0 -0
  713. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_local_detect.py +0 -0
  714. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_logic_tool.py +0 -0
  715. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_loop_detection.py +0 -0
  716. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_math_tool.py +0 -0
  717. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_mcp_settings.py +0 -0
  718. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_memory_tool.py +0 -0
  719. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_message_id.py +0 -0
  720. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_message_merging.py +0 -0
  721. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_middleware.py +0 -0
  722. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_multi_agent.py +0 -0
  723. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_number_theory_tool.py +0 -0
  724. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_read_file_not_found_listing.py +0 -0
  725. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_real_failures.py +0 -0
  726. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_real_issues.py +0 -0
  727. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_real_workflow.py +0 -0
  728. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_reasoning_content.py +0 -0
  729. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_rejudge_hle.py +0 -0
  730. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_retrieval_consumer.py +0 -0
  731. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_retrieve_tool.py +0 -0
  732. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_search_replace_args_not_truncated.py +0 -0
  733. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_set_tool.py +0 -0
  734. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_smoke.py +0 -0
  735. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_solve_tool.py +0 -0
  736. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_stats_tool.py +0 -0
  737. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering.py +0 -0
  738. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_capture.py +0 -0
  739. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_compute_vector.py +0 -0
  740. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_extract_pairs.py +0 -0
  741. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_hook.py +0 -0
  742. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  743. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_steering_sidecar_hooks.py +0 -0
  744. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_system_prompt.py +0 -0
  745. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_tagged_text.py +0 -0
  746. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_task_complete_nudge.py +0 -0
  747. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_tool_args.py +0 -0
  748. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_truncate_args_valid_json.py +0 -0
  749. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_truncated_arg_path_hint.py +0 -0
  750. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_truncated_search_replace_escalation.py +0 -0
  751. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_truncated_write_escalation.py +0 -0
  752. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_ui_external_editor.py +0 -0
  753. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_ui_input_history.py +0 -0
  754. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_units_tool.py +0 -0
  755. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_user_issues.py +0 -0
  756. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_verify_tool.py +0 -0
  757. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_wall_of_text_rescue.py +0 -0
  758. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_workloads.py +0 -0
  759. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/test_write_file_missing_path.py +0 -0
  760. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/testbank_helpers.py +0 -0
  761. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_ask_user_question.py +0 -0
  762. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash.py +0 -0
  763. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  764. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_consec_empty_search.py +0 -0
  765. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  766. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  767. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  768. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  769. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  770. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  771. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  772. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_exit_plan_mode.py +0 -0
  773. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_grep.py +0 -0
  774. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  775. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_invoke_context.py +0 -0
  776. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  777. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_manager_get_tool_config.py +0 -0
  778. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_mcp.py +0 -0
  779. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_mcp_sampling.py +0 -0
  780. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  781. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  782. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_read_file_directory.py +0 -0
  783. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_read_file_limit_truncation.py +0 -0
  784. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_append_fallback.py +0 -0
  785. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_dir_path.py +0 -0
  786. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_empty_content.py +0 -0
  787. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_file_not_found.py +0 -0
  788. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  789. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_hard_stop.py +0 -0
  790. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_malformed_block.py +0 -0
  791. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  792. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_placeholder.py +0 -0
  793. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  794. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_task.py +0 -0
  795. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_ui_bash_execution.py +0 -0
  796. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_webfetch.py +0 -0
  797. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_websearch.py +0 -0
  798. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  799. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  800. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  801. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  802. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_do_update.py +0 -0
  803. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  804. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_github_update_gateway.py +0 -0
  805. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  806. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_ui_update_notification.py +0 -0
  807. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_update_use_case.py +0 -0
  808. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/tests/update_notifier/test_whats_new.py +0 -0
  809. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/worked_examples/README.md +0 -0
  810. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/worked_examples/cli_subcommand_dispatch.py +0 -0
  811. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/worked_examples/lookup.json +0 -0
  812. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/worked_examples/sql_parser.py +0 -0
  813. {drydock_cli-2.8.33 → drydock_cli-2.8.35}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 1891044
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.33
3
+ Version: 2.8.35
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
@@ -625,13 +625,20 @@ class AgentLoop:
625
625
  self.middleware_pipeline.add(PriceLimitMiddleware(self._max_price))
626
626
 
627
627
  active_model = self.config.get_active_model()
628
- if active_model.auto_compact_threshold > 0:
628
+ _compact_thresh = active_model.auto_compact_threshold
629
+ _env_thresh = os.environ.get("DRYDOCK_AUTO_COMPACT_THRESHOLD", "")
630
+ if _env_thresh.strip():
631
+ try:
632
+ _compact_thresh = int(_env_thresh.strip())
633
+ except ValueError:
634
+ pass
635
+ if _compact_thresh > 0:
629
636
  self.middleware_pipeline.add(
630
- AutoCompactMiddleware(active_model.auto_compact_threshold)
637
+ AutoCompactMiddleware(_compact_thresh)
631
638
  )
632
639
  if self.config.context_warnings:
633
640
  self.middleware_pipeline.add(
634
- ContextWarningMiddleware(0.5, active_model.auto_compact_threshold)
641
+ ContextWarningMiddleware(0.5, _compact_thresh)
635
642
  )
636
643
 
637
644
  self.middleware_pipeline.add(
@@ -838,9 +845,11 @@ class AgentLoop:
838
845
  STOP_NOW_WARN_AT = int(getattr(self, "_admiral_stop_now_warn_at",
839
846
  int(os.environ.get("DRYDOCK_STOP_NOW_WARN_AT", 60))))
840
847
  STOP_NOW_TIME_SEC = int(os.environ.get("DRYDOCK_STOP_NOW_TIME_SEC", "0"))
848
+ TOOL_STOP_AFTER = int(os.environ.get("DRYDOCK_TOOL_STOP_AFTER", "0"))
841
849
  _prompt_start = time.perf_counter()
842
850
  _time_stop_injected = False
843
851
  _time_stop_escalated = False
852
+ _tool_stop_injected = False
844
853
  logger.warning("[TIMING] entering conversation while loop")
845
854
  while not should_break_loop:
846
855
  # Drain any user messages typed while the agent was working.
@@ -925,6 +934,18 @@ class AgentLoop:
925
934
  "guess."
926
935
  + (f" {_stop_suffix}" if _stop_suffix else "")
927
936
  )
937
+ if (TOOL_STOP_AFTER > 0
938
+ and not _tool_stop_injected
939
+ and tool_turns >= TOOL_STOP_AFTER):
940
+ _tool_stop_injected = True
941
+ _stop_suffix = os.environ.get("DRYDOCK_STOP_NOW_SUFFIX", "")
942
+ self._inject_system_note(
943
+ f"You have used {tool_turns} tool calls. "
944
+ "You may NOT call any more tools. "
945
+ "Your NEXT response must be plain text only — "
946
+ "write your best answer right now."
947
+ + (f" {_stop_suffix}" if _stop_suffix else "")
948
+ )
928
949
  if tool_turns == WRAP_UP_WARN_AT:
929
950
  self._inject_system_note(
930
951
  f"You have used {tool_turns} tool calls on this "
@@ -0,0 +1,302 @@
1
+ """Constraint-question detector — nudges Gemma 4 toward the `solve` tool.
2
+
3
+ The model has the `solve` tool available, but it doesn't reliably reach
4
+ for it. Two observed failure modes:
5
+ 1. It answers from prior — guesses a value that "looks right."
6
+ 2. It tries to enumerate by hand and miscounts.
7
+
8
+ This hook pattern-matches the user message against the canonical
9
+ shapes of constraint problems (find-x-such-that, prove, optimization,
10
+ mod arithmetic, logic puzzle vocabulary). On a match, it picks the
11
+ worked example closest to the question shape and injects it as a
12
+ system note. That gives the model a concrete template to specialize
13
+ rather than abstract advice.
14
+
15
+ Same shape as the GraphRAG auto-prefetch and the curiosity-gap
16
+ logger: env-gated, log-only on miss, idempotent within a single
17
+ user-prompt turn.
18
+
19
+ Disabled via DRYDOCK_CONSTRAINT_HINT=0.
20
+ """
21
+ from __future__ import annotations
22
+
23
+ import logging
24
+ import os
25
+ import re
26
+
27
+ logger = logging.getLogger("drydock.constraint_hint")
28
+
29
+
30
+ # Pattern → (label, worked-example string). Patterns are evaluated in
31
+ # order; the first matching pattern wins. Each example shows the
32
+ # variables/constraints encoding for that question shape, so the model
33
+ # can specialize rather than invent the encoding from scratch.
34
+ _PATTERN_HINTS: list[tuple[re.Pattern[str], str, str]] = [
35
+ # ── Boolean / propositional algebra (Zhigalkin, formulas, truth tables) ──
36
+ # Pure boolean problems are Z3's bread and butter — the SAT/SMT solver
37
+ # decides equivalence and satisfiability efficiently. HLE example:
38
+ # 66edc256...d744 ("Zhigalkin polynomial of a Boolean formula") which
39
+ # the model got wrong (gold='$((a↓b)↑¬(c↓b))↔︎¬(d...').
40
+ (
41
+ re.compile(
42
+ r"\bboolean\s+(?:formula|expression|function|polynomial|algebra)\b"
43
+ r"|\bzhigalkin\s+polynomial\b"
44
+ r"|\balgebraic\s+normal\s+form\b"
45
+ r"|\b(?:propositional|prop)\s+(?:formulas?|expressions?|logic|sentences?)\b"
46
+ r"|\btruth\s+table\b"
47
+ r"|\bnand|nor|xor|⊕|\\oplus\b"
48
+ r"|\b(equivalent|equivalence)\s+of\s+(?:two\s+)?(?:formulas?|expressions?)\b",
49
+ re.IGNORECASE,
50
+ ),
51
+ "boolean-algebra",
52
+ '# For "is formula A equivalent to formula B?" or "simplify formula F":\n'
53
+ 'solve(op="prove", variables="a:Bool, b:Bool, c:Bool",\n'
54
+ ' constraints=[],\n'
55
+ ' conclusion="<FORMULA_A> == <FORMULA_B>")\n'
56
+ '→ valid (equivalent) or countered (with a:Bool=<witness>)\n'
57
+ '\n'
58
+ '# For "find a satisfying assignment to F":\n'
59
+ 'solve(op="solve", variables="a:Bool, b:Bool, c:Bool",\n'
60
+ ' constraints=["<FORMULA_AS_PYTHON_BOOL_EXPR>"])\n'
61
+ '\n'
62
+ '# Operators: And(a,b), Or(a,b), Not(a), Implies(p,q), Xor(p,q)\n'
63
+ '# Z3 decides Boolean SAT/equivalence definitively — DO NOT try to\n'
64
+ '# work out De Morgan / contrapositive / XOR identities by hand.',
65
+ ),
66
+
67
+ # ── Counting structures over a finite set ──
68
+ # "How many <structures> on a set of N elements". For small N these
69
+ # are enumerable by brute search but tedious; Z3 with BitVec/Int tables
70
+ # nails them. HLE example: 66edc256...754 ("How many associative AND
71
+ # commutative binary operations on 3 elements?", gold=63 — Z3 can
72
+ # encode this as a 3×3 table of Ints with the right axioms).
73
+ (
74
+ re.compile(
75
+ r"\bhow\s+many\s+(?:associative|commutative|abelian|cyclic|distinct|finite)\b"
76
+ r"|\bhow\s+many\s+(?:binary\s+)?(?:operations?|functions?|relations?|graphs?|structures?|groups?|rings?|fields?|magmas?|monoids?|semigroups?)\b.{0,30}(?:on|over|with)\s+(?:a\s+set\s+of|the\s+set)?\s*\d"
77
+ r"|\bnumber\s+of\s+(?:operations?|functions?|relations?|graphs?|matrices|sequences?)\s+(?:on|over|with|in)\b",
78
+ re.IGNORECASE,
79
+ ),
80
+ "structure-count",
81
+ '# For "How many <X> operations on a set of N elements?":\n'
82
+ '# Encode the op as a table: op[i][j] = some value in {0..N-1}.\n'
83
+ '# Use Int variables t_ij for the N² table cells, then add axioms.\n'
84
+ '#\n'
85
+ '# Example: count commutative AND associative binary ops on {0,1,2}\n'
86
+ 'solve(op="find_all",\n'
87
+ ' variables="t00:Int,t01:Int,t02:Int,t11:Int,t12:Int,t22:Int",\n'
88
+ ' constraints=[\n'
89
+ ' # range\n'
90
+ ' "t00>=0","t00<=2","t01>=0","t01<=2","t02>=0","t02<=2",\n'
91
+ ' "t11>=0","t11<=2","t12>=0","t12<=2","t22>=0","t22<=2",\n'
92
+ ' # associativity: (a*b)*c == a*(b*c) for all 27 (a,b,c)\n'
93
+ ' # (write only the non-redundant cases — use If(...) to look\n'
94
+ ' # up t[a][b]; commutativity reduces 9 entries to 6)\n'
95
+ ' ],\n'
96
+ ' limit=200, timeout_ms=30000)\n'
97
+ '→ len(models) is the answer.\n'
98
+ '\n'
99
+ '# REAL HLE: "comm+assoc binary ops on {0,1,2}" → 63 solutions.',
100
+ ),
101
+
102
+ # ── Perfect-power-counting / Diophantine-finite-search ──
103
+ # Highest priority because it has the most specific template, and
104
+ # because it's one of the few HLE question classes where Z3 is
105
+ # demonstrably strictly better than reasoning (verified: HLE
106
+ # 66ea031360fbbf249dec70e1, Z3 returned exactly 4 solutions in 4.4s).
107
+ (
108
+ re.compile(
109
+ r"\bfor\s+how\s+many\s+(?:integers?|natural\s+numbers?|positive\s+integers?)\b.*?\b(?:perfect\s+(?:square|cube|power)|a\s+square|a\s+cube|prime|divisible|squarefree)\b"
110
+ r"|\bperfect\s+(?:square|cube|power)\b.*?\bfor\s+how\s+many\b"
111
+ r"|\bhow\s+many\s+(?:non-?negative\s+|positive\s+)?integer\s+(?:solutions?|tuples?|points?)\b"
112
+ r"|\bhow\s+many\s+(?:integers?|values?|positive\s+integers?|natural\s+numbers?)\s+(?:x|y|n|k|m|with|such|less|greater|between|in)\b"
113
+ r"|\bhow\s+many\s+(?:positive\s+integers?|natural\s+numbers?|integers?).{0,40}?\b(?:squarefree|prime|perfect|divisible|composite|coprime|relatively\s+prime)\b"
114
+ r"|\bdiophantine\s+(?:equation|solutions?)\b"
115
+ r"|\bnumber\s+of\s+(?:non-?negative\s+)?integer\s+(?:solutions?|tuples?|pairs?)\b"
116
+ r"|\bcount\s+the\s+(?:number\s+of\s+)?(?:integers?|solutions?|tuples?)\b",
117
+ re.IGNORECASE | re.DOTALL,
118
+ ),
119
+ "diophantine-count",
120
+ '# For "For how many integers x is f(x) a perfect square?":\n'
121
+ 'solve(op="find_all", variables="x:Int, y:Int",\n'
122
+ ' constraints=[\n'
123
+ ' "y * y == <FILL: f(x) as polynomial in x>",\n'
124
+ ' "x >= -100", "x <= 100", # adjust bound by problem scale\n'
125
+ ' "y >= 0", # canonical: only positive root\n'
126
+ ' ],\n'
127
+ ' limit=100, timeout_ms=30000)\n'
128
+ '→ count len(models) — that IS the answer\n'
129
+ '\n'
130
+ '# For "Diophantine: how many (x1,...,xk) with sum^2 = N?":\n'
131
+ 'solve(op="find_all", variables="x1:Int, x2:Int, x3:Int",\n'
132
+ ' constraints=["x1 >= 0", "x2 >= 0", "x3 >= 0",\n'
133
+ ' "x1*x1 + x2*x2 + x3*x3 == 2024"],\n'
134
+ ' limit=100000)\n'
135
+ '\n'
136
+ '# REAL HLE WIN: f(x)=x^3-16x^2-72x+1056 perfect square → 4 solutions\n'
137
+ '# (x=-4, x=4, x=17, x=65). Z3 finds them in 4 seconds, exact.',
138
+ ),
139
+ (
140
+ re.compile(
141
+ r"\b(einstein|zebra)\s+puzzle\b"
142
+ r"|\blogic\s+puzzle\b"
143
+ r"|\bwho\s+(lives|owns|drinks|smokes)\b"
144
+ r"|\b(?:n|\d+)[\s\-]?queens\b"
145
+ r"|\bsudoku\b",
146
+ re.IGNORECASE,
147
+ ),
148
+ "logic-puzzle",
149
+ 'solve(op="solve", variables="a:Int, b:Int, c:Int",\n'
150
+ ' constraints=[\n'
151
+ ' "a >= 1", "a <= 3", "b >= 1", "b <= 3", "c >= 1", "c <= 3",\n'
152
+ ' "Distinct(a, b, c)", # all-different\n'
153
+ ' "a == 1", # \\"X is in position 1\\"\n'
154
+ ' "Abs(b - a) == 1", # \\"Y is next to X\\"\n'
155
+ ' "c != 2", # \\"Z is not in position 2\\"\n'
156
+ ' ])\n'
157
+ '→ sat: a=1, b=2, c=3',
158
+ ),
159
+ (
160
+ re.compile(
161
+ r"\bmod(?:ulo|ular)?\b"
162
+ r"|\bmod\s*\d"
163
+ r"|\(mod\s+\w+\)"
164
+ r"|\b\d+\s*[≡=]\s*\d+\s*\(?mod"
165
+ r"|[a-zA-Z]\s*%\s*\d+" # `n % 7`, `x%5`
166
+ r"|\bdivisible\s+by\b"
167
+ r"|\bremainder\b",
168
+ re.IGNORECASE,
169
+ ),
170
+ "modular-arithmetic",
171
+ 'solve(op="solve", variables="x:Int",\n'
172
+ ' constraints=["x >= 0", "x < 7", "3*x % 7 == 5"])\n'
173
+ '→ sat: x=4 (smallest non-negative x with 3x ≡ 5 mod 7)\n'
174
+ '\n'
175
+ 'For \\"find all solutions in the range\\", use op="find_all".\n'
176
+ 'For \\"smallest x with property P\\", use op="optimize", direction="min".',
177
+ ),
178
+ (
179
+ re.compile(
180
+ r"\bmaxim(?:ize|um)\b|\bminim(?:ize|um)\b"
181
+ r"|\bsmallest\s+(?:value|integer|number|x|n)\b"
182
+ r"|\blargest\s+(?:value|integer|number|x|n)\b"
183
+ r"|\bsubject\s+to\b"
184
+ r"|\boptimize\b",
185
+ re.IGNORECASE,
186
+ ),
187
+ "optimization",
188
+ 'solve(op="optimize", variables="x:Int, y:Int",\n'
189
+ ' constraints=["x + y == 10", "x >= 0", "y >= 0"],\n'
190
+ ' objective="x * y", direction="max")\n'
191
+ '→ optimal: x=5, y=5, objective=25',
192
+ ),
193
+ (
194
+ re.compile(
195
+ r"\b(prove|show\s+that|demonstrate|verify\s+that)\b"
196
+ r"|\bif\s+and\s+only\s+if\b"
197
+ r"|\biff\b"
198
+ r"|\bnecessary\s+and\s+sufficient\b",
199
+ re.IGNORECASE,
200
+ ),
201
+ "prove",
202
+ 'solve(op="prove", variables="x:Int",\n'
203
+ ' constraints=["x > 0"],\n'
204
+ ' conclusion="x + 1 > 1")\n'
205
+ '→ valid (constraints entail the conclusion)\n'
206
+ '\n'
207
+ 'When `prove` returns `countered`, the `model` field is the\n'
208
+ 'counterexample — that IS the answer for \\"is this true\\" questions.',
209
+ ),
210
+ (
211
+ re.compile(
212
+ # Classic "find x such that" / "for what x"
213
+ r"\bfind\s+(?:all\s+)?(?:x|y|n|k|m|the\s+(?:value|values|number|integer|integers|set|points?))\b"
214
+ r"|\bfor\s+what\s+(?:value|values|x|y|n|k|m|integers?)\b"
215
+ r"|\bexists\s+(?:a|an)\s+\w+\s+such\s+that\b"
216
+ r"|\bthere\s+(?:is|exists)\s+(?:a|an|some)\s+\w+\s+(?:such\s+that|with)\b"
217
+ # Counting questions: "for how many integers x is...", "how many ... satisfy"
218
+ r"|\bfor\s+how\s+many\b"
219
+ r"|\bhow\s+many\s+(?:integers?|values?|solutions?|positive|natural)\b"
220
+ r"|\bdetermine\s+(?:all|the\s+number\s+of|how\s+many)\b"
221
+ # Bound problems
222
+ r"|\b(lower|upper)\s+bound\b"
223
+ r"|\bfind\s+the\s+(?:lower|upper|tight)\b"
224
+ # Perfect square / power / divisibility predicates (Diophantine territory)
225
+ r"|\bperfect\s+(?:square|cube|power)\b"
226
+ r"|\bdiophantine\b"
227
+ # Compute-the-number-of style
228
+ r"|\bcompute\s+(?:the\s+(?:number|count|sum)\s+of|the\s+value\s+of)\b"
229
+ # Equivalence/equation-solving
230
+ r"|\bsolve\s+(?:the\s+)?(?:equation|system|inequality)\b"
231
+ # "What is the X-th prime / largest / smallest" — finite search
232
+ r"|\bwhat\s+is\s+the\s+(?:smallest|largest|number\s+of|maximum|minimum)\b",
233
+ re.IGNORECASE,
234
+ ),
235
+ "find-such-that",
236
+ 'solve(op="solve", variables="x:Int, y:Int",\n'
237
+ ' constraints=["x + y == 10", "x - y == 4"])\n'
238
+ '→ sat: x=7, y=3\n'
239
+ '\n'
240
+ 'Variable types: Int | Real | Bool | BitVec<N>. Operators: ==, !=,\n'
241
+ '<, <=, >, >=, +, -, *, /, %. Functions: And, Or, Not, Implies,\n'
242
+ 'If, Distinct, Abs, Sum.',
243
+ ),
244
+ ]
245
+
246
+
247
+ def _strip_boilerplate(text: str) -> str:
248
+ """Pull the actual question out of HLE / shakedown wrappers.
249
+
250
+ Same surgery as the GraphRAG auto-prefetch — \"QUESTION:\" prefix and
251
+ \"FINAL ANSWER:\" / \"Format your\" suffix get stripped so patterns
252
+ don't false-match on scaffolding.
253
+ """
254
+ s = text or ""
255
+ marker = s.find("QUESTION:")
256
+ if marker >= 0:
257
+ s = s[marker + len("QUESTION:"):]
258
+ for stopper in ("FINAL ANSWER:", "Format your", "End your response",
259
+ "Your answer"):
260
+ idx = s.find(stopper)
261
+ # Strip iff there's at least a real question in front (>=20 chars).
262
+ # The original auto-prefetch used 50; we use a smaller threshold
263
+ # here so short questions like "Solve x+1=5.\nFINAL ANSWER:" still
264
+ # match.
265
+ if idx >= 20:
266
+ s = s[:idx]
267
+ return s.strip()
268
+
269
+
270
+ def detect_constraint_shape(user_msg: str) -> tuple[str, str] | None:
271
+ """Return (label, worked_example) when the message has a
272
+ constraint-problem shape, or None otherwise.
273
+
274
+ Patterns are checked in priority order: logic-puzzle first (most
275
+ specific), then modular arithmetic, optimization, prove, and finally
276
+ the broad \"find x such that\" catchall. The first match wins.
277
+ """
278
+ cleaned = _strip_boilerplate(user_msg)
279
+ if len(cleaned) < 10:
280
+ return None
281
+ for pat, label, example in _PATTERN_HINTS:
282
+ if pat.search(cleaned):
283
+ return (label, example)
284
+ return None
285
+
286
+
287
+ def build_hint(label: str, example: str) -> str:
288
+ """Format a system note around the worked example.
289
+
290
+ Kept compact (≈350 chars) so it doesn't dominate the context.
291
+ Frames the example as \"specialize THIS template,\" not \"here's an
292
+ abstract guideline\" — the project memory says Gemma 4 trusts
293
+ concrete shapes and ignores prose advice.
294
+ """
295
+ return (
296
+ f"[constraint-hint] This question has a {label} shape. "
297
+ f"Encode as a `solve` call rather than reasoning step-by-step. "
298
+ f"Z3 is sound and complete on integer/real/boolean constraints. "
299
+ f"Template to specialize:\n\n{example}\n\n"
300
+ f"See the `constraint-reasoning` skill for the full encoding "
301
+ f"reference (Int/Real/Bool/BitVec, Distinct, If, Sum, Implies)."
302
+ )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.33"
3
+ version = "2.8.35"
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"
@@ -160,6 +160,9 @@ if [ -n "$GRAPHRAG_DB_OVERRIDE" ]; then
160
160
  DRYDOCK_STOP_NOW_WARN_AT=12 \
161
161
  DRYDOCK_STOP_NOW_TIME_SEC=240 \
162
162
  DRYDOCK_THINKING_BUDGET_TOKENS=4000 \
163
+ DRYDOCK_TOOL_STOP_AFTER=3 \
164
+ DRYDOCK_AUTO_COMPACT_THRESHOLD=28000 \
165
+ DRYDOCK_STOP_NOW_SUFFIX="End your response with 'FINAL ANSWER: <your answer>' on its own line." \
163
166
  PYTHONUNBUFFERED=1 \
164
167
  nohup "$PY" -u "$DRYDOCK/scripts/hle_eval.py" \
165
168
  --source hle --limit "$LIMIT" --shuffle --seed "$SEED" --category "$CATEGORY" \
@@ -169,6 +172,8 @@ else
169
172
  DRYDOCK_STOP_NOW_WARN_AT=12 \
170
173
  DRYDOCK_STOP_NOW_TIME_SEC=240 \
171
174
  DRYDOCK_THINKING_BUDGET_TOKENS=4000 \
175
+ DRYDOCK_TOOL_STOP_AFTER=3 \
176
+ DRYDOCK_STOP_NOW_SUFFIX="End your response with 'FINAL ANSWER: <your answer>' on its own line." \
172
177
  PYTHONUNBUFFERED=1 \
173
178
  nohup "$PY" -u "$DRYDOCK/scripts/hle_eval.py" \
174
179
  --source hle --limit "$LIMIT" --shuffle --seed "$SEED" --category "$CATEGORY" \
@@ -247,9 +247,12 @@ run_loop() {
247
247
  fi
248
248
  done
249
249
 
250
- # Per-batch summary
251
- local lifetime=$(grep -c "RESULT" "$RUN_LOG" 2>/dev/null || echo 0)
252
- local correct=$(grep -E "→ (YES|PARTIAL)" "$RUN_LOG" 2>/dev/null | wc -l)
250
+ # Per-batch summary — count "→ YES/NO/PARTIAL/UNGRADED" verdict
251
+ # lines (what hle_eval actually emits). Earlier version greped
252
+ # for "RESULT" which the eval script doesn't print, so $lifetime
253
+ # was always 0.
254
+ local lifetime=$(grep -cE "→ (YES|NO|PARTIAL|UNGRADED)" "$RUN_LOG" 2>/dev/null || echo 0)
255
+ local correct=$(grep -cE "→ (YES|PARTIAL)" "$RUN_LOG" 2>/dev/null || echo 0)
253
256
  log "batch complete slot=$slot pid=$BATCH_PID category=$CAT correct=$correct/$lifetime"
254
257
 
255
258
  rm -f "$BATCH_PID_FILE"
@@ -334,8 +334,9 @@ def _question_prompt(q: dict) -> str:
334
334
  detection race). Keeping this on one line until that's debugged.
335
335
  """
336
336
  return (
337
- f"Answer this question. End your response with the literal string "
338
- f"'FINAL ANSWER:' followed by your answer on the same line. "
337
+ f"Answer this question from your own knowledge. "
338
+ f"Use at most 1 tool lookup if truly needed, then commit to your answer. "
339
+ f"End your response with 'FINAL ANSWER:' followed by your answer on the same line. "
339
340
  f"QUESTION: {q['question']}"
340
341
  )
341
342
 
@@ -459,6 +460,7 @@ def run_one(q: dict, sk, run_dir: Path) -> dict:
459
460
  "DRYDOCK_WRAP_UP_WARN_AT": os.environ.get("DRYDOCK_WRAP_UP_WARN_AT", "8"),
460
461
  "DRYDOCK_STOP_NOW_WARN_AT": os.environ.get("DRYDOCK_STOP_NOW_WARN_AT", "12"),
461
462
  "DRYDOCK_STOP_NOW_TIME_SEC": os.environ.get("DRYDOCK_STOP_NOW_TIME_SEC", "300"),
463
+ "DRYDOCK_TOOL_STOP_AFTER": os.environ.get("DRYDOCK_TOOL_STOP_AFTER", "2"),
462
464
  "DRYDOCK_STOP_NOW_SUFFIX": "Write your best answer as 'FINAL ANSWER: <answer>' now."}
463
465
  start = time.time()
464
466
  # --dangerously-skip-permissions: HLE is batch eval against read-only
@@ -41,12 +41,31 @@ from drydock.core.constraint_hint import (
41
41
  ("This is a classic Einstein puzzle.", "logic-puzzle"),
42
42
  ("Solve the 8-queens problem.", "logic-puzzle"),
43
43
  ("Here is a Sudoku to solve.", "logic-puzzle"),
44
+
45
+ # diophantine-count (Z3-tractable counting problems)
46
+ ("For how many integers x is x^3 - 16x^2 - 72x + 1056 a perfect square?", "diophantine-count"),
47
+ ("How many non-negative integer solutions to x1^2+x2^2+x3^2+x4^2+x5^2 = 2024?", "diophantine-count"),
48
+ ("For how many positive integers n is n^2 + n + 41 prime?", "diophantine-count"),
49
+ ("How many positive integers less than 100 are squarefree?", "diophantine-count"),
50
+ ("Count the number of integer tuples (a,b) satisfying a^2 + b^2 == 50.", "diophantine-count"),
51
+
52
+ # boolean-algebra (Boolean / propositional questions)
53
+ ("If (a AND b) XOR a XOR 1 is the Zhigalkin polynomial of a Boolean formula, simplify.", "boolean-algebra"),
54
+ ("Find a Boolean expression in algebraic normal form for NAND(a, NOT b).", "boolean-algebra"),
55
+ ("Construct the truth table for (p IMPLIES q) IFF (NOT p OR q).", "boolean-algebra"),
56
+ ("Are the propositional formulas A and B equivalent?", "boolean-algebra"),
57
+
58
+ # structure-count
59
+ ("How many associative and commutative binary operations can be defined on a set of 3 elements?", "structure-count"),
60
+ ("How many distinct functions exist on a set of 4 elements?", "structure-count"),
44
61
  ])
45
62
  def test_detector_positive_matches(msg: str, label: str) -> None:
46
63
  hit = detect_constraint_shape(msg)
47
64
  assert hit is not None, f"expected {label!r} match for {msg!r}"
48
65
  assert hit[0] == label, f"got {hit[0]!r}, expected {label!r}"
49
- assert hit[1].startswith("solve(") # worked example starts with a solve call
66
+ # Worked example must reference the solve tool somewhere — could
67
+ # lead with a comment ("# For ...:") or directly with `solve(`.
68
+ assert "solve(" in hit[1], f"template missing solve() call: {hit[1][:80]!r}"
50
69
 
51
70
 
52
71
  # ── Negative matches (coding / arithmetic / generic chat) ─────────────
@@ -1,5 +1,103 @@
1
1
  # Drydock Trip Log
2
2
 
3
+ ## 2026-05-15 10:34 UTC tick
4
+ - Stress: restarted from step 1 (PID 1878801) — prior run had completed all 1658/1658 prompts; babysitter does not auto-recycle, so triggered manually
5
+ - HLE lifetime: 32/365 = 8.8% (Math 11.4%, CS/AI 2.3%, Chem 0.0%, Bio/Med 16.7%, Eng 4.3%); active batch PID 1875152 (16m elapsed, on Q5/10 Biology/Medicine)
6
+ - vLLM 400s: 0; model Q3_K_M on llamacpp-gemma4 healthy; balancer :8001 responding
7
+ - GH issues: 0 open
8
+ - Dispatch queue: harness=1284, retrieval=3, curiosity=1226 pending; retrieval drain: 0 actionable; consumed curiosity dd52a7abe7b2cfa1 (no_final_answer Math, addressed by a176ed7 DRYDOCK_TOOL_STOP_AFTER=3); harness:thinking_stall pattern addressed by same commit batch
9
+ - Action this tick: restarted stress harness (was complete, not dead); consumed one curiosity item; no source fixes needed — healthy
10
+
11
+ ## 2026-05-15 10:00 UTC tick
12
+ - Stress: COMPLETE at 1658/1658 (babysitter exits cleanly on completion, no restart needed)
13
+ - HLE lifetime: 31/359 = 8.6% (Math 11.4%, CS/AI 2.3%, Chem 0.0%, Eng 4.3%, Bio/Med 16.7%); HLE pid 1864047 running 48m
14
+ - vLLM 400s: 0; model Q3 on :8000, balancer on :8001 — healthy
15
+ - GH issues: 0 open
16
+ - Dispatch queue: harness=17 (thinking_stall, already addressed), retrieval=0 actionable, curiosity=1209 pending (191 hle_failure / 1018 unknown_term)
17
+ - retrieval-drain: 0 projects (all recently ingested)
18
+ - curiosity-queue: 1209 pending; top items are empty-prediction HLE failures already addressed by v2.8.33; no new action this tick
19
+ - Action this tick: committed fix a176ed7 — DRYDOCK_TOOL_STOP_AFTER=3 was implemented (045169c) but never added to hle_babysitter.sh; last 5 runs show 54% empty:no_final_answer (26/48); fix wires the gate so the model is capped at 3 tool calls then forced to emit FINAL ANSWER text (addresses pattern harness:thinking_stall)
20
+
21
+ ## 2026-05-15 09:30 UTC tick
22
+ - Stress: COMPLETE at 1658/1658 (babysitter idle, no action needed)
23
+ - Write rate: N/A (stress done)
24
+ - HLE lifetime: 30/353 = 8.5% (Math 11.4%, CS/AI 2.3%, Chem 0.0%, Eng 4.3%, Bio/Med 16.7%); HLE pid 1864047 running ~18m
25
+ - vLLM 400s: 0 (llamacpp clean, 0 errors in last 30m)
26
+ - GH issues: 0 open
27
+ - Dispatch queue: harness=17 (thinking_stall, already addressed by 045169c), retrieval=0 actionable, curiosity=1199 pending (122 hle_failure / 1010 unknown_term)
28
+ - retrieval-drain: 0 projects ingested (3 entries, all already ingested recently)
29
+ - curiosity-queue: consumed 3 hle_failure items (5d4362861f, e9cd8146bf, 6ab35090c8) — all no_final_answer pattern after tool cap
30
+ - Action this tick: committed fix 7e4f4ba (wire DRYDOCK_STOP_NOW_SUFFIX in hle_babysitter.sh so TOOL_STOP_AFTER and STOP_NOW nudges both append FINAL ANSWER format reminder; addresses curiosity hle_failure no_final_answer pattern)
31
+
32
+ ## 2026-05-15 09:00 UTC tick
33
+ - Stress: COMPLETE at 1658/1658 (done=88, skip=53, recycle=42; babysitter correctly idle)
34
+ - Write rate: N/A (stress done)
35
+ - HLE lifetime: 29/349 = 8.3% (Math 11.0%, CS/AI 2.3%, Chem 0.0%, Eng 4.3%, Bio/Med 18.8%); current batch running 54m (PID 1851953)
36
+ - Admiral last 30 min: N/A (no admiral log checked this tick)
37
+ - vLLM 400s: 0 (llamacpp clean)
38
+ - GH issues: 0 open
39
+ - Dispatch queue: harness=17 (thinking_stall, already addressed), retrieval=3 (0 new ingests), curiosity=1186 pending
40
+ - Action this tick: committed fix 045169c — DRYDOCK_TOOL_STOP_AFTER env var in agent_loop.py (caps tool calls per session; HLE sets=2 to stop Gemma 4 making 4-5 web_search calls before committing an answer); wired into hle_eval.py default=2; addresses pattern harness:thinking_stall. Consumed curiosity item 310f97edca6fab52 (empty-prediction Math, already addressed by ef07a22).
41
+
42
+ ## 2026-05-15 08:30 UTC tick
43
+ - Stress: COMPLETE at 1658/1658 (done=88, skip=53, recycle=42; babysitter correctly not restarting)
44
+ - Write rate: N/A (stress done)
45
+ - HLE: 26/344 = 7.6% lifetime (28 runs); burndown daemon alive (PID 1851953, 24m elapsed); Math 9.7%, Bio/Med 18.8%, CS/AI 2.3%, Chem 0.0%, Eng 4.3%
46
+ - vLLM 400s: 0; Q3_K_M on :8000 healthy; balancer on :8001 healthy
47
+ - GH issues: 0 open
48
+ - Dispatch queue: harness=17 (all thinking_stall circular noise, already addressed), retrieval=0 actionable (3 entries all recently ingested), curiosity=1177 pending after consuming 3 (992 unknown_term, 185 hle_failure)
49
+ - Action this tick: consumed 3 curiosity items (10be7315, f857714d, 2a1e7c12 — all empty:no_final_answer Math failures, addressed by ef07a22 "at most 1 tool lookup"). No code changes needed; system healthy.
50
+
51
+ ## 2026-05-15 08:00 UTC tick
52
+ - Stress: COMPLETE at 1658/1658 (done=88, skip=53, recycle=42; babysitter correctly not restarting)
53
+ - Write rate: N/A (stress done)
54
+ - HLE: 25/340 = 7.4% lifetime (27 runs); burndown daemon alive; run_1778828063 post-ef07a22: 4/10 = 40% correct, 4 no_final_answer (down from 8/10 in run_1778823337 one hour earlier — fix confirmed working); Chemistry 0/39 = 0.0% (46% no_final_answer, 23% no_response — domain gap); Physics 0/12 = 0.0%
55
+ - vLLM 400s: 0; Q3_K_M on :8000 healthy; balancer on :8001 healthy
56
+ - GH issues: 0 open
57
+ - Dispatch queue: harness=17 (all thinking_stall circular noise — classify_pulse reclassifies autonomous_review.log lines that contain "thinking_stall" text; not real signals); retrieval=0 actionable; curiosity=1170 pending (984 unknown_term, 186 hle_failure)
58
+ - Action this tick: no code changes. System healthy. ef07a22 confirmed effective. Chemistry/Physics 0% is domain gap, not a drydock bug.
59
+
60
+ ## 2026-05-15 07:30 UTC tick
61
+ - Stress: COMPLETE at 1658/1658 (done, babysitter not restarting — expected)
62
+ - Write rate: N/A (stress done)
63
+ - HLE: 25/336 = 7.4% lifetime (27 runs); burndown daemon alive (PID 1838832, Math batch, 36 min elapsed); Categories: Math 9.6%, Bio/Med 18.8%, CS/AI 2.3%, Chem 0.0%, Physics 0.0%
64
+ - vLLM 400s: 0 llamacpp errors; Docker health shows "unhealthy" but API /v1/models and /props respond normally (false alarm from misconfigured healthcheck)
65
+ - GH issues: 0 open
66
+ - Dispatch queue: harness=830 (thinking_stall, all addressed by existing stall-nudge code in agent_loop), retrieval=0 actionable, curiosity=1157 pending (974 unknown_term, 183 hle_failure)
67
+ - Action this tick: no code changes. Retrieval drain 0 actionable. Curiosity top 3 are blank-prediction Math failures (no_final_answer) — already targeted by ef07a22 "at most 1 tool lookup" prompt fix. Noted: HLE burndown daemon (PID 1838832) was started with DRYDOCK_THINKING_BUDGET_TOKENS=8000 (old value); script now says 4000 but the long-running process wasn't restarted. Minor — 8000 still caps thinking. Next babysitter batch at :45 will use 4000 via fresh launch.
68
+
69
+ ## 2026-05-15 06:00 UTC tick
70
+ - Stress: COMPLETE at 1658/1658 (all prompts exhausted; babysitter correctly not restarting)
71
+ - Write rate: N/A (stress done)
72
+ - Admiral last 30 min: N/A
73
+ - vLLM 400s: 0 (Q3_K_M llamacpp-gemma4 on :8000, balancer on :8001 PID 380535 healthy)
74
+ - GH issues: 0 open
75
+ - Dispatch queue: harness=17 (all thinking_stall, latest 04:10; pattern already addressed by v2.8.32 4000-token budget cap), retrieval=0 actionable (3 entries, all recently ingested), curiosity=1136 pending (177 hle_failure, 959 unknown_term)
76
+ - HLE: 21/324 = 6.5% lifetime (26 runs); babysitter alive (PID 1824412, Math batch); recent 10 batches avg ~12%; dominant failure mode is now empty:no_final_answer (7/10 in run_1778818733): model makes 7 sequential tool calls (retrieve → web_search ×2 → web_fetch → web_search ×2 → web_fetch) over 482s, ignores all STOP_NOW injections at 240s/300s, exits only when QUESTION_TIMEOUT kills session; STOP_NOW hard-stop at 360s fires on turn 7 but returns without giving model a chance to write text — root cause identified, fix would require disabling tools on final LLM call (non-trivial)
77
+ - Action: no code changes this tick — system healthy; retrieval drain: 0 new ingested; curiosity-queue: 1 item consumed would be premature (real issue is synthesis failure, not retrieval gap); no_final_answer root cause documented for user review on return
78
+
79
+ ## 2026-05-15 05:30 UTC tick
80
+ - Stress: COMPLETE at 1658/1658 (run exhausted)
81
+ - Write rate: N/A (stress done)
82
+ - Admiral last 30 min: N/A
83
+ - vLLM 400s: 0 (Q3_K_M llamacpp-gemma4 on :8000, balancer on :8001, both healthy)
84
+ - GH issues: 0 open
85
+ - Dispatch queue: harness=1283 (all historical; thinking_stall dominates), retrieval=3 (0 actionable, all already ingested), curiosity=1130 pending (175 hle_failure, 955 unknown_term)
86
+ - HLE: 20/320 = 6.2% lifetime (25 runs); burndown daemon alive (PID 1809726, 01:12+); recent 10 batches avg ~11%; 135 empty results (42% of all) — 92 are empty:no_final_answer (model calls retrieve+web_search 3-4 times but never emits FINAL ANSWER before 480s wall clock); top 3 curiosity items are all Math empty-prediction failures; autonomous_review 05:00 tick timed out (exit=124, no log output — likely investigated something expensive, no commit)
87
+ - Action: no code changes — system healthy, no clear minimal fix for no_final_answer pattern within budget; retrieval drain: 0 new ingested; curiosity-queue: 3 pending hle_failure, no action this tick (all are empty-prediction, retrieval won't fix a synthesis failure)
88
+
89
+ ## 2026-05-15 05:00 UTC tick
90
+ - Stress: COMPLETE at 1658/1658 (done=88, skip=53, recycle=42; run exhausted, babysitter correctly not restarting)
91
+ - Write rate: N/A (stress done)
92
+ - Admiral last 30 min: N/A
93
+ - vLLM 400s: 0 (Q3_K_M llamacpp-gemma4 on :8000, balancer on :8001, both responsive)
94
+ - GH issues: 0 open
95
+ - Dispatch queue: harness=1283 total (all historical from completed stress run; dominant patterns: thinking_stall=829 addressed, loop:bash_generic=177, tool:hallucinated_name=133); retrieval=0 actionable (all ingested); curiosity=1122 pending (172 hle_failure, 950 unknown_term)
96
+ - HLE: 20/316 = 6.3% lifetime (25 runs); burndown daemon alive (PID 1809726, 41+ min); recent batches: 0%, 20%, 0%, 0%, 20%, 10%, 10%, 10%, 20%, 20%; top curiosity items are all Math empty-response failures (empty:no_final_answer) — hard-stop fires before model outputs FINAL ANSWER line; 4000-token budget cap in effect; Chemistry 0/39, Physics 0/12 still at 0%
97
+ - retrieval-drain: 0 new ingestions (3 queue entries, all already ingested)
98
+ - curiosity-drain: no action this tick — top 3 items all Math empty-response failures already addressed by v2.8.32 budget cap
99
+ - Action this tick: no code changes — system healthy; investigated empty:no_final_answer root cause (model makes tool calls then gets hard-stopped before emitting FINAL ANSWER; complex fix, deferred); stress run complete
100
+
3
101
  ## 2026-05-15 04:00 UTC tick
4
102
  - Stress: COMPLETE at 1658/1658 (done=88, skip=53, recycle=42; babysitter reports dead each tick — expected, run exhausted)
5
103
  - Write rate: N/A (stress done)
@@ -6274,3 +6372,22 @@ restarted, cron self-match bug fixed in this same session).
6274
6372
  - Dispatch queue: harness=17 (all thinking_stall, pattern addressed by v2.8.32 budget cap), retrieval=0 actionable, curiosity=1105 pending (170 hle_failure, 935 unknown_term)
6275
6373
  - retrieval-drain: 0 new ingestions
6276
6374
  - Action this tick: committed fix 69ef332 — added "exceeds the available context" and "error code: 400" to emergency-compaction trigger in agent_loop.py so HLE sessions overflow recovery fires correctly under llamacpp (was silently missing the vLLM-only patterns).
6375
+
6376
+ ## 2026-05-15 06:30 UTC tick
6377
+ - Stress: 1658/1658 (completed, harness correctly not restarted)
6378
+ - Write rate: N/A (stress run done)
6379
+ - HLE: 21/328 = 6.4% lifetime (26 runs); recent batches 10-20%; by method: 135 empty, 99 empty:no_final_answer, 28 empty:no_response
6380
+ - vLLM 400s: container shows "unhealthy" (3603 failing health checks) but /health returns {"status":"ok"} — health check misconfigured, model functional
6381
+ - GH issues: 0 open
6382
+ - Dispatch queue: harness=17 (thinking_stall, all self-referential), retrieval=0 actionable, curiosity=1145 pending (966 unknown_term, 179 hle_failure)
6383
+ - Action this tick: committed fix ef07a22 — cap tool lookups in HLE question prompt to 1 max. Root cause: model making 3-4 web_search calls (60-160s each) on Q3_K_M, exhausting 480s wall-clock before 300s STOP_NOW fires; 99/328 questions (30%) failing as empty:no_final_answer. Prompt now instructs "answer from own knowledge, at most 1 tool lookup." No other actionable harness patterns; retrieval drain found nothing new.
6384
+
6385
+ ## 2026-05-15 07:00 UTC tick
6386
+ - Stress: COMPLETE at 1658/1658 (run finished; babysitter not restarting — expected)
6387
+ - Write rate: N/A (stress run done)
6388
+ - Admiral last 30 min: N/A (stress done)
6389
+ - vLLM 400s: 6 minor errors in container logs; llamacpp shows "unhealthy" Docker health status but API (/v1/models, /props) responds normally — false alarm from misconfigured healthcheck
6390
+ - GH issues: 0 open
6391
+ - HLE: 22/331 = 6.6% lifetime (27 runs); burndown daemon alive (PID 1838832, 6h+ elapsed, running Math batch)
6392
+ - Dispatch queue: harness=16 (thinking_stall, all self-referential false positives already addressed), retrieval=0 actionable, curiosity=1154 pending (972 unknown_term, 182 hle_failure)
6393
+ - Action this tick: consumed curiosity item bd848692c98c1362 (Math blank-prediction thinking stall, already addressed by v2.8.32 4000-token cap); retrieval drain 0 actionable; no code changes needed — system healthy