drydock-cli 2.10.2__tar.gz → 2.10.3__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 (720) hide show
  1. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/PKG-INFO +1 -1
  2. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/detectors_proposed.py +3 -4
  3. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/history.py +2 -2
  4. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/metrics.py +2 -2
  5. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/opus_escalator.py +1 -1
  6. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/persistence.py +3 -3
  7. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/stager.py +2 -2
  8. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/cli.py +2 -2
  9. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/app.py +0 -1
  10. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +3 -3
  11. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/messages.py +4 -2
  12. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/agent_loop.py +26 -48
  13. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/auto_solve.py +4 -3
  14. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/build_orchestrator.py +13 -15
  15. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/checkpoint.py +3 -3
  16. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/classifier.py +2 -2
  17. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/dispatcher.py +1 -2
  18. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/_dotenv.py +3 -4
  19. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/local_detect.py +1 -1
  20. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/constraint_extract.py +5 -4
  21. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/constraint_hint.py +0 -1
  22. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/context_recovery.py +0 -1
  23. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/drydock_states.py +1 -2
  24. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/goal.py +1 -1
  25. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/hooks.py +1 -2
  26. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/format.py +3 -3
  27. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/grammar/_llamacpp_converter.py +37 -32
  28. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/grammar/policy.py +0 -1
  29. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/grammar/policy_union.py +0 -1
  30. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/programmatic.py +1 -1
  31. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/checkpoints.py +0 -1
  32. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/state_file.py +2 -2
  33. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session_checker.py +1 -1
  34. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/_task_manager.py +0 -3
  35. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/algebra_tool.py +3 -3
  36. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/bash.py +19 -23
  37. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/chemistry_tool.py +120 -120
  38. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/count_tool.py +1 -1
  39. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/linear_algebra_tool.py +3 -3
  40. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/logic_tool.py +14 -15
  41. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/lsp.py +1 -1
  42. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/math_tool.py +1 -1
  43. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/memory_tool.py +1 -1
  44. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/notebook_edit.py +2 -2
  45. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/number_theory_tool.py +3 -3
  46. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/powershell.py +1 -2
  47. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prolog_tool.py +4 -4
  48. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/read_file.py +2 -3
  49. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/search_replace.py +11 -12
  50. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/set_tool.py +3 -3
  51. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/solve_tool.py +3 -3
  52. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/stats_tool.py +5 -5
  53. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/task.py +1 -1
  54. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/todo.py +1 -1
  55. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/tool_search.py +1 -1
  56. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/units_tool.py +3 -5
  57. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/verify_tool.py +1 -2
  58. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/worktree.py +1 -2
  59. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/write_file.py +11 -45
  60. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/injection_guard.py +1 -1
  61. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/__main__.py +3 -2
  62. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/gap_detector.py +2 -1
  63. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/ingest.py +8 -8
  64. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/__main__.py +1 -1
  65. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/code_indexer.py +1 -1
  66. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/storage.py +5 -6
  67. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/text_indexer.py +1 -1
  68. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/applier.py +3 -2
  69. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/config.py +3 -3
  70. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sandbox.py +2 -2
  71. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sidecar/hooks.py +8 -7
  72. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/train/capture.py +3 -3
  73. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/train/extract_pairs.py +6 -5
  74. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/train/scan_sessions.py +7 -6
  75. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/vectors.py +3 -3
  76. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/pyproject.toml +1 -1
  77. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/stress/test_io_thrash.py +10 -7
  78. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_intervention_outcome.py +0 -1
  79. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_session_id.py +1 -3
  80. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_tasks.py +0 -8
  81. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_algebra_tool.py +0 -1
  82. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_api_error_recovery.py +0 -1
  83. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_auto_retrieve_soft_nudge.py +2 -3
  84. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_auto_solve.py +1 -1
  85. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_build.py +5 -12
  86. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_debug.py +0 -3
  87. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_multiagent.py +4 -10
  88. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_prd.py +7 -13
  89. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_tools.py +2 -6
  90. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_update.py +5 -13
  91. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_build_projects.py +7 -7
  92. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_checkpoint.py +0 -2
  93. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_chemistry_tool.py +0 -1
  94. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_classifier.py +0 -2
  95. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_config_migration.py +0 -1
  96. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_curiosity.py +0 -1
  97. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_current_bugs.py +4 -4
  98. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_dispatch_report.py +2 -2
  99. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_dispatcher.py +0 -1
  100. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_drydock_regression.py +1 -2
  101. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_drydock_tasks.py +0 -1
  102. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_full_regression.py +12 -4
  103. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_grammar.py +0 -2
  104. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_graphrag_worked_examples.py +0 -3
  105. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_hallucinated_tool_suppression.py +0 -1
  106. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_integration.py +0 -4
  107. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_issue_fixes.py +0 -3
  108. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_linear_algebra_tool.py +0 -1
  109. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_local_detect.py +1 -1
  110. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_logic_tool.py +0 -3
  111. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_loop_detection.py +16 -17
  112. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_loop_regressions_2026_06_06.py +2 -3
  113. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_math_docs_lazy_injection.py +1 -2
  114. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_mcp_settings.py +0 -1
  115. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_multi_agent.py +4 -4
  116. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_number_theory_tool.py +0 -1
  117. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_prolog_tool.py +0 -2
  118. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_read_file_not_found_listing.py +1 -2
  119. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_read_file_notebook_slim.py +1 -1
  120. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_real_failures.py +1 -5
  121. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_real_issues.py +3 -6
  122. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_real_workflow.py +3 -4
  123. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_rejudge_hle.py +6 -3
  124. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_retrieval_consumer.py +3 -7
  125. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_search_replace_args_not_truncated.py +2 -3
  126. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_search_replace_syntax_rollback.py +0 -1
  127. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_session_log_event.py +0 -1
  128. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_set_tool.py +0 -1
  129. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_smoke.py +2 -12
  130. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_solve_tool.py +0 -1
  131. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_stats_tool.py +1 -2
  132. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_task_complete_nudge.py +0 -1
  133. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_tool_args.py +0 -3
  134. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_tool_call_loops_regression_suite.py +0 -1
  135. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_truncate_args_valid_json.py +1 -2
  136. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_units_tool.py +0 -1
  137. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_user_issues.py +0 -1
  138. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_validation_error_scrub.py +1 -1
  139. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_workloads.py +1 -1
  140. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_write_file_missing_path.py +0 -1
  141. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/testbank_helpers.py +1 -2
  142. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash.py +1 -1
  143. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_echo_escape_loop_breaker.py +1 -1
  144. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_empty_search_loop_breaker.py +1 -1
  145. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_heredoc_confirmation.py +2 -2
  146. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_pre_rename_hook.py +0 -1
  147. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_read_file_dedup_reembed.py +0 -1
  148. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_read_file_directory.py +0 -1
  149. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_read_file_limit_truncation.py +0 -1
  150. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_dir_path.py +0 -2
  151. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_empty_content.py +0 -1
  152. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_file_not_found.py +1 -2
  153. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_first_failure_hint.py +0 -1
  154. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_placeholder.py +0 -1
  155. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_refused_loop_breaker.py +1 -1
  156. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_write_file_dedup_missing_imports.py +0 -1
  157. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_write_file_missing_main_module.py +0 -1
  158. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_write_file_multifile_rename.py +0 -1
  159. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/.gitignore +0 -0
  160. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/LICENSE +0 -0
  161. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/NOTICE +0 -0
  162. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/README.md +0 -0
  163. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/distribution/zed/LICENSE +0 -0
  164. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/docs/README.md +0 -0
  165. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/__init__.py +0 -0
  166. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/__main__.py +0 -0
  167. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/__init__.py +0 -0
  168. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/acp_agent_loop.py +0 -0
  169. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/acp_logger.py +0 -0
  170. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/entrypoint.py +0 -0
  171. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/__init__.py +0 -0
  172. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/base.py +0 -0
  173. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/builtins/bash.py +0 -0
  174. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/builtins/read_file.py +0 -0
  175. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/builtins/search_replace.py +0 -0
  176. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/builtins/todo.py +0 -0
  177. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/builtins/write_file.py +0 -0
  178. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/tools/session_update.py +0 -0
  179. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/acp/utils.py +0 -0
  180. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/__init__.py +0 -0
  181. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/detectors.py +0 -0
  182. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/interventions.py +0 -0
  183. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/llm_analyzer.py +0 -0
  184. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/policy.py +0 -0
  185. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/proposer.py +0 -0
  186. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/task_classifier.py +0 -0
  187. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/tuning.py +0 -0
  188. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/validator.py +0 -0
  189. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/admiral/worker.py +0 -0
  190. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/__init__.py +0 -0
  191. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/autocompletion/__init__.py +0 -0
  192. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/autocompletion/base.py +0 -0
  193. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/autocompletion/path_completion.py +0 -0
  194. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/autocompletion/slash_command.py +0 -0
  195. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/clipboard.py +0 -0
  196. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/commands.py +0 -0
  197. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/entrypoint.py +0 -0
  198. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/fix_windows_path.py +0 -0
  199. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/history_manager.py +0 -0
  200. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  201. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  202. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  203. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/terminal_setup.py +0 -0
  204. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/__init__.py +0 -0
  205. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  206. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/app.tcss +0 -0
  207. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/external_editor.py +0 -0
  208. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  209. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  210. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  211. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  212. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  213. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  214. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  215. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  216. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  217. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  218. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  219. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  220. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  221. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  222. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  223. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  224. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  225. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  226. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  227. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  228. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  229. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  230. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  231. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  232. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  233. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  234. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  235. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  236. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  237. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  238. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  239. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  240. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  241. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  242. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  243. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/windowing/history.py +0 -0
  244. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  245. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/textual_ui/windowing/state.py +0 -0
  246. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/__init__.py +0 -0
  247. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  248. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  249. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  250. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  251. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  252. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/update.py +0 -0
  253. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/cli/update_notifier/whats_new.py +0 -0
  254. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/__init__.py +0 -0
  255. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/agents/__init__.py +0 -0
  256. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/agents/manager.py +0 -0
  257. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/agents/models.py +0 -0
  258. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/auth/__init__.py +0 -0
  259. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/auth/crypto.py +0 -0
  260. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/auth/github.py +0 -0
  261. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/__init__.py +0 -0
  262. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/completers.py +0 -0
  263. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  264. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  265. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  266. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  267. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  268. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/fuzzy.py +0 -0
  269. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/path_prompt.py +0 -0
  270. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  271. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/__init__.py +0 -0
  272. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/__main__.py +0 -0
  273. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/rules.py +0 -0
  274. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/classifier/signal.py +0 -0
  275. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/__init__.py +0 -0
  276. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/_settings.py +0 -0
  277. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/doctor.py +0 -0
  278. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/harness_files/__init__.py +0 -0
  279. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  280. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/harness_files/_paths.py +0 -0
  281. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/config/migrate.py +0 -0
  282. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/consultant.py +0 -0
  283. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/__init__.py +0 -0
  284. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/anthropic.py +0 -0
  285. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/base.py +0 -0
  286. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/factory.py +0 -0
  287. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/generic.py +0 -0
  288. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/mistral.py +0 -0
  289. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  290. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/backend/vertex.py +0 -0
  291. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/exceptions.py +0 -0
  292. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/grammar/__init__.py +0 -0
  293. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/message_utils.py +0 -0
  294. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/llm/types.py +0 -0
  295. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/logger.py +0 -0
  296. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/middleware.py +0 -0
  297. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/output_formatters.py +0 -0
  298. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/paths/__init__.py +0 -0
  299. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/paths/_drydock_home.py +0 -0
  300. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/paths/_local_config_walk.py +0 -0
  301. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/paths/conventions.py +0 -0
  302. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/plan_session.py +0 -0
  303. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/plugins.py +0 -0
  304. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/__init__.py +0 -0
  305. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/builder.md +0 -0
  306. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/cli.md +0 -0
  307. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/compact.md +0 -0
  308. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/dangerous_directory.md +0 -0
  309. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/diagnostic.md +0 -0
  310. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/explore.md +0 -0
  311. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/gemma4.md +0 -0
  312. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/gemma4_math.md +0 -0
  313. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/gemma4_slim.md +0 -0
  314. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/planner.md +0 -0
  315. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/project_context.md +0 -0
  316. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/prompts/tests.md +0 -0
  317. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/proxy_setup.py +0 -0
  318. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/agent_memory.py +0 -0
  319. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/session_loader.py +0 -0
  320. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/session_logger.py +0 -0
  321. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/session/session_migration.py +0 -0
  322. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/skills/__init__.py +0 -0
  323. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/skills/manager.py +0 -0
  324. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/skills/models.py +0 -0
  325. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/skills/parser.py +0 -0
  326. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/slug.py +0 -0
  327. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/spec_check.py +0 -0
  328. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/steering_hook.py +0 -0
  329. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/system_prompt.py +0 -0
  330. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/telemetry/__init__.py +0 -0
  331. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/telemetry/send.py +0 -0
  332. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/teleport/errors.py +0 -0
  333. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/teleport/git.py +0 -0
  334. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/teleport/nuage.py +0 -0
  335. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/teleport/teleport.py +0 -0
  336. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/teleport/types.py +0 -0
  337. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/base.py +0 -0
  338. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  339. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/cron.py +0 -0
  340. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  341. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/glob_tool.py +0 -0
  342. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/grep.py +0 -0
  343. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  344. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  345. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
  346. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  347. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  348. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  349. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  350. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  351. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  352. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  353. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  354. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  355. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  356. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  357. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  358. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  359. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  360. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  361. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/task.md +0 -0
  362. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  363. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  364. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  365. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  366. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  367. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  368. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  369. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/retrieve.py +0 -0
  370. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/webfetch.py +0 -0
  371. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/builtins/websearch.py +0 -0
  372. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/manager.py +0 -0
  373. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/mcp/__init__.py +0 -0
  374. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/mcp/registry.py +0 -0
  375. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/mcp/tools.py +0 -0
  376. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/mcp_sampling.py +0 -0
  377. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/ui.py +0 -0
  378. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/tools/utils.py +0 -0
  379. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/trusted_folders.py +0 -0
  380. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/types.py +0 -0
  381. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/core/utils.py +0 -0
  382. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/__init__.py +0 -0
  383. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/item.py +0 -0
  384. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/queue.py +0 -0
  385. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/curiosity/surprise.py +0 -0
  386. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/data/cookbook/tbench_domains/biopython_dna.md +0 -0
  387. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/data/cookbook/tbench_domains/feal_cryptanalysis.md +0 -0
  388. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/data/cookbook/tbench_domains/mips_isa.md +0 -0
  389. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/data/cookbook/tbench_domains/path_tracing.md +0 -0
  390. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/data/cookbook/tbench_domains/vim_macros.md +0 -0
  391. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/__init__.py +0 -0
  392. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/graphrag/retriever.py +0 -0
  393. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/__init__.py +0 -0
  394. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/base.py +0 -0
  395. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/onboarding.tcss +0 -0
  396. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/screens/__init__.py +0 -0
  397. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/screens/api_key.py +0 -0
  398. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/screens/choice.py +0 -0
  399. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/screens/local_model.py +0 -0
  400. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/onboarding/screens/welcome.py +0 -0
  401. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  402. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  403. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/__init__.py +0 -0
  404. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/api-design/SKILL.md +0 -0
  405. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/audit-tests/SKILL.md +0 -0
  406. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/batch/SKILL.md +0 -0
  407. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/checklist/SKILL.md +0 -0
  408. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/commit-code/SKILL.md +0 -0
  409. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  410. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/context-summary/SKILL.md +0 -0
  411. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/create-presentation/SKILL.md +0 -0
  412. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/deep-research/SKILL.md +0 -0
  413. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/deploy/SKILL.md +0 -0
  414. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/diff-review/SKILL.md +0 -0
  415. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/doc-gen/SKILL.md +0 -0
  416. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/explain-code/SKILL.md +0 -0
  417. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/explore-code/SKILL.md +0 -0
  418. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/fix-issue/SKILL.md +0 -0
  419. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/git-ops/SKILL.md +0 -0
  420. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/init-project/SKILL.md +0 -0
  421. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/investigate/SKILL.md +0 -0
  422. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/logic/SKILL.md +0 -0
  423. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  424. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/loop/SKILL.md +0 -0
  425. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/migrate/SKILL.md +0 -0
  426. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/perf-analyze/SKILL.md +0 -0
  427. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/plan-impl/SKILL.md +0 -0
  428. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/pr-review/SKILL.md +0 -0
  429. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/prove/SKILL.md +0 -0
  430. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/refactor/SKILL.md +0 -0
  431. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/regex-help/SKILL.md +0 -0
  432. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/review/SKILL.md +0 -0
  433. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/security-review/SKILL.md +0 -0
  434. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/ship/SKILL.md +0 -0
  435. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/simplify/SKILL.md +0 -0
  436. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/strong-tests/SKILL.md +0 -0
  437. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/skills/test-verify/SKILL.md +0 -0
  438. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/__init__.py +0 -0
  439. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/__main__.py +0 -0
  440. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/registry.py +0 -0
  441. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sidecar/__init__.py +0 -0
  442. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sidecar/header_parser.py +0 -0
  443. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sidecar/loader.py +0 -0
  444. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/sidecar/server.py +0 -0
  445. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/train/__init__.py +0 -0
  446. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/steering/train/compute_vector.py +0 -0
  447. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/drydock/whats_new.md +0 -0
  448. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/install_tests/README.md +0 -0
  449. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/install_tests/publish/README.md +0 -0
  450. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/install_tests/windows/README.md +0 -0
  451. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/scripts/README.md +0 -0
  452. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/scripts/_archived_eval_harness/README.md +0 -0
  453. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/scripts/llm/README.md +0 -0
  454. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/__init__.py +0 -0
  455. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/conftest.py +0 -0
  456. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_acp.py +0 -0
  457. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_agent_thought.py +0 -0
  458. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_bash.py +0 -0
  459. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_compact_session_updates.py +0 -0
  460. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_content.py +0 -0
  461. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_initialize.py +0 -0
  462. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_list_sessions.py +0 -0
  463. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_load_session.py +0 -0
  464. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_multi_session.py +0 -0
  465. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_new_session.py +0 -0
  466. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_proxy_setup_acp.py +0 -0
  467. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_read_file.py +0 -0
  468. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_search_replace.py +0 -0
  469. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_set_config_option.py +0 -0
  470. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_set_mode.py +0 -0
  471. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_set_model.py +0 -0
  472. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_tool_call_session_update.py +0 -0
  473. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_utils.py +0 -0
  474. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/acp/test_write_file.py +0 -0
  475. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/conftest.py +0 -0
  476. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_file_indexer.py +0 -0
  477. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_fuzzy.py +0 -0
  478. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  479. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  480. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_path_completion_controller.py +0 -0
  481. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  482. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_slash_command_controller.py +0 -0
  483. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  484. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/__init__.py +0 -0
  485. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/data/__init__.py +0 -0
  486. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/data/fireworks.py +0 -0
  487. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/data/mistral.py +0 -0
  488. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/test_anthropic_adapter.py +0 -0
  489. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/test_backend.py +0 -0
  490. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  491. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/test_reasoning_adapter.py +0 -0
  492. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  493. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  494. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  495. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  496. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_bell_notifications.py +0 -0
  497. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_braille_renderer.py +0 -0
  498. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_clipboard.py +0 -0
  499. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_commands.py +0 -0
  500. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_copy_shortcuts.py +0 -0
  501. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_external_editor.py +0 -0
  502. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_no_markup_static.py +0 -0
  503. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_question_app.py +0 -0
  504. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_spinner.py +0 -0
  505. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_switching_mode.py +0 -0
  506. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  507. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  508. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_ui_session_resume.py +0 -0
  509. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/test_ui_skill_dispatch.py +0 -0
  510. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/textual_ui/__init__.py +0 -0
  511. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/cli/textual_ui/test_session_picker.py +0 -0
  512. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/conftest.py +0 -0
  513. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_agents.py +0 -0
  514. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_auth_crypto.py +0 -0
  515. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_auth_github.py +0 -0
  516. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_config_load_dotenv.py +0 -0
  517. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_config_paths.py +0 -0
  518. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_config_resolution.py +0 -0
  519. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_file_logging.py +0 -0
  520. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_plan_session.py +0 -0
  521. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_proxy_setup.py +0 -0
  522. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_slug.py +0 -0
  523. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_telemetry_send.py +0 -0
  524. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_teleport_git.py +0 -0
  525. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_teleport_nuage.py +0 -0
  526. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_teleport_service.py +0 -0
  527. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_trusted_folders.py +0 -0
  528. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/core/test_utils.py +0 -0
  529. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/common.py +0 -0
  530. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/conftest.py +0 -0
  531. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/mock_server.py +0 -0
  532. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  533. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/test_cli_tui_streaming.py +0 -0
  534. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  535. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/fixtures/doc_qa_system_prd.md +0 -0
  536. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/mock/__init__.py +0 -0
  537. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/mock/mock_backend_factory.py +0 -0
  538. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/mock/mock_entrypoint.py +0 -0
  539. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/mock/utils.py +0 -0
  540. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/onboarding/test_run_onboarding.py +0 -0
  541. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/onboarding/test_ui_onboarding.py +0 -0
  542. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/session/test_session_loader.py +0 -0
  543. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/session/test_session_logger.py +0 -0
  544. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/session/test_session_migration.py +0 -0
  545. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/skills/conftest.py +0 -0
  546. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/skills/test_manager.py +0 -0
  547. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/skills/test_models.py +0 -0
  548. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/skills/test_parser.py +0 -0
  549. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  550. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  551. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  552. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  553. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  554. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  555. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  556. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  557. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  558. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  559. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  560. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  561. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  562. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  563. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  564. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  565. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  566. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  567. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  568. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  569. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  570. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  571. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  572. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  573. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  574. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  575. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  576. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  577. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  578. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  579. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  580. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  581. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  582. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  583. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  584. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  585. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  586. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  587. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  588. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  589. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  590. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  591. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  592. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  593. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  594. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  595. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  596. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  597. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  598. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  599. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  600. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  601. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  602. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  603. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  604. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  605. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  606. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  607. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  608. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  609. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/base_snapshot_test_app.py +0 -0
  610. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/conftest.py +0 -0
  611. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/snap_compare.py +0 -0
  612. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  613. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  614. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  615. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  616. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  617. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  618. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  619. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  620. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  621. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  622. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  623. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  624. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  625. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  626. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/stress/__init__.py +0 -0
  627. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/stubs/fake_backend.py +0 -0
  628. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/stubs/fake_client.py +0 -0
  629. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/stubs/fake_tool.py +0 -0
  630. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral.py +0 -0
  631. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  632. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_phase3.py +0 -0
  633. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_proposed.py +0 -0
  634. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_admiral_struggle_dedup.py +0 -0
  635. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_auto_compact.py +0 -0
  636. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_backend.py +0 -0
  637. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_observer_streaming.py +0 -0
  638. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_stats.py +0 -0
  639. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agent_tool_call.py +0 -0
  640. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_agents.py +0 -0
  641. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_approval_modal_stray_keys.py +0 -0
  642. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_bank_prd_extended.py +0 -0
  643. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_cli_programmatic_preload.py +0 -0
  644. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_constraint_extract.py +0 -0
  645. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_constraint_hint.py +0 -0
  646. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_context_recovery.py +0 -0
  647. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_count_tool.py +0 -0
  648. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  649. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_gemma4_anti_loop_migration.py +0 -0
  650. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_gemma4_tool_filter.py +0 -0
  651. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_goal.py +0 -0
  652. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_graphrag.py +0 -0
  653. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_history_manager.py +0 -0
  654. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_hle_aggregate.py +0 -0
  655. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_math_tool.py +0 -0
  656. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_mcp_stdio_command_normalization.py +0 -0
  657. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_memory_tool.py +0 -0
  658. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_message_id.py +0 -0
  659. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_message_merging.py +0 -0
  660. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_middleware.py +0 -0
  661. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_reasoning_content.py +0 -0
  662. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_retrieve_project_detection.py +0 -0
  663. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_retrieve_tool.py +0 -0
  664. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_safe_parse_tool_args.py +0 -0
  665. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_session_publish_on_resume.py +0 -0
  666. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_specialist_math_tools_hidden.py +0 -0
  667. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering.py +0 -0
  668. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_capture.py +0 -0
  669. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_compute_vector.py +0 -0
  670. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_extract_pairs.py +0 -0
  671. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_hook.py +0 -0
  672. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  673. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_steering_sidecar_hooks.py +0 -0
  674. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_system_prompt.py +0 -0
  675. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_tagged_text.py +0 -0
  676. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_tool_stop_injected_scope.py +0 -0
  677. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_truncated_arg_path_hint.py +0 -0
  678. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_truncated_search_replace_escalation.py +0 -0
  679. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_truncated_write_escalation.py +0 -0
  680. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_ui_external_editor.py +0 -0
  681. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_ui_input_history.py +0 -0
  682. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_verify_tool.py +0 -0
  683. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/test_wall_of_text_rescue.py +0 -0
  684. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_ask_user_question.py +0 -0
  685. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  686. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_consec_empty_search.py +0 -0
  687. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  688. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  689. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  690. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  691. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_exit_plan_mode.py +0 -0
  692. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_grep.py +0 -0
  693. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  694. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_invoke_context.py +0 -0
  695. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  696. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_manager_get_tool_config.py +0 -0
  697. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_mcp.py +0 -0
  698. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_mcp_sampling.py +0 -0
  699. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  700. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_append_fallback.py +0 -0
  701. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_hard_stop.py +0 -0
  702. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_malformed_block.py +0 -0
  703. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  704. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_task.py +0 -0
  705. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_ui_bash_execution.py +0 -0
  706. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_webfetch.py +0 -0
  707. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_websearch.py +0 -0
  708. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  709. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  710. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  711. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_do_update.py +0 -0
  712. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  713. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_github_update_gateway.py +0 -0
  714. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  715. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_ui_update_notification.py +0 -0
  716. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_update_use_case.py +0 -0
  717. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/tests/update_notifier/test_whats_new.py +0 -0
  718. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/uv.lock +0 -0
  719. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/web/README.md +0 -0
  720. {drydock_cli-2.10.2 → drydock_cli-2.10.3}/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.3
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)
@@ -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.
@@ -7301,7 +7281,6 @@ class AgentLoop:
7301
7281
  db_chain.append(fallback_db)
7302
7282
 
7303
7283
  good_hits: list = []
7304
- text_hits: list = []
7305
7284
  used_db: str | None = None
7306
7285
  for db in db_chain:
7307
7286
  if not Path(db).is_file():
@@ -7336,7 +7315,6 @@ class AgentLoop:
7336
7315
  db, len(hits), len(gh), QUALITY_THRESHOLD,
7337
7316
  )
7338
7317
  if gh:
7339
- text_hits = hits
7340
7318
  good_hits = gh
7341
7319
  used_db = db
7342
7320
  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
@@ -20,7 +20,7 @@ import logging
20
20
  import re
21
21
  from dataclasses import dataclass, field
22
22
  from pathlib import Path
23
- from typing import TYPE_CHECKING, Any
23
+ from typing import TYPE_CHECKING
24
24
 
25
25
  from drydock.core.config import ProviderConfig, DrydockConfig
26
26
  from drydock.core.llm.types import BackendLike
@@ -53,9 +53,9 @@ def _get_active_provider(config: DrydockConfig) -> ProviderConfig | None:
53
53
  # Last resort: first provider
54
54
  return config.providers[0] if config.providers else None
55
55
 
56
+
56
57
  if TYPE_CHECKING:
57
- from drydock.core.agents.manager import AgentManager
58
- from drydock.core.types import EntrypointMetadata
58
+ pass
59
59
 
60
60
  logger = logging.getLogger(__name__)
61
61
 
@@ -554,7 +554,6 @@ async def run_build_pipeline(
554
554
  # _verify_and_fix_imports(plan, base_dir)
555
555
 
556
556
  # Build summary
557
- succeeded = sum(1 for _, ok in results if ok)
558
557
  failed_files = [path for path, ok in results if not ok]
559
558
 
560
559
  # List the actual public APIs so the model can fix imports
@@ -570,26 +569,26 @@ async def run_build_pipeline(
570
569
 
571
570
  summary_lines = [
572
571
  f"I have already created all files for package '{plan.package_name}'.",
573
- f"",
574
- f"Files and their APIs:",
572
+ "",
573
+ "Files and their APIs:",
575
574
  ]
576
575
  summary_lines.extend(api_summary_parts)
577
576
  summary_lines.extend([
578
- f"",
579
- f"YOUR NEXT STEPS (follow exactly):",
577
+ "",
578
+ "YOUR NEXT STEPS (follow exactly):",
580
579
  f"1. Run: python3 -m {plan.package_name} --help",
581
- f"2. If ImportError or NameError: read the failing file, fix with search_replace",
580
+ "2. If ImportError or NameError: read the failing file, fix with search_replace",
582
581
  f"3. Create a sample log file with write_file, then test: python3 -m {plan.package_name} --log-file sample.log",
583
- f"4. When it works, tell the user",
584
- f"",
585
- f"DO NOT run git commands. DO NOT run ls. DO NOT create new .py files.",
582
+ "4. When it works, tell the user",
583
+ "",
584
+ "DO NOT run git commands. DO NOT run ls. DO NOT create new .py files.",
586
585
  ])
587
586
 
588
587
  if failed_files:
589
588
  summary_lines.extend([
590
- f"",
589
+ "",
591
590
  f"These files need implementation: {', '.join(failed_files)}",
592
- f"Use write_file with overwrite=true to implement them.",
591
+ "Use write_file with overwrite=true to implement them.",
593
592
  ])
594
593
 
595
594
  return "\n".join(summary_lines)
@@ -716,7 +715,6 @@ def _fix_circular_imports(plan: BuildPlan, base_dir: Path) -> None:
716
715
  # Circular: A imports B and B imports A
717
716
  # Break by removing the import from the "utility" module
718
717
  # (the one with fewer definitions is likely the utility)
719
- file_a = base_dir / plan.package_name / f"{mod_a.split('.')[-1]}.py"
720
718
  file_b = base_dir / plan.package_name / f"{mod_b.split('.')[-1]}.py"
721
719
  try:
722
720
  content_b = file_b.read_text()
@@ -42,7 +42,7 @@ import json
42
42
  import os
43
43
  import subprocess
44
44
  from dataclasses import asdict, dataclass, field
45
- from datetime import datetime, timezone
45
+ from datetime import datetime, UTC
46
46
  from pathlib import Path
47
47
 
48
48
  # Files we never include in a checkpoint. Mirrors common .gitignore.
@@ -181,7 +181,7 @@ class CheckpointStore:
181
181
  msg_index=msg_index,
182
182
  commit=commit_sha,
183
183
  label=label[:200],
184
- timestamp=datetime.now(timezone.utc).isoformat(),
184
+ timestamp=datetime.now(UTC).isoformat(),
185
185
  agent_state=snapshot_state,
186
186
  )
187
187
  self.checkpoints.append(cp)
@@ -373,7 +373,7 @@ class CheckpointStore:
373
373
  tree = self._git("write-tree", check=False).strip()
374
374
  if not tree:
375
375
  return
376
- stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
376
+ stamp = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ")
377
377
  commit = self._git(
378
378
  "commit-tree", tree, "-m", f"safety {stamp}", check=False
379
379
  ).strip()
@@ -20,10 +20,10 @@ from __future__ import annotations
20
20
 
21
21
  from collections import Counter
22
22
  from pathlib import Path
23
- from typing import Iterable
23
+ from collections.abc import Iterable
24
24
 
25
25
  from drydock.core.classifier.rules import RULES, ClassificationRule
26
- from drydock.core.classifier.signal import Bucket, FailureSignal
26
+ from drydock.core.classifier.signal import FailureSignal
27
27
 
28
28
 
29
29
  class Classifier:
@@ -31,12 +31,11 @@ from __future__ import annotations
31
31
 
32
32
  import json
33
33
  import logging
34
- import os
35
34
  import time
36
35
  from collections import Counter
37
36
  from dataclasses import dataclass, field
38
37
  from pathlib import Path
39
- from typing import Callable, Iterable
38
+ from collections.abc import Callable, Iterable
40
39
 
41
40
  from drydock.core.classifier.signal import Bucket, FailureSignal
42
41
 
@@ -17,7 +17,6 @@ from __future__ import annotations
17
17
 
18
18
  import re
19
19
  from pathlib import Path
20
- from typing import Union
21
20
 
22
21
  _LINE_RE = re.compile(
23
22
  r"""
@@ -55,7 +54,7 @@ def _parse_value(raw: str | None) -> str | None:
55
54
  return raw
56
55
 
57
56
 
58
- def dotenv_values(path: Union[str, Path]) -> dict[str, str | None]:
57
+ def dotenv_values(path: str | Path) -> dict[str, str | None]:
59
58
  """Read a .env file and return a dict of key→value pairs."""
60
59
  path = Path(path)
61
60
  result: dict[str, str | None] = {}
@@ -74,7 +73,7 @@ def dotenv_values(path: Union[str, Path]) -> dict[str, str | None]:
74
73
 
75
74
 
76
75
  def set_key(
77
- path: Union[str, Path],
76
+ path: str | Path,
78
77
  key: str,
79
78
  value: str,
80
79
  quote_mode: str = "auto",
@@ -119,7 +118,7 @@ def set_key(
119
118
 
120
119
 
121
120
  def unset_key(
122
- path: Union[str, Path],
121
+ path: str | Path,
123
122
  key: str,
124
123
  ) -> None:
125
124
  """Remove KEY=... line from a .env file. No-op if file or key is absent."""
@@ -36,7 +36,7 @@ from dataclasses import dataclass
36
36
  _CANDIDATE_ENDPOINTS: list[tuple[str, str]] = [
37
37
  ("llama.cpp", "http://127.0.0.1:8000/v1"),
38
38
  ("llama.cpp", "http://127.0.0.1:8080/v1"),
39
- ("Ollama", "http://127.0.0.1:11434/v1"),
39
+ ("Ollama", "http://127.0.0.1:11434/v1"),
40
40
  ("LM Studio", "http://127.0.0.1:1234/v1"),
41
41
  ]
42
42