drydock-cli 2.8.19__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.19 → drydock_cli-2.8.20}/PKG-INFO +30 -1
  3. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/README.md +29 -0
  4. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/SOVEREIGN_PRD.md +67 -0
  5. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/commands.py +7 -0
  6. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.py +106 -0
  7. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/agent_loop.py +108 -3
  8. {drydock_cli-2.8.19 → 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.19 → drydock_cli-2.8.20}/pyproject.toml +1 -1
  16. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/autonomous_review_prompt.md +9 -1
  17. drydock_cli-2.8.20/scripts/backfill_hle_curiosity.py +118 -0
  18. drydock_cli-2.8.20/scripts/curiosity_idle_cycle.sh +145 -0
  19. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/deploy_to_github.sh +1 -1
  20. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/hle_eval.py +42 -1
  21. drydock_cli-2.8.20/tests/test_curiosity.py +266 -0
  22. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_loop_detection.py +129 -0
  23. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/trip_log.md +119 -0
  24. drydock_cli-2.8.19/.auto_release.lock +0 -1
  25. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/CODEOWNERS +0 -0
  26. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  27. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  28. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  29. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/workflows/build-and-upload.yml +0 -0
  30. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/workflows/ci.yml +0 -0
  31. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/workflows/issue-labeler.yml +0 -0
  32. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.github/workflows/release.yml +0 -0
  33. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.gitignore +0 -0
  34. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.pre-commit-config.yaml +0 -0
  35. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.python-version +0 -0
  36. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.typos.toml +0 -0
  37. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.vscode/extensions.json +0 -0
  38. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.vscode/launch.json +0 -0
  39. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/.vscode/settings.json +0 -0
  40. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/AGENTS.md +0 -0
  41. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/Admiral.md +0 -0
  42. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/CHANGELOG.md +0 -0
  43. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/CLAUDE.md +0 -0
  44. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/CONTRIBUTING.md +0 -0
  45. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/DEEP_NOIR_PRD.md +0 -0
  46. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/DEPLOYMENT.md +0 -0
  47. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/HLE_PRD.md +0 -0
  48. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/JETSON_BENCH.md +0 -0
  49. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/LICENSE +0 -0
  50. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/MODEL_SHORTCOMINGS.md +0 -0
  51. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/NOTICE +0 -0
  52. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/TRIAGE_v1.md +0 -0
  53. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/action.yml +0 -0
  54. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/README.md +0 -0
  55. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results1.tsv +0 -0
  56. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results13.tsv +0 -0
  57. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results14.tsv +0 -0
  58. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results15.tsv +0 -0
  59. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results16.tsv +0 -0
  60. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results17.tsv +0 -0
  61. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results18.tsv +0 -0
  62. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results19.tsv +0 -0
  63. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results2.tsv +0 -0
  64. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results20.tsv +0 -0
  65. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results3.tsv +0 -0
  66. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results4.tsv +0 -0
  67. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results5.tsv +0 -0
  68. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results6.tsv +0 -0
  69. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results7.tsv +0 -0
  70. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results8.tsv +0 -0
  71. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results9.tsv +0 -0
  72. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/baseline_history/results_evolved_v1.tsv +0 -0
  73. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/distribution/zed/LICENSE +0 -0
  74. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/distribution/zed/extension.toml +0 -0
  75. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/distribution/zed/icons/mistral_vibe.svg +0 -0
  76. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/README.md +0 -0
  77. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/acp-setup.md +0 -0
  78. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/BASELINE_412.md +0 -0
  79. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/Drydock_rebrand.md +0 -0
  80. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
  81. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
  82. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
  83. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/PRD.md +0 -0
  84. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/drydock_terms.md +0 -0
  85. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/archive/resume.md +0 -0
  86. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/docs/proxy-setup.md +0 -0
  87. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/__init__.py +0 -0
  88. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/__main__.py +0 -0
  89. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/__init__.py +0 -0
  90. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/acp_agent_loop.py +0 -0
  91. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/acp_logger.py +0 -0
  92. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/entrypoint.py +0 -0
  93. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/__init__.py +0 -0
  94. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/base.py +0 -0
  95. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/bash.py +0 -0
  96. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/read_file.py +0 -0
  97. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/search_replace.py +0 -0
  98. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/todo.py +0 -0
  99. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/builtins/write_file.py +0 -0
  100. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/tools/session_update.py +0 -0
  101. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/acp/utils.py +0 -0
  102. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/__init__.py +0 -0
  103. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/detectors.py +0 -0
  104. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/detectors_proposed.py +0 -0
  105. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/history.py +0 -0
  106. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/interventions.py +0 -0
  107. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/llm_analyzer.py +0 -0
  108. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/metrics.py +0 -0
  109. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/opus_escalator.py +0 -0
  110. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/persistence.py +0 -0
  111. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/policy.py +0 -0
  112. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/proposer.py +0 -0
  113. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/stager.py +0 -0
  114. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/task_classifier.py +0 -0
  115. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/tuning.py +0 -0
  116. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/validator.py +0 -0
  117. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/admiral/worker.py +0 -0
  118. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/__init__.py +0 -0
  119. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/autocompletion/__init__.py +0 -0
  120. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/autocompletion/base.py +0 -0
  121. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/autocompletion/path_completion.py +0 -0
  122. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/autocompletion/slash_command.py +0 -0
  123. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/cli.py +0 -0
  124. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/clipboard.py +0 -0
  125. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/entrypoint.py +0 -0
  126. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/fix_windows_path.py +0 -0
  127. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/history_manager.py +0 -0
  128. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  129. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  130. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  131. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/terminal_setup.py +0 -0
  132. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/__init__.py +0 -0
  133. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  134. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/app.tcss +0 -0
  135. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/external_editor.py +0 -0
  136. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  137. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  138. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  139. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  140. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  141. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  142. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  143. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  144. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  145. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  146. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  147. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  148. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  149. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  150. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  151. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  152. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  153. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  154. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  155. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  156. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  157. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  158. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  159. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  160. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  161. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  162. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  163. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  164. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  165. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  166. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  167. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  168. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  169. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  170. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  171. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  172. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  173. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history.py +0 -0
  174. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  175. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/textual_ui/windowing/state.py +0 -0
  176. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/__init__.py +0 -0
  177. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  178. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  179. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  180. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  181. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  182. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/update.py +0 -0
  183. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/cli/update_notifier/whats_new.py +0 -0
  184. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/__init__.py +0 -0
  185. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/agents/__init__.py +0 -0
  186. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/agents/manager.py +0 -0
  187. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/agents/models.py +0 -0
  188. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/auth/__init__.py +0 -0
  189. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/auth/crypto.py +0 -0
  190. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/auth/github.py +0 -0
  191. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/__init__.py +0 -0
  192. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/completers.py +0 -0
  193. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  194. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  195. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  196. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  197. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  198. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/fuzzy.py +0 -0
  199. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt.py +0 -0
  200. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  201. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/build_orchestrator.py +0 -0
  202. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/checkpoint.py +0 -0
  203. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/__init__.py +0 -0
  204. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/__main__.py +0 -0
  205. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/classifier.py +0 -0
  206. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/dispatcher.py +0 -0
  207. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/rules.py +0 -0
  208. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/classifier/signal.py +0 -0
  209. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/__init__.py +0 -0
  210. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/_dotenv.py +0 -0
  211. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/_settings.py +0 -0
  212. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/doctor.py +0 -0
  213. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/harness_files/__init__.py +0 -0
  214. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  215. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/harness_files/_paths.py +0 -0
  216. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/local_detect.py +0 -0
  217. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/config/migrate.py +0 -0
  218. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/consultant.py +0 -0
  219. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/context_recovery.py +0 -0
  220. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/drydock_states.py +0 -0
  221. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/hooks.py +0 -0
  222. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/__init__.py +0 -0
  223. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/anthropic.py +0 -0
  224. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/base.py +0 -0
  225. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/factory.py +0 -0
  226. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/generic.py +0 -0
  227. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/mistral.py +0 -0
  228. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  229. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/backend/vertex.py +0 -0
  230. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/exceptions.py +0 -0
  231. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/format.py +0 -0
  232. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/message_utils.py +0 -0
  233. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/llm/types.py +0 -0
  234. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/logger.py +0 -0
  235. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/middleware.py +0 -0
  236. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/output_formatters.py +0 -0
  237. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/paths/__init__.py +0 -0
  238. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/paths/_drydock_home.py +0 -0
  239. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/paths/_local_config_walk.py +0 -0
  240. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/paths/conventions.py +0 -0
  241. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/plan_session.py +0 -0
  242. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/plugins.py +0 -0
  243. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/programmatic.py +0 -0
  244. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/__init__.py +0 -0
  245. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/builder.md +0 -0
  246. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/cli.md +0 -0
  247. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/compact.md +0 -0
  248. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/dangerous_directory.md +0 -0
  249. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/diagnostic.md +0 -0
  250. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/explore.md +0 -0
  251. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/planner.md +0 -0
  252. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/project_context.md +0 -0
  253. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/prompts/tests.md +0 -0
  254. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/proxy_setup.py +0 -0
  255. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/agent_memory.py +0 -0
  256. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/checkpoints.py +0 -0
  257. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/session_loader.py +0 -0
  258. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/session_logger.py +0 -0
  259. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/session_migration.py +0 -0
  260. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session/state_file.py +0 -0
  261. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/session_checker.py +0 -0
  262. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/skills/__init__.py +0 -0
  263. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/skills/manager.py +0 -0
  264. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/skills/models.py +0 -0
  265. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/skills/parser.py +0 -0
  266. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/slug.py +0 -0
  267. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/steering_hook.py +0 -0
  268. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/system_prompt.py +0 -0
  269. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/telemetry/__init__.py +0 -0
  270. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/telemetry/send.py +0 -0
  271. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/teleport/errors.py +0 -0
  272. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/teleport/git.py +0 -0
  273. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/teleport/nuage.py +0 -0
  274. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/teleport/teleport.py +0 -0
  275. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/teleport/types.py +0 -0
  276. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/base.py +0 -0
  277. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/_task_manager.py +0 -0
  278. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  279. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/bash.py +0 -0
  280. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/cron.py +0 -0
  281. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  282. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/glob_tool.py +0 -0
  283. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/grep.py +0 -0
  284. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  285. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/lsp.py +0 -0
  286. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  287. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  288. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/powershell.py +0 -0
  289. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  290. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  291. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  292. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  293. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  294. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  295. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  296. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  297. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  298. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  299. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  300. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  301. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  302. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  303. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  304. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task.md +0 -0
  305. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  306. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  307. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  308. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  309. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  310. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  311. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  312. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/read_file.py +0 -0
  313. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/retrieve.py +0 -0
  314. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/search_replace.py +0 -0
  315. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/task.py +0 -0
  316. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/todo.py +0 -0
  317. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/tool_search.py +0 -0
  318. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/webfetch.py +0 -0
  319. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/websearch.py +0 -0
  320. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/worktree.py +0 -0
  321. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/builtins/write_file.py +0 -0
  322. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/injection_guard.py +0 -0
  323. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/manager.py +0 -0
  324. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/mcp/__init__.py +0 -0
  325. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/mcp/registry.py +0 -0
  326. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/mcp/tools.py +0 -0
  327. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/mcp_sampling.py +0 -0
  328. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/ui.py +0 -0
  329. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/tools/utils.py +0 -0
  330. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/trusted_folders.py +0 -0
  331. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/types.py +0 -0
  332. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/core/utils.py +0 -0
  333. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/__init__.py +0 -0
  334. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/__main__.py +0 -0
  335. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/code_indexer.py +0 -0
  336. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/retriever.py +0 -0
  337. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/storage.py +0 -0
  338. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/graphrag/text_indexer.py +0 -0
  339. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/__init__.py +0 -0
  340. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/base.py +0 -0
  341. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/onboarding.tcss +0 -0
  342. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/__init__.py +0 -0
  343. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/api_key.py +0 -0
  344. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/choice.py +0 -0
  345. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/local_model.py +0 -0
  346. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/onboarding/screens/welcome.py +0 -0
  347. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  348. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  349. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/__init__.py +0 -0
  350. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/api-design/SKILL.md +0 -0
  351. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/audit-tests/SKILL.md +0 -0
  352. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/batch/SKILL.md +0 -0
  353. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/commit-code/SKILL.md +0 -0
  354. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/context-summary/SKILL.md +0 -0
  355. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/create-presentation/SKILL.md +0 -0
  356. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/deep-research/SKILL.md +0 -0
  357. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/deploy/SKILL.md +0 -0
  358. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/diff-review/SKILL.md +0 -0
  359. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/doc-gen/SKILL.md +0 -0
  360. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/explain-code/SKILL.md +0 -0
  361. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/explore-code/SKILL.md +0 -0
  362. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/fix-issue/SKILL.md +0 -0
  363. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/git-ops/SKILL.md +0 -0
  364. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/init-project/SKILL.md +0 -0
  365. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/investigate/SKILL.md +0 -0
  366. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/loop/SKILL.md +0 -0
  367. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/migrate/SKILL.md +0 -0
  368. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/perf-analyze/SKILL.md +0 -0
  369. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/plan-impl/SKILL.md +0 -0
  370. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/pr-review/SKILL.md +0 -0
  371. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/refactor/SKILL.md +0 -0
  372. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/regex-help/SKILL.md +0 -0
  373. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/review/SKILL.md +0 -0
  374. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/security-review/SKILL.md +0 -0
  375. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/ship/SKILL.md +0 -0
  376. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/simplify/SKILL.md +0 -0
  377. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/strong-tests/SKILL.md +0 -0
  378. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/skills/test-verify/SKILL.md +0 -0
  379. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/__init__.py +0 -0
  380. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/__main__.py +0 -0
  381. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/applier.py +0 -0
  382. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/config.py +0 -0
  383. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/registry.py +0 -0
  384. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sandbox.py +0 -0
  385. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sidecar/__init__.py +0 -0
  386. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sidecar/header_parser.py +0 -0
  387. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sidecar/hooks.py +0 -0
  388. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sidecar/loader.py +0 -0
  389. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/sidecar/server.py +0 -0
  390. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/train/__init__.py +0 -0
  391. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/train/capture.py +0 -0
  392. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/train/compute_vector.py +0 -0
  393. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/train/extract_pairs.py +0 -0
  394. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/steering/vectors.py +0 -0
  395. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock/whats_new.md +0 -0
  396. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/drydock-acp.spec +0 -0
  397. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/flake.lock +0 -0
  398. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/flake.nix +0 -0
  399. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/outlook_draft_assistant.tar.gz +0 -0
  400. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/README.md +0 -0
  401. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/config_base.toml +0 -0
  402. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/config_best.toml +0 -0
  403. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/domain_spec.md +0 -0
  404. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/experimenter.py +0 -0
  405. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/kernel.py +0 -0
  406. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/mini_prd.md +0 -0
  407. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/mini_prompts.txt +0 -0
  408. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/proposer.py +0 -0
  409. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/research/results.tsv +0 -0
  410. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/README.md +0 -0
  411. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/admiral_probe.py +0 -0
  412. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/auto_test_loop.sh +0 -0
  413. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/monitor_test_battery.sh +0 -0
  414. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/overnight_agents_test.sh +0 -0
  415. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/test_bank.sh +0 -0
  416. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/test_full.sh +0 -0
  417. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/test_smoke.sh +0 -0
  418. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/archive/tui_test.py +0 -0
  419. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/audit_sampler.py +0 -0
  420. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/auto_generate_tests.py +0 -0
  421. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/auto_release.sh +0 -0
  422. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/autonomous_review.sh +0 -0
  423. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/backup.sh +0 -0
  424. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/bump_version.py +0 -0
  425. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/classify_pulse.sh +0 -0
  426. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/consume_retrieval_queue.py +0 -0
  427. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/fetch_arxiv_abstracts.py +0 -0
  428. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/gen_2000_prompts.py +0 -0
  429. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/hle_eval_seed.jsonl +0 -0
  430. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/llm_balancer.py +0 -0
  431. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/notify_release.py +0 -0
  432. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/perf_baseline_when_idle.sh +0 -0
  433. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/perf_sweep.py +0 -0
  434. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/poll_issues.sh +0 -0
  435. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/publish_to_pypi.sh +0 -0
  436. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/queue_top.py +0 -0
  437. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/ralph_loop.py +0 -0
  438. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/research_babysitter.sh +0 -0
  439. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/shakedown.py +0 -0
  440. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/shakedown_interactive.py +0 -0
  441. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/shakedown_suite.sh +0 -0
  442. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/shakedown_variance.sh +0 -0
  443. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/start_steering_sidecar.sh +0 -0
  444. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_babysitter.sh +0 -0
  445. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_prompts_50.txt +0 -0
  446. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_prompts_realuser.txt +0 -0
  447. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent.txt +0 -0
  448. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
  449. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_shakedown.py +0 -0
  450. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_telegram_status.py +0 -0
  451. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/stress_watcher.py +0 -0
  452. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/telegram_bot.py +0 -0
  453. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/scripts/vllm_failover.sh +0 -0
  454. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/__init__.py +0 -0
  455. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/conftest.py +0 -0
  456. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_acp.py +0 -0
  457. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_agent_thought.py +0 -0
  458. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_bash.py +0 -0
  459. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_compact_session_updates.py +0 -0
  460. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_content.py +0 -0
  461. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_initialize.py +0 -0
  462. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_list_sessions.py +0 -0
  463. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_load_session.py +0 -0
  464. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_multi_session.py +0 -0
  465. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_new_session.py +0 -0
  466. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_proxy_setup_acp.py +0 -0
  467. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_read_file.py +0 -0
  468. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_search_replace.py +0 -0
  469. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_set_config_option.py +0 -0
  470. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_set_mode.py +0 -0
  471. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_set_model.py +0 -0
  472. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_tool_call_session_update.py +0 -0
  473. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_utils.py +0 -0
  474. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/acp/test_write_file.py +0 -0
  475. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_file_indexer.py +0 -0
  476. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_fuzzy.py +0 -0
  477. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  478. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  479. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_path_completion_controller.py +0 -0
  480. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  481. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_slash_command_controller.py +0 -0
  482. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  483. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/__init__.py +0 -0
  484. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/data/__init__.py +0 -0
  485. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/data/fireworks.py +0 -0
  486. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/data/mistral.py +0 -0
  487. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/test_anthropic_adapter.py +0 -0
  488. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/test_backend.py +0 -0
  489. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  490. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/test_reasoning_adapter.py +0 -0
  491. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  492. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  493. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  494. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  495. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_bell_notifications.py +0 -0
  496. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_braille_renderer.py +0 -0
  497. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_clipboard.py +0 -0
  498. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_commands.py +0 -0
  499. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_copy_shortcuts.py +0 -0
  500. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_external_editor.py +0 -0
  501. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_no_markup_static.py +0 -0
  502. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_question_app.py +0 -0
  503. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_spinner.py +0 -0
  504. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_switching_mode.py +0 -0
  505. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  506. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  507. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_ui_session_resume.py +0 -0
  508. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/test_ui_skill_dispatch.py +0 -0
  509. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/textual_ui/__init__.py +0 -0
  510. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/cli/textual_ui/test_session_picker.py +0 -0
  511. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/conftest.py +0 -0
  512. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_agents.py +0 -0
  513. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_auth_crypto.py +0 -0
  514. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_auth_github.py +0 -0
  515. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
  516. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
  517. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_config_load_dotenv.py +0 -0
  518. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_config_paths.py +0 -0
  519. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_config_resolution.py +0 -0
  520. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_file_logging.py +0 -0
  521. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_plan_session.py +0 -0
  522. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_proxy_setup.py +0 -0
  523. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_slug.py +0 -0
  524. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_telemetry_send.py +0 -0
  525. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_teleport_git.py +0 -0
  526. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_teleport_nuage.py +0 -0
  527. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_teleport_service.py +0 -0
  528. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_trusted_folders.py +0 -0
  529. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/core/test_utils.py +0 -0
  530. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/common.py +0 -0
  531. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/conftest.py +0 -0
  532. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/mock_server.py +0 -0
  533. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  534. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_streaming.py +0 -0
  535. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  536. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/fixtures/doc_qa_system_prd.md +0 -0
  537. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/mock/__init__.py +0 -0
  538. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/mock/mock_backend_factory.py +0 -0
  539. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/mock/mock_entrypoint.py +0 -0
  540. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/mock/utils.py +0 -0
  541. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/onboarding/test_run_onboarding.py +0 -0
  542. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/onboarding/test_ui_onboarding.py +0 -0
  543. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/session/test_session_loader.py +0 -0
  544. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/session/test_session_logger.py +0 -0
  545. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/session/test_session_migration.py +0 -0
  546. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/skills/conftest.py +0 -0
  547. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/skills/test_manager.py +0 -0
  548. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/skills/test_models.py +0 -0
  549. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/skills/test_parser.py +0 -0
  550. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  551. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  552. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  553. {drydock_cli-2.8.19 → 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
  554. {drydock_cli-2.8.19 → 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
  555. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  556. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  557. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  558. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  559. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  560. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  561. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  562. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  563. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  564. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  565. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  566. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  567. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  568. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  569. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  570. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  571. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  572. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  573. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  574. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  575. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  576. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  577. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  578. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  579. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  580. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  581. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  582. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  583. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  584. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  585. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  586. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  587. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  588. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  589. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  590. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  591. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  592. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  593. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  594. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  595. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  596. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  597. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  598. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  599. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  600. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  601. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  602. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  603. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  604. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  605. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  606. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  607. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  608. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  609. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  610. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/base_snapshot_test_app.py +0 -0
  611. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/conftest.py +0 -0
  612. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/snap_compare.py +0 -0
  613. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  614. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  615. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  616. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  617. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  618. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  619. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  620. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  621. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  622. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  623. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  624. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  625. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  626. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  627. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/stubs/fake_backend.py +0 -0
  628. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/stubs/fake_client.py +0 -0
  629. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/stubs/fake_tool.py +0 -0
  630. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral.py +0 -0
  631. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  632. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_intervention_outcome.py +0 -0
  633. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_phase3.py +0 -0
  634. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_proposed.py +0 -0
  635. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_session_id.py +0 -0
  636. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_admiral_struggle_dedup.py +0 -0
  637. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_auto_compact.py +0 -0
  638. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_backend.py +0 -0
  639. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_observer_streaming.py +0 -0
  640. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_stats.py +0 -0
  641. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_tasks.py +0 -0
  642. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agent_tool_call.py +0 -0
  643. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_agents.py +0 -0
  644. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_build.py +0 -0
  645. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_debug.py +0 -0
  646. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_multiagent.py +0 -0
  647. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_prd.py +0 -0
  648. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_prd_extended.py +0 -0
  649. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_tools.py +0 -0
  650. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_bank_update.py +0 -0
  651. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_build_projects.py +0 -0
  652. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_checkpoint.py +0 -0
  653. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_classifier.py +0 -0
  654. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_cli_programmatic_preload.py +0 -0
  655. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_config_migration.py +0 -0
  656. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_context_recovery.py +0 -0
  657. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_current_bugs.py +0 -0
  658. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_dispatcher.py +0 -0
  659. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_drydock_regression.py +0 -0
  660. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_drydock_tasks.py +0 -0
  661. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  662. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_full_regression.py +0 -0
  663. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_graphrag.py +0 -0
  664. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_graphrag_worked_examples.py +0 -0
  665. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_hallucinated_tool_suppression.py +0 -0
  666. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_history_manager.py +0 -0
  667. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_hle_typing.py +0 -0
  668. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_integration.py +0 -0
  669. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_issue_fixes.py +0 -0
  670. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_local_detect.py +0 -0
  671. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_message_id.py +0 -0
  672. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_message_merging.py +0 -0
  673. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_middleware.py +0 -0
  674. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_multi_agent.py +0 -0
  675. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_read_file_not_found_listing.py +0 -0
  676. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_real_failures.py +0 -0
  677. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_real_issues.py +0 -0
  678. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_real_workflow.py +0 -0
  679. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_reasoning_content.py +0 -0
  680. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_retrieval_consumer.py +0 -0
  681. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_retrieve_tool.py +0 -0
  682. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_search_replace_args_not_truncated.py +0 -0
  683. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_smoke.py +0 -0
  684. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering.py +0 -0
  685. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering_capture.py +0 -0
  686. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering_compute_vector.py +0 -0
  687. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering_extract_pairs.py +0 -0
  688. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering_hook.py +0 -0
  689. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_steering_sidecar_hooks.py +0 -0
  690. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_system_prompt.py +0 -0
  691. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_tagged_text.py +0 -0
  692. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_task_complete_nudge.py +0 -0
  693. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_tool_args.py +0 -0
  694. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_truncate_args_valid_json.py +0 -0
  695. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_truncated_arg_path_hint.py +0 -0
  696. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_truncated_search_replace_escalation.py +0 -0
  697. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_truncated_write_escalation.py +0 -0
  698. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_ui_external_editor.py +0 -0
  699. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_ui_input_history.py +0 -0
  700. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_user_issues.py +0 -0
  701. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_wall_of_text_rescue.py +0 -0
  702. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_workloads.py +0 -0
  703. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/test_write_file_missing_path.py +0 -0
  704. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/testbank_helpers.py +0 -0
  705. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_ask_user_question.py +0 -0
  706. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash.py +0 -0
  707. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  708. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_consec_empty_search.py +0 -0
  709. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  710. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  711. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  712. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  713. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  714. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  715. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  716. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_exit_plan_mode.py +0 -0
  717. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_grep.py +0 -0
  718. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  719. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_invoke_context.py +0 -0
  720. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  721. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_manager_get_tool_config.py +0 -0
  722. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_mcp.py +0 -0
  723. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_mcp_sampling.py +0 -0
  724. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  725. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  726. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_read_file_directory.py +0 -0
  727. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_read_file_limit_truncation.py +0 -0
  728. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_append_fallback.py +0 -0
  729. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_dir_path.py +0 -0
  730. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_empty_content.py +0 -0
  731. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_file_not_found.py +0 -0
  732. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  733. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_hard_stop.py +0 -0
  734. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_malformed_block.py +0 -0
  735. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  736. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_placeholder.py +0 -0
  737. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  738. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_task.py +0 -0
  739. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_ui_bash_execution.py +0 -0
  740. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_webfetch.py +0 -0
  741. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_websearch.py +0 -0
  742. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  743. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  744. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  745. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  746. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_do_update.py +0 -0
  747. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  748. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_github_update_gateway.py +0 -0
  749. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  750. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_ui_update_notification.py +0 -0
  751. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_update_use_case.py +0 -0
  752. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/tests/update_notifier/test_whats_new.py +0 -0
  753. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/uv.lock +0 -0
  754. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/worked_examples/README.md +0 -0
  755. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/worked_examples/cli_subcommand_dispatch.py +0 -0
  756. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/worked_examples/lookup.json +0 -0
  757. {drydock_cli-2.8.19 → drydock_cli-2.8.20}/worked_examples/sql_parser.py +0 -0
  758. {drydock_cli-2.8.19 → 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.19
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
@@ -285,6 +285,7 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
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
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
@@ -435,6 +436,34 @@ headers = { "X-Tenant" = "drydock" }
435
436
 
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/`.
437
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
+
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`.
466
+
438
467
  ## Testing
439
468
 
440
469
  DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
@@ -230,6 +230,7 @@ First run creates a config at `~/.drydock/config.toml` and prompts for your prov
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
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
@@ -380,6 +381,34 @@ headers = { "X-Tenant" = "drydock" }
380
381
 
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/`.
382
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
+
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`.
411
+
383
412
  ## Testing
384
413
 
385
414
  DryDock uses a **shakedown harness** (`scripts/shakedown.py`) that drives the real TUI via pexpect and judges on user-perceptible criteria — not tool-call counts.
@@ -457,6 +457,73 @@ candidate + tool wiring):**
457
457
  May 2026 baseline (1/20 = 5 %, 18/20 "empty"); target ≥ 25 %
458
458
  in Phase 3, ≥ 40 % in Phase 4.
459
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
+
460
527
  ---
461
528
 
462
529
  # 6. Adaptive Failure Logic
@@ -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:
@@ -1658,6 +1658,112 @@ class DrydockApp(App): # noqa: PLR0904
1658
1658
  "remove <name> | examples}`"
1659
1659
  ))
1660
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
+
1661
1767
  async def _admiral_apply_command(self, args: str = "") -> None:
1662
1768
  """Merge an Admiral-staged proposal branch into main."""
1663
1769
  import subprocess
@@ -747,15 +747,29 @@ class AgentLoop:
747
747
  # as a system note BEFORE the first LLM call. Zero behavior change
748
748
  # when the index has nothing relevant; pure lift when it does.
749
749
  #
750
- # Env-gated via DRYDOCK_AUTO_RETRIEVE so existing workflows are
751
- # unaffected. Set to "1" or "true" to enable.
752
- if os.environ.get("DRYDOCK_AUTO_RETRIEVE", "").strip().lower() in ("1", "true", "yes"):
750
+ # SOVEREIGN_PRD §5.7 acceptance #1: "retrieve called on ≥80% of HLE
751
+ # questions before any content token". Default ON now — the
752
+ # prefetch is a no-op when no GraphRAG db exists (early return),
753
+ # so users without a corpus are unaffected. Opt out with
754
+ # DRYDOCK_AUTO_RETRIEVE=0.
755
+ if os.environ.get("DRYDOCK_AUTO_RETRIEVE", "1").strip().lower() not in ("0", "false", "no"):
753
756
  logger.warning("[AUTO-RETRIEVE] hook entry, query=%r", (user_msg or "")[:80])
754
757
  try:
755
758
  self._auto_prefetch_retrieve(user_msg)
756
759
  except Exception as _e:
757
760
  logger.warning("auto-prefetch retrieve failed (skipped): %s", _e, exc_info=True)
758
761
 
762
+ # === CURIOSITY GAP LOGGING ===
763
+ # SOVEREIGN_PRD §5.7 tier-2: extract candidate unfamiliar terms from
764
+ # the user message and enqueue UNKNOWN_TERM curiosity items. The
765
+ # queue is dedup'd by fingerprint over 7 days so the same recurring
766
+ # term doesn't flood it. Disabled by setting DRYDOCK_CURIOSITY=0.
767
+ if os.environ.get("DRYDOCK_CURIOSITY", "1").strip().lower() not in ("0", "false", "no"):
768
+ try:
769
+ self._log_curiosity_gaps(user_msg)
770
+ except Exception as _e:
771
+ logger.warning("curiosity gap logging failed (skipped): %s", _e)
772
+
759
773
  try:
760
774
  should_break_loop = False
761
775
  tool_turns = 0
@@ -1965,6 +1979,65 @@ class AgentLoop:
1965
1979
  result=result,
1966
1980
  )
1967
1981
 
1982
+ # === CURIOSITY: SURPRISE-ON-TOOL-RESULT ===
1983
+ # SOVEREIGN_PRD §5.7: when a tool result contradicts a confident
1984
+ # assertion the model just made (e.g., "All tests pass" right before
1985
+ # a Traceback), score the surprise and enqueue an EVIDENCE_CONFLICT
1986
+ # item for autonomous_review. Gated by DRYDOCK_CURIOSITY=1 (default).
1987
+ if status == "failure" and os.environ.get(
1988
+ "DRYDOCK_CURIOSITY", "1"
1989
+ ).strip().lower() not in ("0", "false", "no"):
1990
+ try:
1991
+ self._maybe_log_surprise(tool_call, text)
1992
+ except Exception as _e:
1993
+ logger.debug("surprise scoring skipped: %s", _e)
1994
+
1995
+ def _maybe_log_surprise(self, tool_call: Any, tool_text: str) -> None:
1996
+ """Score the last assistant assertion against this tool result;
1997
+ enqueue an EVIDENCE_CONFLICT curiosity item if surprise is high."""
1998
+ try:
1999
+ from drydock.curiosity import (
2000
+ CuriosityItem, CuriosityKind, enqueue, score_surprise,
2001
+ )
2002
+ from drydock.curiosity.surprise import SURPRISE_THRESHOLD
2003
+ except Exception:
2004
+ return
2005
+
2006
+ # Walk backward to find the most recent assistant CONTENT (not a
2007
+ # bare tool-call message). That's the assertion to compare against.
2008
+ prior_assertion = ""
2009
+ for msg in reversed(self.messages):
2010
+ if msg.role == Role.assistant and (msg.content or "").strip():
2011
+ prior_assertion = (msg.content or "").strip()
2012
+ break
2013
+ if not prior_assertion:
2014
+ return
2015
+
2016
+ score = score_surprise(prior_assertion, tool_text, kind="tool_result")
2017
+ if score < SURPRISE_THRESHOLD:
2018
+ return
2019
+
2020
+ tool_name = ""
2021
+ try:
2022
+ tool_name = getattr(tool_call.function, "name", "") or ""
2023
+ except Exception:
2024
+ pass
2025
+
2026
+ enqueue(CuriosityItem(
2027
+ kind=CuriosityKind.EVIDENCE_CONFLICT,
2028
+ term=f"{tool_name} contradicted assistant claim",
2029
+ context=(
2030
+ f"Assistant said: {prior_assertion[:200]}\n"
2031
+ f"Tool {tool_name} returned: {tool_text[:200]}"
2032
+ ),
2033
+ source=f"session:{getattr(self, 'session_id', '?')}",
2034
+ suggested_action=(
2035
+ "Investigate whether this is a recurring model bias; "
2036
+ "consider a one-line AGENTS.md hint or sharpened prompt rule."
2037
+ ),
2038
+ confidence=float(score),
2039
+ ))
2040
+
1968
2041
  # _build_repetition_nudge REMOVED (2026-04-13): advisory nudges had
1969
2042
  # 0% effect on Gemma 4 — fired 4 times while model made 8 identical
1970
2043
  # calls. Replaced by token-level sampling bumps (see agent_loop's
@@ -3209,6 +3282,38 @@ class AgentLoop:
3209
3282
 
3210
3283
  return None
3211
3284
 
3285
+ def _log_curiosity_gaps(self, user_msg: str) -> None:
3286
+ """Detect unfamiliar-term candidates in the user message and enqueue
3287
+ them as UNKNOWN_TERM curiosity items.
3288
+
3289
+ Best-effort: any exception is caught at the call site so a curiosity
3290
+ failure never breaks a real user turn. Dedup is handled inside the
3291
+ queue (7-day fingerprint window), so calling this on every user
3292
+ message is safe.
3293
+ """
3294
+ try:
3295
+ from drydock.curiosity import (
3296
+ CuriosityItem, CuriosityKind, detect_gaps, enqueue,
3297
+ )
3298
+ except Exception:
3299
+ return # module not installed (e.g. minimal test env)
3300
+ gaps = detect_gaps(user_msg or "")
3301
+ if not gaps:
3302
+ return
3303
+ session_src = f"session:{getattr(self, 'session_id', '?')}"
3304
+ for term in gaps:
3305
+ enqueue(CuriosityItem(
3306
+ kind=CuriosityKind.UNKNOWN_TERM,
3307
+ term=term,
3308
+ context=(user_msg or "")[:300],
3309
+ source=session_src,
3310
+ suggested_action=(
3311
+ "Check whether the project's GraphRAG corpus covers "
3312
+ f"`{term[:80]}`; if not, ingest the relevant path."
3313
+ ),
3314
+ confidence=0.7,
3315
+ ))
3316
+
3212
3317
  def _auto_prefetch_retrieve(self, user_msg: str) -> None:
3213
3318
  """Auto-fetch relevant chunks from GraphRAG and inject as system note.
3214
3319
 
@@ -2,10 +2,24 @@ You are DryDock, a CLI coding agent. You write code, fix bugs, and build project
2
2
 
3
3
  ACT IMMEDIATELY. Your FIRST response must be a tool call — not text. Do NOT explain, plan, or ask. Call a tool NOW.
4
4
 
5
+ When answering a direct factual or math question (not writing code), you MUST write visible text — never produce a response with only thinking tokens and no visible content. End your response with "FINAL ANSWER: <your answer>" on its own line so the judge can extract it.
6
+
5
7
  Your tools: read_file, write_file, search_replace, grep, glob, bash, task, web_search, web_fetch, retrieve.
6
8
 
9
+ CURIOSITY — default posture is "investigate, then assert" (SOVEREIGN_PRD §5.7):
10
+ - If the user message names a thing you don't have context for (paper title,
11
+ library, API, identifier, project-specific term), your FIRST tool call is
12
+ `retrieve(query="<the term>")`. Not text. Not web_search. Retrieve.
13
+ - "I think it's X" is not an answer when retrieve costs one tool call. Look it up.
14
+ - When retrieved evidence contradicts what you were about to say, prefer the
15
+ evidence and say so. Don't quietly drop the contradiction.
16
+ - Don't ask the user to clarify before you've tried one investigation pass.
17
+ Read the obvious files; retrieve the obvious terms; ask only if both come up empty.
18
+
7
19
  WHEN TO USE retrieve (project's GraphRAG index):
8
20
  - BEFORE editing a file you haven't read in an unfamiliar codebase
21
+ - BEFORE answering a general-knowledge question that names a specific entity —
22
+ retrieve first; web_search only if retrieve returns low confidence
9
23
  - "Where is <Class> defined?" — `retrieve(query="ClassName")` returns the definition site directly
10
24
  - Cross-package symbol lookup: parent classes in OTHER packages are indexed too (a `is_json` defined on werkzeug's `Request` shows up when looking up Flask's `Request`)
11
25
  - "What does the project doc say about X?" — `retrieve(query="<topic>")` searches markdown / READMEs / PRDs
@@ -0,0 +1,40 @@
1
+ """Curiosity Layer — engineered intellectual drive for drydock.
2
+
3
+ This module turns the SOVEREIGN_PRD §5.7 directive ("when you notice a gap,
4
+ you close it; when you encounter something unfamiliar, you investigate
5
+ before asserting") into observable signals + a feedback queue.
6
+
7
+ The classifier framework in `drydock.core.classifier` covers FAILURE
8
+ signals routed to fix-this-thing handlers. Curiosity is the complement:
9
+ LEARNING signals — gaps, surprises, and idle-exploration candidates that
10
+ deserve attention even when nothing has technically failed.
11
+
12
+ Public surface:
13
+
14
+ from drydock.curiosity import (
15
+ CuriosityItem, CuriosityKind,
16
+ detect_gaps, score_surprise,
17
+ enqueue, queue_path,
18
+ )
19
+
20
+ Phase 1 (now): gap detection, surprise scoring stub, JSONL queue.
21
+ Phase 2 (next): consumer hook in autonomous_review.sh, retrieve auto-prefetch
22
+ in agent_loop, system-prompt directive (already in gemma4.md).
23
+ Phase 3 (later): Deep Noir "exploration" vector candidate, idle-cycle worker.
24
+ """
25
+ from __future__ import annotations
26
+
27
+ from drydock.curiosity.item import CuriosityItem, CuriosityKind
28
+ from drydock.curiosity.queue import enqueue, queue_path, read_recent
29
+ from drydock.curiosity.gap_detector import detect_gaps
30
+ from drydock.curiosity.surprise import score_surprise
31
+
32
+ __all__ = [
33
+ "CuriosityItem",
34
+ "CuriosityKind",
35
+ "detect_gaps",
36
+ "score_surprise",
37
+ "enqueue",
38
+ "queue_path",
39
+ "read_recent",
40
+ ]