drydock-cli 2.8.18__tar.gz → 2.8.20__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 (758) hide show
  1. drydock_cli-2.8.20/.auto_release.lock +1 -0
  2. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/PKG-INFO +79 -2
  3. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/README.md +78 -1
  4. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/SOVEREIGN_PRD.md +178 -0
  5. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/commands.py +7 -0
  6. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.py +149 -17
  7. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agent_loop.py +163 -9
  8. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/gemma4.md +14 -0
  9. drydock_cli-2.8.20/drydock/curiosity/__init__.py +40 -0
  10. drydock_cli-2.8.20/drydock/curiosity/__main__.py +183 -0
  11. drydock_cli-2.8.20/drydock/curiosity/gap_detector.py +128 -0
  12. drydock_cli-2.8.20/drydock/curiosity/item.py +58 -0
  13. drydock_cli-2.8.20/drydock/curiosity/queue.py +112 -0
  14. drydock_cli-2.8.20/drydock/curiosity/surprise.py +112 -0
  15. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/pyproject.toml +1 -1
  16. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/auto_release.sh +18 -4
  17. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/autonomous_review_prompt.md +9 -1
  18. drydock_cli-2.8.20/scripts/backfill_hle_curiosity.py +118 -0
  19. drydock_cli-2.8.20/scripts/curiosity_idle_cycle.sh +145 -0
  20. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/deploy_to_github.sh +1 -1
  21. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/hle_eval.py +42 -1
  22. drydock_cli-2.8.20/tests/test_curiosity.py +266 -0
  23. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_integration.py +12 -4
  24. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_loop_detection.py +200 -0
  25. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_issues.py +6 -1
  26. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/trip_log.md +227 -0
  27. drydock_cli-2.8.18/.auto_release.lock +0 -1
  28. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/CODEOWNERS +0 -0
  29. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  30. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  31. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/build-and-upload.yml +0 -0
  33. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/ci.yml +0 -0
  34. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/issue-labeler.yml +0 -0
  35. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.github/workflows/release.yml +0 -0
  36. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.gitignore +0 -0
  37. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.pre-commit-config.yaml +0 -0
  38. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.python-version +0 -0
  39. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.typos.toml +0 -0
  40. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/extensions.json +0 -0
  41. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/launch.json +0 -0
  42. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/.vscode/settings.json +0 -0
  43. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/AGENTS.md +0 -0
  44. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/Admiral.md +0 -0
  45. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CHANGELOG.md +0 -0
  46. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CLAUDE.md +0 -0
  47. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/CONTRIBUTING.md +0 -0
  48. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/DEEP_NOIR_PRD.md +0 -0
  49. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/DEPLOYMENT.md +0 -0
  50. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/HLE_PRD.md +0 -0
  51. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/JETSON_BENCH.md +0 -0
  52. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/LICENSE +0 -0
  53. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/MODEL_SHORTCOMINGS.md +0 -0
  54. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/NOTICE +0 -0
  55. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/TRIAGE_v1.md +0 -0
  56. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/action.yml +0 -0
  57. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/README.md +0 -0
  58. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results1.tsv +0 -0
  59. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results13.tsv +0 -0
  60. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results14.tsv +0 -0
  61. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results15.tsv +0 -0
  62. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results16.tsv +0 -0
  63. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results17.tsv +0 -0
  64. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results18.tsv +0 -0
  65. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results19.tsv +0 -0
  66. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results2.tsv +0 -0
  67. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results20.tsv +0 -0
  68. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results3.tsv +0 -0
  69. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results4.tsv +0 -0
  70. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results5.tsv +0 -0
  71. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results6.tsv +0 -0
  72. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results7.tsv +0 -0
  73. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results8.tsv +0 -0
  74. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results9.tsv +0 -0
  75. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/baseline_history/results_evolved_v1.tsv +0 -0
  76. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/LICENSE +0 -0
  77. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/extension.toml +0 -0
  78. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/distribution/zed/icons/mistral_vibe.svg +0 -0
  79. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/README.md +0 -0
  80. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/acp-setup.md +0 -0
  81. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/BASELINE_412.md +0 -0
  82. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/Drydock_rebrand.md +0 -0
  83. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  84. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  85. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  86. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/PRD.md +0 -0
  87. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/drydock_terms.md +0 -0
  88. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/archive/resume.md +0 -0
  89. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/docs/proxy-setup.md +0 -0
  90. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/__init__.py +0 -0
  91. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/__main__.py +0 -0
  92. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/__init__.py +0 -0
  93. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/acp_agent_loop.py +0 -0
  94. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/acp_logger.py +0 -0
  95. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/entrypoint.py +0 -0
  96. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/__init__.py +0 -0
  97. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/base.py +0 -0
  98. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/bash.py +0 -0
  99. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/read_file.py +0 -0
  100. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/search_replace.py +0 -0
  101. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/todo.py +0 -0
  102. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/write_file.py +0 -0
  103. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/tools/session_update.py +0 -0
  104. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/acp/utils.py +0 -0
  105. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/__init__.py +0 -0
  106. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/detectors.py +0 -0
  107. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/detectors_proposed.py +0 -0
  108. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/history.py +0 -0
  109. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/interventions.py +0 -0
  110. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/llm_analyzer.py +0 -0
  111. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/metrics.py +0 -0
  112. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/opus_escalator.py +0 -0
  113. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/persistence.py +0 -0
  114. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/policy.py +0 -0
  115. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/proposer.py +0 -0
  116. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/stager.py +0 -0
  117. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/task_classifier.py +0 -0
  118. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/tuning.py +0 -0
  119. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/validator.py +0 -0
  120. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/admiral/worker.py +0 -0
  121. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/__init__.py +0 -0
  122. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/__init__.py +0 -0
  123. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/base.py +0 -0
  124. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/path_completion.py +0 -0
  125. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/autocompletion/slash_command.py +0 -0
  126. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/cli.py +0 -0
  127. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/clipboard.py +0 -0
  128. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/entrypoint.py +0 -0
  129. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/fix_windows_path.py +0 -0
  130. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/history_manager.py +0 -0
  131. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  132. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  133. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  134. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/terminal_setup.py +0 -0
  135. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/__init__.py +0 -0
  136. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  137. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.tcss +0 -0
  138. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/external_editor.py +0 -0
  139. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  140. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  141. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  142. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  143. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  144. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  145. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  146. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  147. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  148. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  149. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  150. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  151. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  152. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  153. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  154. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  155. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  156. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  157. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  158. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  159. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  160. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  161. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  162. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  163. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  164. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  165. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  166. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  167. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  168. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  169. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  170. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  171. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  172. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  173. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  174. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  175. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  176. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history.py +0 -0
  177. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  178. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/state.py +0 -0
  179. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/__init__.py +0 -0
  180. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  181. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  182. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  183. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  184. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  185. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/update.py +0 -0
  186. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/cli/update_notifier/whats_new.py +0 -0
  187. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/__init__.py +0 -0
  188. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/__init__.py +0 -0
  189. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/manager.py +0 -0
  190. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/agents/models.py +0 -0
  191. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/__init__.py +0 -0
  192. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/crypto.py +0 -0
  193. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/auth/github.py +0 -0
  194. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/__init__.py +0 -0
  195. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/completers.py +0 -0
  196. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  197. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  198. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  199. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  200. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  201. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/fuzzy.py +0 -0
  202. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt.py +0 -0
  203. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  204. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/build_orchestrator.py +0 -0
  205. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/checkpoint.py +0 -0
  206. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/__init__.py +0 -0
  207. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/__main__.py +0 -0
  208. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/classifier.py +0 -0
  209. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/dispatcher.py +0 -0
  210. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/rules.py +0 -0
  211. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/classifier/signal.py +0 -0
  212. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/__init__.py +0 -0
  213. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/_dotenv.py +0 -0
  214. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/_settings.py +0 -0
  215. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/doctor.py +0 -0
  216. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/__init__.py +0 -0
  217. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  218. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_paths.py +0 -0
  219. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/local_detect.py +0 -0
  220. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/config/migrate.py +0 -0
  221. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/consultant.py +0 -0
  222. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/context_recovery.py +0 -0
  223. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/drydock_states.py +0 -0
  224. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/hooks.py +0 -0
  225. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/__init__.py +0 -0
  226. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/anthropic.py +0 -0
  227. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/base.py +0 -0
  228. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/factory.py +0 -0
  229. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/generic.py +0 -0
  230. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/mistral.py +0 -0
  231. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  232. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/backend/vertex.py +0 -0
  233. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/exceptions.py +0 -0
  234. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/format.py +0 -0
  235. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/message_utils.py +0 -0
  236. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/llm/types.py +0 -0
  237. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/logger.py +0 -0
  238. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/middleware.py +0 -0
  239. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/output_formatters.py +0 -0
  240. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/__init__.py +0 -0
  241. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/_drydock_home.py +0 -0
  242. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/_local_config_walk.py +0 -0
  243. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/paths/conventions.py +0 -0
  244. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/plan_session.py +0 -0
  245. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/plugins.py +0 -0
  246. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/programmatic.py +0 -0
  247. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/__init__.py +0 -0
  248. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/builder.md +0 -0
  249. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/cli.md +0 -0
  250. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/compact.md +0 -0
  251. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/dangerous_directory.md +0 -0
  252. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/diagnostic.md +0 -0
  253. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/explore.md +0 -0
  254. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/planner.md +0 -0
  255. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/project_context.md +0 -0
  256. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/prompts/tests.md +0 -0
  257. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/proxy_setup.py +0 -0
  258. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/agent_memory.py +0 -0
  259. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/checkpoints.py +0 -0
  260. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_loader.py +0 -0
  261. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_logger.py +0 -0
  262. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/session_migration.py +0 -0
  263. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session/state_file.py +0 -0
  264. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/session_checker.py +0 -0
  265. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/__init__.py +0 -0
  266. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/manager.py +0 -0
  267. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/models.py +0 -0
  268. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/skills/parser.py +0 -0
  269. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/slug.py +0 -0
  270. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/steering_hook.py +0 -0
  271. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/system_prompt.py +0 -0
  272. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/telemetry/__init__.py +0 -0
  273. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/telemetry/send.py +0 -0
  274. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/errors.py +0 -0
  275. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/git.py +0 -0
  276. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/nuage.py +0 -0
  277. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/teleport.py +0 -0
  278. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/teleport/types.py +0 -0
  279. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/base.py +0 -0
  280. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/_task_manager.py +0 -0
  281. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  282. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/bash.py +0 -0
  283. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/cron.py +0 -0
  284. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  285. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/glob_tool.py +0 -0
  286. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/grep.py +0 -0
  287. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  288. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/lsp.py +0 -0
  289. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  290. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  291. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/powershell.py +0 -0
  292. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  293. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  294. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  295. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  296. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  297. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  298. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  299. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  300. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  301. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  302. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  303. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  304. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  305. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  306. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  307. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task.md +0 -0
  308. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  309. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  310. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  311. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  312. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  313. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  314. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  315. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/read_file.py +0 -0
  316. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/retrieve.py +0 -0
  317. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/search_replace.py +0 -0
  318. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/task.py +0 -0
  319. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/todo.py +0 -0
  320. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/tool_search.py +0 -0
  321. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/webfetch.py +0 -0
  322. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/websearch.py +0 -0
  323. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/worktree.py +0 -0
  324. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/builtins/write_file.py +0 -0
  325. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/injection_guard.py +0 -0
  326. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/manager.py +0 -0
  327. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/__init__.py +0 -0
  328. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/registry.py +0 -0
  329. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp/tools.py +0 -0
  330. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/mcp_sampling.py +0 -0
  331. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/ui.py +0 -0
  332. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/tools/utils.py +0 -0
  333. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/trusted_folders.py +0 -0
  334. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/types.py +0 -0
  335. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/core/utils.py +0 -0
  336. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/__init__.py +0 -0
  337. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/__main__.py +0 -0
  338. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/code_indexer.py +0 -0
  339. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/retriever.py +0 -0
  340. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/storage.py +0 -0
  341. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/graphrag/text_indexer.py +0 -0
  342. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/__init__.py +0 -0
  343. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/base.py +0 -0
  344. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/onboarding.tcss +0 -0
  345. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/__init__.py +0 -0
  346. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/api_key.py +0 -0
  347. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/choice.py +0 -0
  348. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/local_model.py +0 -0
  349. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/welcome.py +0 -0
  350. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  351. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  352. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/__init__.py +0 -0
  353. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/api-design/SKILL.md +0 -0
  354. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/audit-tests/SKILL.md +0 -0
  355. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/batch/SKILL.md +0 -0
  356. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/commit-code/SKILL.md +0 -0
  357. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/context-summary/SKILL.md +0 -0
  358. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/create-presentation/SKILL.md +0 -0
  359. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/deep-research/SKILL.md +0 -0
  360. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/deploy/SKILL.md +0 -0
  361. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/diff-review/SKILL.md +0 -0
  362. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/doc-gen/SKILL.md +0 -0
  363. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/explain-code/SKILL.md +0 -0
  364. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/explore-code/SKILL.md +0 -0
  365. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/fix-issue/SKILL.md +0 -0
  366. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/git-ops/SKILL.md +0 -0
  367. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/init-project/SKILL.md +0 -0
  368. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/investigate/SKILL.md +0 -0
  369. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/loop/SKILL.md +0 -0
  370. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/migrate/SKILL.md +0 -0
  371. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/perf-analyze/SKILL.md +0 -0
  372. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/plan-impl/SKILL.md +0 -0
  373. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/pr-review/SKILL.md +0 -0
  374. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/refactor/SKILL.md +0 -0
  375. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/regex-help/SKILL.md +0 -0
  376. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/review/SKILL.md +0 -0
  377. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/security-review/SKILL.md +0 -0
  378. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/ship/SKILL.md +0 -0
  379. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/simplify/SKILL.md +0 -0
  380. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/strong-tests/SKILL.md +0 -0
  381. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/skills/test-verify/SKILL.md +0 -0
  382. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/__init__.py +0 -0
  383. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/__main__.py +0 -0
  384. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/applier.py +0 -0
  385. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/config.py +0 -0
  386. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/registry.py +0 -0
  387. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sandbox.py +0 -0
  388. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/__init__.py +0 -0
  389. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/header_parser.py +0 -0
  390. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/hooks.py +0 -0
  391. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/loader.py +0 -0
  392. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/sidecar/server.py +0 -0
  393. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/__init__.py +0 -0
  394. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/capture.py +0 -0
  395. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/compute_vector.py +0 -0
  396. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/train/extract_pairs.py +0 -0
  397. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/steering/vectors.py +0 -0
  398. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock/whats_new.md +0 -0
  399. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/drydock-acp.spec +0 -0
  400. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/flake.lock +0 -0
  401. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/flake.nix +0 -0
  402. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/outlook_draft_assistant.tar.gz +0 -0
  403. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/README.md +0 -0
  404. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/config_base.toml +0 -0
  405. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/config_best.toml +0 -0
  406. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/domain_spec.md +0 -0
  407. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/experimenter.py +0 -0
  408. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/kernel.py +0 -0
  409. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/mini_prd.md +0 -0
  410. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/mini_prompts.txt +0 -0
  411. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/proposer.py +0 -0
  412. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/research/results.tsv +0 -0
  413. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/README.md +0 -0
  414. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/admiral_probe.py +0 -0
  415. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/auto_test_loop.sh +0 -0
  416. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/monitor_test_battery.sh +0 -0
  417. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/overnight_agents_test.sh +0 -0
  418. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_bank.sh +0 -0
  419. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_full.sh +0 -0
  420. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/test_smoke.sh +0 -0
  421. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/archive/tui_test.py +0 -0
  422. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/audit_sampler.py +0 -0
  423. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/auto_generate_tests.py +0 -0
  424. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/autonomous_review.sh +0 -0
  425. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/backup.sh +0 -0
  426. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/bump_version.py +0 -0
  427. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/classify_pulse.sh +0 -0
  428. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/consume_retrieval_queue.py +0 -0
  429. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/fetch_arxiv_abstracts.py +0 -0
  430. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/gen_2000_prompts.py +0 -0
  431. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/hle_eval_seed.jsonl +0 -0
  432. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/llm_balancer.py +0 -0
  433. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/notify_release.py +0 -0
  434. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/perf_baseline_when_idle.sh +0 -0
  435. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/perf_sweep.py +0 -0
  436. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/poll_issues.sh +0 -0
  437. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/publish_to_pypi.sh +0 -0
  438. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/queue_top.py +0 -0
  439. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/ralph_loop.py +0 -0
  440. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/research_babysitter.sh +0 -0
  441. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown.py +0 -0
  442. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_interactive.py +0 -0
  443. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_suite.sh +0 -0
  444. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/shakedown_variance.sh +0 -0
  445. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/start_steering_sidecar.sh +0 -0
  446. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_babysitter.sh +0 -0
  447. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_50.txt +0 -0
  448. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_realuser.txt +0 -0
  449. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent.txt +0 -0
  450. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  451. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_shakedown.py +0 -0
  452. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_telegram_status.py +0 -0
  453. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/stress_watcher.py +0 -0
  454. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/telegram_bot.py +0 -0
  455. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/scripts/vllm_failover.sh +0 -0
  456. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/__init__.py +0 -0
  457. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/conftest.py +0 -0
  458. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_acp.py +0 -0
  459. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_agent_thought.py +0 -0
  460. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_bash.py +0 -0
  461. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_compact_session_updates.py +0 -0
  462. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_content.py +0 -0
  463. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_initialize.py +0 -0
  464. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_list_sessions.py +0 -0
  465. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_load_session.py +0 -0
  466. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_multi_session.py +0 -0
  467. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_new_session.py +0 -0
  468. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_proxy_setup_acp.py +0 -0
  469. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_read_file.py +0 -0
  470. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_search_replace.py +0 -0
  471. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_config_option.py +0 -0
  472. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_mode.py +0 -0
  473. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_set_model.py +0 -0
  474. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_tool_call_session_update.py +0 -0
  475. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_utils.py +0 -0
  476. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/acp/test_write_file.py +0 -0
  477. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_file_indexer.py +0 -0
  478. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_fuzzy.py +0 -0
  479. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  480. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  481. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completion_controller.py +0 -0
  482. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  483. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_slash_command_controller.py +0 -0
  484. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  485. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/__init__.py +0 -0
  486. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/__init__.py +0 -0
  487. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/fireworks.py +0 -0
  488. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/data/mistral.py +0 -0
  489. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_anthropic_adapter.py +0 -0
  490. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_backend.py +0 -0
  491. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  492. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_reasoning_adapter.py +0 -0
  493. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  494. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  495. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  496. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  497. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_bell_notifications.py +0 -0
  498. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_braille_renderer.py +0 -0
  499. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_clipboard.py +0 -0
  500. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_commands.py +0 -0
  501. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_copy_shortcuts.py +0 -0
  502. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_external_editor.py +0 -0
  503. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_no_markup_static.py +0 -0
  504. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_question_app.py +0 -0
  505. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_spinner.py +0 -0
  506. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_switching_mode.py +0 -0
  507. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  508. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  509. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_session_resume.py +0 -0
  510. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/test_ui_skill_dispatch.py +0 -0
  511. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/textual_ui/__init__.py +0 -0
  512. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/cli/textual_ui/test_session_picker.py +0 -0
  513. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/conftest.py +0 -0
  514. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_agents.py +0 -0
  515. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_auth_crypto.py +0 -0
  516. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_auth_github.py +0 -0
  517. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  518. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  519. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_load_dotenv.py +0 -0
  520. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_paths.py +0 -0
  521. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_config_resolution.py +0 -0
  522. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_file_logging.py +0 -0
  523. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_plan_session.py +0 -0
  524. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_proxy_setup.py +0 -0
  525. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_slug.py +0 -0
  526. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_telemetry_send.py +0 -0
  527. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_git.py +0 -0
  528. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_nuage.py +0 -0
  529. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_teleport_service.py +0 -0
  530. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_trusted_folders.py +0 -0
  531. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/core/test_utils.py +0 -0
  532. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/common.py +0 -0
  533. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/conftest.py +0 -0
  534. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/mock_server.py +0 -0
  535. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  536. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_streaming.py +0 -0
  537. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  538. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/fixtures/doc_qa_system_prd.md +0 -0
  539. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/__init__.py +0 -0
  540. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/mock_backend_factory.py +0 -0
  541. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/mock_entrypoint.py +0 -0
  542. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/mock/utils.py +0 -0
  543. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/onboarding/test_run_onboarding.py +0 -0
  544. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/onboarding/test_ui_onboarding.py +0 -0
  545. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_loader.py +0 -0
  546. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_logger.py +0 -0
  547. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/session/test_session_migration.py +0 -0
  548. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/conftest.py +0 -0
  549. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_manager.py +0 -0
  550. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_models.py +0 -0
  551. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/skills/test_parser.py +0 -0
  552. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  553. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  554. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  555. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  556. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  557. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  558. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  559. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  560. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  561. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  562. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  563. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  564. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  565. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  566. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  567. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  568. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  569. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  570. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  571. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  572. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  573. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  574. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  575. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  576. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  577. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  578. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  579. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  580. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  581. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  582. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  583. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  584. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  585. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  586. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  587. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  588. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  589. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  590. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  591. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  592. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  593. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  594. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  595. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  596. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  597. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  598. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  599. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  600. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  601. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  602. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  603. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  604. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  605. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  606. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  607. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  608. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  609. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  610. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  611. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  612. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/base_snapshot_test_app.py +0 -0
  613. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/conftest.py +0 -0
  614. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/snap_compare.py +0 -0
  615. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  616. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  617. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  618. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  619. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  620. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  621. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  622. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  623. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  624. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  625. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  626. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  627. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  628. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  629. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_backend.py +0 -0
  630. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_client.py +0 -0
  631. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/stubs/fake_tool.py +0 -0
  632. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral.py +0 -0
  633. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  634. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_intervention_outcome.py +0 -0
  635. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_phase3.py +0 -0
  636. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_proposed.py +0 -0
  637. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_session_id.py +0 -0
  638. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_admiral_struggle_dedup.py +0 -0
  639. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_auto_compact.py +0 -0
  640. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_backend.py +0 -0
  641. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_observer_streaming.py +0 -0
  642. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_stats.py +0 -0
  643. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_tasks.py +0 -0
  644. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agent_tool_call.py +0 -0
  645. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_agents.py +0 -0
  646. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_build.py +0 -0
  647. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_debug.py +0 -0
  648. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_multiagent.py +0 -0
  649. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_prd.py +0 -0
  650. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_prd_extended.py +0 -0
  651. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_tools.py +0 -0
  652. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_bank_update.py +0 -0
  653. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_build_projects.py +0 -0
  654. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_checkpoint.py +0 -0
  655. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_classifier.py +0 -0
  656. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_cli_programmatic_preload.py +0 -0
  657. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_config_migration.py +0 -0
  658. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_context_recovery.py +0 -0
  659. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_current_bugs.py +0 -0
  660. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_dispatcher.py +0 -0
  661. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_drydock_regression.py +0 -0
  662. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_drydock_tasks.py +0 -0
  663. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  664. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_full_regression.py +0 -0
  665. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_graphrag.py +0 -0
  666. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_graphrag_worked_examples.py +0 -0
  667. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_hallucinated_tool_suppression.py +0 -0
  668. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_history_manager.py +0 -0
  669. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_hle_typing.py +0 -0
  670. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_issue_fixes.py +0 -0
  671. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_local_detect.py +0 -0
  672. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_message_id.py +0 -0
  673. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_message_merging.py +0 -0
  674. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_middleware.py +0 -0
  675. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_multi_agent.py +0 -0
  676. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_read_file_not_found_listing.py +0 -0
  677. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_failures.py +0 -0
  678. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_real_workflow.py +0 -0
  679. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_reasoning_content.py +0 -0
  680. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_retrieval_consumer.py +0 -0
  681. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_retrieve_tool.py +0 -0
  682. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_search_replace_args_not_truncated.py +0 -0
  683. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_smoke.py +0 -0
  684. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering.py +0 -0
  685. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_capture.py +0 -0
  686. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_compute_vector.py +0 -0
  687. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_extract_pairs.py +0 -0
  688. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_hook.py +0 -0
  689. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_steering_sidecar_hooks.py +0 -0
  690. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_system_prompt.py +0 -0
  691. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_tagged_text.py +0 -0
  692. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_task_complete_nudge.py +0 -0
  693. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_tool_args.py +0 -0
  694. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncate_args_valid_json.py +0 -0
  695. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_arg_path_hint.py +0 -0
  696. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_search_replace_escalation.py +0 -0
  697. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_truncated_write_escalation.py +0 -0
  698. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_ui_external_editor.py +0 -0
  699. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_ui_input_history.py +0 -0
  700. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_user_issues.py +0 -0
  701. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_wall_of_text_rescue.py +0 -0
  702. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_workloads.py +0 -0
  703. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/test_write_file_missing_path.py +0 -0
  704. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/testbank_helpers.py +0 -0
  705. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_ask_user_question.py +0 -0
  706. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash.py +0 -0
  707. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  708. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_consec_empty_search.py +0 -0
  709. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  710. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  711. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  712. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  713. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  714. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  715. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  716. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_exit_plan_mode.py +0 -0
  717. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_grep.py +0 -0
  718. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  719. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_invoke_context.py +0 -0
  720. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  721. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_manager_get_tool_config.py +0 -0
  722. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_mcp.py +0 -0
  723. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_mcp_sampling.py +0 -0
  724. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  725. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  726. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_directory.py +0 -0
  727. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_read_file_limit_truncation.py +0 -0
  728. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_append_fallback.py +0 -0
  729. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_dir_path.py +0 -0
  730. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_empty_content.py +0 -0
  731. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_file_not_found.py +0 -0
  732. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  733. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_hard_stop.py +0 -0
  734. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_malformed_block.py +0 -0
  735. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  736. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_placeholder.py +0 -0
  737. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  738. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_task.py +0 -0
  739. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_ui_bash_execution.py +0 -0
  740. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_webfetch.py +0 -0
  741. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_websearch.py +0 -0
  742. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  743. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  744. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  745. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  746. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_do_update.py +0 -0
  747. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  748. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_github_update_gateway.py +0 -0
  749. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  750. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_ui_update_notification.py +0 -0
  751. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_update_use_case.py +0 -0
  752. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/tests/update_notifier/test_whats_new.py +0 -0
  753. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/uv.lock +0 -0
  754. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/README.md +0 -0
  755. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/cli_subcommand_dispatch.py +0 -0
  756. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/lookup.json +0 -0
  757. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/sql_parser.py +0 -0
  758. {drydock_cli-2.8.18 → drydock_cli-2.8.20}/worked_examples/tree_walking_interpreter.py +0 -0
@@ -0,0 +1 @@
1
+ 836886
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.8.18
3
+ Version: 2.8.20
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
@@ -284,7 +284,8 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
284
284
  - **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
285
285
  - **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
286
286
  - **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
287
- - **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
287
+ - **MCP Support**: Connect Model Context Protocol servers via the `/mcp` slash command or `~/.drydock/config.toml`. See [MCP Servers](#mcp-servers).
288
+ - **Curiosity Layer**: Engineered intellectual drive (SOVEREIGN_PRD §5.7). Auto-prefetches GraphRAG evidence before the first LLM turn so models retrieve before asserting; detects unfamiliar terms in every user message and enqueues them as learning signals; surfaces a learning queue via `/curiosity`; HLE failures and tool-result surprises automatically feed the queue. `autonomous_review` consumes top items per tick to ship corpus/prompt updates.
288
289
  - **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
289
290
 
290
291
  ### Built-in Agents
@@ -379,13 +380,89 @@ DryDock discovers skills from:
379
380
 
380
381
  ### MCP Servers
381
382
 
383
+ DryDock can connect to any Model Context Protocol server. Tools from a server `foo` show up as `foo__<tool_name>` in the agent's tool list. Two ways to add one:
384
+
385
+ #### Option A — `/mcp` slash command (recommended)
386
+
387
+ Inside the TUI:
388
+
389
+ ```
390
+ /mcp # list configured servers + usage
391
+ /mcp examples # ready-to-paste examples
392
+ /mcp add stdio fetch_server uvx mcp-server-fetch
393
+ /mcp add stdio filesystem npx -y @modelcontextprotocol/server-filesystem /data
394
+ /mcp add http weather https://mcp.example.com
395
+ /mcp add streamable-http myapi https://api.example.com/mcp
396
+ /mcp remove fetch_server
397
+ ```
398
+
399
+ The command writes to `~/.drydock/config.toml`. Restart DryDock to load new servers.
400
+
401
+ #### Option B — edit `~/.drydock/config.toml` directly
402
+
403
+ Use this for advanced fields (auth headers, env-var API keys, custom timeouts, `sampling_enabled`). Three transports: `stdio`, `http`, `streamable-http`.
404
+
382
405
  ```toml
383
406
  [[mcp_servers]]
384
407
  name = "fetch_server"
385
408
  transport = "stdio"
386
409
  command = "uvx"
387
410
  args = ["mcp-server-fetch"]
411
+
412
+ [[mcp_servers]]
413
+ name = "filesystem"
414
+ transport = "stdio"
415
+ command = "npx"
416
+ args = ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
417
+ env = { LOG_LEVEL = "info" }
418
+ startup_timeout_sec = 10.0
419
+ tool_timeout_sec = 60.0
420
+ sampling_enabled = true
421
+
422
+ [[mcp_servers]]
423
+ name = "github"
424
+ transport = "streamable-http"
425
+ url = "https://api.githubcopilot.com/mcp"
426
+ api_key_env = "GITHUB_TOKEN" # reads token from this env var
427
+ api_key_header = "Authorization"
428
+ api_key_format = "Bearer {token}"
429
+
430
+ [[mcp_servers]]
431
+ name = "weather"
432
+ transport = "http"
433
+ url = "https://mcp.weather.example.com"
434
+ headers = { "X-Tenant" = "drydock" }
435
+ ```
436
+
437
+ Verify a server loaded by running `/help` inside the TUI and checking for `<name>__*` prefixed tools. Server errors show up in `~/.drydock/logs/`.
438
+
439
+ ### Curiosity Layer
440
+
441
+ DryDock has an engineered curiosity subsystem (SOVEREIGN_PRD §5.7) that turns "investigate before asserting" from a prompt suggestion into a structural feature:
442
+
443
+ - **Auto-retrieve before first turn**: when a project has a GraphRAG index at `~/.drydock/graphrag.sqlite`, every user message triggers a retrieve pass; high-quality hits get injected as a synthetic tool result before the LLM sees the message. Opt out with `DRYDOCK_AUTO_RETRIEVE=0`.
444
+ - **Gap detection**: every user message also runs through a heuristic that extracts candidate unfamiliar terms (paper titles, library names, dotted identifiers, ALL-CAPS acronyms, snake_case symbols, versioned packages, filesystem paths). Each becomes an `UNKNOWN_TERM` entry in the learning queue.
445
+ - **Surprise scoring**: when a tool result contradicts a confident assistant claim (e.g. "all tests pass" right before a Traceback), the conflict is logged as `EVIDENCE_CONFLICT` for review.
446
+ - **HLE feedback**: every failed HLE answer auto-enqueues an `HLE_FAILURE` item — the eval becomes a learning signal, not just a scoreboard.
447
+
448
+ Inspect from the TUI:
449
+
388
450
  ```
451
+ /curiosity # counts by kind: HLE_FAILURE, EVIDENCE_CONFLICT, UNKNOWN_TERM, IDLE_EXPLORATION
452
+ /curiosity top 5 # top 5 highest-priority pending items
453
+ /curiosity consume <fingerprint> # mark an item handled
454
+ ```
455
+
456
+ Or from the shell:
457
+
458
+ ```
459
+ python -m drydock.curiosity stats
460
+ python -m drydock.curiosity top --limit 10
461
+ ```
462
+
463
+ The queue lives at `~/.drydock/dispatch/curiosity.jsonl`. `autonomous_review` (cron-launched every 30 min) reads the top items and ships corpus ingests, prompt rules, or AGENTS.md hints from them, tagging commits with `addresses curiosity:<id>:`.
464
+
465
+ Disable the entire layer with `DRYDOCK_CURIOSITY=0`.
389
466
 
390
467
  ## Testing
391
468
 
@@ -229,7 +229,8 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
229
229
  - **Loop Detection**: Advisory-only detection that nudges the model away from repetitive actions without blocking.
230
230
  - **Conda/Pip Support**: Auto-approves `pip install`, `conda install`, `pytest`, and other dev commands.
231
231
  - **Bundled Skills**: Ships with skills like `create-presentation` for PowerPoint generation.
232
- - **MCP Support**: Connect Model Context Protocol servers for extended capabilities.
232
+ - **MCP Support**: Connect Model Context Protocol servers via the `/mcp` slash command or `~/.drydock/config.toml`. See [MCP Servers](#mcp-servers).
233
+ - **Curiosity Layer**: Engineered intellectual drive (SOVEREIGN_PRD §5.7). Auto-prefetches GraphRAG evidence before the first LLM turn so models retrieve before asserting; detects unfamiliar terms in every user message and enqueues them as learning signals; surfaces a learning queue via `/curiosity`; HLE failures and tool-result surprises automatically feed the queue. `autonomous_review` consumes top items per tick to ship corpus/prompt updates.
233
234
  - **Safety First**: Tool execution approval with `--dangerously-skip-permissions` for full auto-approve.
234
235
 
235
236
  ### Built-in Agents
@@ -324,13 +325,89 @@ DryDock discovers skills from:
324
325
 
325
326
  ### MCP Servers
326
327
 
328
+ DryDock can connect to any Model Context Protocol server. Tools from a server `foo` show up as `foo__<tool_name>` in the agent's tool list. Two ways to add one:
329
+
330
+ #### Option A — `/mcp` slash command (recommended)
331
+
332
+ Inside the TUI:
333
+
334
+ ```
335
+ /mcp # list configured servers + usage
336
+ /mcp examples # ready-to-paste examples
337
+ /mcp add stdio fetch_server uvx mcp-server-fetch
338
+ /mcp add stdio filesystem npx -y @modelcontextprotocol/server-filesystem /data
339
+ /mcp add http weather https://mcp.example.com
340
+ /mcp add streamable-http myapi https://api.example.com/mcp
341
+ /mcp remove fetch_server
342
+ ```
343
+
344
+ The command writes to `~/.drydock/config.toml`. Restart DryDock to load new servers.
345
+
346
+ #### Option B — edit `~/.drydock/config.toml` directly
347
+
348
+ Use this for advanced fields (auth headers, env-var API keys, custom timeouts, `sampling_enabled`). Three transports: `stdio`, `http`, `streamable-http`.
349
+
327
350
  ```toml
328
351
  [[mcp_servers]]
329
352
  name = "fetch_server"
330
353
  transport = "stdio"
331
354
  command = "uvx"
332
355
  args = ["mcp-server-fetch"]
356
+
357
+ [[mcp_servers]]
358
+ name = "filesystem"
359
+ transport = "stdio"
360
+ command = "npx"
361
+ args = ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
362
+ env = { LOG_LEVEL = "info" }
363
+ startup_timeout_sec = 10.0
364
+ tool_timeout_sec = 60.0
365
+ sampling_enabled = true
366
+
367
+ [[mcp_servers]]
368
+ name = "github"
369
+ transport = "streamable-http"
370
+ url = "https://api.githubcopilot.com/mcp"
371
+ api_key_env = "GITHUB_TOKEN" # reads token from this env var
372
+ api_key_header = "Authorization"
373
+ api_key_format = "Bearer {token}"
374
+
375
+ [[mcp_servers]]
376
+ name = "weather"
377
+ transport = "http"
378
+ url = "https://mcp.weather.example.com"
379
+ headers = { "X-Tenant" = "drydock" }
380
+ ```
381
+
382
+ Verify a server loaded by running `/help` inside the TUI and checking for `<name>__*` prefixed tools. Server errors show up in `~/.drydock/logs/`.
383
+
384
+ ### Curiosity Layer
385
+
386
+ DryDock has an engineered curiosity subsystem (SOVEREIGN_PRD §5.7) that turns "investigate before asserting" from a prompt suggestion into a structural feature:
387
+
388
+ - **Auto-retrieve before first turn**: when a project has a GraphRAG index at `~/.drydock/graphrag.sqlite`, every user message triggers a retrieve pass; high-quality hits get injected as a synthetic tool result before the LLM sees the message. Opt out with `DRYDOCK_AUTO_RETRIEVE=0`.
389
+ - **Gap detection**: every user message also runs through a heuristic that extracts candidate unfamiliar terms (paper titles, library names, dotted identifiers, ALL-CAPS acronyms, snake_case symbols, versioned packages, filesystem paths). Each becomes an `UNKNOWN_TERM` entry in the learning queue.
390
+ - **Surprise scoring**: when a tool result contradicts a confident assistant claim (e.g. "all tests pass" right before a Traceback), the conflict is logged as `EVIDENCE_CONFLICT` for review.
391
+ - **HLE feedback**: every failed HLE answer auto-enqueues an `HLE_FAILURE` item — the eval becomes a learning signal, not just a scoreboard.
392
+
393
+ Inspect from the TUI:
394
+
333
395
  ```
396
+ /curiosity # counts by kind: HLE_FAILURE, EVIDENCE_CONFLICT, UNKNOWN_TERM, IDLE_EXPLORATION
397
+ /curiosity top 5 # top 5 highest-priority pending items
398
+ /curiosity consume <fingerprint> # mark an item handled
399
+ ```
400
+
401
+ Or from the shell:
402
+
403
+ ```
404
+ python -m drydock.curiosity stats
405
+ python -m drydock.curiosity top --limit 10
406
+ ```
407
+
408
+ The queue lives at `~/.drydock/dispatch/curiosity.jsonl`. `autonomous_review` (cron-launched every 30 min) reads the top items and ships corpus ingests, prompt rules, or AGENTS.md hints from them, tagging commits with `addresses curiosity:<id>:`.
409
+
410
+ Disable the entire layer with `DRYDOCK_CURIOSITY=0`.
334
411
 
335
412
  ## Testing
336
413
 
@@ -80,6 +80,9 @@ A sovereign AI system that:
80
80
  - Learns customer-specific knowledge
81
81
  - Performs coding and reasoning tasks autonomously
82
82
  - Self-diagnoses failures (Admiral) and self-improves (MetaHarness, evaluator)
83
+ - **Operates with engineered curiosity** — actively detects its own gaps,
84
+ retrieves before asserting, ingests unfamiliar context, and treats
85
+ surprise as signal worth chasing rather than noise to suppress
83
86
  - Improves continuously without phoning home
84
87
 
85
88
  ---
@@ -363,6 +366,166 @@ Already partially shipped — the system already self-observes.
363
366
 
364
367
  ---
365
368
 
369
+ ## 5.7 Curiosity Layer — engineered intellectual drive
370
+
371
+ GraphRAG, Deep Noir, and the HLE benchmark together expose a structural
372
+ weakness in Gemma 4 and most small local models: they answer from prior
373
+ when they should retrieve, plateau on familiar patterns, and treat
374
+ "unknown" as something to guess past rather than something to investigate.
375
+ The Curiosity Layer is a first-class drydock directive — both a guiding
376
+ principle in the system prompt and a concrete subsystem — that converts
377
+ that weakness into a feedback loop.
378
+
379
+ **Operating definition (carries into the system prompt):**
380
+
381
+ > Curiosity is an inquisitive, often insatiable desire to understand the
382
+ > unknown — from everyday questions to scientific discovery. In drydock
383
+ > this means: when you notice a gap, you close it; when you encounter
384
+ > something unfamiliar, you investigate before asserting; when you have
385
+ > spare cycles, you explore the corpus rather than idle.
386
+
387
+ **Behaviors required of the agent (enforced via prompt + Deep Noir vector
388
+ candidate + tool wiring):**
389
+
390
+ 1. **Retrieve before answering on unfamiliar terms.** Any user message
391
+ containing a named entity, paper title, identifier, API, or symbol
392
+ not present in recent context triggers an automatic `retrieve` call
393
+ against GraphRAG before the first content token. Low-confidence
394
+ retrieval triggers a second pass against the arXiv corpus
395
+ (`/data3/arxiv_corpus/graphrag.sqlite`) instead of falling back to
396
+ `web_search`. Fixes the failure mode logged in
397
+ `project_graphrag_underused.md` (Gemma 4 defaults to web_search on
398
+ general-knowledge HLE questions).
399
+ 2. **Treat surprise as signal, not noise.** When the model's own
400
+ probability estimate disagrees with retrieved evidence, with a tool
401
+ result, or with an HLE judge verdict, the disagreement is logged to
402
+ the curiosity queue (`~/.drydock/dispatch/curiosity.jsonl`) and
403
+ surfaces in the next overnight `autonomous_review` tick as a
404
+ candidate for: GraphRAG ingest, prompt refinement, Deep Noir vector
405
+ training data, or LoRA candidate.
406
+ 3. **Investigate before asking.** When the user request is
407
+ under-specified, the agent first reads the project (Glob + Read on
408
+ plausible files, `retrieve` against GraphRAG) and proposes a
409
+ concrete interpretation. `ask_user_question` only fires after at
410
+ least one investigation pass — never as a first move on ambiguity.
411
+ 4. **Explore on idle.** When drydock is idle for > N minutes and the
412
+ classifier dispatch queues are non-empty, the agent runs a single
413
+ exploratory cycle: pick the highest-priority pattern, ingest fresh
414
+ logs into GraphRAG, generate one hypothesis, log to
415
+ `~/.drydock/curiosity_log.md`. Bounded by a tokens-per-day budget
416
+ so curiosity does not starve user work.
417
+ 5. **Open mindset on conflict.** When new evidence contradicts a
418
+ previously asserted answer, the agent prefers the new evidence and
419
+ issues a correction in the same turn. Extends the existing
420
+ "Retrieval vs. Prior" guidance in §10 into an active rule.
421
+
422
+ **Curiosity subsystem deliverables (Phase 3, alongside Deep Noir):**
423
+
424
+ - `drydock.curiosity` module — gap detector, surprise scorer, dispatch
425
+ writer. Reuses classifier infrastructure from §5.6.
426
+ - `~/.drydock/dispatch/curiosity.jsonl` queue + consumer wired into
427
+ `autonomous_review.sh`.
428
+ - System-prompt section embedding the five behaviors above, kept short
429
+ enough for Gemma 4's 20-line prompt budget (`gemma4.md`).
430
+ - Deep Noir vector candidate: "exploration" mode — bias toward retrieval,
431
+ hypothesis enumeration, and reading-before-writing. Trained from
432
+ curiosity-log traces once Deep Noir vector training lands.
433
+ - HLE/eval integration: every HLE failure where the judge reasoning
434
+ contains "no answer extracted" or "incorrect prior" is auto-enqueued
435
+ as a curiosity item — the eval becomes a growth signal, not just
436
+ a scoreboard.
437
+
438
+ **Anti-patterns explicitly forbidden:**
439
+
440
+ - Curiosity does **not** mean asking the user more questions. The
441
+ default is to investigate, not interrogate.
442
+ - Curiosity does **not** override the "advisory-only" rule. Exploration
443
+ cycles never block user work; they consume idle cycles only.
444
+ - Curiosity must **not** become rumination — the tokens-per-day budget
445
+ exists specifically to prevent endless exploration loops on a single
446
+ unfamiliar term.
447
+
448
+ **Acceptance criteria:**
449
+
450
+ - `retrieve` is called on ≥ 80 % of HLE questions before any content
451
+ token (measured via execution traces, Phase 3).
452
+ - `~/.drydock/dispatch/curiosity.jsonl` accumulates ≥ 10 items per
453
+ active week without operator priming.
454
+ - `autonomous_review` ships ≥ 1 prompt/AGENTS.md/vector update per week
455
+ that originated from a curiosity-queue item (not a stress-run signal).
456
+ - HLE general-knowledge category score lifts measurably vs. the
457
+ May 2026 baseline (1/20 = 5 %, 18/20 "empty"); target ≥ 25 %
458
+ in Phase 3, ≥ 40 % in Phase 4.
459
+
460
+ **Implementation plan (tiered for ROI per engineering hour):**
461
+
462
+ ### Tier 1 — prompt-level + signal plumbing — *shipped 2026-05-12 (v2.8.20)*
463
+
464
+ The cheapest, highest-leverage cut. Lands the §5.7 directive as
465
+ observable model behavior and starts populating the queue immediately
466
+ without waiting on consumer infrastructure.
467
+
468
+ - ✅ `drydock.curiosity` module — `CuriosityItem` + `CuriosityKind`
469
+ enum, append-only JSONL queue at `~/.drydock/dispatch/curiosity.jsonl`
470
+ with 7-day fingerprint dedup, `detect_gaps()` heuristic extractor for
471
+ unfamiliar-term candidates, `score_surprise()` across three evidence
472
+ kinds (judge_verdict, retrieve, tool_result)
473
+ - ✅ Prompt directive in `gemma4.md` — six lines telling the model its
474
+ default posture is "investigate, then assert": first tool call on a
475
+ named-thing user message is `retrieve`, prefer evidence on conflict,
476
+ investigate before asking for clarification
477
+ - ✅ HLE → curiosity feedback loop — `scripts/hle_eval.py` enqueues a
478
+ `CuriosityItem` on every NO outcome (kind=`HLE_FAILURE`, high
479
+ confidence when `method=empty` — the GraphRAG-underused failure
480
+ mode), so every eval run produces ≥10 learning signals
481
+ - ✅ 26 unit tests in `tests/test_curiosity.py` added to the deploy gate
482
+
483
+ ### Tier 2 — consumer side + forcing function — *next week*
484
+
485
+ The prompt rule alone gets the model to retrieve more, but Gemma 4 will
486
+ still default to prior under context pressure (per
487
+ `project_graphrag_underused.md`). Tier 2 closes that gap and starts
488
+ shipping fixes from the queue.
489
+
490
+ - ▢ `agent_loop.py` first-turn hook — call `detect_gaps(user_msg)`
491
+ before the first LLM call; if any candidates returned, automatically
492
+ invoke `retrieve` on the top 2–3 and inject results onto the user
493
+ message as `[CURIOSITY PREFETCH]` context. Forces evidence into the
494
+ window before the model can answer from prior. ~40 lines.
495
+ - ▢ `autonomous_review.sh` curiosity consumer — read
496
+ `~/.drydock/dispatch/curiosity.jsonl`, pick highest-confidence
497
+ unconsumed item, generate a fix proposal (AGENTS.md hint / prompt
498
+ rule / GraphRAG ingest plan), commit with subject prefix
499
+ `addresses curiosity:<fingerprint>:`. Mirrors the existing harness
500
+ bucket consumer. ~80 lines.
501
+ - ▢ Surprise-on-tool-result scoring inside `_handle_tool_response` —
502
+ when `score_surprise()` exceeds threshold, enqueue an
503
+ `EVIDENCE_CONFLICT` item automatically. Catches confident-but-wrong
504
+ claims without operator priming.
505
+ - ▢ HLE re-run with the tier-1 prompt to measure adherence — the
506
+ `retrieve called on ≥80% of HLE Q` criterion needs an actual
507
+ measurement to confirm the prompt rule moves the needle.
508
+
509
+ ### Tier 3 — Phase 3 proper — *after Deep Noir vectors land*
510
+
511
+ The advanced layer that depends on infrastructure not yet in place.
512
+
513
+ - ▢ Deep Noir "exploration" mode vector candidate — train from
514
+ curiosity-log traces (retrieve calls, hypothesis enumeration,
515
+ reading-before-writing). Becomes the steerable behavioral prior
516
+ for curiosity once `drydock.steering` has real vectors.
517
+ - ▢ Idle-cycle exploration worker — when drydock is idle > N minutes
518
+ and the classifier dispatch queues are non-empty, run one bounded
519
+ exploratory cycle (pick highest-priority pattern, ingest fresh logs,
520
+ generate hypothesis, log to `~/.drydock/curiosity_log.md`). Bounded
521
+ by a tokens-per-day budget so curiosity does not starve user work.
522
+ - ▢ Frustration / surprise detection across the full session, not
523
+ just single turns — when the operator repeatedly redirects on the
524
+ same topic, treat it as a high-confidence curiosity signal even if
525
+ no individual turn tripped the per-turn detectors.
526
+
527
+ ---
528
+
366
529
  # 6. Adaptive Failure Logic
367
530
 
368
531
  ```text
@@ -383,6 +546,18 @@ If loops detected:
383
546
  → loop-break sampling (temp+0.3/0.5, freq_pen 0.4–0.7, fresh seed)
384
547
  → planner reset + diversity strategy
385
548
  → only escalates to FORCE_STOP on pure no-op duplicates
549
+
550
+ If unfamiliar term / named entity / identifier in user input:
551
+ → mandatory retrieve pass (GraphRAG, then arXiv corpus)
552
+ → web_search only after both local retrievers return low confidence
553
+
554
+ If model output contradicts retrieved evidence / tool result / judge verdict:
555
+ → log to ~/.drydock/dispatch/curiosity.jsonl
556
+ → autonomous_review picks it up next tick as ingest / prompt / vector candidate
557
+
558
+ If idle > N minutes AND classifier queues non-empty:
559
+ → one exploratory cycle (bounded by tokens-per-day budget)
560
+ → ingest, hypothesis, curiosity_log entry — never a user-visible action
386
561
  ```
387
562
 
388
563
  All logic is **advisory-first**. Hard stops are reserved for objectively useless
@@ -551,6 +726,9 @@ mitigates several of the failure classes already in `MODEL_SHORTCOMINGS.md`.
551
726
  | Customer cloud dependency | −70 % | Brand promise, qualitative |
552
727
  | Task completion rate (interactive) | +35 % | Current shakedown baseline |
553
728
  | SWE-bench file match | maintain ≥70 % | 70 % current |
729
+ | `retrieve` calls before content (HLE) | ≥80 % | <5 % observed May 2026 |
730
+ | Curiosity-queue items shipped / week | ≥1 | 0 — queue not built yet |
731
+ | HLE general-knowledge score | ≥25 % Phase 3, ≥40 % Phase 4 | 5 % (1/20 May 2026) |
554
732
 
555
733
  Metrics with "TBD" baselines are explicitly required to be **measured** before
556
734
  Phase 2 begins, not estimated.
@@ -134,6 +134,13 @@ class CommandRegistry:
134
134
  "/mcp remove <name> | /mcp examples).",
135
135
  handler="_mcp_command",
136
136
  ),
137
+ "curiosity": Command(
138
+ aliases=frozenset(["/curiosity"]),
139
+ description="Inspect the curiosity learning queue "
140
+ "(usage: /curiosity | /curiosity top | "
141
+ "/curiosity stats | /curiosity consume <id>).",
142
+ handler="_curiosity_command",
143
+ ),
137
144
  }
138
145
 
139
146
  for command in excluded_commands:
@@ -421,20 +421,46 @@ class DrydockApp(App): # noqa: PLR0904
421
421
  input_widget.value = ""
422
422
 
423
423
  if self._agent_running:
424
- # Queue the message join rapid-fire inputs (multi-line paste)
425
- if not hasattr(self, "_pending_messages"):
426
- self._pending_messages: list[str] = []
427
- import time
428
- now = time.time()
429
- last_queue_time = getattr(self, "_last_queue_time", 0)
430
- if now - last_queue_time < 0.5 and self._pending_messages:
431
- # Rapid input (< 500ms apart) = likely paste — join with newline
432
- self._pending_messages[-1] += "\n" + value
433
- else:
434
- self._pending_messages.append(value)
435
- self._last_queue_time = now
424
+ # Slash commands and bash escapes can't be folded into a running
425
+ # turn they need their own worker. Keep the end-of-turn queue
426
+ # for those. Everything else (plain text) goes straight into the
427
+ # agent's context via `queue_user_injection`, matching Claude
428
+ # Code's "type while busy" behavior: the in-flight task keeps
429
+ # running, and the model sees the new message at the next turn
430
+ # boundary without restarting.
431
+ is_command = value.startswith("/") or value.startswith("!") or (
432
+ value.startswith("&") and self.config.nuage_enabled
433
+ )
434
+
435
+ if is_command:
436
+ if not hasattr(self, "_pending_messages"):
437
+ self._pending_messages: list[str] = []
438
+ import time
439
+ now = time.time()
440
+ last_queue_time = getattr(self, "_last_queue_time", 0)
441
+ if now - last_queue_time < 0.5 and self._pending_messages:
442
+ self._pending_messages[-1] += "\n" + value
443
+ else:
444
+ self._pending_messages.append(value)
445
+ self._last_queue_time = now
446
+ preview = value[:60] + "..." if len(value) > 60 else value
447
+ self.notify(
448
+ f"Queued for after current task: \"{preview}\" "
449
+ f"({len(self._pending_messages)} pending)"
450
+ )
451
+ return
452
+
453
+ # Plain text → inject into the running agent's context. Render
454
+ # a user-message bubble immediately so the UI shows what landed,
455
+ # and notify so the user knows it didn't displace the current
456
+ # work.
457
+ self.agent_loop.queue_user_injection(value)
458
+ await self._mount_and_scroll(UserMessage(value))
436
459
  preview = value[:60] + "..." if len(value) > 60 else value
437
- self.notify(f"Queued: \"{preview}\" ({len(self._pending_messages)} pending)")
460
+ self.notify(
461
+ f"Sent to running agent: \"{preview}\" "
462
+ f"(will be picked up at the next turn)"
463
+ )
438
464
  return
439
465
 
440
466
  if value.startswith("!"):
@@ -1414,11 +1440,11 @@ class DrydockApp(App): # noqa: PLR0904
1414
1440
  pass
1415
1441
 
1416
1442
  # Read existing config
1417
- import tomli
1443
+ import tomllib
1418
1444
  existing = {}
1419
1445
  if config_path.exists():
1420
1446
  try:
1421
- existing = tomli.loads(config_path.read_text())
1447
+ existing = tomllib.loads(config_path.read_text())
1422
1448
  except Exception:
1423
1449
  pass
1424
1450
 
@@ -1465,7 +1491,7 @@ class DrydockApp(App): # noqa: PLR0904
1465
1491
  async def _mcp_command(self, args: str = "") -> None:
1466
1492
  """Configure MCP servers in ~/.drydock/config.toml."""
1467
1493
  import shlex
1468
- import tomli
1494
+ import tomllib
1469
1495
  import tomli_w
1470
1496
 
1471
1497
  config_path = Path.home() / ".drydock" / "config.toml"
@@ -1475,7 +1501,7 @@ class DrydockApp(App): # noqa: PLR0904
1475
1501
  if not config_path.exists():
1476
1502
  return {}
1477
1503
  try:
1478
- return tomli.loads(config_path.read_text())
1504
+ return tomllib.loads(config_path.read_text())
1479
1505
  except Exception:
1480
1506
  return {}
1481
1507
 
@@ -1632,6 +1658,112 @@ class DrydockApp(App): # noqa: PLR0904
1632
1658
  "remove <name> | examples}`"
1633
1659
  ))
1634
1660
 
1661
+ async def _curiosity_command(self, args: str = "") -> None:
1662
+ """Inspect the curiosity learning queue (SOVEREIGN_PRD §5.7)."""
1663
+ try:
1664
+ from drydock.curiosity.queue import queue_path, read_recent
1665
+ from drydock.curiosity.__main__ import (
1666
+ _KIND_PRIORITY, _load_consumed,
1667
+ )
1668
+ except Exception as e:
1669
+ await self._mount_and_scroll(
1670
+ UserCommandMessage(f"Curiosity module unavailable: {e}")
1671
+ )
1672
+ return
1673
+
1674
+ parts = args.strip().split(None, 1)
1675
+ sub = parts[0].lower() if parts else "stats"
1676
+ rest = parts[1].strip() if len(parts) > 1 else ""
1677
+
1678
+ consumed = _load_consumed()
1679
+ items = list(reversed(read_recent(limit=10_000)))
1680
+ pending = [i for i in items if i.get("id") not in consumed]
1681
+
1682
+ if sub in ("", "stats", "status"):
1683
+ if not items:
1684
+ await self._mount_and_scroll(UserCommandMessage(
1685
+ f"### Curiosity queue\n\n_Empty._\n\n"
1686
+ f"Queue: `{queue_path()}`\n\n"
1687
+ "Items land here when the agent detects unfamiliar terms "
1688
+ "(SOVEREIGN_PRD §5.7), when tool results contradict the "
1689
+ "model's assertions, or when an HLE answer scores NO. "
1690
+ "`autonomous_review` consumes the top items per tick."
1691
+ ))
1692
+ return
1693
+ by_kind: dict[str, dict[str, int]] = {}
1694
+ for it in items:
1695
+ k = it.get("kind", "?")
1696
+ b = by_kind.setdefault(k, {"total": 0, "pending": 0})
1697
+ b["total"] += 1
1698
+ if it.get("id") not in consumed:
1699
+ b["pending"] += 1
1700
+ lines = [
1701
+ "### Curiosity queue",
1702
+ "",
1703
+ f"Queue: `{queue_path()}`",
1704
+ f"Total: **{len(items)}** items "
1705
+ f"({len(pending)} pending, {len(consumed)} consumed)",
1706
+ "",
1707
+ "| kind | total | pending |",
1708
+ "|---|---:|---:|",
1709
+ ]
1710
+ for k in sorted(by_kind, key=lambda x: _KIND_PRIORITY.get(x, 99)):
1711
+ b = by_kind[k]
1712
+ lines.append(f"| `{k}` | {b['total']} | {b['pending']} |")
1713
+ lines.append("")
1714
+ lines.append("`/curiosity top` for the highest-priority pending items.")
1715
+ await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
1716
+ return
1717
+
1718
+ if sub == "top":
1719
+ limit = 5
1720
+ if rest.isdigit():
1721
+ limit = max(1, min(20, int(rest)))
1722
+ ranked = sorted(pending, key=lambda x: (
1723
+ _KIND_PRIORITY.get(x.get("kind", ""), 99),
1724
+ -float(x.get("confidence", 0.0)),
1725
+ x.get("ts", ""),
1726
+ ))[:limit]
1727
+ if not ranked:
1728
+ await self._mount_and_scroll(UserCommandMessage(
1729
+ "_No pending curiosity items._"
1730
+ ))
1731
+ return
1732
+ lines = [f"### Top {len(ranked)} pending curiosity items", ""]
1733
+ for i, it in enumerate(ranked, 1):
1734
+ term = it.get("term", "")[:140]
1735
+ ctx = it.get("context", "")[:200].replace("\n", " ")
1736
+ fp = it.get("id", "?")
1737
+ kind = it.get("kind", "?")
1738
+ conf = it.get("confidence", 0.0)
1739
+ lines.append(
1740
+ f"**{i}. `{kind}`** · conf={conf} · `{fp}`"
1741
+ )
1742
+ lines.append(f"- term: {term}")
1743
+ if ctx:
1744
+ lines.append(f"- context: {ctx}")
1745
+ lines.append("")
1746
+ await self._mount_and_scroll(UserCommandMessage("\n".join(lines)))
1747
+ return
1748
+
1749
+ if sub == "consume":
1750
+ if not rest:
1751
+ await self._mount_and_scroll(UserCommandMessage(
1752
+ "Usage: `/curiosity consume <fingerprint>`"
1753
+ ))
1754
+ return
1755
+ consumed.add(rest)
1756
+ from drydock.curiosity.__main__ import _save_consumed
1757
+ _save_consumed(consumed)
1758
+ await self._mount_and_scroll(UserCommandMessage(
1759
+ f"Marked `{rest}` consumed. Total: {len(consumed)}."
1760
+ ))
1761
+ return
1762
+
1763
+ await self._mount_and_scroll(UserCommandMessage(
1764
+ "Usage: `/curiosity {stats | top [N] | consume <id>}`"
1765
+ ))
1766
+
1635
1767
  async def _admiral_apply_command(self, args: str = "") -> None:
1636
1768
  """Merge an Admiral-staged proposal branch into main."""
1637
1769
  import subprocess