drydock-cli 2.8.5__tar.gz → 2.8.6__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 (729) hide show
  1. drydock_cli-2.8.6/.auto_release.lock +1 -0
  2. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/PKG-INFO +1 -1
  3. drydock_cli-2.8.6/drydock/__main__.py +17 -0
  4. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/cli.py +60 -38
  5. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/agent_loop.py +71 -11
  6. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/_settings.py +29 -1
  7. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/local_detect.py +3 -1
  8. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/migrate.py +16 -5
  9. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/pyproject.toml +1 -1
  10. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/llm_balancer.py +8 -1
  11. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/trip_log.md +235 -0
  12. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/uv.lock +1 -1
  13. drydock_cli-2.8.5/.auto_release.lock +0 -1
  14. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.claude/scheduled_tasks.lock +0 -0
  15. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/CODEOWNERS +0 -0
  16. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  17. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  18. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/workflows/build-and-upload.yml +0 -0
  20. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/workflows/ci.yml +0 -0
  21. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/workflows/issue-labeler.yml +0 -0
  22. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.github/workflows/release.yml +0 -0
  23. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.gitignore +0 -0
  24. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.pre-commit-config.yaml +0 -0
  25. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.python-version +0 -0
  26. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.typos.toml +0 -0
  27. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.vscode/extensions.json +0 -0
  28. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.vscode/launch.json +0 -0
  29. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/.vscode/settings.json +0 -0
  30. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/AGENTS.md +0 -0
  31. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/Admiral.md +0 -0
  32. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/CHANGELOG.md +0 -0
  33. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/CLAUDE.md +0 -0
  34. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/CONTRIBUTING.md +0 -0
  35. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/DEPLOYMENT.md +0 -0
  36. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/HLE_PRD.md +0 -0
  37. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/JETSON_BENCH.md +0 -0
  38. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/LICENSE +0 -0
  39. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/MODEL_SHORTCOMINGS.md +0 -0
  40. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/NOTICE +0 -0
  41. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/README.md +0 -0
  42. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/SOVEREIGN_PRD.md +0 -0
  43. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/TRIAGE_v1.md +0 -0
  44. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/action.yml +0 -0
  45. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/README.md +0 -0
  46. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results1.tsv +0 -0
  47. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results13.tsv +0 -0
  48. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results14.tsv +0 -0
  49. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results15.tsv +0 -0
  50. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results16.tsv +0 -0
  51. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results17.tsv +0 -0
  52. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results18.tsv +0 -0
  53. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results19.tsv +0 -0
  54. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results2.tsv +0 -0
  55. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results20.tsv +0 -0
  56. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results3.tsv +0 -0
  57. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results4.tsv +0 -0
  58. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results5.tsv +0 -0
  59. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results6.tsv +0 -0
  60. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results7.tsv +0 -0
  61. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results8.tsv +0 -0
  62. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results9.tsv +0 -0
  63. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/baseline_history/results_evolved_v1.tsv +0 -0
  64. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/distribution/zed/LICENSE +0 -0
  65. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/distribution/zed/extension.toml +0 -0
  66. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/distribution/zed/icons/mistral_vibe.svg +0 -0
  67. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/README.md +0 -0
  68. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/acp-setup.md +0 -0
  69. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/BASELINE_412.md +0 -0
  70. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/Drydock_rebrand.md +0 -0
  71. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  72. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  73. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  74. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/PRD.md +0 -0
  75. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/drydock_terms.md +0 -0
  76. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/archive/resume.md +0 -0
  77. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/docs/proxy-setup.md +0 -0
  78. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/__init__.py +0 -0
  79. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/__init__.py +0 -0
  80. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/acp_agent_loop.py +0 -0
  81. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/acp_logger.py +0 -0
  82. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/entrypoint.py +0 -0
  83. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/__init__.py +0 -0
  84. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/base.py +0 -0
  85. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/builtins/bash.py +0 -0
  86. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/builtins/read_file.py +0 -0
  87. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/builtins/search_replace.py +0 -0
  88. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/builtins/todo.py +0 -0
  89. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/builtins/write_file.py +0 -0
  90. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/tools/session_update.py +0 -0
  91. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/acp/utils.py +0 -0
  92. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/__init__.py +0 -0
  93. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/detectors.py +0 -0
  94. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/detectors_proposed.py +0 -0
  95. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/history.py +0 -0
  96. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/interventions.py +0 -0
  97. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/llm_analyzer.py +0 -0
  98. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/metrics.py +0 -0
  99. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/opus_escalator.py +0 -0
  100. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/persistence.py +0 -0
  101. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/policy.py +0 -0
  102. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/proposer.py +0 -0
  103. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/stager.py +0 -0
  104. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/task_classifier.py +0 -0
  105. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/tuning.py +0 -0
  106. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/validator.py +0 -0
  107. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/admiral/worker.py +0 -0
  108. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/__init__.py +0 -0
  109. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/autocompletion/__init__.py +0 -0
  110. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/autocompletion/base.py +0 -0
  111. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/autocompletion/path_completion.py +0 -0
  112. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/autocompletion/slash_command.py +0 -0
  113. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/clipboard.py +0 -0
  114. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/commands.py +0 -0
  115. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/entrypoint.py +0 -0
  116. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/fix_windows_path.py +0 -0
  117. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/history_manager.py +0 -0
  118. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  119. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  120. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  121. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/terminal_setup.py +0 -0
  122. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/__init__.py +0 -0
  123. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  124. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/app.py +0 -0
  125. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/app.tcss +0 -0
  126. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/external_editor.py +0 -0
  127. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  128. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  129. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  130. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  131. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  132. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  133. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  134. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  135. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  136. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  137. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  138. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  139. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  140. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  141. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  142. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  143. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  144. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  145. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  146. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  147. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  148. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  149. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  150. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  151. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  152. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  153. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  154. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  155. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  156. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  157. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  158. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  159. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  160. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  161. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  162. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  163. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  164. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/windowing/history.py +0 -0
  165. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  166. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/textual_ui/windowing/state.py +0 -0
  167. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/__init__.py +0 -0
  168. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  169. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  170. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  171. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  172. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  173. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/update.py +0 -0
  174. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/cli/update_notifier/whats_new.py +0 -0
  175. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/__init__.py +0 -0
  176. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/agents/__init__.py +0 -0
  177. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/agents/manager.py +0 -0
  178. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/agents/models.py +0 -0
  179. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/auth/__init__.py +0 -0
  180. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/auth/crypto.py +0 -0
  181. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/auth/github.py +0 -0
  182. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/__init__.py +0 -0
  183. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/completers.py +0 -0
  184. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  185. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  186. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  187. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  188. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  189. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/fuzzy.py +0 -0
  190. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/path_prompt.py +0 -0
  191. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  192. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/build_orchestrator.py +0 -0
  193. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/checkpoint.py +0 -0
  194. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/__init__.py +0 -0
  195. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/__main__.py +0 -0
  196. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/classifier.py +0 -0
  197. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/dispatcher.py +0 -0
  198. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/rules.py +0 -0
  199. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/classifier/signal.py +0 -0
  200. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/__init__.py +0 -0
  201. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/_dotenv.py +0 -0
  202. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/doctor.py +0 -0
  203. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/harness_files/__init__.py +0 -0
  204. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  205. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/config/harness_files/_paths.py +0 -0
  206. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/consultant.py +0 -0
  207. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/context_recovery.py +0 -0
  208. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/drydock_states.py +0 -0
  209. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/hooks.py +0 -0
  210. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/__init__.py +0 -0
  211. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/anthropic.py +0 -0
  212. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/base.py +0 -0
  213. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/factory.py +0 -0
  214. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/generic.py +0 -0
  215. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/mistral.py +0 -0
  216. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  217. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/backend/vertex.py +0 -0
  218. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/exceptions.py +0 -0
  219. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/format.py +0 -0
  220. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/message_utils.py +0 -0
  221. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/llm/types.py +0 -0
  222. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/logger.py +0 -0
  223. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/middleware.py +0 -0
  224. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/output_formatters.py +0 -0
  225. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/paths/__init__.py +0 -0
  226. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/paths/_drydock_home.py +0 -0
  227. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/paths/_local_config_walk.py +0 -0
  228. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/paths/conventions.py +0 -0
  229. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/plan_session.py +0 -0
  230. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/plugins.py +0 -0
  231. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/programmatic.py +0 -0
  232. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/__init__.py +0 -0
  233. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/builder.md +0 -0
  234. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/cli.md +0 -0
  235. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/compact.md +0 -0
  236. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/dangerous_directory.md +0 -0
  237. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/diagnostic.md +0 -0
  238. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/explore.md +0 -0
  239. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/gemma4.md +0 -0
  240. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/planner.md +0 -0
  241. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/project_context.md +0 -0
  242. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/prompts/tests.md +0 -0
  243. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/proxy_setup.py +0 -0
  244. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/agent_memory.py +0 -0
  245. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/checkpoints.py +0 -0
  246. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/session_loader.py +0 -0
  247. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/session_logger.py +0 -0
  248. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/session_migration.py +0 -0
  249. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session/state_file.py +0 -0
  250. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/session_checker.py +0 -0
  251. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/skills/__init__.py +0 -0
  252. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/skills/manager.py +0 -0
  253. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/skills/models.py +0 -0
  254. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/skills/parser.py +0 -0
  255. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/slug.py +0 -0
  256. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/steering_hook.py +0 -0
  257. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/system_prompt.py +0 -0
  258. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/telemetry/__init__.py +0 -0
  259. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/telemetry/send.py +0 -0
  260. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/teleport/errors.py +0 -0
  261. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/teleport/git.py +0 -0
  262. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/teleport/nuage.py +0 -0
  263. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/teleport/teleport.py +0 -0
  264. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/teleport/types.py +0 -0
  265. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/base.py +0 -0
  266. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/_task_manager.py +0 -0
  267. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  268. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/bash.py +0 -0
  269. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/cron.py +0 -0
  270. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  271. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/glob_tool.py +0 -0
  272. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/grep.py +0 -0
  273. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  274. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/lsp.py +0 -0
  275. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  276. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  277. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/powershell.py +0 -0
  278. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  279. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  280. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  281. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  282. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  283. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  284. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  285. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  286. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  287. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  288. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  289. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  290. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  291. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  292. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  293. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/task.md +0 -0
  294. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  295. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  296. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  297. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  298. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  299. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  300. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  301. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/read_file.py +0 -0
  302. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/retrieve.py +0 -0
  303. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/search_replace.py +0 -0
  304. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/task.py +0 -0
  305. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/todo.py +0 -0
  306. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/tool_search.py +0 -0
  307. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/webfetch.py +0 -0
  308. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/websearch.py +0 -0
  309. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/worktree.py +0 -0
  310. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/builtins/write_file.py +0 -0
  311. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/injection_guard.py +0 -0
  312. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/manager.py +0 -0
  313. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/mcp/__init__.py +0 -0
  314. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/mcp/registry.py +0 -0
  315. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/mcp/tools.py +0 -0
  316. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/mcp_sampling.py +0 -0
  317. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/ui.py +0 -0
  318. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/tools/utils.py +0 -0
  319. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/trusted_folders.py +0 -0
  320. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/types.py +0 -0
  321. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/core/utils.py +0 -0
  322. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/__init__.py +0 -0
  323. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/__main__.py +0 -0
  324. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/code_indexer.py +0 -0
  325. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/retriever.py +0 -0
  326. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/storage.py +0 -0
  327. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/graphrag/text_indexer.py +0 -0
  328. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/__init__.py +0 -0
  329. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/base.py +0 -0
  330. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/onboarding.tcss +0 -0
  331. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/screens/__init__.py +0 -0
  332. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/screens/api_key.py +0 -0
  333. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/screens/choice.py +0 -0
  334. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/screens/local_model.py +0 -0
  335. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/onboarding/screens/welcome.py +0 -0
  336. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  337. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  338. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/__init__.py +0 -0
  339. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/api-design/SKILL.md +0 -0
  340. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/audit-tests/SKILL.md +0 -0
  341. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/batch/SKILL.md +0 -0
  342. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/commit-code/SKILL.md +0 -0
  343. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/context-summary/SKILL.md +0 -0
  344. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/create-presentation/SKILL.md +0 -0
  345. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/deep-research/SKILL.md +0 -0
  346. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/deploy/SKILL.md +0 -0
  347. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/diff-review/SKILL.md +0 -0
  348. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/doc-gen/SKILL.md +0 -0
  349. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/explain-code/SKILL.md +0 -0
  350. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/explore-code/SKILL.md +0 -0
  351. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/fix-issue/SKILL.md +0 -0
  352. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/git-ops/SKILL.md +0 -0
  353. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/init-project/SKILL.md +0 -0
  354. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/investigate/SKILL.md +0 -0
  355. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/loop/SKILL.md +0 -0
  356. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/migrate/SKILL.md +0 -0
  357. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/perf-analyze/SKILL.md +0 -0
  358. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/plan-impl/SKILL.md +0 -0
  359. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/pr-review/SKILL.md +0 -0
  360. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/refactor/SKILL.md +0 -0
  361. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/regex-help/SKILL.md +0 -0
  362. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/review/SKILL.md +0 -0
  363. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/security-review/SKILL.md +0 -0
  364. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/ship/SKILL.md +0 -0
  365. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/simplify/SKILL.md +0 -0
  366. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/strong-tests/SKILL.md +0 -0
  367. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/skills/test-verify/SKILL.md +0 -0
  368. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/__init__.py +0 -0
  369. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/__main__.py +0 -0
  370. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/applier.py +0 -0
  371. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/config.py +0 -0
  372. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/registry.py +0 -0
  373. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/sandbox.py +0 -0
  374. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/steering/vectors.py +0 -0
  375. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock/whats_new.md +0 -0
  376. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/drydock-acp.spec +0 -0
  377. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/flake.lock +0 -0
  378. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/flake.nix +0 -0
  379. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/README.md +0 -0
  380. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/config_base.toml +0 -0
  381. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/config_best.toml +0 -0
  382. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/domain_spec.md +0 -0
  383. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/experimenter.py +0 -0
  384. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/kernel.py +0 -0
  385. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/mini_prd.md +0 -0
  386. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/mini_prompts.txt +0 -0
  387. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/proposer.py +0 -0
  388. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/research/results.tsv +0 -0
  389. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/README.md +0 -0
  390. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/admiral_probe.py +0 -0
  391. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/auto_test_loop.sh +0 -0
  392. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/monitor_test_battery.sh +0 -0
  393. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/overnight_agents_test.sh +0 -0
  394. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/test_bank.sh +0 -0
  395. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/test_full.sh +0 -0
  396. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/test_smoke.sh +0 -0
  397. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/archive/tui_test.py +0 -0
  398. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/audit_sampler.py +0 -0
  399. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/auto_generate_tests.py +0 -0
  400. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/auto_release.sh +0 -0
  401. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/autonomous_review.sh +0 -0
  402. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/autonomous_review_prompt.md +0 -0
  403. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/backup.sh +0 -0
  404. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/bump_version.py +0 -0
  405. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/classify_pulse.sh +0 -0
  406. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/consume_retrieval_queue.py +0 -0
  407. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/deploy_to_github.sh +0 -0
  408. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/fetch_arxiv_abstracts.py +0 -0
  409. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/gen_2000_prompts.py +0 -0
  410. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/hle_eval.py +0 -0
  411. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/hle_eval_seed.jsonl +0 -0
  412. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/notify_release.py +0 -0
  413. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/perf_baseline_when_idle.sh +0 -0
  414. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/perf_sweep.py +0 -0
  415. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/poll_issues.sh +0 -0
  416. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/publish_to_pypi.sh +0 -0
  417. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/queue_top.py +0 -0
  418. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/ralph_loop.py +0 -0
  419. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/research_babysitter.sh +0 -0
  420. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/shakedown.py +0 -0
  421. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/shakedown_interactive.py +0 -0
  422. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/shakedown_suite.sh +0 -0
  423. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/shakedown_variance.sh +0 -0
  424. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_babysitter.sh +0 -0
  425. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_prompts_50.txt +0 -0
  426. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_prompts_realuser.txt +0 -0
  427. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_prompts_tool_agent.txt +0 -0
  428. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  429. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_shakedown.py +0 -0
  430. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_telegram_status.py +0 -0
  431. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/stress_watcher.py +0 -0
  432. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/telegram_bot.py +0 -0
  433. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/scripts/vllm_failover.sh +0 -0
  434. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/__init__.py +0 -0
  435. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/conftest.py +0 -0
  436. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_acp.py +0 -0
  437. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_agent_thought.py +0 -0
  438. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_bash.py +0 -0
  439. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_compact_session_updates.py +0 -0
  440. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_content.py +0 -0
  441. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_initialize.py +0 -0
  442. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_list_sessions.py +0 -0
  443. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_load_session.py +0 -0
  444. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_multi_session.py +0 -0
  445. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_new_session.py +0 -0
  446. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_proxy_setup_acp.py +0 -0
  447. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_read_file.py +0 -0
  448. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_search_replace.py +0 -0
  449. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_set_config_option.py +0 -0
  450. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_set_mode.py +0 -0
  451. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_set_model.py +0 -0
  452. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_tool_call_session_update.py +0 -0
  453. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_utils.py +0 -0
  454. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/acp/test_write_file.py +0 -0
  455. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_file_indexer.py +0 -0
  456. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_fuzzy.py +0 -0
  457. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  458. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  459. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_path_completion_controller.py +0 -0
  460. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  461. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_slash_command_controller.py +0 -0
  462. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  463. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/__init__.py +0 -0
  464. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/data/__init__.py +0 -0
  465. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/data/fireworks.py +0 -0
  466. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/data/mistral.py +0 -0
  467. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/test_anthropic_adapter.py +0 -0
  468. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/test_backend.py +0 -0
  469. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  470. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/test_reasoning_adapter.py +0 -0
  471. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  472. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  473. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  474. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  475. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_bell_notifications.py +0 -0
  476. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_braille_renderer.py +0 -0
  477. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_clipboard.py +0 -0
  478. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_commands.py +0 -0
  479. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_copy_shortcuts.py +0 -0
  480. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_external_editor.py +0 -0
  481. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_no_markup_static.py +0 -0
  482. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_question_app.py +0 -0
  483. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_spinner.py +0 -0
  484. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_switching_mode.py +0 -0
  485. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  486. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  487. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_ui_session_resume.py +0 -0
  488. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/test_ui_skill_dispatch.py +0 -0
  489. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/textual_ui/__init__.py +0 -0
  490. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/cli/textual_ui/test_session_picker.py +0 -0
  491. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/conftest.py +0 -0
  492. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_agents.py +0 -0
  493. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_auth_crypto.py +0 -0
  494. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_auth_github.py +0 -0
  495. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  496. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  497. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_config_load_dotenv.py +0 -0
  498. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_config_paths.py +0 -0
  499. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_config_resolution.py +0 -0
  500. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_file_logging.py +0 -0
  501. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_plan_session.py +0 -0
  502. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_proxy_setup.py +0 -0
  503. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_slug.py +0 -0
  504. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_telemetry_send.py +0 -0
  505. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_teleport_git.py +0 -0
  506. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_teleport_nuage.py +0 -0
  507. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_teleport_service.py +0 -0
  508. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_trusted_folders.py +0 -0
  509. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/core/test_utils.py +0 -0
  510. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/common.py +0 -0
  511. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/conftest.py +0 -0
  512. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/mock_server.py +0 -0
  513. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  514. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/test_cli_tui_streaming.py +0 -0
  515. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  516. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/fixtures/doc_qa_system_prd.md +0 -0
  517. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/mock/__init__.py +0 -0
  518. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/mock/mock_backend_factory.py +0 -0
  519. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/mock/mock_entrypoint.py +0 -0
  520. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/mock/utils.py +0 -0
  521. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/onboarding/test_run_onboarding.py +0 -0
  522. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/onboarding/test_ui_onboarding.py +0 -0
  523. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/session/test_session_loader.py +0 -0
  524. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/session/test_session_logger.py +0 -0
  525. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/session/test_session_migration.py +0 -0
  526. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/skills/conftest.py +0 -0
  527. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/skills/test_manager.py +0 -0
  528. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/skills/test_models.py +0 -0
  529. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/skills/test_parser.py +0 -0
  530. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  531. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  532. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  533. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  534. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  535. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  536. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  537. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  538. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  539. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  540. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  541. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  542. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  543. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  544. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  545. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  546. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  547. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  548. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  549. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  550. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  551. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  552. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  553. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  554. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  555. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  556. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  557. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  558. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  559. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  560. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  561. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  562. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  563. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  564. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  565. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  566. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  567. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  568. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  569. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  570. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  571. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  572. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  573. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  574. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  575. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  576. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  577. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  578. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  579. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  580. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  581. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  582. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  583. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  584. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  585. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  586. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  587. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  588. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  589. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  590. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/base_snapshot_test_app.py +0 -0
  591. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/conftest.py +0 -0
  592. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/snap_compare.py +0 -0
  593. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  594. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  595. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  596. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  597. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  598. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  599. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  600. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  601. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  602. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  603. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  604. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  605. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  606. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  607. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/stubs/fake_backend.py +0 -0
  608. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/stubs/fake_client.py +0 -0
  609. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/stubs/fake_tool.py +0 -0
  610. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_admiral.py +0 -0
  611. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_admiral_phase3.py +0 -0
  612. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_admiral_proposed.py +0 -0
  613. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_admiral_struggle_dedup.py +0 -0
  614. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_auto_compact.py +0 -0
  615. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_backend.py +0 -0
  616. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_observer_streaming.py +0 -0
  617. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_stats.py +0 -0
  618. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_tasks.py +0 -0
  619. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agent_tool_call.py +0 -0
  620. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_agents.py +0 -0
  621. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_build.py +0 -0
  622. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_debug.py +0 -0
  623. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_multiagent.py +0 -0
  624. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_prd.py +0 -0
  625. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_prd_extended.py +0 -0
  626. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_tools.py +0 -0
  627. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_bank_update.py +0 -0
  628. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_build_projects.py +0 -0
  629. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_checkpoint.py +0 -0
  630. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_classifier.py +0 -0
  631. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_cli_programmatic_preload.py +0 -0
  632. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_config_migration.py +0 -0
  633. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_context_recovery.py +0 -0
  634. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_current_bugs.py +0 -0
  635. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_dispatcher.py +0 -0
  636. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_drydock_regression.py +0 -0
  637. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_drydock_tasks.py +0 -0
  638. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  639. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_full_regression.py +0 -0
  640. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_graphrag.py +0 -0
  641. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_hallucinated_tool_suppression.py +0 -0
  642. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_history_manager.py +0 -0
  643. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_integration.py +0 -0
  644. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_issue_fixes.py +0 -0
  645. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_local_detect.py +0 -0
  646. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_loop_detection.py +0 -0
  647. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_message_id.py +0 -0
  648. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_message_merging.py +0 -0
  649. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_middleware.py +0 -0
  650. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_multi_agent.py +0 -0
  651. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_read_file_not_found_listing.py +0 -0
  652. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_real_failures.py +0 -0
  653. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_real_issues.py +0 -0
  654. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_real_workflow.py +0 -0
  655. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_reasoning_content.py +0 -0
  656. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_retrieval_consumer.py +0 -0
  657. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_retrieve_tool.py +0 -0
  658. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_search_replace_args_not_truncated.py +0 -0
  659. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_smoke.py +0 -0
  660. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_steering.py +0 -0
  661. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_steering_hook.py +0 -0
  662. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_system_prompt.py +0 -0
  663. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_tagged_text.py +0 -0
  664. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_task_complete_nudge.py +0 -0
  665. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_tool_args.py +0 -0
  666. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_truncate_args_valid_json.py +0 -0
  667. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_truncated_arg_path_hint.py +0 -0
  668. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_truncated_search_replace_escalation.py +0 -0
  669. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_truncated_write_escalation.py +0 -0
  670. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_ui_external_editor.py +0 -0
  671. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_ui_input_history.py +0 -0
  672. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_user_issues.py +0 -0
  673. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_wall_of_text_rescue.py +0 -0
  674. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_workloads.py +0 -0
  675. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/test_write_file_missing_path.py +0 -0
  676. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/testbank_helpers.py +0 -0
  677. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_ask_user_question.py +0 -0
  678. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash.py +0 -0
  679. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  680. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_consec_empty_search.py +0 -0
  681. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  682. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  683. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  684. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  685. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  686. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  687. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  688. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_exit_plan_mode.py +0 -0
  689. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_grep.py +0 -0
  690. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  691. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_invoke_context.py +0 -0
  692. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  693. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_manager_get_tool_config.py +0 -0
  694. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_mcp.py +0 -0
  695. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_mcp_sampling.py +0 -0
  696. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  697. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  698. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_read_file_directory.py +0 -0
  699. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_read_file_limit_truncation.py +0 -0
  700. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_append_fallback.py +0 -0
  701. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_dir_path.py +0 -0
  702. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_empty_content.py +0 -0
  703. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_file_not_found.py +0 -0
  704. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  705. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_hard_stop.py +0 -0
  706. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_malformed_block.py +0 -0
  707. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  708. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_placeholder.py +0 -0
  709. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  710. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_task.py +0 -0
  711. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_ui_bash_execution.py +0 -0
  712. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_webfetch.py +0 -0
  713. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_websearch.py +0 -0
  714. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  715. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  716. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  717. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  718. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_do_update.py +0 -0
  719. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  720. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_github_update_gateway.py +0 -0
  721. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  722. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_ui_update_notification.py +0 -0
  723. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_update_use_case.py +0 -0
  724. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/tests/update_notifier/test_whats_new.py +0 -0
  725. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/worked_examples/README.md +0 -0
  726. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/worked_examples/cli_subcommand_dispatch.py +0 -0
  727. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/worked_examples/lookup.json +0 -0
  728. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/worked_examples/sql_parser.py +0 -0
  729. {drydock_cli-2.8.5 → drydock_cli-2.8.6}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 3983696
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.5
3
+ Version: 2.8.6
4
4
  Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -0,0 +1,17 @@
1
+ """Entry point for `python -m drydock`.
2
+
3
+ This file lets users run drydock without the `drydock` console script
4
+ shim being on PATH — useful on Windows where `pip install --user`
5
+ puts the script in `%APPDATA%\\Python\\PythonXY\\Scripts` which isn't
6
+ on PATH by default.
7
+
8
+ Usage:
9
+ python -m drydock # same as `drydock`
10
+ python -m drydock --fix-windows-path
11
+ python -m drydock --setup
12
+ python -m drydock -p "your prompt here"
13
+ """
14
+ from drydock.cli.entrypoint import main
15
+
16
+ if __name__ == "__main__":
17
+ main()
@@ -75,49 +75,71 @@ def bootstrap_config_files() -> None:
75
75
  except Exception as e: # migration must never break startup
76
76
  logger.debug("config migration failed: %s", e)
77
77
  if not config_file.exists():
78
+ # Try auto-detecting a running local LLM first. Saves the user a
79
+ # setup screen if they already have llama.cpp / Ollama / vLLM /
80
+ # LM Studio listening on a known port.
81
+ detected_info = None
78
82
  try:
79
- config_file.parent.mkdir(parents=True, exist_ok=True)
80
- default = DrydockConfig.create_default()
81
- # Auto-detect a running local LLM server (llama.cpp, Ollama,
82
- # vLLM, LM Studio). If found, point the default config at it
83
- # and set local as the active model — so a fresh install with
84
- # a local server already running starts up without demanding
85
- # a Mistral API key.
83
+ from drydock.core.config.local_detect import detect_local_llm
84
+ detected_info = detect_local_llm()
85
+ except Exception as e:
86
+ logger.debug("local-LLM detection failed: %s", e)
87
+
88
+ if detected_info is not None:
89
+ # Detected — write a config patched to point at the live
90
+ # server with no user interaction required.
86
91
  try:
87
- from drydock.core.config.local_detect import (
88
- detect_local_llm,
89
- patch_config_for_local,
92
+ config_file.parent.mkdir(parents=True, exist_ok=True)
93
+ default = DrydockConfig.create_default()
94
+ from drydock.core.config.local_detect import patch_config_for_local
95
+ patch_config_for_local(default, detected_info)
96
+ rprint(
97
+ f"[green]Auto-detected {detected_info.label} at "
98
+ f"{detected_info.api_base}[/]\n"
99
+ f" Using model: [cyan]{detected_info.model_name}[/]\n"
100
+ f" To use a different LLM, run [cyan]drydock --setup[/] "
101
+ f"or edit [cyan]{config_file}[/]"
90
102
  )
91
- info = detect_local_llm()
92
- if info is not None:
93
- patch_config_for_local(default, info)
94
- rprint(
95
- f"[green]Auto-detected {info.label} at "
96
- f"{info.api_base}[/]\n"
97
- f" Using model: [cyan]{info.model_name}[/]\n"
98
- f" To use a different LLM, run [cyan]drydock --setup[/] "
99
- f"or edit [cyan]{config_file}[/]"
100
- )
101
- else:
102
- # No local server answering — default config already
103
- # points at llama.cpp on http://127.0.0.1:8000/v1 with
104
- # active_model="local". Tell the user so they know what
105
- # endpoint drydock will try, and how to point it
106
- # elsewhere if needed.
103
+ with config_file.open("wb") as f:
104
+ tomli_w.dump(default, f)
105
+ except Exception as e:
106
+ rprint(f"[yellow]Could not create default config file: {e}[/]")
107
+ else:
108
+ # No local server answering. Run the onboarding flow so the
109
+ # user can choose between (a) Mistral API key, (b) point
110
+ # drydock at a custom local URL via LocalModelScreen. Don't
111
+ # silently write a config pointing at a port nothing is
112
+ # listening on — that surprises users who run drydock
113
+ # without knowing they need to start a model server first.
114
+ rprint(
115
+ "[yellow]No local LLM server detected on the usual ports "
116
+ "(llama.cpp:8000/8080, Ollama:11434, LM Studio:1234).[/]\n"
117
+ " Launching setup so you can point drydock at your "
118
+ "model server."
119
+ )
120
+ try:
121
+ from drydock.setup.onboarding import run_onboarding
122
+ run_onboarding()
123
+ except SystemExit:
124
+ raise # onboarding cancelled — let the exit propagate
125
+ except Exception as e:
126
+ # Onboarding failed for some reason (e.g. no TTY in CI).
127
+ # Fall back to writing the defaults so drydock can at
128
+ # least try to start, and tell the user what to fix.
129
+ logger.debug("onboarding failed: %s", e)
130
+ try:
131
+ config_file.parent.mkdir(parents=True, exist_ok=True)
132
+ default = DrydockConfig.create_default()
133
+ with config_file.open("wb") as f:
134
+ tomli_w.dump(default, f)
107
135
  rprint(
108
- "[yellow]No local LLM server detected.[/]\n"
109
- " Defaulting to [cyan]llama.cpp at "
110
- "http://127.0.0.1:8000/v1[/] (OpenAI-compatible).\n"
111
- " Start a server on that port, run "
112
- "[cyan]drydock --setup[/], or edit "
113
- f"[cyan]{config_file}[/] to use a different URL."
136
+ f"[yellow]Setup failed ({e}). Wrote default config "
137
+ f"pointing at http://127.0.0.1:8000/v1.[/]\n"
138
+ f" Edit [cyan]{config_file}[/] or run "
139
+ "[cyan]drydock --setup[/] to fix."
114
140
  )
115
- except Exception as e: # detection must never break first launch
116
- logger.debug("local-LLM detection failed: %s", e)
117
- with config_file.open("wb") as f:
118
- tomli_w.dump(default, f)
119
- except Exception as e:
120
- rprint(f"[yellow]Could not create default config file: {e}[/]")
141
+ except Exception as ee:
142
+ rprint(f"[yellow]Could not create default config file: {ee}[/]")
121
143
 
122
144
  history_file = HISTORY_FILE.path
123
145
  if not history_file.exists():
@@ -868,6 +868,50 @@ class AgentLoop:
868
868
  or "400 bad request" in error_str.lower()
869
869
  or "status: 400" in error_str.lower()):
870
870
  # Context limit or malformed request — aggressive recovery
871
+ # Step 0 (added 2026-05-09): if the error looks like a
872
+ # malformed tool call (most common 400 cause that ISN'T
873
+ # context-overflow), drop the offending assistant
874
+ # message + its orphaned tool-result follow-ups so the
875
+ # retry doesn't re-send the same bad payload. Without
876
+ # this, drydock would re-send the same broken
877
+ # tool_call N times until MAX_API_ERRORS gave up,
878
+ # leaving the user with a sticky banner that only
879
+ # /clear or session-restart could clear.
880
+ dropped_bad_tool_call = False
881
+ bad_call_indicators = (
882
+ "tool_call", "tool call", "function call",
883
+ "function.arguments", "arguments",
884
+ "invalid json", "json decode", "schema",
885
+ "validation error", "tool_use", "function name",
886
+ )
887
+ if any(ind in error_str.lower() for ind in bad_call_indicators):
888
+ try:
889
+ # Walk backward to the most recent assistant
890
+ # message with tool_calls — that's the payload
891
+ # vLLM rejected.
892
+ bad_idx = None
893
+ for i in range(len(self.messages) - 1, -1, -1):
894
+ m = self.messages[i]
895
+ if m.role == Role.assistant and getattr(m, "tool_calls", None):
896
+ bad_idx = i
897
+ break
898
+ if bad_idx is not None:
899
+ # Drop the bad assistant message PLUS any
900
+ # tool-role messages that followed it (they
901
+ # reference tool_call_ids that no longer
902
+ # exist; sending them alone is also a 400).
903
+ new_msgs = list(self.messages[:bad_idx])
904
+ self.messages.reset(new_msgs)
905
+ dropped_bad_tool_call = True
906
+ logger.info(
907
+ "Auto-recovery: dropped bad tool-call "
908
+ "message (idx=%d) and %d follow-ups",
909
+ bad_idx, len(self.messages) - bad_idx
910
+ if hasattr(self, "messages") else 0,
911
+ )
912
+ except Exception as drop_err:
913
+ logger.debug("bad-tool-call drop failed: %s", drop_err)
914
+
871
915
  try:
872
916
  # First try: truncate old messages
873
917
  for i, msg in enumerate(self.messages):
@@ -897,7 +941,17 @@ class AgentLoop:
897
941
  logger.info("Emergency reset: kept first user + last 5 messages")
898
942
  except Exception:
899
943
  pass
900
- error_text = "Context compacted due to API error. Continue with your task."
944
+ if dropped_bad_tool_call:
945
+ error_text = (
946
+ "Your last tool call was rejected by the "
947
+ "server (likely malformed arguments). "
948
+ "Try a simpler form, or use a different tool."
949
+ )
950
+ else:
951
+ error_text = (
952
+ "Context compacted due to API error. "
953
+ "Continue with your task."
954
+ )
901
955
  else:
902
956
  error_text = f"API error occurred: {e}. Please continue with your task."
903
957
  self._inject_system_note(error_text)
@@ -1025,7 +1079,8 @@ class AgentLoop:
1025
1079
  if (assistant_msg.role == Role.assistant
1026
1080
  and assistant_msg.tool_calls):
1027
1081
  prev_tool_name = assistant_msg.tool_calls[-1].function.name if assistant_msg.tool_calls[-1].function else None
1028
- _readonly_tools = {"read_file", "grep", "glob", "ls", "pwd"}
1082
+ _readonly_tools = {"read_file", "grep", "glob", "ls", "pwd",
1083
+ "ralph_repo_index", "retrieve", "search_files"}
1029
1084
  _write_tools = {"write_file", "search_replace"}
1030
1085
  _prev_was_read = prev_tool_name in _readonly_tools
1031
1086
  _prev_was_write = prev_tool_name in _write_tools
@@ -2822,17 +2877,22 @@ class AgentLoop:
2822
2877
  ):
2823
2878
  return "FORCE_STOP"
2824
2879
 
2825
- # Check 1a: Same TOOL NAME repeated ≥8 consecutively, regardless
2826
- # of args. Catches the "write_file with missing/corrupted args 36
2827
- # times in a row" pathology where each sig differs (path is
2828
- # missing or garbled differently each call) but the model is
2829
- # clearly stuck hammering the same tool.
2880
+ # Check 1a: Same TOOL NAME repeated consecutively, regardless of args.
2881
+ # Catches the "write_file with missing/corrupted args 36 times in a row"
2882
+ # pathology where each sig differs but the model is clearly stuck.
2883
+ # Threshold is lower for exploration/indexing tools (ralph_repo_index,
2884
+ # read_file, glob, grep) that should never need 4+ consecutive calls —
2885
+ # each call after the first is a stall-recovery loop, not progress.
2886
+ # Write/shell tools keep the higher threshold (8) since they legitimately
2887
+ # appear many times in sequence when building multi-file projects.
2830
2888
  # Record a hot-combo on the stuck tool with an empty-path marker
2831
2889
  # so the per-tool mute in _chat will remove it for 1 turn.
2832
- if len(tool_names) >= 8:
2833
- last8 = tool_names[-8:]
2834
- if all(n == last8[-1] for n in last8):
2835
- self._hot_tool_path = (last8[-1], "<stuck>")
2890
+ _productive_tools = {"write_file", "search_replace", "bash", "run_command"}
2891
+ _check_1a_threshold = 8 if (tool_names and tool_names[-1] in _productive_tools) else 4
2892
+ if len(tool_names) >= _check_1a_threshold:
2893
+ last_n = tool_names[-_check_1a_threshold:]
2894
+ if all(n == last_n[-1] for n in last_n):
2895
+ self._hot_tool_path = (last_n[-1], "<stuck>")
2836
2896
  return "FORCE_STOP"
2837
2897
 
2838
2898
  # Check 1c: High recent-error fraction. If ≥6 of last 10 tool
@@ -301,11 +301,39 @@ DEFAULT_MODELS = [
301
301
  output_price=0.3,
302
302
  ),
303
303
  ModelConfig(
304
- name="devstral",
304
+ # Default local model is Gemma 4 — the recommended setup per
305
+ # CLAUDE.md (`start_gemma4.sh`). The `name` here is the model id
306
+ # the OpenAI-compatible server reports; for `start_gemma4.sh` +
307
+ # vLLM that's literally "gemma4". The local_detect probe will
308
+ # overwrite this at first launch with whatever the running
309
+ # server actually reports, so a user running a different
310
+ # local model (e.g. llama-3, mistral-small) gets matched up
311
+ # automatically.
312
+ name="gemma4",
305
313
  provider="llamacpp",
306
314
  alias="local",
307
315
  input_price=0.0,
308
316
  output_price=0.0,
317
+ # Gemma 4 anti-loop sampling recipe (see CLAUDE.md). Temperature
318
+ # MUST be 1.0 — lower values reinforce loops on quantized GGUF.
319
+ # The other knobs prevent the model from getting stuck on
320
+ # repeated tokens.
321
+ temperature=1.0,
322
+ # llama-server article recipe is `-c 32768`. Match it so
323
+ # auto_compact_threshold gets clamped to 28K (32K - 4K headroom)
324
+ # and the server doesn't return empty/garbage on context overflow.
325
+ context_window=32_768,
326
+ auto_compact_threshold=28_000,
327
+ # llama.cpp uses `repeat_penalty` (its native knob), not the
328
+ # OpenAI-style `frequency_penalty`. `temperature=1.0` is the
329
+ # top-level field above; the other three sampling params live
330
+ # here and get forwarded as extra_sampling to the server.
331
+ extra_params={
332
+ "top_k": 40,
333
+ "top_p": 0.95,
334
+ "repeat_penalty": 1.1,
335
+ "max_tokens": 2048,
336
+ },
309
337
  ),
310
338
  ]
311
339
 
@@ -140,6 +140,8 @@ def patch_config_for_local(
140
140
  extra = model.setdefault("extra_params", {})
141
141
  extra.setdefault("top_k", 40)
142
142
  extra.setdefault("top_p", 0.95)
143
- extra.setdefault("frequency_penalty", 1.1)
143
+ # llama.cpp's native repetition knob, not the
144
+ # OpenAI-style frequency_penalty.
145
+ extra.setdefault("repeat_penalty", 1.1)
144
146
  extra.setdefault("max_tokens", 2048)
145
147
  break
@@ -72,6 +72,7 @@ def migrate_user_config(config_file: Path) -> None:
72
72
  return
73
73
 
74
74
  added: list[str] = []
75
+ fixed: list[str] = []
75
76
  models = data.get("models")
76
77
  if isinstance(models, list):
77
78
  for model in models:
@@ -86,8 +87,17 @@ def migrate_user_config(config_file: Path) -> None:
86
87
  window = model.get("context_window") or _default_window_for(provider)
87
88
  model["auto_compact_threshold"] = _default_compact_threshold_for(window)
88
89
  added.append(f"models.{label}.auto_compact_threshold")
89
-
90
- if not added:
90
+ # llamacpp models written by v2.8.3–v2.8.5 used the
91
+ # OpenAI-style `frequency_penalty`. llama.cpp's actual
92
+ # repetition knob is `repeat_penalty` — rename it so the
93
+ # server accepts the value instead of silently ignoring it.
94
+ if "llamacpp" in provider.lower():
95
+ extra = model.get("extra_params")
96
+ if isinstance(extra, dict) and "frequency_penalty" in extra and "repeat_penalty" not in extra:
97
+ extra["repeat_penalty"] = extra.pop("frequency_penalty")
98
+ fixed.append(f"models.{label}.extra_params: frequency_penalty → repeat_penalty")
99
+
100
+ if not added and not fixed:
91
101
  return
92
102
 
93
103
  try:
@@ -97,8 +107,9 @@ def migrate_user_config(config_file: Path) -> None:
97
107
  logger.warning("config migration: cannot write %s: %s", config_file, e)
98
108
  return
99
109
 
110
+ changes = added + fixed
100
111
  rprint(
101
- f"[cyan]Drydock config migrated: added {len(added)} new "
102
- f"key(s) to {config_file}[/]\n "
103
- + "\n ".join(added)
112
+ f"[cyan]Drydock config migrated: {len(changes)} change(s) to "
113
+ f"{config_file}[/]\n "
114
+ + "\n ".join(changes)
104
115
  )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drydock-cli"
3
- version = "2.8.5"
3
+ version = "2.8.6"
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"
@@ -26,7 +26,14 @@ import urllib.request
26
26
 
27
27
  BACKENDS = [
28
28
  "http://localhost:8000",
29
- "http://192.168.50.21:8000",
29
+ # 192.168.50.21:8000 (romulus) PAUSED 2026-05-09 — its llama.cpp
30
+ # build reports `b1-e77056f` which is well below the b3000+ that
31
+ # the article-recommended Gemma 4 inference fixes shipped in. We
32
+ # suspect intermittent jumbled-text output (random character
33
+ # insertions like "contaiens"/"folloiwng") originates from this
34
+ # backend. Re-add this line and rebuild romulus once it's on a
35
+ # current llama.cpp build (b9000+ to match remus's docker image).
36
+ # "http://192.168.50.21:8000",
30
37
  # 192.168.50.19:8080 (Jetson) was probed for inclusion 2026-05-05
31
38
  # but its /v1/chat/completions endpoint times out after 90s with
32
39
  # no response (only /v1/models returns, and in Ollama-style schema
@@ -1,5 +1,159 @@
1
1
  # Drydock Trip Log
2
2
 
3
+ ## 2026-05-09 04:34 UTC tick
4
+ - Stress: 907/1658; PID 3875067 alive (9h elapsed), done=23, skip=77, writes=6 since step 807 resume; run is progressing (steps 904-907 just completed in the last few minutes, step 907 got +1 write); SKIP rate ~77% consistent with known approval-modal blocking in "Test:" prompt range (tui_skip_root_cause.md)
5
+ - Write rate: 6 file writes since restart (~1 per 15 steps in this range); test-style prompts ("Test: idempotency/rollback/golden/fuzz") produce fewer writes than build prompts
6
+ - Admiral last 30 min: harness:thinking_stall x178 (dominant, all addressed by v2.8.0–v2.8.5), hallucinated_name x14, bash_generic x6, heredoc_loop x2
7
+ - vLLM 400s: 0; balancer PID 3944578 on :8001 healthy (gemma4 forwarding cleanly); romulus backend paused (llama.cpp too old, 820a557)
8
+ - GH issues: 0 open
9
+ - Dispatch queue: harness=73842, retrieval=74 (0 actionable, all within 7-day window)
10
+ - retrieval-drain: 0 projects ingested
11
+ - Action this tick: no fix committed — system healthy; initial confusion about CDT vs UTC timestamps on ls output (23:33 CDT = 04:33 UTC, harness is current); all top dispatch patterns already addressed by v2.8.0–v2.8.5; no new actionable bugs found
12
+
13
+ ## 2026-05-09 04:03 UTC tick
14
+ - Stress: 899/1658, PID 3875067 alive (8.5h elapsed on this run); done=18, skip=73, recycle=37 since step 807 resume — 80% SKIP rate is worse than the known 33% baseline (project_tui_skip_root_cause.md). Prompts in this range are "API: SSE/JSON-RPC/gRPC/WebSocket" which may trigger approval modals or port-binding orphan processes that disrupt harness input. Run IS making forward progress (idx 807→899). Write rate: low; test-style prompts.
15
+ - vLLM 400s: 0 in last 30m; balancer PID 3944578 healthy on :8001 (llama.cpp backend at :8000, romulus paused); gemma4 container Up 15 days (cosmetic "unhealthy" Docker health check — serves OK).
16
+ - GH issues: 0 open.
17
+ - Dispatch queue: harness=73613 (dominated by thinking_stall 49K + bash_generic 12K; all patterns addressed by recent commits within 24h — 2cfa973, aeae8bb, 7696a55, 488dcce); retrieval=74 (0 actionable, all within 7-day window).
18
+ - retrieval-drain: 0 projects ingested.
19
+ - Action this tick: no fix committed — thinking_stall addressed by 4 commits this cycle; bash_generic confidence=0.6 with admiral already nudging; skip rate elevated but root cause is known harness/modal issue, not a drydock source bug fixable this tick.
20
+
21
+ ## 2026-05-09 03:30 UTC tick
22
+ - Stress: 895/1658, PID 3875067 alive (8h elapsed); SKIP rate ~78% (69 SKIPs / 88 steps from resume point 807); 0 timeouts. Skip cluster at steps 880–894 (15 consecutive SKIPs) self-resolved after TUI recycling; step 895 accepted and actively processing. Write rate: 0 writes in current session window (prompts are test/query style, not write-file style).
23
+ - vLLM 400s: 0; balancer PID 3944578 healthy on :8001; gemma4 container Up 3+ days (cosmetic unhealthy).
24
+ - GH issues: 0 open.
25
+ - Dispatch queue: harness=73380 (all thinking_stall / bash_generic, all addressed by v2.8.x); retrieval=74 (0 actionable, all within 7-day window); steering: none.
26
+ - retrieval-drain: 0 projects ingested.
27
+ - Action this tick: no fix committed — system healthy, skip cluster self-resolved, no new unaddressed patterns. Noted: 403_tool_agent appears in both trusted and untrusted lists in trusted_folders.toml (trusted wins at runtime, not causing active harm).
28
+
29
+ ## 2026-05-09 03:01 UTC tick
30
+ - Stress: step ~879+/1658; PID 3875067 alive (7h30m elapsed), 48 active session files; stress_shakedown.py running at step 807+ resumed
31
+ - Write rate: per prior tick ~1 DONE/23 min; approval-modal skip cluster still the dominant failure mode
32
+ - Admiral last 30 min: harness:thinking_stall dominant (48742 cumulative), harness:loop:bash_generic (12008), harness:tool:hallucinated_name (5721) — all addressed by v2.8.x commits
33
+ - vLLM 400s: 0; balancer PID 3944578 responsive on :8001 (gemma4 model only, romulus paused)
34
+ - GH issues: 0 open
35
+ - Dispatch queue: harness=72900+, retrieval=74 (0 actionable, all within 7-day window)
36
+ - retrieval-drain: 0 projects ingested
37
+ - Action this tick: no fix committed — all top patterns addressed by v2.8.0–v2.8.5; system healthy
38
+
39
+ ## 2026-05-09 02:03 UTC tick
40
+ - Stress: 880/1658; PID 3875067 alive (6.5h elapsed since 19:30 UTC restart); done=17, skip=54, recycle=27 — all SKIPs from approval-modal blocking (known issue, tui_skip_root_cause.md)
41
+ - Write rate: ~1 DONE per 23 min; stress watcher detected skip-cluster at 01:48 UTC (24 SKIPs in 28 prompts), actuated TUI recycle via SIGUSR1 at 01:54 UTC; new TUI child 3950083 alive, currently on retry 1 for step 880
42
+ - Admiral last 30 min: stress-alert skip-cluster + retry-spike (01:48/01:54 UTC), tui-recycle-requested fired; AdmiralWorker bootstrapping repeatedly (normal — director restarts between active sessions)
43
+ - vLLM 400s: 0; balancer PID 3873081 on :8001 healthy (gemma4 serving, 0 errors); romulus backend remains commented out (llama.cpp too old)
44
+ - GH issues: 0 open
45
+ - Dispatch queue: harness=72657, retrieval=74 (0 actionable, all within 7-day window); no steering queue
46
+ - retrieval-drain: 0 projects ingested (all 74 already ingested)
47
+ - Action this tick: no fix committed — all top dispatch patterns (thinking_stall, hallucinated_name, search_replace:not_found_loop, bash_generic, heredoc_loop) addressed by v2.8.0–v2.8.5 commits in last 24h; stress watcher self-actuating on skip clusters; system otherwise healthy
48
+
49
+ ## 2026-05-09 01:31 UTC tick
50
+ - Stress: 875/1658 (PID 3875067, running from 19:31 UTC restart); 0 PASSes since restart — pure SKIP cascade from approval-modal blocking (known issue, tui_skip_root_cause.md)
51
+ - Write rate: 0% since restart (all TUI-did-not-accept retries)
52
+ - Admiral last 30 min: harness:thinking_stall dominant (950 fires in last 2h, all source=canned, addressed by v2.8.3–v2.8.5); hallucinated_name=96, search_replace:not_found_loop=38, bash_generic=32, heredoc_loop=24 — all addressed by prior commits
53
+ - vLLM 400s: 0; balancer PID 3873081 on :8001 healthy; gemma4 container up and serving
54
+ - GH issues: 0 open
55
+ - Dispatch queue: harness=72406, retrieval=74 (0 actionable, all within 7-day window); no steering queue
56
+ - retrieval-drain: 0 projects ingested
57
+ - Action this tick: no fix committed — all top dispatch patterns (thinking_stall, hallucinated_name, search_replace:not_found_loop, bash_generic, heredoc_loop) addressed by commits in v2.8.3–v2.8.5; stress run continues in approval-modal SKIP cascade (known, not a drydock code bug); system healthy
58
+
59
+ ## 2026-05-09 00:05 UTC tick
60
+ - Stress: step 807+/1658 (PID 3875067, running 4h34m), harness alive, latest session log at 290+ steps
61
+ - Write rate: active (stress log shows 13K+ step lines on prior session)
62
+ - Admiral last 30 min: thinking_stall dominant (47422 total in queue, source=canned ralph_repo_index loop firing 7+ times per session)
63
+ - vLLM 400s: 0
64
+ - GH issues: 0 open
65
+ - Dispatch queue: harness=71567 total (thinking_stall=47422, bash_generic=11954, hallucinated_name=5577, sr_not_found=4658, heredoc=1492), retrieval=74 (all already ingested)
66
+ - Action this tick: committed fix aeae8bb — lowered Check 1a consecutive-same-tool-name FORCE_STOP threshold from 8 to 4 for exploration tools (ralph_repo_index, read_file, glob, grep), kept at 8 for write_file/search_replace/bash. Addresses harness:thinking_stall pattern where ralph_repo_index stall-recovery looped 7+ times (~7 minutes wasted) before old threshold fired. Auto-release will ship at next 0/6/12/18 CDT tick.
67
+
68
+ ## 2026-05-08 23:30 UTC tick
69
+ - Stress: ~840+/1658 (advancing), PID 3875067 alive (9h from step 807); latest session session_20260508_231646_8f2bd4d7 at 63 messages, actively processing "API: SSE client" prompt — normal progress
70
+ - Write rate: active (writes + tool calls visible in session log, no stuck state)
71
+ - Admiral last 30 min: 0 admiral review fires; dispatch queue patterns unchanged from prior tick — thinking_stall (47169), bash_generic (11948), hallucinated_name (5553), search_replace:not_found (4646), all already addressed in v2.8.3–v2.8.5
72
+ - vLLM 400s: 0; gemma4 docker "unhealthy" (stale health probe) but serving cleanly; balancer on :8001 responsive
73
+ - GH issues: 0 open
74
+ - Dispatch queue: harness=71266 (all top patterns addressed), retrieval=74 (0 actionable, all within 7-day window), steering=N/A
75
+ - retrieval-drain: 0 projects ingested
76
+ - Action this tick: no fix committed — all top dispatch patterns covered by recent releases; stress run progressing; system healthy
77
+
78
+ ## 2026-05-08 23:02 UTC tick
79
+ - Stress: 825+/1658 (advancing), PID 3875067 alive (3h 29m elapsed from step 807); latest session session_20260508_225328_d00c4f87 at 79 messages, actively writing gRPC client-streaming files — progressing normally
80
+ - Write rate: active (tool writes visible in session log, no stuck state)
81
+ - Admiral last 30 min: no new harness log since 18:00 UTC cron; dispatch queue patterns all addressed (thinking_stall→v2.8.5, bash_generic→a41f454, hallucinated_name→bf9f0e2, search_replace:not_found→444e4a5, heredoc_loop→3215b3f, escape_loop→ee8936e, dedup_attempted→74a5ae3, tool_error_raised→9bdd8a3)
82
+ - vLLM 400s: 0; llamacpp-gemma4 Up 3 days (unhealthy status but serving cleanly on :8001 via balancer PID 3873081)
83
+ - GH issues: 0 open
84
+ - Dispatch queue: harness=70993 (all patterns addressed), retrieval=74 (0 actionable, all within 7-day window), steering=N/A
85
+ - retrieval-drain: 0 projects ingested
86
+ - Action this tick: no fix committed — all top dispatch patterns (thinking_stall, bash_generic, hallucinated_name, search_replace:not_found_loop, heredoc_loop) already addressed in v2.8.3-v2.8.5 commits from today; stress run advancing normally on gRPC prompts; system healthy
87
+
88
+ ## 2026-05-08 22:33 UTC tick
89
+ - Stress: 844/1658 (in progress), PID 3875067 alive; last babysitter tick 22:00 UTC showed done=11 skip=19 recycle=9 from step 807 restart; active on "API: GraphQL mutation"
90
+ - Write rate: 37% (11 done / 30 total steps since restart); SKIP cascade continues on API-server prompts matching known approval-modal blocking pattern
91
+ - Admiral last 30 min: harness:thinking_stall firing after read_file/bash/write_file/exit_plan_mode (all variants); inline stall retry working (stall_debug confirms has_tool_calls=True throughout); 3 admiral review ticks in last 30 min
92
+ - vLLM 400s: 0; balancer PID 3873081 on :8001 healthy; gemma4 docker responding on :8000
93
+ - GH issues: 0 open
94
+ - Dispatch queue: harness=70714 (46713 thinking_stall, 11936 bash_generic, 5505 hallucinated_name, 4622 search_replace:not_found_loop, 1474 heredoc_loop, 464 other), retrieval=74 (0 actionable), steering=N/A
95
+ - retrieval-drain: 0 projects ingested (74 entries, all within 7-day re-ingest window)
96
+ - Action this tick: no fix committed. All queue patterns covered: thinking_stall → v2.8.5, heredoc_loop → v2.8.3, hallucinated_name → v2.8.5; bash_generic FORCE_STOP already active in agent_loop.py (removes bash for 1 turn on 3x repeat); no new actionable drydock bugs found.
97
+
98
+ ## 2026-05-08 22:09 UTC tick
99
+ - Stress: 839/1658, PID 3875067 alive (resumed from step 807); ~50% SKIP rate on API-server prompts (known approval-modal issue, not a code bug)
100
+ - Write rate: mixed — 9 done vs 20 SKIP in last 30 steps; skip clusters on "API: REST GET/POST endpoint" prompts
101
+ - Admiral last 30 min: harness:thinking_stall firing on bash/write_file/exit_plan_mode/ralph_repo_index stalls; all handled by v2.8.5 FORCE_STOP mechanism
102
+ - vLLM 400s: 0; balancer on :8001 healthy (PID 3873081); llamacpp-gemma4 Up 3+ days
103
+ - GH issues: 0 open
104
+ - Dispatch queue: harness=70430 (46480 thinking_stall, 11930 bash_generic, 5478 hallucinated_name, 4610 search_replace:not_found_loop, 1468 heredoc_loop, 470 other), retrieval=74 (0 actionable — all already ingested), steering=N/A
105
+ - retrieval-drain: 0 projects ingested (74 entries, all within 7-day re-ingest window)
106
+ - Action this tick: no fix committed. All dispatch queue patterns are either (a) already addressed by commits in last 24h (thinking_stall → v2.8.5, heredoc_loop → v2.8.3, hallucinated_name → v2.8.5) or (b) stale re-classifications of same session events from 09:33 UTC (bash_generic, search_replace:not_found_loop). No new actionable drydock bugs found.
107
+
108
+ ## 2026-05-08 19:02 UTC tick
109
+ - Stress: 804/1658, PID 3852269 alive (restarted 17:33 UTC after old PID died at step 788)
110
+ - Write rate: done=7, skip=10 in first 1.5h of new run; skip rate ~54% consistent with prior run at same step range (API-server prompts orphan ports, triggers recycle)
111
+ - Admiral last 30 min: harness:thinking_stall dominant; all queue evidence predates v2.8.5 fix
112
+ - vLLM 400s: 0 (docker "unhealthy" flag is uptime label, not error state)
113
+ - GH issues: 0 open
114
+ - Dispatch queue: harness=68535 (all harness:thinking_stall, pre-fix), retrieval=74 (0 actionable — all already ingested), steering=0
115
+ - Action this tick: no fix committed — system healthy, recent fixes (7696a55/488dcce in v2.8.5) cover the queued pattern, no new actionable bugs found
116
+
117
+ ## 2026-05-08 18:40 UTC tick
118
+ - Stress: 787/1658, PID 3852269 alive, active session (session_20260508_183019, 45 msgs)
119
+ - Write rate: unchanged from prior tick; stress running on tool_agent prompts
120
+ - Admiral last 30 min: harness:thinking_stall dominant (addressed by v2.8.5 commits 7696a55 + 488dcce today); no new urgent patterns
121
+ - vLLM 400s: 0 in last 30min; balancer on :8001 PID 3837273 healthy; vLLM :8000 responding
122
+ - GH issues: 0 open
123
+ - Dispatch queue: harness=68226 (44689 thinking_stall, 11888 bash_generic, 5289 hallucinated_name, 4497 search_replace:not_found_loop), retrieval=74 (0 actionable), steering=0. Queue counts are inflated by classify_pulse re-classifying same events every 10min with no dedup.
124
+ - retrieval-drain: 0 projects ingested (all 74 entries already ingested)
125
+ - Action this tick: no fix committed. All infrastructure healthy. bash_generic (11888 entries) has existing 3-consecutive FORCE_STOP at agent_loop.py:2745; entries are stale/duplicate from repeated classify_pulse runs. thinking_stall already addressed in today's release. No new actionable pattern found.
126
+
127
+ ## 2026-05-08 18:17 UTC tick
128
+ - Stress: 787/1658, PID 3852269 alive, running tool_agent stress prompts (--resume-from-step 787)
129
+ - Write rate: ~11 prompts/hr prior to previous stall; harness restarted last tick
130
+ - Admiral last 30 min: thinking_stall=242, hallucinated_name=24, search_replace:not_found_loop=18, heredoc_loop=15, bash_generic=12 — thinking_stall still dominant despite v2.8.5 fixes (legitimate bash/read_file stalls are the unaddressed sub-pattern)
131
+ - vLLM 400s: balancer shows 400+502 errors (context overflow); vLLM API responds fine; Docker "unhealthy" is cosmetic
132
+ - GH issues: 0 open
133
+ - Dispatch queue: harness=67915 (44445 thinking_stall, 11878 bash_generic, 5262 hallucinated_name, 4479 search_replace:not_found_loop, 1387 heredoc_loop), retrieval=74 (0 actionable, all ingested), steering=0
134
+ - retrieval-drain: 0 projects ingested
135
+ - Action this tick: no fix committed. Investigated search_replace:not_found_loop (18 fires/30min) — source already embeds file head on "not found anywhere" at line 1073-1082; the remaining loop cases are when fuzzy_context fires instead, suppressing the head embed. Not trivially safe to fix without risk of breaking fuzzy path. No new GH issues, all infrastructure healthy.
136
+
137
+ ## 2026-05-08 17:34 UTC tick
138
+ - Stress: 788/1658 (was dead, restarted from step 787 by babysitter); new PID 3852269. Prior harness had been stuck since 12:32 UTC (5h) — drydock child PID 3849192 wedged in 400-error/compaction loop, session stuck at 101 msgs; balancer showed sustained 400 errors on both backends. Stress watcher alive but couldn't trigger recycle because harness was alive. Babysitter restarted on this tick at step 787.
139
+ - Write rate: ~11 prompts/hr prior to stall (done=419, skip=350, recycle=251 at death; prev babysitter tick idx=779)
140
+ - Admiral last 30 min: harness:thinking_stall dominant; all patterns covered by v2.8.5
141
+ - vLLM 400s: sustained (context overflow handled by emergency compaction); llamacpp-gemma4 functional; balancer PID 3837273 on :8001 OK
142
+ - GH issues: 0 open
143
+ - Dispatch queue: harness=67604, retrieval=74 (0 actionable, all ingested)
144
+ - retrieval-drain: 0 projects ingested
145
+ - Action this tick: stress harness restart (babysitter invoked manually after detecting dead PID). No code committed — no new actionable bugs found; all top dispatch patterns covered by v2.8.0–v2.8.5.
146
+
147
+ ## 2026-05-08 17:09 UTC tick
148
+ - Stress: 779/1658, PID 3209682 alive (started May 06), progressing on "API: JSON-RPC server"
149
+ - Write rate: n/a (log format unchanged)
150
+ - Admiral last 30 min: 0 vLLM JSONDecodeErrors; llamacpp-gemma4 Up 3+ days (unhealthy flag cosmetic, functional); balancer PID 3837273 on :8001 healthy
151
+ - vLLM 400s: 0
152
+ - GH issues: 0 open
153
+ - Dispatch queue: harness=67299 (43967 thinking_stall, 11854 bash_generic, 5214 hallucinated_name, 4443 search_replace:not_found_loop, 1357 heredoc_loop), retrieval=74 (0 new actionable), steering=N/A
154
+ - retrieval-drain: 0 projects ingested (all 74 already consumed)
155
+ - Action this tick: no fix committed. Investigated top 3 unaddressed patterns: (1) harness:thinking_stall — already addressed by today's 7696a55+488dcce; (2) harness:loop:bash_generic — hash-check fires at count≥3 in bash.py line 714, queue entries are detections not failures, pattern is well-handled; (3) harness:search_replace:not_found_loop — covered by 444e4a5. All major patterns have active fixes; system is healthy.
156
+
3
157
  ## 2026-05-08 16:35 UTC tick
4
158
  - Stress: 772/1658, PID 3209682 alive, progressing; 28% of last 25 sessions had at least 1 write, 1.44 avg writes/session; 51% SKIP rate driven by approval-modal input blocking (known issue per memory)
5
159
  - Write rate: 28% sessions with writes (last 25)
@@ -3388,3 +3542,84 @@ restarted, cron self-match bug fixed in this same session).
3388
3542
  - GH issues: 0 open
3389
3543
  - Dispatch queue: harness=66668 (all harness:thinking_stall), retrieval=74 (0 actionable), steering=0
3390
3544
  - Action this tick: committed fix — lower hallucinated-tool FORCE_STOP threshold from 3 to 1 (addresses pattern harness:thinking_stall). Prior fix (488dcce) set threshold=3 but stress sessions only make 1-2 ghost calls before harness kills them, so FORCE_STOP never fired. New threshold=1 triggers immediately on first ralph_repo_index call. Auto_release will ship at next 0/6/12/18 CDT tick.
3545
+
3546
+ ## 2026-05-08 19:32 UTC tick
3547
+ - Stress: 808/1658; harness PID 3852269 was dead (died between 19:00–19:32 UTC); babysitter restarted at 19:30 → new PID 3875067 resuming from step 807
3548
+ - Write rate: n/a (new restart, too early to measure)
3549
+ - Admiral last 30 min: harness=82 thinking_stall (all source=canned/opus echoes from prior sessions, not fresh fires), 6 search_replace:not_found_loop (source=canned, already fixed in v2.7.40), 2 heredoc_loop (already fixed in v2.8.3)
3550
+ - vLLM 400s: 0 (llamacpp-gemma4 up 3 days, 0 errors in last 30m)
3551
+ - GH issues: 0 open
3552
+ - Dispatch queue: harness=68844, retrieval=74 (0 actionable, all 74 already ingested within 7-day window)
3553
+ - retrieval-drain: 0 projects ingested
3554
+ - Action this tick: no fix committed — restarted dead stress harness via babysitter; all top dispatch patterns (thinking_stall, search_replace:not_found_loop, heredoc_loop) already covered by v2.7.40–v2.8.5. System otherwise healthy.
3555
+
3556
+ ## 2026-05-08 20:01 UTC tick
3557
+ - Stress: PID 3875067 alive, step 808/1658, 29min elapsed (restarted from dead harness at 19:30 UTC via babysitter)
3558
+ - Write rate: n/a (too early after restart to measure)
3559
+ - Admiral last 30 min: harness:thinking_stall continues (empty_after_tool:write_file, exit_plan_mode — all source=canned echoes from prior sessions; not fresh bugs)
3560
+ - vLLM 400s: 0; balancer has transient 500s from context-overflow requests but serving gemma4 cleanly (~71 tok/s, /v1/chat/completions responsive)
3561
+ - GH issues: 0 open
3562
+ - Dispatch queue: harness=69163 (all harness:thinking_stall), retrieval=74 (0 actionable, all within 7-day window)
3563
+ - retrieval-drain: 0 projects ingested
3564
+ - Action this tick: no fix committed — all top patterns covered by v2.8.0–v2.8.5; thinking_stall handler already addresses empty_after_tool:write_file and exit_plan_mode cases; system healthy
3565
+
3566
+ ## 2026-05-08 20:30 UTC tick
3567
+ - Stress: PID 3875067 alive, step 820/1658 (+12 steps since 20:01 restart tick; ~0.4 steps/min)
3568
+ - Write rate: n/a (model is at 95+ messages in current session per stall debug, actively calling tools)
3569
+ - Admiral last 30 min: harness:thinking_stall (empty_after_tool:write_file and exit_plan_mode, source=canned) still classifying; stall debug confirms these are handled — all recent entries show content_len=0 has_tool_calls=True (active tool calls, not real stalls)
3570
+ - vLLM 400s: 0
3571
+ - GH issues: 0 open
3572
+ - Dispatch queue: harness=69490, retrieval=74 (0 actionable, all already ingested)
3573
+ - retrieval-drain: 0 projects ingested
3574
+ - Action this tick: no fix committed — investigated thinking_stall pattern in dispatch queue; confirmed that all recent entries in stall debug log are has_tool_calls=True (normal operation, not empty stalls); exit_plan_mode handled by inline stall handler but is a real registered tool (not in hallucinated path), generic "Continue working" nudge fires; no actionable code change needed this tick
3575
+
3576
+ ## 2026-05-08 21:32 UTC tick
3577
+ - Stress: 825/1658; PID 3875067 alive (1:31 elapsed), TUI child PID 3890954 alive (8.5 min), step 825 "API: WebSocket server" in progress
3578
+ - Write rate: 0% since restart — 12 consecutive SKIPs (steps 808-824) with 5 TUI recycles; no PASSes since babysitter restart at 19:30 UTC; mass-skip matches known approval-modal pattern (tui_skip_root_cause.md)
3579
+ - Admiral last 30 min: harness:thinking_stall fires continue (empty_after_tool:write_file, exit_plan_mode — source=canned, handled in v2.8.3–v2.8.5)
3580
+ - vLLM 400s: 0; llamacpp-gemma4 Up 3 days (unhealthy status but serving cleanly), balancer PID 3873081 on :8001 responsive
3581
+ - GH issues: 0 open
3582
+ - Dispatch queue: harness=69822, retrieval=74 (0 actionable, all 74 already ingested within 7-day window)
3583
+ - retrieval-drain: 0 projects ingested
3584
+ - Action this tick: no fix committed — investigated mass-SKIP cascade in stress run; root cause is approval-modal blocking chat input (known issue, tui_skip_root_cause.md); all top dispatch patterns already addressed in v2.8.3–v2.8.5; system otherwise healthy
3585
+
3586
+ ## 2026-05-08 21:31 UTC tick
3587
+ - Stress: ~808/1658, PID 3875067 alive (running 2h, resuming from step 807)
3588
+ - Write rate: 9 done / 13 skip in this run segment; skip pattern consistent with known approval-modal blocking (tui_skip_root_cause.md)
3589
+ - Admiral last 30 min: ~10 thinking_stall fires (empty_after_tool variants on write_file/exit_plan_mode)
3590
+ - vLLM 400s: 0; llamacpp-gemma4 Up 3 days, balancer PID 3873081 on :8001 healthy
3591
+ - GH issues: 0 open
3592
+ - Dispatch queue: harness=70131, retrieval=74 (0 actionable, all within 7-day re-ingest window)
3593
+ - retrieval-drain: 0 projects ingested
3594
+ - Action this tick: no fix committed — thinking_stall already addressed by v2.8.5 commits (7696a55, 488dcce) earlier today; SKIP cascade is known modal-blocking issue, no code fix warranted; system otherwise healthy
3595
+
3596
+ ## 2026-05-09 01:31 UTC tick
3597
+ - Stress: PID 3875067 alive, 5h30m elapsed since 19:31 UTC restart; step counter not visible in logs but harness confirmed running
3598
+ - Write rate: 0% since restart (pure SKIP, known approval-modal blocking issue — tui_skip_root_cause.md)
3599
+ - Admiral last 30 min: harness:thinking_stall dominant (all source=canned, already addressed by v2.8.3–v2.8.5)
3600
+ - vLLM 400s: 0; balancer PID 3873081 on :8001 healthy (gemma4 serving cleanly, ~71 tok/s)
3601
+ - GH issues: 0 open
3602
+ - Dispatch queue: harness=72149, retrieval=74 (0 actionable, all within 7-day window); no steering queue
3603
+ - retrieval-drain: 0 projects ingested (all 74 already ingested)
3604
+ - Pattern review: thinking_stall (47906), bash_generic (11968), hallucinated_name (5625), search_replace:not_found_loop (4682), heredoc_loop (1504) — all addressed by v2.8.0–v2.8.5; no new actionable patterns in queue
3605
+ - Action this tick: no fix committed — all top dispatch patterns addressed; system healthy
3606
+
3607
+ ## 2026-05-09 01:00 UTC tick
3608
+ - Stress: 865/1658 (PID 3875067, 5h elapsed since 19:31 UTC restart); 44 SKIPs, 0 PASSes — all TUI did-not-accept retries, consistent with known approval-modal blocking (tui_skip_root_cause.md)
3609
+ - Write rate: 0% since restart (pure SKIP run, no functional progress)
3610
+ - Admiral last 30 min: harness:thinking_stall dominant (empty_after_tool:ralph_repo_index source=canned, 5+ consecutive fires between 23:30-23:35 UTC)
3611
+ - vLLM 400s: 0; balancer PID 3873081 on :8001 healthy (gemma4 serving OK)
3612
+ - GH issues: 0 open
3613
+ - Dispatch queue: harness=71858, retrieval=74 (0 actionable, all within 7-day window)
3614
+ - retrieval-drain: 0 projects ingested
3615
+ - Action this tick: committed fix 2cfa973 — added ralph_repo_index/retrieve/search_files to _readonly_tools in stall handler so post-indexing stalls get targeted "stop re-reading, write something" nudge instead of generic "Continue working" canned message (addresses pattern harness:thinking_stall)
3616
+
3617
+ ## 2026-05-09 02:31 UTC tick
3618
+ - Stress: 879/1658; PID 3875067 alive (7h elapsed since 19:30 UTC restart); done=17, skip=54, recycle=27 — skip rate remains ~76%, consistent with known approval-modal blocking (tui_skip_root_cause.md)
3619
+ - Write rate: ~1 DONE per 27 min since restart
3620
+ - Admiral last 30 min: harness:thinking_stall dominant (174 in last 200 queue entries), hallucinated_name (16), bash_generic (8), heredoc_loop (2) — all addressed by v2.8.0–v2.8.5
3621
+ - vLLM 400s: 0; balancer PID responsive on :8001, gemma4 Up 3 days (unhealthy cosmetic); serving cleanly
3622
+ - GH issues: 0 open
3623
+ - Dispatch queue: harness=72901, retrieval=74 (0 actionable, all within 7-day window)
3624
+ - retrieval-drain: 0 projects ingested
3625
+ - Action this tick: committed 820a557 — pause romulus backend in llm_balancer.py (llama.cpp b1-e77056f, suspected source of jumbled-text insertions; re-add after romulus reaches b9000+)