drydock-cli 2.8.36__tar.gz → 2.8.38__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (816) hide show
  1. drydock_cli-2.8.38/.auto_release.lock +1 -0
  2. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/CLAUDE.md +11 -5
  3. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/PKG-INFO +1 -1
  4. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/agent_loop.py +28 -5
  5. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/constraint_extract.py +121 -4
  6. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/generic.py +13 -3
  7. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/pyproject.toml +1 -1
  8. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_burndown.sh +4 -0
  9. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_babysitter.sh +10 -0
  10. drydock_cli-2.8.38/tests/mock/__init__.py +0 -0
  11. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_constraint_extract.py +88 -0
  12. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_user_issues.py +45 -0
  13. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/trip_log.md +100 -0
  14. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/uv.lock +1 -1
  15. drydock_cli-2.8.36/.auto_release.lock +0 -1
  16. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/CODEOWNERS +0 -0
  17. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  18. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  19. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/workflows/build-and-upload.yml +0 -0
  21. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/workflows/ci.yml +0 -0
  22. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/workflows/issue-labeler.yml +0 -0
  23. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.github/workflows/release.yml +0 -0
  24. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.gitignore +0 -0
  25. /drydock_cli-2.8.36/drydock/acp/__init__.py → /drydock_cli-2.8.38/.pause_stress +0 -0
  26. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.pre-commit-config.yaml +0 -0
  27. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.python-version +0 -0
  28. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.typos.toml +0 -0
  29. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.vscode/extensions.json +0 -0
  30. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.vscode/launch.json +0 -0
  31. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/.vscode/settings.json +0 -0
  32. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/AGENTS.md +0 -0
  33. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/Admiral.md +0 -0
  34. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/CHANGELOG.md +0 -0
  35. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/CONTRIBUTING.md +0 -0
  36. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/DEEP_NOIR_PRD.md +0 -0
  37. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/DEPLOYMENT.md +0 -0
  38. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/DRYDOCK.md +0 -0
  39. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/HLE_PRD.md +0 -0
  40. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/JETSON_BENCH.md +0 -0
  41. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/LICENSE +0 -0
  42. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/MODEL_SHORTCOMINGS.md +0 -0
  43. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/NOTICE +0 -0
  44. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/README.md +0 -0
  45. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/SOVEREIGN_PRD.md +0 -0
  46. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/TRIAGE_v1.md +0 -0
  47. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/action.yml +0 -0
  48. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/README.md +0 -0
  49. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results1.tsv +0 -0
  50. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results13.tsv +0 -0
  51. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results14.tsv +0 -0
  52. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results15.tsv +0 -0
  53. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results16.tsv +0 -0
  54. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results17.tsv +0 -0
  55. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results18.tsv +0 -0
  56. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results19.tsv +0 -0
  57. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results2.tsv +0 -0
  58. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results20.tsv +0 -0
  59. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results3.tsv +0 -0
  60. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results4.tsv +0 -0
  61. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results5.tsv +0 -0
  62. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results6.tsv +0 -0
  63. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results7.tsv +0 -0
  64. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results8.tsv +0 -0
  65. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results9.tsv +0 -0
  66. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/baseline_history/results_evolved_v1.tsv +0 -0
  67. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/distribution/zed/LICENSE +0 -0
  68. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/distribution/zed/extension.toml +0 -0
  69. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/distribution/zed/icons/mistral_vibe.svg +0 -0
  70. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/README.md +0 -0
  71. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/acp-setup.md +0 -0
  72. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/BASELINE_412.md +0 -0
  73. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/Drydock_rebrand.md +0 -0
  74. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  75. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  76. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  77. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/PRD.md +0 -0
  78. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/drydock_terms.md +0 -0
  79. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/archive/resume.md +0 -0
  80. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/docs/proxy-setup.md +0 -0
  81. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/__init__.py +0 -0
  82. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/__main__.py +0 -0
  83. {drydock_cli-2.8.36/drydock/acp/tools → drydock_cli-2.8.38/drydock/acp}/__init__.py +0 -0
  84. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/acp_agent_loop.py +0 -0
  85. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/acp_logger.py +0 -0
  86. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/entrypoint.py +0 -0
  87. {drydock_cli-2.8.36/drydock/cli → drydock_cli-2.8.38/drydock/acp/tools}/__init__.py +0 -0
  88. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/base.py +0 -0
  89. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/builtins/bash.py +0 -0
  90. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/builtins/read_file.py +0 -0
  91. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/builtins/search_replace.py +0 -0
  92. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/builtins/todo.py +0 -0
  93. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/builtins/write_file.py +0 -0
  94. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/tools/session_update.py +0 -0
  95. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/acp/utils.py +0 -0
  96. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/__init__.py +0 -0
  97. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/detectors.py +0 -0
  98. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/detectors_proposed.py +0 -0
  99. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/history.py +0 -0
  100. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/interventions.py +0 -0
  101. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/llm_analyzer.py +0 -0
  102. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/metrics.py +0 -0
  103. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/opus_escalator.py +0 -0
  104. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/persistence.py +0 -0
  105. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/policy.py +0 -0
  106. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/proposer.py +0 -0
  107. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/stager.py +0 -0
  108. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/task_classifier.py +0 -0
  109. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/tuning.py +0 -0
  110. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/validator.py +0 -0
  111. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/admiral/worker.py +0 -0
  112. {drydock_cli-2.8.36/drydock/cli/autocompletion → drydock_cli-2.8.38/drydock/cli}/__init__.py +0 -0
  113. {drydock_cli-2.8.36/drydock/cli/textual_ui → drydock_cli-2.8.38/drydock/cli/autocompletion}/__init__.py +0 -0
  114. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/autocompletion/base.py +0 -0
  115. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/autocompletion/path_completion.py +0 -0
  116. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/autocompletion/slash_command.py +0 -0
  117. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/cli.py +0 -0
  118. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/clipboard.py +0 -0
  119. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/commands.py +0 -0
  120. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/entrypoint.py +0 -0
  121. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/fix_windows_path.py +0 -0
  122. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/history_manager.py +0 -0
  123. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  124. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  125. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  126. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/terminal_setup.py +0 -0
  127. {drydock_cli-2.8.36/drydock/cli/textual_ui/notifications/adapters → drydock_cli-2.8.38/drydock/cli/textual_ui}/__init__.py +0 -0
  128. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  129. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/app.py +0 -0
  130. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/app.tcss +0 -0
  131. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/external_editor.py +0 -0
  132. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  133. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  134. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  135. {drydock_cli-2.8.36/drydock/cli/textual_ui/notifications/ports → drydock_cli-2.8.38/drydock/cli/textual_ui/notifications/adapters}/__init__.py +0 -0
  136. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  137. {drydock_cli-2.8.36/drydock/cli/textual_ui/widgets → drydock_cli-2.8.38/drydock/cli/textual_ui/notifications/ports}/__init__.py +0 -0
  138. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  139. {drydock_cli-2.8.36/drydock/core/autocompletion → drydock_cli-2.8.38/drydock/cli/textual_ui/widgets}/__init__.py +0 -0
  140. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  141. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  142. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  143. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  144. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  145. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  146. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  147. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  148. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  149. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  150. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  151. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  152. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  153. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  154. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  155. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  156. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  157. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  158. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  159. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  160. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  161. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  162. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  163. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  164. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  165. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  166. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  167. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  168. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  169. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/windowing/history.py +0 -0
  170. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  171. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/textual_ui/windowing/state.py +0 -0
  172. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/__init__.py +0 -0
  173. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  174. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  175. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  176. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  177. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  178. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/update.py +0 -0
  179. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/cli/update_notifier/whats_new.py +0 -0
  180. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/__init__.py +0 -0
  181. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/agents/__init__.py +0 -0
  182. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/agents/manager.py +0 -0
  183. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/agents/models.py +0 -0
  184. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/auth/__init__.py +0 -0
  185. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/auth/crypto.py +0 -0
  186. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/auth/github.py +0 -0
  187. {drydock_cli-2.8.36/drydock/core/llm → drydock_cli-2.8.38/drydock/core/autocompletion}/__init__.py +0 -0
  188. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/completers.py +0 -0
  189. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  190. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  191. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  192. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  193. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  194. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/fuzzy.py +0 -0
  195. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/path_prompt.py +0 -0
  196. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  197. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/build_orchestrator.py +0 -0
  198. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/checkpoint.py +0 -0
  199. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/__init__.py +0 -0
  200. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/__main__.py +0 -0
  201. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/classifier.py +0 -0
  202. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/dispatcher.py +0 -0
  203. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/rules.py +0 -0
  204. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/classifier/signal.py +0 -0
  205. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/__init__.py +0 -0
  206. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/_dotenv.py +0 -0
  207. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/_settings.py +0 -0
  208. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/doctor.py +0 -0
  209. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/harness_files/__init__.py +0 -0
  210. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  211. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/harness_files/_paths.py +0 -0
  212. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/local_detect.py +0 -0
  213. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/config/migrate.py +0 -0
  214. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/constraint_hint.py +0 -0
  215. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/consultant.py +0 -0
  216. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/context_recovery.py +0 -0
  217. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/drydock_states.py +0 -0
  218. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/hooks.py +0 -0
  219. {drydock_cli-2.8.36/drydock/core/telemetry → drydock_cli-2.8.38/drydock/core/llm}/__init__.py +0 -0
  220. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/anthropic.py +0 -0
  221. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/base.py +0 -0
  222. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/factory.py +0 -0
  223. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/mistral.py +0 -0
  224. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  225. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/backend/vertex.py +0 -0
  226. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/exceptions.py +0 -0
  227. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/format.py +0 -0
  228. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/message_utils.py +0 -0
  229. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/llm/types.py +0 -0
  230. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/logger.py +0 -0
  231. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/middleware.py +0 -0
  232. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/output_formatters.py +0 -0
  233. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/paths/__init__.py +0 -0
  234. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/paths/_drydock_home.py +0 -0
  235. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/paths/_local_config_walk.py +0 -0
  236. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/paths/conventions.py +0 -0
  237. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/plan_session.py +0 -0
  238. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/plugins.py +0 -0
  239. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/programmatic.py +0 -0
  240. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/__init__.py +0 -0
  241. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/builder.md +0 -0
  242. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/cli.md +0 -0
  243. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/compact.md +0 -0
  244. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/dangerous_directory.md +0 -0
  245. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/diagnostic.md +0 -0
  246. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/explore.md +0 -0
  247. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/gemma4.md +0 -0
  248. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/planner.md +0 -0
  249. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/project_context.md +0 -0
  250. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/prompts/tests.md +0 -0
  251. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/proxy_setup.py +0 -0
  252. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/agent_memory.py +0 -0
  253. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/checkpoints.py +0 -0
  254. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/session_loader.py +0 -0
  255. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/session_logger.py +0 -0
  256. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/session_migration.py +0 -0
  257. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session/state_file.py +0 -0
  258. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/session_checker.py +0 -0
  259. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/skills/__init__.py +0 -0
  260. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/skills/manager.py +0 -0
  261. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/skills/models.py +0 -0
  262. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/skills/parser.py +0 -0
  263. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/slug.py +0 -0
  264. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/steering_hook.py +0 -0
  265. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/system_prompt.py +0 -0
  266. {drydock_cli-2.8.36/drydock/core/tools/builtins/prompts → drydock_cli-2.8.38/drydock/core/telemetry}/__init__.py +0 -0
  267. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/telemetry/send.py +0 -0
  268. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/teleport/errors.py +0 -0
  269. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/teleport/git.py +0 -0
  270. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/teleport/nuage.py +0 -0
  271. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/teleport/teleport.py +0 -0
  272. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/teleport/types.py +0 -0
  273. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/base.py +0 -0
  274. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/_task_manager.py +0 -0
  275. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  276. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  277. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/bash.py +0 -0
  278. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  279. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/count_tool.py +0 -0
  280. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/cron.py +0 -0
  281. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  282. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/glob_tool.py +0 -0
  283. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/grep.py +0 -0
  284. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  285. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  286. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/logic_tool.py +0 -0
  287. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/lsp.py +0 -0
  288. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/math_tool.py +0 -0
  289. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  290. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/memory_tool.py +0 -0
  291. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  292. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  293. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/powershell.py +0 -0
  294. {drydock_cli-2.8.36/drydock/skills → drydock_cli-2.8.38/drydock/core/tools/builtins/prompts}/__init__.py +0 -0
  295. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  296. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  297. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  298. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  299. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  300. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  301. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  302. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  303. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  304. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  305. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  306. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  307. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  308. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  309. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/task.md +0 -0
  310. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  311. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  312. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  313. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  314. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  315. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  316. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  317. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/read_file.py +0 -0
  318. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/retrieve.py +0 -0
  319. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/search_replace.py +0 -0
  320. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/set_tool.py +0 -0
  321. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/solve_tool.py +0 -0
  322. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/stats_tool.py +0 -0
  323. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/task.py +0 -0
  324. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/todo.py +0 -0
  325. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/tool_search.py +0 -0
  326. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/units_tool.py +0 -0
  327. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/verify_tool.py +0 -0
  328. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/webfetch.py +0 -0
  329. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/websearch.py +0 -0
  330. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/worktree.py +0 -0
  331. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/builtins/write_file.py +0 -0
  332. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/injection_guard.py +0 -0
  333. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/manager.py +0 -0
  334. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/mcp/__init__.py +0 -0
  335. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/mcp/registry.py +0 -0
  336. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/mcp/tools.py +0 -0
  337. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/mcp_sampling.py +0 -0
  338. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/ui.py +0 -0
  339. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/tools/utils.py +0 -0
  340. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/trusted_folders.py +0 -0
  341. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/types.py +0 -0
  342. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/core/utils.py +0 -0
  343. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/__init__.py +0 -0
  344. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/__main__.py +0 -0
  345. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/gap_detector.py +0 -0
  346. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/item.py +0 -0
  347. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/queue.py +0 -0
  348. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/curiosity/surprise.py +0 -0
  349. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/__init__.py +0 -0
  350. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/__main__.py +0 -0
  351. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/code_indexer.py +0 -0
  352. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/retriever.py +0 -0
  353. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/storage.py +0 -0
  354. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/graphrag/text_indexer.py +0 -0
  355. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/__init__.py +0 -0
  356. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/base.py +0 -0
  357. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/onboarding.tcss +0 -0
  358. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/screens/__init__.py +0 -0
  359. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/screens/api_key.py +0 -0
  360. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/screens/choice.py +0 -0
  361. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/screens/local_model.py +0 -0
  362. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/onboarding/screens/welcome.py +0 -0
  363. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  364. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  365. {drydock_cli-2.8.36/tests/backend → drydock_cli-2.8.38/drydock/skills}/__init__.py +0 -0
  366. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/api-design/SKILL.md +0 -0
  367. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/audit-tests/SKILL.md +0 -0
  368. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/batch/SKILL.md +0 -0
  369. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/commit-code/SKILL.md +0 -0
  370. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  371. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/context-summary/SKILL.md +0 -0
  372. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/create-presentation/SKILL.md +0 -0
  373. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/deep-research/SKILL.md +0 -0
  374. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/deploy/SKILL.md +0 -0
  375. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/diff-review/SKILL.md +0 -0
  376. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/doc-gen/SKILL.md +0 -0
  377. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/explain-code/SKILL.md +0 -0
  378. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/explore-code/SKILL.md +0 -0
  379. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/fix-issue/SKILL.md +0 -0
  380. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/git-ops/SKILL.md +0 -0
  381. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/init-project/SKILL.md +0 -0
  382. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/investigate/SKILL.md +0 -0
  383. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/logic/SKILL.md +0 -0
  384. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  385. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/loop/SKILL.md +0 -0
  386. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/migrate/SKILL.md +0 -0
  387. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/perf-analyze/SKILL.md +0 -0
  388. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/plan-impl/SKILL.md +0 -0
  389. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/pr-review/SKILL.md +0 -0
  390. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/prove/SKILL.md +0 -0
  391. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/refactor/SKILL.md +0 -0
  392. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/regex-help/SKILL.md +0 -0
  393. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/review/SKILL.md +0 -0
  394. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/security-review/SKILL.md +0 -0
  395. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/ship/SKILL.md +0 -0
  396. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/simplify/SKILL.md +0 -0
  397. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/strong-tests/SKILL.md +0 -0
  398. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/skills/test-verify/SKILL.md +0 -0
  399. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/__init__.py +0 -0
  400. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/__main__.py +0 -0
  401. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/applier.py +0 -0
  402. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/config.py +0 -0
  403. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/registry.py +0 -0
  404. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sandbox.py +0 -0
  405. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sidecar/__init__.py +0 -0
  406. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sidecar/header_parser.py +0 -0
  407. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sidecar/hooks.py +0 -0
  408. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sidecar/loader.py +0 -0
  409. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/sidecar/server.py +0 -0
  410. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/train/__init__.py +0 -0
  411. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/train/capture.py +0 -0
  412. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/train/compute_vector.py +0 -0
  413. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/train/extract_pairs.py +0 -0
  414. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/train/scan_sessions.py +0 -0
  415. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/steering/vectors.py +0 -0
  416. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock/whats_new.md +0 -0
  417. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/drydock-acp.spec +0 -0
  418. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/flake.lock +0 -0
  419. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/flake.nix +0 -0
  420. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/outlook_draft_assistant.tar.gz +0 -0
  421. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/README.md +0 -0
  422. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/config_base.toml +0 -0
  423. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/config_best.toml +0 -0
  424. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/deep_noir/pairs/empty_after_bash.jsonl +0 -0
  425. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/deep_noir/pairs/scan_empty_after_bash.jsonl +0 -0
  426. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/domain_spec.md +0 -0
  427. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/experimenter.py +0 -0
  428. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/kernel.py +0 -0
  429. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/mini_prd.md +0 -0
  430. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/mini_prompts.txt +0 -0
  431. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/proposer.py +0 -0
  432. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/research/results.tsv +0 -0
  433. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/resume.md +0 -0
  434. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/README.md +0 -0
  435. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/admiral_probe.py +0 -0
  436. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/auto_test_loop.sh +0 -0
  437. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/monitor_test_battery.sh +0 -0
  438. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/overnight_agents_test.sh +0 -0
  439. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/test_bank.sh +0 -0
  440. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/test_full.sh +0 -0
  441. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/test_smoke.sh +0 -0
  442. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/archive/tui_test.py +0 -0
  443. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/audit_sampler.py +0 -0
  444. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/auto_generate_tests.py +0 -0
  445. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/auto_release.sh +0 -0
  446. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/autonomous_review.sh +0 -0
  447. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/autonomous_review_prompt.md +0 -0
  448. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/backfill_hle_curiosity.py +0 -0
  449. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/backup.sh +0 -0
  450. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/bench_inference.py +0 -0
  451. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/bump_version.py +0 -0
  452. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/classify_pulse.sh +0 -0
  453. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/consume_retrieval_queue.py +0 -0
  454. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/curiosity_idle_cycle.sh +0 -0
  455. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/dedupe_dispatch_queues.py +0 -0
  456. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/deploy_to_github.sh +0 -0
  457. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/dispatch_report.py +0 -0
  458. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/drydock_status.sh +0 -0
  459. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/fetch_arxiv_abstracts.py +0 -0
  460. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/gen_2000_prompts.py +0 -0
  461. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_aggregate.py +0 -0
  462. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_babysitter.sh +0 -0
  463. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_burndown_keepalive.sh +0 -0
  464. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_burndown_status.py +0 -0
  465. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_eval.py +0 -0
  466. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/hle_eval_seed.jsonl +0 -0
  467. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/llm_balancer.py +0 -0
  468. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/notify_release.py +0 -0
  469. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/perf_baseline_when_idle.sh +0 -0
  470. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/perf_sweep.py +0 -0
  471. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/poll_issues.sh +0 -0
  472. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/publish_to_pypi.sh +0 -0
  473. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/queue_top.py +0 -0
  474. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/ralph_loop.py +0 -0
  475. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/rejudge_hle.py +0 -0
  476. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/research_babysitter.sh +0 -0
  477. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/shakedown.py +0 -0
  478. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/shakedown_interactive.py +0 -0
  479. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/shakedown_suite.sh +0 -0
  480. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/shakedown_variance.sh +0 -0
  481. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/start_steering_sidecar.sh +0 -0
  482. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_prompts_50.txt +0 -0
  483. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_prompts_realuser.txt +0 -0
  484. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_prompts_tool_agent.txt +0 -0
  485. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  486. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_shakedown.py +0 -0
  487. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_telegram_status.py +0 -0
  488. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/stress_watcher.py +0 -0
  489. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/telegram_bot.py +0 -0
  490. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/tool_usage_report.py +0 -0
  491. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/scripts/vllm_failover.sh +0 -0
  492. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/__init__.py +0 -0
  493. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/conftest.py +0 -0
  494. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_acp.py +0 -0
  495. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_agent_thought.py +0 -0
  496. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_bash.py +0 -0
  497. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_compact_session_updates.py +0 -0
  498. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_content.py +0 -0
  499. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_initialize.py +0 -0
  500. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_list_sessions.py +0 -0
  501. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_load_session.py +0 -0
  502. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_multi_session.py +0 -0
  503. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_new_session.py +0 -0
  504. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_proxy_setup_acp.py +0 -0
  505. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_read_file.py +0 -0
  506. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_search_replace.py +0 -0
  507. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_set_config_option.py +0 -0
  508. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_set_mode.py +0 -0
  509. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_set_model.py +0 -0
  510. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_tool_call_session_update.py +0 -0
  511. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_utils.py +0 -0
  512. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/acp/test_write_file.py +0 -0
  513. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_file_indexer.py +0 -0
  514. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_fuzzy.py +0 -0
  515. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  516. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  517. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_path_completion_controller.py +0 -0
  518. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  519. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_slash_command_controller.py +0 -0
  520. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  521. {drydock_cli-2.8.36/tests/cli/textual_ui → drydock_cli-2.8.38/tests/backend}/__init__.py +0 -0
  522. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/data/__init__.py +0 -0
  523. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/data/fireworks.py +0 -0
  524. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/data/mistral.py +0 -0
  525. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/test_anthropic_adapter.py +0 -0
  526. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/test_backend.py +0 -0
  527. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  528. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/test_reasoning_adapter.py +0 -0
  529. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  530. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  531. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  532. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  533. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_bell_notifications.py +0 -0
  534. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_braille_renderer.py +0 -0
  535. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_clipboard.py +0 -0
  536. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_commands.py +0 -0
  537. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_copy_shortcuts.py +0 -0
  538. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_external_editor.py +0 -0
  539. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_no_markup_static.py +0 -0
  540. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_question_app.py +0 -0
  541. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_spinner.py +0 -0
  542. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_switching_mode.py +0 -0
  543. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  544. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  545. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_ui_session_resume.py +0 -0
  546. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/test_ui_skill_dispatch.py +0 -0
  547. {drydock_cli-2.8.36/tests/mock → drydock_cli-2.8.38/tests/cli/textual_ui}/__init__.py +0 -0
  548. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/cli/textual_ui/test_session_picker.py +0 -0
  549. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/conftest.py +0 -0
  550. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_agents.py +0 -0
  551. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_auth_crypto.py +0 -0
  552. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_auth_github.py +0 -0
  553. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  554. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  555. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_config_load_dotenv.py +0 -0
  556. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_config_paths.py +0 -0
  557. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_config_resolution.py +0 -0
  558. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_file_logging.py +0 -0
  559. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_plan_session.py +0 -0
  560. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_proxy_setup.py +0 -0
  561. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_slug.py +0 -0
  562. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_telemetry_send.py +0 -0
  563. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_teleport_git.py +0 -0
  564. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_teleport_nuage.py +0 -0
  565. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_teleport_service.py +0 -0
  566. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_trusted_folders.py +0 -0
  567. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/core/test_utils.py +0 -0
  568. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/common.py +0 -0
  569. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/conftest.py +0 -0
  570. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/mock_server.py +0 -0
  571. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  572. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/test_cli_tui_streaming.py +0 -0
  573. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  574. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/fixtures/doc_qa_system_prd.md +0 -0
  575. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/mock/mock_backend_factory.py +0 -0
  576. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/mock/mock_entrypoint.py +0 -0
  577. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/mock/utils.py +0 -0
  578. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/onboarding/test_run_onboarding.py +0 -0
  579. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/onboarding/test_ui_onboarding.py +0 -0
  580. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/session/test_session_loader.py +0 -0
  581. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/session/test_session_logger.py +0 -0
  582. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/session/test_session_migration.py +0 -0
  583. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/skills/conftest.py +0 -0
  584. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/skills/test_manager.py +0 -0
  585. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/skills/test_models.py +0 -0
  586. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/skills/test_parser.py +0 -0
  587. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  588. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  589. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  590. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  591. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  592. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  593. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  594. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  595. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  596. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  597. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  598. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  599. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  600. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  601. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  602. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  603. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  604. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  605. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  606. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  607. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  608. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  609. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  610. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  611. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  612. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  613. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  614. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  615. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  616. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  617. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  618. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  619. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  620. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  621. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  622. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  623. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  624. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  625. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  626. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  627. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  628. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  629. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  630. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  631. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  632. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  633. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  634. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  635. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  636. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  637. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  638. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  639. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  640. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  641. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  642. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  643. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  644. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  645. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  646. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  647. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/base_snapshot_test_app.py +0 -0
  648. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/conftest.py +0 -0
  649. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/snap_compare.py +0 -0
  650. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  651. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  652. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  653. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  654. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  655. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  656. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  657. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  658. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  659. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  660. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  661. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  662. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  663. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  664. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/stubs/fake_backend.py +0 -0
  665. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/stubs/fake_client.py +0 -0
  666. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/stubs/fake_tool.py +0 -0
  667. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral.py +0 -0
  668. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  669. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_intervention_outcome.py +0 -0
  670. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_phase3.py +0 -0
  671. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_proposed.py +0 -0
  672. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_session_id.py +0 -0
  673. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_admiral_struggle_dedup.py +0 -0
  674. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_auto_compact.py +0 -0
  675. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_backend.py +0 -0
  676. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_observer_streaming.py +0 -0
  677. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_stats.py +0 -0
  678. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_tasks.py +0 -0
  679. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agent_tool_call.py +0 -0
  680. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_agents.py +0 -0
  681. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_algebra_tool.py +0 -0
  682. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  683. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_build.py +0 -0
  684. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_debug.py +0 -0
  685. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_multiagent.py +0 -0
  686. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_prd.py +0 -0
  687. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_prd_extended.py +0 -0
  688. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_tools.py +0 -0
  689. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_bank_update.py +0 -0
  690. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_build_projects.py +0 -0
  691. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_checkpoint.py +0 -0
  692. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_chemistry_tool.py +0 -0
  693. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_classifier.py +0 -0
  694. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_cli_programmatic_preload.py +0 -0
  695. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_config_migration.py +0 -0
  696. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_constraint_hint.py +0 -0
  697. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_context_recovery.py +0 -0
  698. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_count_tool.py +0 -0
  699. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_curiosity.py +0 -0
  700. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_current_bugs.py +0 -0
  701. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_dispatch_report.py +0 -0
  702. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_dispatcher.py +0 -0
  703. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_drydock_regression.py +0 -0
  704. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_drydock_tasks.py +0 -0
  705. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  706. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_full_regression.py +0 -0
  707. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_graphrag.py +0 -0
  708. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_graphrag_worked_examples.py +0 -0
  709. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_hallucinated_tool_suppression.py +0 -0
  710. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_history_manager.py +0 -0
  711. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_hle_aggregate.py +0 -0
  712. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_hle_score_method_split.py +0 -0
  713. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_hle_typing.py +0 -0
  714. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_integration.py +0 -0
  715. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_issue_fixes.py +0 -0
  716. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_linear_algebra_tool.py +0 -0
  717. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_local_detect.py +0 -0
  718. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_logic_tool.py +0 -0
  719. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_loop_detection.py +0 -0
  720. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_math_tool.py +0 -0
  721. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_mcp_settings.py +0 -0
  722. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_memory_tool.py +0 -0
  723. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_message_id.py +0 -0
  724. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_message_merging.py +0 -0
  725. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_middleware.py +0 -0
  726. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_multi_agent.py +0 -0
  727. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_number_theory_tool.py +0 -0
  728. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_read_file_not_found_listing.py +0 -0
  729. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_real_failures.py +0 -0
  730. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_real_issues.py +0 -0
  731. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_real_workflow.py +0 -0
  732. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_reasoning_content.py +0 -0
  733. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_rejudge_hle.py +0 -0
  734. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_retrieval_consumer.py +0 -0
  735. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_retrieve_tool.py +0 -0
  736. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_search_replace_args_not_truncated.py +0 -0
  737. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_set_tool.py +0 -0
  738. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_smoke.py +0 -0
  739. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_solve_tool.py +0 -0
  740. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_stats_tool.py +0 -0
  741. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering.py +0 -0
  742. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_capture.py +0 -0
  743. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_compute_vector.py +0 -0
  744. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_extract_pairs.py +0 -0
  745. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_hook.py +0 -0
  746. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  747. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_steering_sidecar_hooks.py +0 -0
  748. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_system_prompt.py +0 -0
  749. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_tagged_text.py +0 -0
  750. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_task_complete_nudge.py +0 -0
  751. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_tool_args.py +0 -0
  752. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_truncate_args_valid_json.py +0 -0
  753. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_truncated_arg_path_hint.py +0 -0
  754. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_truncated_search_replace_escalation.py +0 -0
  755. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_truncated_write_escalation.py +0 -0
  756. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_ui_external_editor.py +0 -0
  757. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_ui_input_history.py +0 -0
  758. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_units_tool.py +0 -0
  759. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_verify_tool.py +0 -0
  760. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_wall_of_text_rescue.py +0 -0
  761. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_workloads.py +0 -0
  762. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/test_write_file_missing_path.py +0 -0
  763. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/testbank_helpers.py +0 -0
  764. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_ask_user_question.py +0 -0
  765. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash.py +0 -0
  766. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  767. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_consec_empty_search.py +0 -0
  768. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  769. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  770. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  771. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  772. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  773. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  774. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  775. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_exit_plan_mode.py +0 -0
  776. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_grep.py +0 -0
  777. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  778. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_invoke_context.py +0 -0
  779. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  780. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_manager_get_tool_config.py +0 -0
  781. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_mcp.py +0 -0
  782. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_mcp_sampling.py +0 -0
  783. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  784. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  785. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_read_file_directory.py +0 -0
  786. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_read_file_limit_truncation.py +0 -0
  787. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_append_fallback.py +0 -0
  788. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_dir_path.py +0 -0
  789. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_empty_content.py +0 -0
  790. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_file_not_found.py +0 -0
  791. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  792. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_hard_stop.py +0 -0
  793. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_malformed_block.py +0 -0
  794. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  795. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_placeholder.py +0 -0
  796. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  797. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_task.py +0 -0
  798. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_ui_bash_execution.py +0 -0
  799. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_webfetch.py +0 -0
  800. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_websearch.py +0 -0
  801. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  802. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  803. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  804. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  805. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_do_update.py +0 -0
  806. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  807. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_github_update_gateway.py +0 -0
  808. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  809. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_ui_update_notification.py +0 -0
  810. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_update_use_case.py +0 -0
  811. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/tests/update_notifier/test_whats_new.py +0 -0
  812. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/worked_examples/README.md +0 -0
  813. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/worked_examples/cli_subcommand_dispatch.py +0 -0
  814. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/worked_examples/lookup.json +0 -0
  815. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/worked_examples/sql_parser.py +0 -0
  816. {drydock_cli-2.8.36 → drydock_cli-2.8.38}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 1951253
@@ -35,9 +35,13 @@ Drydock is a local CLI coding agent (fork of mistral-vibe, Apache 2.0).
35
35
  - **Current version:** v2.8.27 on PyPI (auto-released every 6h from `main`)
36
36
  - **Active continuous loops:** stress harness (hourly), autonomous_review
37
37
  (30-min), classify_pulse (10-min), telegram_bot keepalive (2-min),
38
- hle_babysitter (hourly @ :45 — 10-Q math HLE batch per tick, see
39
- HLE_PRD §"Continuous HLE evaluation"). Anything new the operator
40
- adds should not run at :00 or :30 (autonomous_review owns those).
38
+ hle_babysitter (hourly @ :45 — 10-Q HLE batch per tick, see
39
+ HLE_PRD §"Continuous HLE evaluation"), **hle_burndown daemon** (back-to-back
40
+ batches, runs as background process via `scripts/hle_burndown.sh start`;
41
+ keepalive cron at `*/15` resurrects if it dies). Both HLE loops share
42
+ `/tmp/hle_continuous.pid` — whichever owns the lock keeps it; the other
43
+ exits/skips. Anything new the operator adds should not run at :00 or
44
+ :30 (autonomous_review owns those).
41
45
 
42
46
  ## Current plan (2026-05-14)
43
47
 
@@ -76,9 +80,11 @@ tracked as TaskCreate items; the high-level shape is:
76
80
  Operator controls for the continuous loops:
77
81
 
78
82
  ```bash
79
- touch /data3/drydock/.pause_hle_babysitter # pause continuous HLE
83
+ touch /data3/drydock/.pause_hle_babysitter # pause hourly HLE cron
84
+ touch /data3/drydock/.pause_hle_burndown # pause back-to-back burndown daemon
85
+ touch /data3/drydock/.pause_hle_burndown_keepalive # disable burndown auto-resurrection
80
86
  touch /data3/drydock_test_projects/.pause_watchdog
81
- touch /data3/drydock/.pause_auto_release # pause 6h PyPI publish
87
+ touch /data3/drydock/.pause_auto_release # pause 6h PyPI publish
82
88
  ```
83
89
 
84
90
  ## Build & Test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.36
3
+ Version: 2.8.38
4
4
  Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -1051,7 +1051,10 @@ class AgentLoop:
1051
1051
  or "400 bad request" in error_str.lower()
1052
1052
  or "status: 400" in error_str.lower()
1053
1053
  or "exceeds the available context" in error_str.lower()
1054
- or "error code: 400" in error_str.lower()):
1054
+ or "error code: 400" in error_str.lower()
1055
+ or "500 internal server error" in error_str.lower()
1056
+ or "status: 500" in error_str.lower()
1057
+ or "llm backend error" in error_str.lower()):
1055
1058
  # Context limit or malformed request — aggressive recovery
1056
1059
  # Step 0 (added 2026-05-09): if the error looks like a
1057
1060
  # malformed tool call (most common 400 cause that ISN'T
@@ -1127,11 +1130,31 @@ class AgentLoop:
1127
1130
  except Exception:
1128
1131
  pass
1129
1132
  if dropped_bad_tool_call:
1130
- error_text = (
1131
- "Your last tool call was rejected by the "
1132
- "server (likely malformed arguments). "
1133
- "Try a simpler form, or use a different tool."
1133
+ # Detect JSON-truncation: llama.cpp returns this
1134
+ # when max_tokens is too low and the tool call
1135
+ # JSON gets cut off mid-string.
1136
+ _trunc = (
1137
+ "missing closing quote" in error_str.lower()
1138
+ or (
1139
+ "parse error at" in error_str.lower()
1140
+ and "column" in error_str.lower()
1141
+ )
1134
1142
  )
1143
+ if _trunc:
1144
+ error_text = (
1145
+ "Your write_file content was too large — "
1146
+ "the server truncated the response mid-JSON "
1147
+ "(hit max_tokens). Split the file into "
1148
+ "smaller sections and write each with a "
1149
+ "separate write_file call (aim for ≤50 "
1150
+ "lines per call)."
1151
+ )
1152
+ else:
1153
+ error_text = (
1154
+ "Your last tool call was rejected by the "
1155
+ "server (likely malformed arguments). "
1156
+ "Try a simpler form, or use a different tool."
1157
+ )
1135
1158
  else:
1136
1159
  error_text = (
1137
1160
  "Context compacted due to API error. "
@@ -43,6 +43,9 @@ PredicateKind = Literal[
43
43
  "divisible_by", # is f(x) divisible by k?
44
44
  "equals_constant", # f(x) == c (Diophantine)
45
45
  "boolean_equiv", # is formula A equivalent to formula B?
46
+ "equation_solve", # find x such that f(x) == g(x)
47
+ "smallest_with", # smallest x such that P(x)
48
+ "largest_with", # largest x such that P(x)
46
49
  ]
47
50
 
48
51
 
@@ -150,9 +153,11 @@ def _normalize_for_z3(formula: str) -> str:
150
153
  return "*".join([var] * n)
151
154
  return m.group(0)
152
155
  s = re.sub(r'([A-Za-z_][A-Za-z0-9_]*)\*\*(\d+)', _expand_pow, s)
153
- # Clean stray spaces around operators. Treat `**` as a single token
154
- # so we don't split power operators into ` * * `.
155
- s = re.sub(r'\s*(\*\*|[+\-*/=<>])\s*', r' \1 ', s)
156
+ # Clean stray spaces around operators. Treat `**`, `>=`, `<=`, `==`,
157
+ # `!=` as single tokens so we don't split them into space-separated
158
+ # pairs ('>=' must NOT become '> ='). Order matters in the alternation:
159
+ # multi-char ops first.
160
+ s = re.sub(r'\s*(\*\*|>=|<=|==|!=|[+\-*/=<>])\s*', r' \1 ', s)
156
161
  s = re.sub(r'\s+', ' ', s).strip()
157
162
  return s
158
163
 
@@ -192,6 +197,36 @@ _RE_EQUALS_CONSTANT = re.compile(
192
197
  re.IGNORECASE | re.DOTALL,
193
198
  )
194
199
 
200
+ # "find x such that f(x) == g(x)" / "solve f(x) = g(x) for x"
201
+ _RE_EQUATION_SOLVE = re.compile(
202
+ r'(?:find\s+(?:all\s+)?(?:integers?|values?|x|y|n|k|m|the\s+\w+)'
203
+ r'|solve(?:\s+for\s+\w+)?)\s+(?:such\s+that\s+)?'
204
+ r'(?P<lhs>[\w\^\{\}+\-*/().\\\s]{3,150}?)\s*=\s*'
205
+ r'(?P<rhs>[\w\^\{\}+\-*/().\\\s]{1,150}?)(?:\s*[.,?\n]|\s*$)',
206
+ re.IGNORECASE | re.DOTALL,
207
+ )
208
+
209
+ # "smallest / largest n such that P" — P often follows.
210
+ # The variable name may appear between the noun and the connective:
211
+ # "smallest positive integer n such that P" — so allow an optional
212
+ # bare variable token (e.g. "n", "x", "k") between them.
213
+ _RE_SMALLEST = re.compile(
214
+ r'(?:smallest|minimum|min)\s+(?:positive\s+)?'
215
+ r'(?:integer|number|natural|n|x|k|m|value)\s+'
216
+ r'(?:[a-zA-Z]\w*\s+)?' # optional variable name like "n " between noun and connective
217
+ r'(?:such\s+that|with|satisfying|so\s+that)\s+'
218
+ r'(?P<f>[\w\^\{\}+\-*/().\\\s=<>!]+?)(?:\s*[.,?\n]|\s*$)',
219
+ re.IGNORECASE | re.DOTALL,
220
+ )
221
+ _RE_LARGEST = re.compile(
222
+ r'(?:largest|maximum|max)\s+(?:positive\s+)?'
223
+ r'(?:integer|number|natural|n|x|k|m|value)\s+'
224
+ r'(?:[a-zA-Z]\w*\s+)?'
225
+ r'(?:such\s+that|with|satisfying|so\s+that)\s+'
226
+ r'(?P<f>[\w\^\{\}+\-*/().\\\s=<>!]+?)(?:\s*[.,?\n]|\s*$)',
227
+ re.IGNORECASE | re.DOTALL,
228
+ )
229
+
195
230
 
196
231
  def _extract_variables(formula: str) -> list[str]:
197
232
  """Pull single-letter and subscripted variable names from a
@@ -260,7 +295,7 @@ def extract(question: str) -> ExtractResult | None:
260
295
  return None
261
296
  cleaned = _clean_latex(question)
262
297
 
263
- # Try predicates in specificity order
298
+ # Try predicates in specificity order. Single-formula predicates first.
264
299
  for kind, pat in [
265
300
  ("perfect_square", _RE_PERFECT_SQUARE),
266
301
  ("perfect_cube", _RE_PERFECT_CUBE),
@@ -295,6 +330,53 @@ def extract(question: str) -> ExtractResult | None:
295
330
  result.confidence = 0.4
296
331
  return result
297
332
 
333
+ # Two-sided equations: "find x such that f(x) = g(x)"
334
+ m = _RE_EQUATION_SOLVE.search(cleaned)
335
+ if m:
336
+ lhs = _truncate_formula_after_predicate(m.group("lhs"))
337
+ rhs = m.group("rhs").strip()
338
+ # Reject if either side is bare or lacks any expression character
339
+ if (len(lhs) >= 1 and len(rhs) >= 1 and
340
+ re.search(r'\w', lhs) and re.search(r'\w', rhs) and
341
+ # At least one side must have an operator OR a variable
342
+ (re.search(r'[+\-*/^]', lhs + rhs))):
343
+ lhs_norm = _normalize_for_z3(lhs)
344
+ rhs_norm = _normalize_for_z3(rhs)
345
+ vs = _extract_variables(lhs_norm + " " + rhs_norm)
346
+ if vs:
347
+ conf = 1.0
348
+ if re.search(r'[{}\\]', lhs_norm + rhs_norm):
349
+ conf = 0.4
350
+ return ExtractResult(
351
+ predicate="equation_solve",
352
+ formula=lhs_norm,
353
+ variables=vs,
354
+ second_formula=rhs_norm,
355
+ confidence=conf,
356
+ raw_match=m.group(0)[:200],
357
+ )
358
+
359
+ # Range bounds
360
+ for kind, pat in [("smallest_with", _RE_SMALLEST),
361
+ ("largest_with", _RE_LARGEST)]:
362
+ m = pat.search(cleaned)
363
+ if not m:
364
+ continue
365
+ f_raw = _truncate_formula_after_predicate(m.group("f"))
366
+ if len(f_raw) < 3:
367
+ continue
368
+ f_norm = _normalize_for_z3(f_raw)
369
+ vs = _extract_variables(f_norm)
370
+ if not vs:
371
+ continue
372
+ conf = 1.0
373
+ if re.search(r'[{}\\]', f_norm):
374
+ conf = 0.4
375
+ return ExtractResult(
376
+ predicate=kind, formula=f_norm, variables=vs,
377
+ confidence=conf, raw_match=m.group(0)[:200],
378
+ )
379
+
298
380
  return None
299
381
 
300
382
 
@@ -354,4 +436,39 @@ def render_template(extr: ExtractResult) -> str:
354
436
  f' ], limit=100)\n'
355
437
  f'→ len(models) is the count of solutions in the range.'
356
438
  )
439
+ if extr.predicate == "equation_solve":
440
+ return (
441
+ f'solve(op="find_all",\n'
442
+ f' variables="{vars_csv}",\n'
443
+ f' constraints=[\n'
444
+ f' "({extr.formula}) == ({extr.second_formula})",\n'
445
+ f' "{main_var} >= -200", "{main_var} <= 200", '
446
+ f'# adjust bounds to problem scale\n'
447
+ f' ], limit=50, timeout_ms=15000)\n'
448
+ f'→ Each `model` is a solution. For "find a unique x" use op="solve".'
449
+ )
450
+ if extr.predicate == "smallest_with":
451
+ return (
452
+ f'solve(op="optimize",\n'
453
+ f' variables="{vars_csv}",\n'
454
+ f' constraints=[\n'
455
+ f' "{extr.formula}", # the property P\n'
456
+ f' "{main_var} >= 1", # search range floor\n'
457
+ f' "{main_var} <= 1000", # adjust ceiling\n'
458
+ f' ],\n'
459
+ f' objective="{main_var}", direction="min")\n'
460
+ f'→ The optimal model is the smallest {main_var} satisfying P.'
461
+ )
462
+ if extr.predicate == "largest_with":
463
+ return (
464
+ f'solve(op="optimize",\n'
465
+ f' variables="{vars_csv}",\n'
466
+ f' constraints=[\n'
467
+ f' "{extr.formula}", # the property P\n'
468
+ f' "{main_var} >= 1", "{main_var} <= 1000", '
469
+ f'# adjust bounds\n'
470
+ f' ],\n'
471
+ f' objective="{main_var}", direction="max")\n'
472
+ f'→ The optimal model is the largest {main_var} satisfying P.'
473
+ )
357
474
  return ""
@@ -191,17 +191,27 @@ class OpenAIAdapter(APIAdapter):
191
191
  )
192
192
 
193
193
  # Enable thinking for models that support it (Gemma 4)
194
+ _budget_env = os.environ.get("DRYDOCK_THINKING_BUDGET_TOKENS")
194
195
  if thinking and thinking not in ("off", ""):
195
196
  payload["chat_template_kwargs"] = {"enable_thinking": True}
196
197
  # Cap thinking length (llama.cpp). Prevents runaway thinking stalls
197
198
  # on hard HLE questions (model can think >480s without this).
198
199
  # Set DRYDOCK_THINKING_BUDGET_TOKENS=8000 in HLE batch launches.
199
- _budget = os.environ.get("DRYDOCK_THINKING_BUDGET_TOKENS")
200
- if _budget:
200
+ if _budget_env:
201
201
  try:
202
- payload["thinking_budget_tokens"] = int(_budget)
202
+ # llama.cpp requires thinking_budget inside chat_template_kwargs,
203
+ # not as a top-level field (top-level is silently ignored → INT32_MAX).
204
+ payload["chat_template_kwargs"]["thinking_budget"] = int(_budget_env)
203
205
  except ValueError:
204
206
  pass
207
+ elif _budget_env:
208
+ # llama.cpp activates reasoning with budget=INT32_MAX by default even
209
+ # when thinking="off". Always cap it when the env var is set so that
210
+ # "off"-mode requests don't stall for 480s on hard questions.
211
+ try:
212
+ payload.setdefault("chat_template_kwargs", {})["thinking_budget"] = int(_budget_env)
213
+ except ValueError:
214
+ pass
205
215
 
206
216
  if enable_streaming:
207
217
  payload["stream"] = True
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.36"
3
+ version = "2.8.38"
4
4
  description = "Local-first CLI coding agent — tested with Gemma 4 26B via vLLM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -200,6 +200,8 @@ run_loop() {
200
200
  DRYDOCK_STOP_NOW_WARN_AT=12 \
201
201
  DRYDOCK_STOP_NOW_TIME_SEC=240 \
202
202
  DRYDOCK_THINKING_BUDGET_TOKENS=8000 \
203
+ DRYDOCK_TOOL_STOP_AFTER=3 \
204
+ DRYDOCK_STOP_NOW_SUFFIX="End your response with 'FINAL ANSWER: <your answer>' on its own line." \
203
205
  PYTHONUNBUFFERED=1 \
204
206
  nohup "$PY" -u "$DRYDOCK/scripts/hle_eval.py" \
205
207
  --source hle --limit "$LIMIT" --shuffle --seed "$SEED" \
@@ -210,6 +212,8 @@ run_loop() {
210
212
  DRYDOCK_STOP_NOW_WARN_AT=12 \
211
213
  DRYDOCK_STOP_NOW_TIME_SEC=240 \
212
214
  DRYDOCK_THINKING_BUDGET_TOKENS=8000 \
215
+ DRYDOCK_TOOL_STOP_AFTER=3 \
216
+ DRYDOCK_STOP_NOW_SUFFIX="End your response with 'FINAL ANSWER: <your answer>' on its own line." \
213
217
  PYTHONUNBUFFERED=1 \
214
218
  nohup "$PY" -u "$DRYDOCK/scripts/hle_eval.py" \
215
219
  --source hle --limit "$LIMIT" --shuffle --seed "$SEED" \
@@ -56,6 +56,16 @@ notify_on_change() {
56
56
  log "TELEGRAM: $msg"
57
57
  }
58
58
 
59
+ # Operator pause sentinel — when present, do not restart a dead harness
60
+ # and do not interfere. Used during HLE burndown trips so the single
61
+ # llama.cpp slot stays free for HLE. Remove the file (or set to empty)
62
+ # to resume.
63
+ PAUSE_FILE=/data3/drydock/.pause_stress
64
+ if [ -f "$PAUSE_FILE" ]; then
65
+ log "PAUSED via $PAUSE_FILE"
66
+ exit 0
67
+ fi
68
+
59
69
  if [ ! -f "$PID_FILE" ]; then
60
70
  log "no PID file at $PID_FILE — nothing to monitor"
61
71
  notify_on_change "nopid" "no PID file — stress run not tracked"
File without changes
@@ -113,6 +113,94 @@ def test_extract_divisible_by_alternative_phrasing():
113
113
  assert r.divisor == 6
114
114
 
115
115
 
116
+ # ── equation_solve / smallest_with / largest_with ────────────────────────
117
+
118
+ def test_extract_equation_solve_with_lhs_rhs():
119
+ r = extract("Find all integers x such that x^2 - 5x + 6 = 0.")
120
+ assert r is not None and r.predicate == "equation_solve"
121
+ assert r.formula == "x * x - 5 * x + 6"
122
+ assert r.second_formula == "0"
123
+
124
+
125
+ def test_extract_equation_solve_quadratic_rhs():
126
+ r = extract("Solve x^2 = 4y + 1 for x.")
127
+ assert r is not None and r.predicate == "equation_solve"
128
+ # Either side capture is acceptable; just verify both formulas are extracted
129
+ assert r.formula and r.second_formula
130
+
131
+
132
+ def test_extract_smallest_with():
133
+ r = extract("Find the smallest positive integer n such that n^2 > 1000.")
134
+ assert r is not None and r.predicate == "smallest_with"
135
+ assert "n * n > 1000" in r.formula
136
+ assert r.variables == ["n"]
137
+
138
+
139
+ def test_extract_smallest_with_factorial_ge():
140
+ r = extract("What is the smallest n with n! >= 100?")
141
+ assert r is not None and r.predicate == "smallest_with"
142
+ # `>=` must NOT be split by the operator-spacing normaliser
143
+ assert ">=" in r.formula
144
+
145
+
146
+ def test_extract_largest_with():
147
+ r = extract("Find the largest integer x with x^2 < 50.")
148
+ assert r is not None and r.predicate == "largest_with"
149
+ assert "x * x < 50" in r.formula
150
+ assert r.variables == ["x"]
151
+
152
+
153
+ # ── Render templates for the new predicates ──────────────────────────────
154
+
155
+ def test_render_equation_solve_includes_both_sides():
156
+ r = ExtractResult(
157
+ predicate="equation_solve",
158
+ formula="x * x - 5 * x + 6",
159
+ second_formula="0",
160
+ variables=["x"],
161
+ )
162
+ out = render_template(r)
163
+ assert "(x * x - 5 * x + 6) == (0)" in out
164
+ assert "find_all" in out
165
+
166
+
167
+ def test_render_smallest_with_uses_min_optimization():
168
+ r = ExtractResult(
169
+ predicate="smallest_with",
170
+ formula="n * n > 1000",
171
+ variables=["n"],
172
+ )
173
+ out = render_template(r)
174
+ assert 'direction="min"' in out
175
+ assert 'objective="n"' in out
176
+ assert "n * n > 1000" in out
177
+
178
+
179
+ def test_render_largest_with_uses_max_optimization():
180
+ r = ExtractResult(
181
+ predicate="largest_with",
182
+ formula="x * x < 50",
183
+ variables=["x"],
184
+ )
185
+ out = render_template(r)
186
+ assert 'direction="max"' in out
187
+ assert 'objective="x"' in out
188
+
189
+
190
+ # ── Normalizer regression: multi-char comparison ops ────────────────────
191
+
192
+ def test_normalize_preserves_gte():
193
+ assert ">=" in _normalize_for_z3("n! >= 100")
194
+
195
+
196
+ def test_normalize_preserves_lte():
197
+ assert "<=" in _normalize_for_z3("x <= 10")
198
+
199
+
200
+ def test_normalize_preserves_eq_eq():
201
+ assert "==" in _normalize_for_z3("x == 5")
202
+
203
+
116
204
  # ── Negative cases ───────────────────────────────────────────────────────
117
205
 
118
206
  @pytest.mark.parametrize("msg", [
@@ -227,6 +227,51 @@ class TestWriteFileDedup:
227
227
  assert old != new # Different = allow write
228
228
 
229
229
 
230
+ class TestIssue20_500ErrorRecovery:
231
+ """#20: 500 Internal Server Error from llama.cpp backend triggers no-op
232
+ error path instead of context compaction, making recovery impossible."""
233
+
234
+ def test_500_error_matches_compaction_path(self):
235
+ """The condition that routes errors to aggressive compaction should
236
+ match 500 Internal Server Error strings from llama.cpp backends."""
237
+ # Reproduce the predicate extracted from agent_loop.py
238
+ error_str = "API error from local (model: navygpt): LLM backend error [local]\nstatus: 500 Internal Server Error reason: Internal Server Error"
239
+ cond = (
240
+ "context length" in error_str.lower()
241
+ or "maximum context" in error_str.lower()
242
+ or "400 bad request" in error_str.lower()
243
+ or "status: 400" in error_str.lower()
244
+ or "exceeds the available context" in error_str.lower()
245
+ or "error code: 400" in error_str.lower()
246
+ or "500 internal server error" in error_str.lower()
247
+ or "status: 500" in error_str.lower()
248
+ or "llm backend error" in error_str.lower()
249
+ )
250
+ assert cond, "500 error should trigger compaction path"
251
+
252
+ def test_generic_500_matches(self):
253
+ """Plain '500 Internal Server Error' string should also match."""
254
+ error_str = "status: 500 Internal Server Error"
255
+ cond = (
256
+ "500 internal server error" in error_str.lower()
257
+ or "status: 500" in error_str.lower()
258
+ )
259
+ assert cond
260
+
261
+ def test_non_500_error_does_not_match(self):
262
+ """Unrelated errors (e.g. timeout) should NOT match."""
263
+ error_str = "Connection timed out after 30s"
264
+ cond = (
265
+ "context length" in error_str.lower()
266
+ or "400 bad request" in error_str.lower()
267
+ or "status: 400" in error_str.lower()
268
+ or "500 internal server error" in error_str.lower()
269
+ or "status: 500" in error_str.lower()
270
+ or "llm backend error" in error_str.lower()
271
+ )
272
+ assert not cond
273
+
274
+
230
275
  class TestEscapeCharacters:
231
276
  """#70: Invalid escape characters causing API errors."""
232
277
 
@@ -1,5 +1,86 @@
1
1
  # Drydock Trip Log
2
2
 
3
+ ## 2026-05-15 16:30 UTC tick
4
+ - Stress: paused (.pause_stress sentinel active)
5
+ - HLE: 38/418 = 9.1% lifetime (35 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%; burndown daemon alive (43:51 elapsed)
6
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (Q3_K_M on :8000); balancer :8001 up
7
+ - GH issues: 1 open (#21 — user on RedHat8/navygpt reports 500 JSON-parse error when write_file content exceeds max_tokens; also notes temperature 0.02 vs 1 in config.toml — not reproduced locally)
8
+ - Dispatch queue: harness=19 (all thinking_stall, addressed by bc99b6b), retrieval=0 actionable, curiosity=611 signals / top hle_failure items = empty-prediction failures (no FINAL ANSWER output)
9
+ - retrieval-drain: 0 ingestions (all recently consumed)
10
+ - curiosity-drain: no action — top 3 hle_failure items have empty predictions traceable to thinking stall / FINAL ANSWER format; root cause already addressed
11
+ - Action this tick: committed a338858 fix(recovery): detect JSON-truncation 500 (closes #21) — when llama.cpp returns HTTP 500 with 'missing closing quote' or 'parse error at column N', now injects targeted message telling model to split write_file into ≤50-line chunks instead of the generic 'malformed arguments' message
12
+
13
+ ## 2026-05-15 16:00 UTC tick
14
+ - Stress: paused (.pause_stress sentinel active)
15
+ - HLE: 38/414 = 9.2% lifetime (35 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%; burndown daemon PID 1938107 alive (14h elapsed)
16
+ - vLLM 400s: 0 in last 30min; llamacpp-gemma4 healthy (Q3_K_M); balancer :8001 up (pid 380535, llm_balancer.py confirmed)
17
+ - GH issues: 1 open (#21 — user on RedHat8/navygpt reports 500 JSON-parse error + temperature 0.02 instead of 1 from config.toml; JSON-parse 500 is covered by c174552 compaction routing; temperature 0.02 bug not reproduced locally — no code path produces 0.02, may be misread of 0.2 default or extra_params temperature collision; no fix this tick, needs repro)
18
+ - Dispatch queue: harness=18 (all thinking_stall, latest 12:10 UTC, addressed by bc99b6b), retrieval=0 actionable, curiosity=1458 pending (230 hle_failure, 1228 unknown_term)
19
+ - retrieval-drain: 0 ingestions (3 entries all recently consumed)
20
+ - curiosity-drain: 1458 pending, no action this tick — top hle_failure items are empty-prediction failures traceable to thinking stalls + missing FINAL ANSWER format; root causes addressed by bc99b6b + f8f4f06; autonomous_review cron just started at 16:00:01 UTC
21
+ - Action this tick: no fix committed — all queued patterns addressed by today's earlier commits; system healthy
22
+
23
+ ## 2026-05-15 15:30 UTC tick
24
+ - Stress: paused (.pause_stress sentinel active)
25
+ - HLE: 37/408 = 9.1% lifetime (34 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%, Eng 4.3%; burndown daemon PID 1926757 alive (slot 14, category=other)
26
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (Q3_K_M); balancer :8001 up
27
+ - GH issues: 0 open (closed #20 this tick — already fixed in c174552, shipping in next auto-release; added close comment)
28
+ - Dispatch queue: harness=19 (all thinking_stall, no new fires since 39ddef9), retrieval=0 actionable, curiosity=1436 pending (226 hle_failure, 1210 unknown_term)
29
+ - retrieval-drain: 0 ingestions (all recently consumed)
30
+ - curiosity-drain: 1436 pending, no action this tick — top items are empty-prediction failures; root cause traced to same thinking_budget gap below
31
+ - Action this tick: committed fix bc99b6b (addresses pattern harness:thinking_stall) — docker logs showed budget=2147483647 on ~80% of requests even after 39ddef9, because the budget cap was only applied when thinking != "off"; llama.cpp activates reasoning with INT32_MAX by default on ALL requests; fix: always include thinking_budget in chat_template_kwargs when DRYDOCK_THINKING_BUDGET_TOKENS is set, regardless of thinking mode.
32
+
33
+ ## 2026-05-15 15:00 UTC tick
34
+ - Stress: paused (.pause_stress sentinel active)
35
+ - HLE: 36/403 = 8.9% lifetime (34 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%, Eng 4.3%; burndown daemon PID 1926757 alive (slot 14, category=other, batch in progress)
36
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (Q3_K_M, budget=8000 confirmed in docker logs); balancer :8001 up
37
+ - GH issues: 1 open (#20 — already fixed in c174552, ships at next auto-release tick)
38
+ - Dispatch queue: harness=19 in 24h (all harness:thinking_stall, last fire 12:10 UTC documenting the 39ddef9 fix, no new fires post-fix); retrieval=0 actionable; curiosity=1409 pending (222 hle_failure, 1187 unknown_term)
39
+ - retrieval-drain: 0 ingestions (3 entries, all recently consumed)
40
+ - curiosity-drain: 1409 pending, no action this tick — top items are empty-prediction failures on extremely hard questions (MIT Mystery Hunt, Go puzzles); thinking budget IS working per docker logs (budget=8000, forced-end on exhaust), these are model-capability failures on questions above the model's ceiling
41
+ - Action this tick: no fix committed — thinking_budget fix (39ddef9) confirmed operational; thinking_stall dispatch pattern has no new fires since fix shipped; system healthy
42
+
43
+ ## 2026-05-15 14:30 UTC tick
44
+ - Stress: paused (.pause_stress sentinel active)
45
+ - HLE: 35/397 = 8.8% lifetime (33 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%, Eng 4.3%; burndown daemon PID 1917195 alive (category=other, 40+ min elapsed — stalling on 9-msg sessions)
46
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (Q3_K_M); balancer :8001 up
47
+ - GH issues: 1 open (#20 "API error with tool call" — already fixed in c174552, pending next auto-release)
48
+ - Dispatch queue: harness=20 in 24h (all thinking_stall, addressed by 39ddef9), retrieval=0 actionable, curiosity=1380 pending (217 hle_failure, 1163 unknown_term)
49
+ - retrieval-drain: 0 ingestions (3 entries, all recently consumed)
50
+ - curiosity-drain: 1380 pending, no action this tick (top items are pre-fix no_final_answer failures, will clear naturally)
51
+ - Action this tick: committed fix f8f4f06 — hle_burndown.sh was missing DRYDOCK_TOOL_STOP_AFTER=3 and DRYDOCK_STOP_NOW_SUFFIX that hle_babysitter.sh had; burndown batches were spinning 9+ tool turns into 480s timeouts instead of capping at 3 tool calls
52
+
53
+ ## 2026-05-15 13:30 UTC tick
54
+ - Stress: paused (.pause_stress sentinel active)
55
+ - HLE: 34/387 = 8.8% lifetime (32 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.4%, Chem 0.0%, Eng 4.3%; burndown daemon PID 1905338 alive (slot=12 Computer Science/AI batch, ~47min elapsed, still running)
56
+ - vLLM 400s: 5 (minor); llamacpp-gemma4 healthy (Q3_K_M confirmed, budget=8000 in docker logs — 39ddef9 fix verified working); balancer :8001 up (PID 380535)
57
+ - GH issues: 0 open
58
+ - Dispatch queue: harness=21 in 24h (all thinking_stall, addressed by 39ddef9), retrieval=0 actionable, curiosity=1349 pending (135 hle_failure, 1140 unknown_term in 24h); dispatch report 578 signals in 24h window
59
+ - retrieval-drain: 0 ingestions (3 entries, all recently consumed)
60
+ - curiosity-drain: consumed item 4bd8d88fca523801 (Math empty prediction 3.9942, root cause = thinking budget unlimited; addressed by 39ddef9 chat_template_kwargs fix; total consumed: 305)
61
+ - Action this tick: no code changes needed; 39ddef9 thinking_budget fix is current work; current batch (slot=12) predates fix and still shows 480s stalls, next batch will benefit
62
+
63
+ ## 2026-05-15 13:00 UTC tick
64
+ - Stress: paused (.pause_stress sentinel active)
65
+ - HLE: 34/384 = 8.9% lifetime (32 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.6%, Chem 0.0%, Physics 0.0%; burndown daemon PID 1905338 alive (slot=12, Computer Science batch in progress); 135/197 failures are method=empty (thinking stalls)
66
+ - vLLM 400s: 0; llamacpp-gemma4 healthy (Q3_K_M confirmed); balancer :8001 up; thinking budget CONFIRMED working — docker logs show "reasoning-budget: activated, budget=8000 tokens" (was INT32_MAX before 39ddef9)
67
+ - GH issues: 0 open
68
+ - Dispatch queue: harness=1289 total (22 in 24h window, all thinking_stall — ADDRESSED by 39ddef9), retrieval=3 (0 actionable), curiosity=1636 total (135 hle_failure:no_final_answer, 419 unknown_term in 24h window)
69
+ - retrieval-drain: 0 new ingestions (3 entries all already consumed recently)
70
+ - curiosity-drain: consumed item 1b7d0cc4aaf08f52 (Math blank prediction 6*sqrt(2); root cause = thinking stall, addressed by 39ddef9 chat_template_kwargs fix; total consumed: 304)
71
+ - Action this tick: no new commit — 39ddef9 thinking_budget fix confirmed live in source tree (miniconda3 Python uses source dev path); current batch slot=12 uses fixed code; next auto-release at ~17:00 UTC will ship fix to PyPI as v2.8.38; system healthy
72
+
73
+ ## 2026-05-15 12:30 UTC tick
74
+ - Stress: paused (.pause_stress sentinel)
75
+ - Write rate: N/A (stress paused)
76
+ - HLE: 33/378 = 8.7% lifetime (31 runs); burndown daemon alive (PID 1896475, ~34 min, running Computer Science/AI batch)
77
+ - vLLM 400s: 0 errors; llamacpp-gemma4 healthy (Q3_K_M, model_path confirmed)
78
+ - GH issues: 0 open
79
+ - Dispatch queue: harness=22 (thinking_stall, root cause fixed by 39ddef9 this tick), retrieval=0 actionable, curiosity=1297 pending (1093 unknown_term, 204 hle_failure)
80
+ - retrieval-drain: 0 new ingestions (all 3 entries already ingested)
81
+ - curiosity-drain: consumed item 8d95bf4cc3fc45d3 (Math blank prediction pi/2-1/4; root cause = thinking stall, fixed by 39ddef9)
82
+ - Action this tick: no new commit — 39ddef9 (thinking_budget into chat_template_kwargs for llama.cpp) already committed and live in source tree; current burndown batch is pre-fix but next batch will use correct 4000-token budget cap; system healthy, no new actionable patterns
83
+
3
84
  ## 2026-05-15 11:30 UTC tick
4
85
  - Stress: alive PID 1878801, 55m elapsed (restarted this cycle)
5
86
  - HLE lifetime: 33/371 = 8.9% (Math 11.4%, CS/AI 2.3%, Chem 0.0%, Bio/Med 16.7%, Eng 4.3%); latest batch 2/10 = 20% Biology/Medicine; burndown daemon PID 1742185 alive
@@ -6399,3 +6480,22 @@ restarted, cron self-match bug fixed in this same session).
6399
6480
  - HLE: 22/331 = 6.6% lifetime (27 runs); burndown daemon alive (PID 1838832, 6h+ elapsed, running Math batch)
6400
6481
  - 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)
6401
6482
  - 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
6483
+
6484
+ ## 2026-05-15 12:00 UTC tick
6485
+ - Stress: paused (.pause_stress sentinel)
6486
+ - Write rate: N/A (stress paused)
6487
+ - HLE: 33/372 = 8.9% lifetime (31 runs); burndown daemon alive (PID 1896475, ~4h elapsed)
6488
+ - vLLM 400s: 0 critical; llamacpp-gemma4 shows "unhealthy" Docker health status (healthcheck hitting wrong port 8080 vs actual 8000) — API responds normally, false alarm
6489
+ - GH issues: 0 open
6490
+ - Dispatch queue: harness=21 (thinking_stall), retrieval=0 actionable, curiosity=1263 pending (1063 unknown_term, 200 hle_failure)
6491
+ - Action this tick: fixed real bug — thinking_budget_tokens was being sent as a top-level payload field which llama.cpp silently ignores (logs showed budget=2147483647=INT32_MAX on every HLE call). Correct path is chat_template_kwargs.thinking_budget — verified empirically. This was causing all 480s+ thinking stalls despite DRYDOCK_THINKING_BUDGET_TOKENS=4000/8000 being set. Committed 39ddef9; addresses pattern harness:thinking_stall. Consumed curiosity item 7e62485e82c6849c (top hle_failure blank-prediction, root cause same). Retrieval drain: 0 actionable.
6492
+
6493
+ ## 2026-05-15 14:00 UTC tick
6494
+ - Stress: paused (.pause_stress sentinel active)
6495
+ - HLE: 35/393 = 8.9% lifetime (33 runs); Math 11.4%, Bio/Med 16.7%, CS/AI 3.2%, Chem 0.0%, Eng 4.3%; burndown daemon PID 1917195 alive (running "other" category batch, ~9m elapsed)
6496
+ - vLLM 400s: n/a (llamacpp); balancer :8001 up; model Q3_K_M confirmed
6497
+ - GH issues: 1 new (issue #20 filed 13:56 UTC — user on Red Hat 8 / navygpt hitting "Stopping: 15+ API errors" after search_replace "file path required" error)
6498
+ - Dispatch queue: harness=21 (all thinking_stall, addressed by 39ddef9), retrieval=0 actionable, curiosity=1365 pending (1152 unknown_term, 213 hle_failure)
6499
+ - retrieval-drain: 0 ingestions (3 entries, all recently consumed)
6500
+ - curiosity-drain: no action — top 3 are empty-predicted hle_failure items (symptoms of thinking_stall fixed by 39ddef9, not a separate issue)
6501
+ - Action this tick: fixed issue #20 — commit c174552. Root cause: llama.cpp backends return HTTP 500 (not 400) for context overflow; the error handler only applied aggressive compaction+truncation for 400 errors. 500s hit the fallback path that injected an error note WITHOUT truncating context, making each retry larger and recovery impossible. Fix: route "500 Internal Server Error", "status: 500", "LLM backend error" through the same compaction path as 400 errors. 3 regression tests added. Issue commented with fix details.
@@ -326,7 +326,7 @@ wheels = [
326
326
 
327
327
  [[package]]
328
328
  name = "drydock-cli"
329
- version = "2.8.34"
329
+ version = "2.8.37"
330
330
  source = { editable = "." }
331
331
  dependencies = [
332
332
  { name = "agent-client-protocol" },
@@ -1 +0,0 @@
1
- 1894989
File without changes
File without changes