drydock-cli 2.10.2__tar.gz → 2.10.4__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 (726) hide show
  1. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/PKG-INFO +1 -1
  2. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/detectors_proposed.py +3 -4
  3. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/history.py +2 -2
  4. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/metrics.py +2 -2
  5. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/opus_escalator.py +1 -1
  6. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/persistence.py +3 -3
  7. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/stager.py +2 -2
  8. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/cli.py +2 -2
  9. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/entrypoint.py +44 -13
  10. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/app.py +0 -1
  11. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +3 -3
  12. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/messages.py +4 -2
  13. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/agent_loop.py +113 -51
  14. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/auto_solve.py +4 -3
  15. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/build_orchestrator.py +13 -15
  16. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/checkpoint.py +3 -3
  17. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/classifier.py +2 -2
  18. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/dispatcher.py +1 -2
  19. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/rules.py +1 -1
  20. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/_dotenv.py +3 -4
  21. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/local_detect.py +1 -1
  22. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/constraint_extract.py +5 -4
  23. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/constraint_hint.py +0 -1
  24. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/context_recovery.py +0 -1
  25. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/drydock_states.py +1 -2
  26. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/goal.py +1 -1
  27. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/hooks.py +1 -2
  28. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/format.py +3 -3
  29. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/grammar/_llamacpp_converter.py +37 -32
  30. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/grammar/policy.py +0 -1
  31. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/grammar/policy_union.py +0 -1
  32. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/programmatic.py +1 -1
  33. drydock_cli-2.10.4/drydock/core/prompts/gemma4.md +213 -0
  34. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/checkpoints.py +0 -1
  35. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/state_file.py +2 -2
  36. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session_checker.py +1 -1
  37. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/_task_manager.py +0 -3
  38. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/algebra_tool.py +3 -3
  39. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/bash.py +19 -23
  40. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/chemistry_tool.py +120 -120
  41. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/count_tool.py +1 -1
  42. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/linear_algebra_tool.py +3 -3
  43. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/logic_tool.py +14 -15
  44. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/lsp.py +1 -1
  45. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/math_tool.py +1 -1
  46. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/memory_tool.py +1 -1
  47. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/notebook_edit.py +2 -2
  48. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/number_theory_tool.py +3 -3
  49. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/powershell.py +1 -2
  50. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prolog_tool.py +4 -4
  51. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/read_file.py +2 -3
  52. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/search_replace.py +11 -12
  53. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/set_tool.py +3 -3
  54. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/solve_tool.py +3 -3
  55. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/stats_tool.py +5 -5
  56. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/task.py +1 -1
  57. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/todo.py +1 -1
  58. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/tool_search.py +1 -1
  59. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/units_tool.py +3 -5
  60. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/verify_tool.py +1 -2
  61. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/worktree.py +1 -2
  62. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/write_file.py +11 -45
  63. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/injection_guard.py +1 -1
  64. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/__main__.py +3 -2
  65. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/gap_detector.py +2 -1
  66. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/ingest.py +8 -8
  67. drydock_cli-2.10.4/drydock/data/cookbook/tbench_domains/dense_eigenvalue.md +135 -0
  68. drydock_cli-2.10.4/drydock/data/cookbook/tbench_domains/llm_batching_scheduler.md +137 -0
  69. drydock_cli-2.10.4/drydock/data/cookbook/tbench_domains/xss_filter.md +153 -0
  70. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/__main__.py +1 -1
  71. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/code_indexer.py +1 -1
  72. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/storage.py +5 -6
  73. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/text_indexer.py +1 -1
  74. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/applier.py +3 -2
  75. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/config.py +3 -3
  76. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sandbox.py +2 -2
  77. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sidecar/hooks.py +8 -7
  78. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/train/capture.py +3 -3
  79. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/train/extract_pairs.py +6 -5
  80. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/train/scan_sessions.py +7 -6
  81. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/vectors.py +3 -3
  82. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/pyproject.toml +1 -1
  83. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/stress/test_io_thrash.py +10 -7
  84. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_intervention_outcome.py +0 -1
  85. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_session_id.py +1 -3
  86. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_tasks.py +0 -8
  87. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_algebra_tool.py +0 -1
  88. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_api_error_recovery.py +0 -1
  89. drydock_cli-2.10.4/tests/test_auto_retrieve_cookbook_bypass.py +52 -0
  90. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_auto_retrieve_soft_nudge.py +2 -3
  91. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_auto_solve.py +1 -1
  92. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_build.py +5 -12
  93. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_debug.py +0 -3
  94. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_multiagent.py +4 -10
  95. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_prd.py +7 -13
  96. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_tools.py +2 -6
  97. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_update.py +5 -13
  98. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_build_projects.py +7 -7
  99. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_checkpoint.py +0 -2
  100. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_chemistry_tool.py +0 -1
  101. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_classifier.py +0 -2
  102. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_config_migration.py +0 -1
  103. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_curiosity.py +0 -1
  104. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_current_bugs.py +4 -4
  105. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_dispatch_report.py +2 -2
  106. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_dispatcher.py +0 -1
  107. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_drydock_regression.py +1 -2
  108. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_drydock_tasks.py +0 -1
  109. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_full_regression.py +12 -4
  110. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_grammar.py +0 -2
  111. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_graphrag_worked_examples.py +0 -3
  112. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_hallucinated_tool_suppression.py +0 -1
  113. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_integration.py +0 -4
  114. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_issue_fixes.py +0 -3
  115. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_linear_algebra_tool.py +0 -1
  116. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_local_detect.py +1 -1
  117. drydock_cli-2.10.4/tests/test_local_detect_fallback.py +86 -0
  118. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_logic_tool.py +0 -3
  119. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_loop_detection.py +16 -17
  120. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_loop_regressions_2026_06_06.py +2 -3
  121. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_math_docs_lazy_injection.py +1 -2
  122. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_mcp_settings.py +0 -1
  123. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_multi_agent.py +4 -4
  124. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_number_theory_tool.py +0 -1
  125. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_prolog_tool.py +0 -2
  126. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_read_file_not_found_listing.py +1 -2
  127. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_read_file_notebook_slim.py +1 -1
  128. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_real_failures.py +1 -5
  129. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_real_issues.py +3 -6
  130. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_real_workflow.py +3 -4
  131. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_rejudge_hle.py +6 -3
  132. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_retrieval_consumer.py +3 -7
  133. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_search_replace_args_not_truncated.py +2 -3
  134. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_search_replace_syntax_rollback.py +0 -1
  135. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_session_log_event.py +0 -1
  136. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_set_tool.py +0 -1
  137. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_smoke.py +2 -12
  138. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_solve_tool.py +0 -1
  139. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_stats_tool.py +1 -2
  140. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_task_complete_nudge.py +0 -1
  141. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_tool_args.py +0 -3
  142. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_tool_call_loops_regression_suite.py +0 -1
  143. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_truncate_args_valid_json.py +1 -2
  144. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_units_tool.py +0 -1
  145. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_user_issues.py +0 -1
  146. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_validation_error_scrub.py +1 -1
  147. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_workloads.py +1 -1
  148. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_write_file_missing_path.py +0 -1
  149. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/testbank_helpers.py +1 -2
  150. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash.py +1 -1
  151. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_echo_escape_loop_breaker.py +1 -1
  152. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_empty_search_loop_breaker.py +1 -1
  153. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_heredoc_confirmation.py +2 -2
  154. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_pre_rename_hook.py +0 -1
  155. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_read_file_dedup_reembed.py +0 -1
  156. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_read_file_directory.py +0 -1
  157. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_read_file_limit_truncation.py +0 -1
  158. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_dir_path.py +0 -2
  159. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_empty_content.py +0 -1
  160. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_file_not_found.py +1 -2
  161. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_first_failure_hint.py +0 -1
  162. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_placeholder.py +0 -1
  163. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_refused_loop_breaker.py +1 -1
  164. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_write_file_dedup_missing_imports.py +0 -1
  165. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_write_file_missing_main_module.py +0 -1
  166. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_write_file_multifile_rename.py +0 -1
  167. drydock_cli-2.10.2/drydock/core/prompts/gemma4.md +0 -315
  168. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/.gitignore +0 -0
  169. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/LICENSE +0 -0
  170. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/NOTICE +0 -0
  171. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/README.md +0 -0
  172. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/distribution/zed/LICENSE +0 -0
  173. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/docs/README.md +0 -0
  174. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/__init__.py +0 -0
  175. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/__main__.py +0 -0
  176. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/__init__.py +0 -0
  177. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/acp_agent_loop.py +0 -0
  178. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/acp_logger.py +0 -0
  179. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/entrypoint.py +0 -0
  180. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/__init__.py +0 -0
  181. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/base.py +0 -0
  182. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/builtins/bash.py +0 -0
  183. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/builtins/read_file.py +0 -0
  184. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/builtins/search_replace.py +0 -0
  185. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/builtins/todo.py +0 -0
  186. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/builtins/write_file.py +0 -0
  187. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/tools/session_update.py +0 -0
  188. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/acp/utils.py +0 -0
  189. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/__init__.py +0 -0
  190. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/detectors.py +0 -0
  191. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/interventions.py +0 -0
  192. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/llm_analyzer.py +0 -0
  193. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/policy.py +0 -0
  194. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/proposer.py +0 -0
  195. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/task_classifier.py +0 -0
  196. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/tuning.py +0 -0
  197. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/validator.py +0 -0
  198. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/admiral/worker.py +0 -0
  199. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/__init__.py +0 -0
  200. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/autocompletion/__init__.py +0 -0
  201. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/autocompletion/base.py +0 -0
  202. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/autocompletion/path_completion.py +0 -0
  203. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/autocompletion/slash_command.py +0 -0
  204. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/clipboard.py +0 -0
  205. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/commands.py +0 -0
  206. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/fix_windows_path.py +0 -0
  207. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/history_manager.py +0 -0
  208. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  209. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  210. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  211. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/terminal_setup.py +0 -0
  212. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/__init__.py +0 -0
  213. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  214. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/app.tcss +0 -0
  215. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/external_editor.py +0 -0
  216. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  217. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  218. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  219. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  220. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  221. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  222. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  223. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  224. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  225. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  226. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  227. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  228. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  229. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  230. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  231. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  232. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  233. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  234. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  235. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  236. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  237. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  238. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  239. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  240. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  241. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  242. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  243. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  244. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  245. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  246. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  247. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  248. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  249. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  250. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  251. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/windowing/history.py +0 -0
  252. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  253. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/textual_ui/windowing/state.py +0 -0
  254. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/__init__.py +0 -0
  255. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  256. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  257. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  258. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  259. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  260. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/update.py +0 -0
  261. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/cli/update_notifier/whats_new.py +0 -0
  262. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/__init__.py +0 -0
  263. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/agents/__init__.py +0 -0
  264. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/agents/manager.py +0 -0
  265. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/agents/models.py +0 -0
  266. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/auth/__init__.py +0 -0
  267. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/auth/crypto.py +0 -0
  268. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/auth/github.py +0 -0
  269. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/__init__.py +0 -0
  270. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/completers.py +0 -0
  271. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  272. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  273. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  274. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  275. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  276. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/fuzzy.py +0 -0
  277. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/path_prompt.py +0 -0
  278. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  279. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/__init__.py +0 -0
  280. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/__main__.py +0 -0
  281. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/classifier/signal.py +0 -0
  282. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/__init__.py +0 -0
  283. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/_settings.py +0 -0
  284. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/doctor.py +0 -0
  285. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/harness_files/__init__.py +0 -0
  286. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  287. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/harness_files/_paths.py +0 -0
  288. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/config/migrate.py +0 -0
  289. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/consultant.py +0 -0
  290. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/__init__.py +0 -0
  291. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/anthropic.py +0 -0
  292. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/base.py +0 -0
  293. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/factory.py +0 -0
  294. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/generic.py +0 -0
  295. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/mistral.py +0 -0
  296. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  297. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/backend/vertex.py +0 -0
  298. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/exceptions.py +0 -0
  299. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/grammar/__init__.py +0 -0
  300. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/message_utils.py +0 -0
  301. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/llm/types.py +0 -0
  302. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/logger.py +0 -0
  303. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/middleware.py +0 -0
  304. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/output_formatters.py +0 -0
  305. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/paths/__init__.py +0 -0
  306. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/paths/_drydock_home.py +0 -0
  307. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/paths/_local_config_walk.py +0 -0
  308. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/paths/conventions.py +0 -0
  309. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/plan_session.py +0 -0
  310. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/plugins.py +0 -0
  311. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/__init__.py +0 -0
  312. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/builder.md +0 -0
  313. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/cli.md +0 -0
  314. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/compact.md +0 -0
  315. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/dangerous_directory.md +0 -0
  316. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/diagnostic.md +0 -0
  317. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/explore.md +0 -0
  318. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/gemma4_math.md +0 -0
  319. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/gemma4_slim.md +0 -0
  320. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/planner.md +0 -0
  321. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/project_context.md +0 -0
  322. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/prompts/tests.md +0 -0
  323. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/proxy_setup.py +0 -0
  324. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/agent_memory.py +0 -0
  325. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/session_loader.py +0 -0
  326. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/session_logger.py +0 -0
  327. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/session/session_migration.py +0 -0
  328. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/skills/__init__.py +0 -0
  329. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/skills/manager.py +0 -0
  330. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/skills/models.py +0 -0
  331. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/skills/parser.py +0 -0
  332. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/slug.py +0 -0
  333. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/spec_check.py +0 -0
  334. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/steering_hook.py +0 -0
  335. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/system_prompt.py +0 -0
  336. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/telemetry/__init__.py +0 -0
  337. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/telemetry/send.py +0 -0
  338. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/teleport/errors.py +0 -0
  339. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/teleport/git.py +0 -0
  340. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/teleport/nuage.py +0 -0
  341. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/teleport/teleport.py +0 -0
  342. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/teleport/types.py +0 -0
  343. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/base.py +0 -0
  344. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  345. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/cron.py +0 -0
  346. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  347. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/glob_tool.py +0 -0
  348. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/grep.py +0 -0
  349. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  350. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  351. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
  352. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  353. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  354. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  355. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  356. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  357. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  358. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  359. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  360. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  361. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  362. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  363. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  364. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  365. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  366. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  367. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/task.md +0 -0
  368. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  369. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  370. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  371. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  372. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  373. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  374. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  375. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/retrieve.py +0 -0
  376. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/webfetch.py +0 -0
  377. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/builtins/websearch.py +0 -0
  378. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/manager.py +0 -0
  379. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/mcp/__init__.py +0 -0
  380. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/mcp/registry.py +0 -0
  381. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/mcp/tools.py +0 -0
  382. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/mcp_sampling.py +0 -0
  383. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/ui.py +0 -0
  384. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/tools/utils.py +0 -0
  385. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/trusted_folders.py +0 -0
  386. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/types.py +0 -0
  387. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/core/utils.py +0 -0
  388. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/__init__.py +0 -0
  389. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/item.py +0 -0
  390. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/queue.py +0 -0
  391. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/curiosity/surprise.py +0 -0
  392. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/data/cookbook/tbench_domains/biopython_dna.md +0 -0
  393. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/data/cookbook/tbench_domains/feal_cryptanalysis.md +0 -0
  394. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/data/cookbook/tbench_domains/mips_isa.md +0 -0
  395. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/data/cookbook/tbench_domains/path_tracing.md +0 -0
  396. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/data/cookbook/tbench_domains/vim_macros.md +0 -0
  397. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/__init__.py +0 -0
  398. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/graphrag/retriever.py +0 -0
  399. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/__init__.py +0 -0
  400. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/base.py +0 -0
  401. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/onboarding.tcss +0 -0
  402. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/screens/__init__.py +0 -0
  403. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/screens/api_key.py +0 -0
  404. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/screens/choice.py +0 -0
  405. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/screens/local_model.py +0 -0
  406. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/onboarding/screens/welcome.py +0 -0
  407. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  408. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  409. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/__init__.py +0 -0
  410. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/api-design/SKILL.md +0 -0
  411. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/audit-tests/SKILL.md +0 -0
  412. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/batch/SKILL.md +0 -0
  413. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/checklist/SKILL.md +0 -0
  414. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/commit-code/SKILL.md +0 -0
  415. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  416. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/context-summary/SKILL.md +0 -0
  417. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/create-presentation/SKILL.md +0 -0
  418. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/deep-research/SKILL.md +0 -0
  419. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/deploy/SKILL.md +0 -0
  420. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/diff-review/SKILL.md +0 -0
  421. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/doc-gen/SKILL.md +0 -0
  422. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/explain-code/SKILL.md +0 -0
  423. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/explore-code/SKILL.md +0 -0
  424. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/fix-issue/SKILL.md +0 -0
  425. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/git-ops/SKILL.md +0 -0
  426. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/init-project/SKILL.md +0 -0
  427. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/investigate/SKILL.md +0 -0
  428. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/logic/SKILL.md +0 -0
  429. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  430. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/loop/SKILL.md +0 -0
  431. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/migrate/SKILL.md +0 -0
  432. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/perf-analyze/SKILL.md +0 -0
  433. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/plan-impl/SKILL.md +0 -0
  434. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/pr-review/SKILL.md +0 -0
  435. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/prove/SKILL.md +0 -0
  436. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/refactor/SKILL.md +0 -0
  437. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/regex-help/SKILL.md +0 -0
  438. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/review/SKILL.md +0 -0
  439. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/security-review/SKILL.md +0 -0
  440. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/ship/SKILL.md +0 -0
  441. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/simplify/SKILL.md +0 -0
  442. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/strong-tests/SKILL.md +0 -0
  443. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/skills/test-verify/SKILL.md +0 -0
  444. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/__init__.py +0 -0
  445. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/__main__.py +0 -0
  446. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/registry.py +0 -0
  447. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sidecar/__init__.py +0 -0
  448. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sidecar/header_parser.py +0 -0
  449. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sidecar/loader.py +0 -0
  450. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/sidecar/server.py +0 -0
  451. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/train/__init__.py +0 -0
  452. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/steering/train/compute_vector.py +0 -0
  453. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/drydock/whats_new.md +0 -0
  454. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/install_tests/README.md +0 -0
  455. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/install_tests/publish/README.md +0 -0
  456. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/install_tests/windows/README.md +0 -0
  457. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/scripts/README.md +0 -0
  458. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/scripts/_archived_eval_harness/README.md +0 -0
  459. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/scripts/llm/README.md +0 -0
  460. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/__init__.py +0 -0
  461. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/conftest.py +0 -0
  462. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_acp.py +0 -0
  463. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_agent_thought.py +0 -0
  464. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_bash.py +0 -0
  465. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_compact_session_updates.py +0 -0
  466. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_content.py +0 -0
  467. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_initialize.py +0 -0
  468. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_list_sessions.py +0 -0
  469. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_load_session.py +0 -0
  470. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_multi_session.py +0 -0
  471. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_new_session.py +0 -0
  472. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_proxy_setup_acp.py +0 -0
  473. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_read_file.py +0 -0
  474. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_search_replace.py +0 -0
  475. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_set_config_option.py +0 -0
  476. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_set_mode.py +0 -0
  477. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_set_model.py +0 -0
  478. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_tool_call_session_update.py +0 -0
  479. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_utils.py +0 -0
  480. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/acp/test_write_file.py +0 -0
  481. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/conftest.py +0 -0
  482. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_file_indexer.py +0 -0
  483. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_fuzzy.py +0 -0
  484. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  485. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  486. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_path_completion_controller.py +0 -0
  487. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  488. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_slash_command_controller.py +0 -0
  489. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  490. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/__init__.py +0 -0
  491. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/data/__init__.py +0 -0
  492. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/data/fireworks.py +0 -0
  493. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/data/mistral.py +0 -0
  494. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/test_anthropic_adapter.py +0 -0
  495. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/test_backend.py +0 -0
  496. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  497. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/test_reasoning_adapter.py +0 -0
  498. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  499. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  500. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  501. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  502. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_bell_notifications.py +0 -0
  503. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_braille_renderer.py +0 -0
  504. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_clipboard.py +0 -0
  505. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_commands.py +0 -0
  506. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_copy_shortcuts.py +0 -0
  507. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_external_editor.py +0 -0
  508. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_no_markup_static.py +0 -0
  509. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_question_app.py +0 -0
  510. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_spinner.py +0 -0
  511. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_switching_mode.py +0 -0
  512. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  513. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  514. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_ui_session_resume.py +0 -0
  515. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/test_ui_skill_dispatch.py +0 -0
  516. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/textual_ui/__init__.py +0 -0
  517. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/cli/textual_ui/test_session_picker.py +0 -0
  518. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/conftest.py +0 -0
  519. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_agents.py +0 -0
  520. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_auth_crypto.py +0 -0
  521. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_auth_github.py +0 -0
  522. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_config_load_dotenv.py +0 -0
  523. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_config_paths.py +0 -0
  524. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_config_resolution.py +0 -0
  525. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_file_logging.py +0 -0
  526. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_plan_session.py +0 -0
  527. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_proxy_setup.py +0 -0
  528. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_slug.py +0 -0
  529. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_telemetry_send.py +0 -0
  530. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_teleport_git.py +0 -0
  531. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_teleport_nuage.py +0 -0
  532. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_teleport_service.py +0 -0
  533. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_trusted_folders.py +0 -0
  534. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/core/test_utils.py +0 -0
  535. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/common.py +0 -0
  536. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/conftest.py +0 -0
  537. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/mock_server.py +0 -0
  538. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  539. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/test_cli_tui_streaming.py +0 -0
  540. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  541. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/fixtures/doc_qa_system_prd.md +0 -0
  542. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/mock/__init__.py +0 -0
  543. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/mock/mock_backend_factory.py +0 -0
  544. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/mock/mock_entrypoint.py +0 -0
  545. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/mock/utils.py +0 -0
  546. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/onboarding/test_run_onboarding.py +0 -0
  547. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/onboarding/test_ui_onboarding.py +0 -0
  548. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/session/test_session_loader.py +0 -0
  549. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/session/test_session_logger.py +0 -0
  550. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/session/test_session_migration.py +0 -0
  551. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/skills/conftest.py +0 -0
  552. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/skills/test_manager.py +0 -0
  553. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/skills/test_models.py +0 -0
  554. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/skills/test_parser.py +0 -0
  555. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  556. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  557. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  558. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  559. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  560. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  561. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  562. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  563. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  564. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  565. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  566. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  567. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  568. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  569. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  570. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  571. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  572. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  573. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  574. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  575. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  576. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  577. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  578. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  579. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  580. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  581. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  582. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  583. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  584. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  585. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  586. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  587. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  588. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  589. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  590. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  591. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  592. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  593. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  594. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  595. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  596. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  597. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  598. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  599. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  600. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  601. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  602. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  603. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  604. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  605. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  606. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  607. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  608. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  609. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  610. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  611. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  612. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  613. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  614. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  615. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/base_snapshot_test_app.py +0 -0
  616. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/conftest.py +0 -0
  617. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/snap_compare.py +0 -0
  618. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  619. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  620. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  621. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  622. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  623. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  624. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  625. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  626. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  627. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  628. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  629. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  630. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  631. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  632. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/stress/__init__.py +0 -0
  633. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/stubs/fake_backend.py +0 -0
  634. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/stubs/fake_client.py +0 -0
  635. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/stubs/fake_tool.py +0 -0
  636. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral.py +0 -0
  637. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  638. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_phase3.py +0 -0
  639. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_proposed.py +0 -0
  640. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_admiral_struggle_dedup.py +0 -0
  641. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_auto_compact.py +0 -0
  642. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_backend.py +0 -0
  643. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_observer_streaming.py +0 -0
  644. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_stats.py +0 -0
  645. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agent_tool_call.py +0 -0
  646. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_agents.py +0 -0
  647. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_approval_modal_stray_keys.py +0 -0
  648. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_bank_prd_extended.py +0 -0
  649. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_cli_programmatic_preload.py +0 -0
  650. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_constraint_extract.py +0 -0
  651. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_constraint_hint.py +0 -0
  652. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_context_recovery.py +0 -0
  653. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_count_tool.py +0 -0
  654. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  655. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_gemma4_anti_loop_migration.py +0 -0
  656. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_gemma4_tool_filter.py +0 -0
  657. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_goal.py +0 -0
  658. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_graphrag.py +0 -0
  659. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_history_manager.py +0 -0
  660. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_hle_aggregate.py +0 -0
  661. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_math_tool.py +0 -0
  662. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_mcp_stdio_command_normalization.py +0 -0
  663. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_memory_tool.py +0 -0
  664. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_message_id.py +0 -0
  665. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_message_merging.py +0 -0
  666. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_middleware.py +0 -0
  667. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_reasoning_content.py +0 -0
  668. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_retrieve_project_detection.py +0 -0
  669. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_retrieve_tool.py +0 -0
  670. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_safe_parse_tool_args.py +0 -0
  671. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_session_publish_on_resume.py +0 -0
  672. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_specialist_math_tools_hidden.py +0 -0
  673. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering.py +0 -0
  674. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_capture.py +0 -0
  675. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_compute_vector.py +0 -0
  676. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_extract_pairs.py +0 -0
  677. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_hook.py +0 -0
  678. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  679. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_steering_sidecar_hooks.py +0 -0
  680. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_system_prompt.py +0 -0
  681. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_tagged_text.py +0 -0
  682. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_tool_stop_injected_scope.py +0 -0
  683. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_truncated_arg_path_hint.py +0 -0
  684. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_truncated_search_replace_escalation.py +0 -0
  685. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_truncated_write_escalation.py +0 -0
  686. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_ui_external_editor.py +0 -0
  687. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_ui_input_history.py +0 -0
  688. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_verify_tool.py +0 -0
  689. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/test_wall_of_text_rescue.py +0 -0
  690. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_ask_user_question.py +0 -0
  691. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  692. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_consec_empty_search.py +0 -0
  693. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  694. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  695. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  696. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  697. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_exit_plan_mode.py +0 -0
  698. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_grep.py +0 -0
  699. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  700. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_invoke_context.py +0 -0
  701. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  702. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_manager_get_tool_config.py +0 -0
  703. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_mcp.py +0 -0
  704. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_mcp_sampling.py +0 -0
  705. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  706. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_append_fallback.py +0 -0
  707. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_hard_stop.py +0 -0
  708. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_malformed_block.py +0 -0
  709. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  710. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_task.py +0 -0
  711. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_ui_bash_execution.py +0 -0
  712. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_webfetch.py +0 -0
  713. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_websearch.py +0 -0
  714. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  715. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  716. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  717. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_do_update.py +0 -0
  718. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  719. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_github_update_gateway.py +0 -0
  720. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  721. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_ui_update_notification.py +0 -0
  722. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_update_use_case.py +0 -0
  723. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/tests/update_notifier/test_whats_new.py +0 -0
  724. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/uv.lock +0 -0
  725. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/web/README.md +0 -0
  726. {drydock_cli-2.10.2 → drydock_cli-2.10.4}/worked_examples/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.10.2
3
+ Version: 2.10.4
4
4
  Summary: Local-first CLI coding agent — tested with Gemma 4 26B via llama.cpp
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
@@ -27,7 +27,6 @@ a clean "I have ..." / "The ... has been ..." summary.
27
27
  from __future__ import annotations
28
28
 
29
29
  from collections.abc import Sequence
30
- from typing import Optional
31
30
 
32
31
  from drydock.core.types import LLMMessage, Role
33
32
  from drydock.admiral.detectors import Finding, _tool_sig
@@ -78,7 +77,7 @@ def _is_hallucinated_tool_result(m: LLMMessage) -> bool:
78
77
 
79
78
  def detect_empty_after_tool(
80
79
  messages: Sequence[LLMMessage],
81
- ) -> Optional[Finding]:
80
+ ) -> Finding | None:
82
81
  """Fires when the last assistant turn had no content AND no tool_calls,
83
82
  immediately following a tool result.
84
83
 
@@ -102,7 +101,7 @@ def detect_empty_after_tool(
102
101
  """
103
102
  # Walk backwards to find the last assistant message; look at the one
104
103
  # before it.
105
- last_assistant_idx: Optional[int] = None
104
+ last_assistant_idx: int | None = None
106
105
  for i in range(len(messages) - 1, -1, -1):
107
106
  if messages[i].role is Role.assistant:
108
107
  last_assistant_idx = i
@@ -148,7 +147,7 @@ def detect_empty_after_tool(
148
147
 
149
148
  def detect_retry_after_error(
150
149
  messages: Sequence[LLMMessage],
151
- ) -> Optional[Finding]:
150
+ ) -> Finding | None:
152
151
  """Fires when an identical tool call follows an errored tool result.
153
152
 
154
153
  In 400 sessions this fired 45 times (0.11/session). High-signal because
@@ -6,7 +6,7 @@ no JSON, no rotation logic, just append-only timestamped lines.
6
6
  """
7
7
  from __future__ import annotations
8
8
 
9
- from datetime import datetime, timezone
9
+ from datetime import datetime, UTC
10
10
  from pathlib import Path
11
11
 
12
12
 
@@ -17,7 +17,7 @@ def _log_path() -> Path:
17
17
 
18
18
 
19
19
  def append(event: str, detail: str) -> None:
20
- ts = datetime.now(timezone.utc).isoformat(timespec="seconds")
20
+ ts = datetime.now(UTC).isoformat(timespec="seconds")
21
21
  line = f"{ts} | {event} | {detail}\n"
22
22
  with _log_path().open("a") as f:
23
23
  f.write(line)
@@ -13,7 +13,7 @@ from __future__ import annotations
13
13
  import logging
14
14
  from collections.abc import Sequence
15
15
  from dataclasses import asdict, dataclass, field
16
- from datetime import datetime, timezone
16
+ from datetime import datetime, UTC
17
17
  from typing import TYPE_CHECKING
18
18
 
19
19
  from drydock.admiral import persistence, task_classifier
@@ -75,7 +75,7 @@ def collect(agent_loop: AgentLoop, session_id: str, outcome: str = "unknown") ->
75
75
  total, writes = _count_tool_calls(msgs)
76
76
  tcpw = (total / writes) if writes else float(total)
77
77
  return SessionMetrics(
78
- ts=datetime.now(timezone.utc).isoformat(timespec="seconds"),
78
+ ts=datetime.now(UTC).isoformat(timespec="seconds"),
79
79
  model=model_name,
80
80
  task_type=task_classifier.classify(msgs),
81
81
  session_id=session_id,
@@ -98,7 +98,7 @@ async def _try_claude_cli(prompt: str) -> str | None:
98
98
  stdout, _ = await asyncio.wait_for(
99
99
  proc.communicate(), timeout=OPUS_TIMEOUT_SEC
100
100
  )
101
- except asyncio.TimeoutError:
101
+ except TimeoutError:
102
102
  proc.kill()
103
103
  await proc.wait()
104
104
  return None
@@ -17,7 +17,7 @@ from __future__ import annotations
17
17
  import json
18
18
  import logging
19
19
  import os
20
- from datetime import datetime, timezone
20
+ from datetime import datetime, UTC
21
21
  from pathlib import Path
22
22
  from typing import Any
23
23
 
@@ -76,7 +76,7 @@ def record_finding(code: str, session_id: str) -> dict[str, Any]:
76
76
  if session_id and session_id not in entry["sessions"]:
77
77
  entry["sessions"].append(session_id)
78
78
  entry["total_fires"] = int(entry["total_fires"]) + 1
79
- entry["last_seen"] = datetime.now(timezone.utc).isoformat(timespec="seconds")
79
+ entry["last_seen"] = datetime.now(UTC).isoformat(timespec="seconds")
80
80
  save_state(state)
81
81
  return entry
82
82
 
@@ -118,7 +118,7 @@ def record_proposal_fingerprint(code: str, fingerprint: str, status: str) -> Non
118
118
  props.setdefault(code, []).append({
119
119
  "fingerprint": fingerprint,
120
120
  "status": status,
121
- "ts": datetime.now(timezone.utc).isoformat(timespec="seconds"),
121
+ "ts": datetime.now(UTC).isoformat(timespec="seconds"),
122
122
  })
123
123
  save_state(state)
124
124
 
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
  import logging
11
11
  import subprocess
12
12
  from dataclasses import dataclass
13
- from datetime import datetime, timezone
13
+ from datetime import datetime, UTC
14
14
  from pathlib import Path
15
15
 
16
16
  from drydock.admiral import history, persistence
@@ -50,7 +50,7 @@ def stage(proposal: Proposal, validation: ValidationResult) -> StagedProposal |
50
50
  if not validation.ok:
51
51
  raise ValueError("refusing to stage a proposal that didn't pass validation")
52
52
 
53
- ts = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
53
+ ts = datetime.now(UTC).strftime("%Y%m%d-%H%M%S")
54
54
  branch = f"admiral/{ts}-{_safe_code(proposal.code)}"
55
55
 
56
56
  # Invariant: we ALWAYS branch from main.
@@ -23,8 +23,7 @@ from drydock.core.logger import logger
23
23
  from drydock.core.paths import HISTORY_FILE
24
24
  from drydock.core.programmatic import run_programmatic
25
25
  from drydock.core.session.session_loader import SessionLoader
26
- from drydock.core.types import EntrypointMetadata, LLMMessage, OutputFormat, Role
27
- from drydock.core.utils import ConversationLimitException
26
+ from drydock.core.types import EntrypointMetadata, LLMMessage, Role
28
27
  from drydock.setup.onboarding import run_onboarding
29
28
 
30
29
 
@@ -254,6 +253,7 @@ def run_cli(args: argparse.Namespace) -> None:
254
253
  # adding more prints.
255
254
  import time as _t
256
255
  _t0 = _t.perf_counter()
256
+
257
257
  def _phase(name: str, start: float) -> float:
258
258
  now = _t.perf_counter()
259
259
  logger.warning("[TIMING:startup] %s=%.2fs", name, now - start)
@@ -230,19 +230,50 @@ def main() -> None:
230
230
  # --local → set up local LLM provider without editing config
231
231
  if getattr(args, "local", None):
232
232
  os.environ["DRYDOCK_LOCAL_URL"] = args.local
233
- # Detect model name from the server
234
- try:
235
- import httpx
236
- resp = httpx.get(f"{args.local}/models", timeout=5)
237
- if resp.status_code == 200:
238
- models = resp.json().get("data", [])
239
- if models:
240
- model_name = models[0]["id"]
241
- os.environ["DRYDOCK_LOCAL_MODEL"] = model_name
242
- rprint(f"[green]Using local model: {model_name} at {args.local}[/]")
243
- except Exception:
244
- os.environ["DRYDOCK_LOCAL_MODEL"] = "local"
245
- rprint(f"[yellow]Using local server at {args.local} (couldn't detect model name)[/]")
233
+ # Respect an explicit env-var override (used by harness/CI).
234
+ # Otherwise probe /v1/models — retry once with a longer timeout
235
+ # because containerized tbench trials saw the 5s window expire on
236
+ # cold-start, falling back to model="local" which loses ALL
237
+ # Gemma 4 optimizations (slim prompt, tool disables, non-streaming).
238
+ if os.environ.get("DRYDOCK_LOCAL_MODEL", "").strip():
239
+ rprint(
240
+ f"[green]Using local model: "
241
+ f"{os.environ['DRYDOCK_LOCAL_MODEL']} at {args.local} "
242
+ f"(via DRYDOCK_LOCAL_MODEL env)[/]"
243
+ )
244
+ else:
245
+ model_name = None
246
+ try:
247
+ import httpx
248
+ for attempt in (1, 2):
249
+ try:
250
+ resp = httpx.get(f"{args.local}/models", timeout=15)
251
+ if resp.status_code == 200:
252
+ models = resp.json().get("data", [])
253
+ if models and models[0].get("id"):
254
+ model_name = models[0]["id"]
255
+ break
256
+ except Exception:
257
+ if attempt == 2:
258
+ raise
259
+ except Exception:
260
+ pass
261
+ if model_name:
262
+ os.environ["DRYDOCK_LOCAL_MODEL"] = model_name
263
+ rprint(f"[green]Using local model: {model_name} at {args.local}[/]")
264
+ else:
265
+ # Detection failed. Default to "gemma4" — drydock is
266
+ # optimized for Gemma 4 + llama.cpp per README, so this
267
+ # is the right fallback in the overwhelming common case.
268
+ # Loud warning lets the user override if they're running
269
+ # something else.
270
+ os.environ["DRYDOCK_LOCAL_MODEL"] = "gemma4"
271
+ rprint(
272
+ f"[yellow]Couldn't detect model name at {args.local}; "
273
+ f"defaulting to model=gemma4. Override with "
274
+ f"DRYDOCK_LOCAL_MODEL=<name> if the server runs a "
275
+ f"different model.[/]"
276
+ )
246
277
 
247
278
  is_interactive = args.prompt is None
248
279
  if is_interactive:
@@ -743,7 +743,6 @@ class DrydockApp(App): # noqa: PLR0904
743
743
  else:
744
744
  # Clean up unreplaced placeholders
745
745
  skill_content = skill_content.replace("$ARGUMENTS", "")
746
- import re
747
746
  for i in range(10):
748
747
  skill_content = skill_content.replace(f"$ARGUMENTS[{i}]", "")
749
748
  skill_content = skill_content.replace(f"${i}", "")
@@ -23,7 +23,7 @@ from textual.widgets.option_list import Option
23
23
  from drydock.cli.textual_ui.widgets.no_markup_static import NoMarkupStatic
24
24
 
25
25
  if TYPE_CHECKING:
26
- from drydock.core.checkpoint import Checkpoint, CheckpointStore
26
+ from drydock.core.checkpoint import Checkpoint
27
27
 
28
28
 
29
29
  _SECONDS_PER_MINUTE = 60
@@ -62,7 +62,7 @@ def _format_diff_stats(insertions: int, deletions: int,
62
62
  return " ".join(parts)
63
63
 
64
64
 
65
- def _build_checkpoint_option(cp: "Checkpoint",
65
+ def _build_checkpoint_option(cp: Checkpoint,
66
66
  diff_summary: str) -> Text:
67
67
  text = Text(no_wrap=True)
68
68
  text.append(f"#{cp.index:>3} ", style="bold")
@@ -92,7 +92,7 @@ class CheckpointPickerApp(Container):
92
92
  class Cancelled(Message):
93
93
  """User hit Esc."""
94
94
 
95
- def __init__(self, checkpoints: list["Checkpoint"],
95
+ def __init__(self, checkpoints: list[Checkpoint],
96
96
  diff_summaries: dict[int, str], **kwargs: Any) -> None:
97
97
  super().__init__(id="checkpoint-picker", **kwargs)
98
98
  self._checkpoints = checkpoints
@@ -380,7 +380,8 @@ class AssistantMessage(StreamingMessageBase):
380
380
  self._content = rescued
381
381
  await self._markdown.update("")
382
382
  stream = self._ensure_stream()
383
- await stream.write(rescued)
383
+ if stream is not None:
384
+ await stream.write(rescued)
384
385
  await super().stop_stream()
385
386
 
386
387
  def compose(self) -> ComposeResult:
@@ -494,7 +495,8 @@ class ReasoningMessage(SpinnerMixin, StreamingMessageBase):
494
495
  self._stream = None
495
496
  await self._markdown.update("")
496
497
  stream = self._ensure_stream()
497
- await stream.write(self._content)
498
+ if stream is not None:
499
+ await stream.write(self._content)
498
500
 
499
501
 
500
502
  class UserCommandMessage(Static):
@@ -481,7 +481,7 @@ class AgentLoop:
481
481
  # Newest first, since later prompts usually supersede earlier
482
482
  # context. Number them so the model can refer back.
483
483
  numbered = "\n".join(
484
- f" ({i+1}) {text}"
484
+ f" ({i + 1}) {text}"
485
485
  for i, text in enumerate(reversed(injections))
486
486
  )
487
487
  note = (
@@ -1012,11 +1012,12 @@ class AgentLoop:
1012
1012
  self._last_post_edit_spec_fp = None
1013
1013
  # Clear any stale auto-goal state from a previous turn — the
1014
1014
  # user's new prompt may have nothing to do with the prior goal.
1015
- if (getattr(self, "goal", None) is not None
1016
- and getattr(self.goal, "active", False)):
1015
+ _goal = getattr(self, "goal", None)
1016
+ if _goal is not None and getattr(_goal, "active", False):
1017
+ _cond = getattr(_goal, "condition", "") or ""
1017
1018
  logger.warning(
1018
1019
  "[recovery] clearing stale goal on new user turn: %r",
1019
- self.goal.condition[:80] if self.goal.condition else "",
1020
+ _cond[:80],
1020
1021
  )
1021
1022
  try:
1022
1023
  self.clear_goal()
@@ -1347,7 +1348,7 @@ class AgentLoop:
1347
1348
  if _elapsed > PER_PROMPT_BUDGET_SEC:
1348
1349
  yield AssistantEvent(
1349
1350
  content=(
1350
- f"\n\n[Drydock: {int(_elapsed/60)} minutes "
1351
+ f"\n\n[Drydock: {int(_elapsed / 60)} minutes "
1351
1352
  f"elapsed on this single prompt — over the "
1352
1353
  f"{PER_PROMPT_BUDGET_SEC // 60}-min budget. "
1353
1354
  "Stopping. Work done so far is on disk; "
@@ -1823,7 +1824,6 @@ class AgentLoop:
1823
1824
  # message that didn't break loop because it had tool_calls)
1824
1825
  self._consecutive_empty_turns = 0
1825
1826
  else:
1826
- streak = getattr(self, "_consecutive_empty_turns", 0)
1827
1827
  # Count consecutive text-only assistant turns by walking
1828
1828
  # backward through history.
1829
1829
  text_only_streak = 0
@@ -2072,7 +2072,7 @@ class AgentLoop:
2072
2072
  f"⚠ PREMATURE EXIT BLOCK #{nudges + 1}/10. "
2073
2073
  f"The task explicitly names this verify "
2074
2074
  f"command: `{missing_verify_cmds[0]}`"
2075
- f"{' (+%d more)' % (len(missing_verify_cmds)-1) if len(missing_verify_cmds) > 1 else ''}"
2075
+ f"{' (+%d more)' % (len(missing_verify_cmds) - 1) if len(missing_verify_cmds) > 1 else ''}"
2076
2076
  f". You have NOT run it. The external "
2077
2077
  f"verifier will use that exact command (or "
2078
2078
  f"equivalent) after you exit — run it NOW "
@@ -2165,9 +2165,8 @@ class AgentLoop:
2165
2165
  "go test", "python ", "python3 ",
2166
2166
  )
2167
2167
  if any(cmd.strip().startswith(p) for p in safe_prefixes):
2168
+ import subprocess as _sub
2168
2169
  try:
2169
- import subprocess as _sub
2170
- import shlex as _sx
2171
2170
  _proc = _sub.run(
2172
2171
  cmd, shell=True, capture_output=True,
2173
2172
  timeout=45, text=True,
@@ -2220,13 +2219,13 @@ class AgentLoop:
2220
2219
  # system note and DON'T break — let the agent loop
2221
2220
  # do another iteration. Cap at goal.max_iterations.
2222
2221
  # Targets P1-S1 / P1-S2 partial-completion failures.
2222
+ g = getattr(self, "goal", None)
2223
2223
  if (should_break_loop
2224
- and getattr(self, "goal", None) is not None
2225
- and getattr(self.goal, "active", False)
2224
+ and g is not None
2225
+ and getattr(g, "active", False)
2226
2226
  and os.environ.get(
2227
2227
  "DRYDOCK_AUTO_GOAL", "1"
2228
2228
  ).strip().lower() in ("1", "true", "yes")):
2229
- g = self.goal
2230
2229
  if g.iterations < g.max_iterations:
2231
2230
  try:
2232
2231
  ok, msg = self._verify_rename_goal(Path.cwd())
@@ -3135,7 +3134,7 @@ class AgentLoop:
3135
3134
  if len(last_result) > 800:
3136
3135
  result_preview = (
3137
3136
  last_result[:400]
3138
- + f"\n …[{len(last_result)-400} chars omitted on dedup re-display]"
3137
+ + f"\n …[{len(last_result) - 400} chars omitted on dedup re-display]"
3139
3138
  )
3140
3139
  else:
3141
3140
  result_preview = last_result
@@ -3733,11 +3732,11 @@ class AgentLoop:
3733
3732
  sr_args = tool_call.args_dict
3734
3733
  sr_path = sr_args.get("file_path", sr_args.get("path", ""))
3735
3734
  if sr_path and Path(sr_path).exists():
3736
- with open(sr_path, "r", encoding="utf-8", errors="replace") as f:
3735
+ with open(sr_path, encoding="utf-8", errors="replace") as f:
3737
3736
  lines = f.readlines()
3738
3737
  # Show first 50 lines or the whole file if small
3739
3738
  preview_lines = lines[:50]
3740
- numbered = [f"{i+1}\t{line.rstrip()}" for i, line in enumerate(preview_lines)]
3739
+ numbered = [f"{i + 1}\t{line.rstrip()}" for i, line in enumerate(preview_lines)]
3741
3740
  auto_read_content = (
3742
3741
  f"\n\nAUTO-READ of {sr_path} (first {len(preview_lines)} lines):\n"
3743
3742
  + "\n".join(numbered)
@@ -3886,7 +3885,7 @@ class AgentLoop:
3886
3885
  "Empty content provided", # search_replace empty content
3887
3886
  "REFUSED: write blocked", # write_file pre-write syntax gate (2026-05-31)
3888
3887
  "REFUSED: bash inplace file edit", # bash sed -i redirect (2026-05-31)
3889
- "REFUSED: bash redirect-to-source-file", # bash > file redirect (2026-05-31)
3888
+ "REFUSED: bash redirect-to-source-file", # bash > file redirect (2026-05-31)
3890
3889
  # Pydantic schema rejections — model emitted `{}` for required-field tool.
3891
3890
  # Found in operator session 2026-05-31 14:24: model called bash({}) repeatedly
3892
3891
  # after a REFUSED sed -i, dispatcher rejected with this exact text, and the
@@ -3913,7 +3912,7 @@ class AgentLoop:
3913
3912
  )
3914
3913
 
3915
3914
  def _scrub_validation_error_call(
3916
- self, failed_tool_call: "ResolvedToolCall"
3915
+ self, failed_tool_call: ResolvedToolCall
3917
3916
  ) -> None:
3918
3917
  """Strip the args of a validation-error tool_call from history.
3919
3918
 
@@ -4652,10 +4651,10 @@ class AgentLoop:
4652
4651
  )
4653
4652
  if not passed:
4654
4653
  note += (
4655
- f"\nThe test suite went RED after your edit. Read the failure "
4656
- f"above, fix the cause BEFORE declaring done or moving to a "
4657
- f"different file. Re-running pytest manually if you need a "
4658
- f"fresh view.\n"
4654
+ "\nThe test suite went RED after your edit. Read the failure "
4655
+ "above, fix the cause BEFORE declaring done or moving to a "
4656
+ "different file. Re-running pytest manually if you need a "
4657
+ "fresh view.\n"
4659
4658
  )
4660
4659
  self._inject_system_note(note)
4661
4660
  logger.warning(
@@ -5133,23 +5132,6 @@ class AgentLoop:
5133
5132
  )
5134
5133
  if not is_stub:
5135
5134
  continue
5136
- # Extract path hint from any of the known fields.
5137
- path_hint = ""
5138
- for k in ("path", "file_path", "command", "cmd",
5139
- "url", "file"):
5140
- v = parsed.get(k)
5141
- if isinstance(v, str) and v:
5142
- path_hint = (
5143
- v if len(v) <= 200 else v[:200] + "…"
5144
- )
5145
- break
5146
- # Try to recover an approximate original size.
5147
- orig_bytes = parsed.get("_original_bytes")
5148
- size_str = (
5149
- f"original {int(orig_bytes)} bytes"
5150
- if isinstance(orig_bytes, (int, float))
5151
- else "compacted"
5152
- )
5153
5135
  # 2026-05-29: upgrade legacy AND post-2026-05-24 stubs
5154
5136
  # (which used the marker key `__drydock_compacted_args__`)
5155
5137
  # to the new empty-args format `{}`. The marker-bearing
@@ -5158,10 +5140,9 @@ class AgentLoop:
5158
5140
  # fake arg, triggering format.py's placeholder-loop
5159
5141
  # recovery dance. Empty args produce a clean pydantic
5160
5142
  # field-required error instead. Path hint and size
5161
- # info from `note` is dropped — debugging value was
5162
- # offset by the copy-bait cost.
5143
+ # info dropped — debugging value was offset by the
5144
+ # copy-bait cost.
5163
5145
  tc.function.arguments = "{}"
5164
- _ = size_str # retain for future logging if useful
5165
5146
  try:
5166
5147
  self.stats.legacy_stubs_upgraded += 1
5167
5148
  except Exception:
@@ -6158,7 +6139,7 @@ class AgentLoop:
6158
6139
  # Truncate args for readability
6159
6140
  if len(args_str) > 120:
6160
6141
  args_str = args_str[:120] + "..."
6161
- recent.append(f" {count+1}. {name}({args_str})")
6142
+ recent.append(f" {count + 1}. {name}({args_str})")
6162
6143
  count += 1
6163
6144
  if count >= 8:
6164
6145
  break
@@ -6166,11 +6147,11 @@ class AgentLoop:
6166
6147
  # Add result summary to last entry
6167
6148
  result = str(msg.content or "")[:150]
6168
6149
  if "error" in result.lower() or "Error" in result:
6169
- recent[-1] += f" → ERROR"
6150
+ recent[-1] += " → ERROR"
6170
6151
  elif "not found" in result.lower():
6171
- recent[-1] += f" → NOT FOUND"
6152
+ recent[-1] += " → NOT FOUND"
6172
6153
  else:
6173
- recent[-1] += f" → ok"
6154
+ recent[-1] += " → ok"
6174
6155
 
6175
6156
  if len(recent) < 3:
6176
6157
  return None
@@ -6592,7 +6573,6 @@ class AgentLoop:
6592
6573
  ):
6593
6574
  return
6594
6575
 
6595
- from drydock.core.prompts import SystemPrompt
6596
6576
  try:
6597
6577
  # SystemPrompt enum value names lowercased = file stems.
6598
6578
  # gemma4_math isn't in the enum — load by path.
@@ -7196,6 +7176,43 @@ class AgentLoop:
7196
7176
  logger.warning("[AUTO-RETRIEVE] setup failed: %s", e, exc_info=True)
7197
7177
  return
7198
7178
 
7179
+ # 2026-06-08: first-call lazy bootstrap. Inside fresh containers
7180
+ # (tbench trials, fresh pip-install drydock-cli) the home DB
7181
+ # doesn't exist, so AUTO-RETRIEVE silently no-ops and the
7182
+ # bundled cookbook never gets a chance. Detect that case and
7183
+ # ingest the bundled cookbook into ~/.drydock/graphrag.sqlite
7184
+ # one time. Opt-out via DRYDOCK_AUTO_BOOTSTRAP_GRAPHRAG=0.
7185
+ if not getattr(self, "_graphrag_bootstrap_attempted", False):
7186
+ self._graphrag_bootstrap_attempted = True
7187
+ if os.environ.get(
7188
+ "DRYDOCK_AUTO_BOOTSTRAP_GRAPHRAG", "1"
7189
+ ).strip().lower() not in ("0", "false", "no"):
7190
+ try:
7191
+ _home_db_check = Path.home() / ".drydock" / "graphrag.sqlite"
7192
+ if not _home_db_check.is_file():
7193
+ import drydock as _dd
7194
+ _bundle = (
7195
+ Path(_dd.__file__).parent
7196
+ / "data" / "cookbook"
7197
+ )
7198
+ if _bundle.is_dir():
7199
+ _home_db_check.parent.mkdir(parents=True, exist_ok=True)
7200
+ logger.warning(
7201
+ "[AUTO-RETRIEVE] bootstrap: ingesting bundled "
7202
+ "cookbook %s into %s",
7203
+ _bundle, _home_db_check,
7204
+ )
7205
+ _bootstrap_idx = Index(str(_home_db_check))
7206
+ _counts = _bootstrap_idx.ingest_path(_bundle)
7207
+ logger.warning(
7208
+ "[AUTO-RETRIEVE] bootstrap done: %d files / "
7209
+ "%d chunks",
7210
+ _counts.get("files", 0),
7211
+ _counts.get("chunks", 0),
7212
+ )
7213
+ except Exception as e:
7214
+ logger.warning("[AUTO-RETRIEVE] bootstrap failed: %s", e)
7215
+
7199
7216
  # Skip auto-retrieve for file-producing tasks (terminal-bench /
7200
7217
  # harbor wraps everything with "This task has multiple steps...").
7201
7218
  # Retrieve adds 2K tokens of (usually irrelevant) cookbook content
@@ -7219,13 +7236,60 @@ class AgentLoop:
7219
7236
  # tool calls (write_file/bash) not a text-only retrieval response.
7220
7237
  or ("__init__.py" in msg_text and "Requirements:" in msg_text)
7221
7238
  )
7222
- if is_file_task and os.environ.get(
7239
+ # 2026-06-08: file-task skip used to be unconditional unless
7240
+ # DRYDOCK_AUTO_RETRIEVE_FORCE_ON. That blocked cookbook chunks
7241
+ # (path-tracing, MIPS, FEAL, etc.) from helping tbench multi-step
7242
+ # prompts — exactly the cases where domain cookbook IS the
7243
+ # missing piece. New behavior: do a probe retrieve first; if the
7244
+ # top hit scores >= AUTO_RETRIEVE_BYPASS_SCORE (25.0 by default,
7245
+ # well above the 8.0 quality floor and the typical "incidental
7246
+ # match" range), inject it regardless of file-task heuristic.
7247
+ # Generic noise (binary_search code injected into chess-best-move)
7248
+ # rarely scores that high — the chess prompt's top hit was ~12.
7249
+ _bypass = False
7250
+ if is_file_task:
7251
+ try:
7252
+ _bypass_thresh = float(os.environ.get(
7253
+ "DRYDOCK_AUTO_RETRIEVE_BYPASS_SCORE", "25.0"
7254
+ ))
7255
+ except ValueError:
7256
+ _bypass_thresh = 25.0
7257
+ # Cheap probe — short query, just enough to read the top score.
7258
+ try:
7259
+ from drydock.graphrag import Index as _Probe
7260
+ _probe_query = (user_msg or "").strip()[:300]
7261
+ if _probe_query:
7262
+ _env_db = os.environ.get("DRYDOCK_GRAPHRAG_DB")
7263
+ _home_db = str(Path.home() / ".drydock" / "graphrag.sqlite")
7264
+ _project_db = Path.cwd() / ".drydock" / "graphrag.sqlite"
7265
+ _probe_db = _env_db or (
7266
+ str(_project_db) if _project_db.is_file() else _home_db
7267
+ )
7268
+ if Path(_probe_db).is_file():
7269
+ _r = _Probe(_probe_db).retrieve(
7270
+ _probe_query, symbol_limit=0, text_limit=1
7271
+ )
7272
+ _top = _r.text[0] if _r.text else None
7273
+ _top_score = getattr(_top, 'score', 0.0) if _top else 0.0
7274
+ if _top_score >= _bypass_thresh:
7275
+ _bypass = True
7276
+ logger.warning(
7277
+ "[AUTO-RETRIEVE] file-task SKIP bypassed by "
7278
+ "strong cookbook hit (score=%.1f >= %.1f)",
7279
+ _top_score, _bypass_thresh,
7280
+ )
7281
+ except Exception as e:
7282
+ logger.warning("[AUTO-RETRIEVE] probe failed: %s", e)
7283
+
7284
+ if is_file_task and not _bypass and os.environ.get(
7223
7285
  "DRYDOCK_AUTO_RETRIEVE_FORCE_ON", ""
7224
7286
  ).strip().lower() not in ("1", "true", "yes"):
7225
7287
  logger.warning(
7226
7288
  "[AUTO-RETRIEVE] skipped — file-production task detected "
7227
- "(harbor wrap / multiple /app/ or /tmp/ paths). Override "
7228
- "with DRYDOCK_AUTO_RETRIEVE_FORCE_ON=1."
7289
+ "(harbor wrap / multiple /app/ or /tmp/ paths) and probe "
7290
+ "found no strong cookbook hit. Override with "
7291
+ "DRYDOCK_AUTO_RETRIEVE_FORCE_ON=1 or lower "
7292
+ "DRYDOCK_AUTO_RETRIEVE_BYPASS_SCORE."
7229
7293
  )
7230
7294
  return
7231
7295
 
@@ -7301,7 +7365,6 @@ class AgentLoop:
7301
7365
  db_chain.append(fallback_db)
7302
7366
 
7303
7367
  good_hits: list = []
7304
- text_hits: list = []
7305
7368
  used_db: str | None = None
7306
7369
  for db in db_chain:
7307
7370
  if not Path(db).is_file():
@@ -7336,7 +7399,6 @@ class AgentLoop:
7336
7399
  db, len(hits), len(gh), QUALITY_THRESHOLD,
7337
7400
  )
7338
7401
  if gh:
7339
- text_hits = hits
7340
7402
  good_hits = gh
7341
7403
  used_db = db
7342
7404
  break
@@ -77,6 +77,7 @@ def _emit_telemetry(record: dict) -> None:
77
77
  except OSError:
78
78
  pass
79
79
 
80
+
80
81
  if TYPE_CHECKING:
81
82
  from drydock.core.constraint_extract import ExtractResult
82
83
 
@@ -95,7 +96,7 @@ _DEFAULT_BOUNDS = {
95
96
  }
96
97
 
97
98
 
98
- def _build_args(extr: "ExtractResult") -> dict | None:
99
+ def _build_args(extr: ExtractResult) -> dict | None:
99
100
  """Build the SolveArgs dict for this ExtractResult, or None if the
100
101
  predicate isn't one Z3 can decide. The dict is what the model
101
102
  *would* have written when calling the tool — used both for the
@@ -249,7 +250,7 @@ def _run_solve_sync(args_dict: dict) -> dict | None:
249
250
  # bounds the whole orchestration including streaming setup.
250
251
  wall_ms = int(args_dict.get("timeout_ms", 15000)) + 5000
251
252
  result = asyncio.run(asyncio.wait_for(_run(), timeout=wall_ms / 1000))
252
- except asyncio.TimeoutError:
253
+ except TimeoutError:
253
254
  logger.warning("[AUTO-SOLVE] hard timeout exceeded")
254
255
  return None
255
256
  except RuntimeError as e:
@@ -267,7 +268,7 @@ def _run_solve_sync(args_dict: dict) -> dict | None:
267
268
 
268
269
 
269
270
  def _format_result(args_dict: dict, result_dict: dict,
270
- extr: "ExtractResult") -> str:
271
+ extr: ExtractResult) -> str:
271
272
  """Render the Solve result the way the real Solve tool prints it,
272
273
  matching what the model sees from a normal tool call. Adds a
273
274
  one-line summary at the bottom so the model can extract the