drydock-cli 2.10.7__tar.gz → 2.10.9__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 (739) hide show
  1. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/PKG-INFO +2 -2
  2. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/agent_loop.py +16 -1
  3. drydock_cli-2.10.9/drydock/data/cookbook/tbench_domains/mcmc_stan.md +188 -0
  4. drydock_cli-2.10.9/drydock/data/cookbook/tbench_domains/password_recovery.md +189 -0
  5. drydock_cli-2.10.9/drydock/data/cookbook/tbench_domains/raman_fitting.md +190 -0
  6. drydock_cli-2.10.9/drydock/data/cookbook/tbench_domains/sqlite_recovery.md +167 -0
  7. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/pyproject.toml +2 -2
  8. drydock_cli-2.10.9/tests/test_auto_retrieve_wrapper_strip.py +85 -0
  9. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/.gitignore +0 -0
  10. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/LICENSE +0 -0
  11. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/NOTICE +0 -0
  12. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/README.md +0 -0
  13. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/distribution/zed/LICENSE +0 -0
  14. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/docs/README.md +0 -0
  15. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/__init__.py +0 -0
  16. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/__main__.py +0 -0
  17. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/__init__.py +0 -0
  18. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/acp_agent_loop.py +0 -0
  19. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/acp_logger.py +0 -0
  20. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/entrypoint.py +0 -0
  21. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/__init__.py +0 -0
  22. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/base.py +0 -0
  23. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/builtins/bash.py +0 -0
  24. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/builtins/read_file.py +0 -0
  25. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/builtins/search_replace.py +0 -0
  26. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/builtins/todo.py +0 -0
  27. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/builtins/write_file.py +0 -0
  28. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/tools/session_update.py +0 -0
  29. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/acp/utils.py +0 -0
  30. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/__init__.py +0 -0
  31. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/detectors.py +0 -0
  32. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/detectors_proposed.py +0 -0
  33. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/history.py +0 -0
  34. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/interventions.py +0 -0
  35. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/llm_analyzer.py +0 -0
  36. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/metrics.py +0 -0
  37. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/opus_escalator.py +0 -0
  38. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/persistence.py +0 -0
  39. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/policy.py +0 -0
  40. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/proposer.py +0 -0
  41. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/stager.py +0 -0
  42. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/task_classifier.py +0 -0
  43. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/tuning.py +0 -0
  44. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/validator.py +0 -0
  45. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/admiral/worker.py +0 -0
  46. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/__init__.py +0 -0
  47. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/autocompletion/__init__.py +0 -0
  48. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/autocompletion/base.py +0 -0
  49. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/autocompletion/path_completion.py +0 -0
  50. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/autocompletion/slash_command.py +0 -0
  51. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/cli.py +0 -0
  52. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/clipboard.py +0 -0
  53. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/commands.py +0 -0
  54. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/entrypoint.py +0 -0
  55. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/fix_windows_path.py +0 -0
  56. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/history_manager.py +0 -0
  57. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
  58. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
  59. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
  60. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/terminal_setup.py +0 -0
  61. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/__init__.py +0 -0
  62. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
  63. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/app.py +0 -0
  64. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/app.tcss +0 -0
  65. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/external_editor.py +0 -0
  66. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
  67. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
  68. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
  69. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  70. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
  71. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
  72. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
  73. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
  74. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
  75. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
  76. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
  77. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
  78. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
  79. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
  80. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
  81. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
  82. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
  83. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
  84. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
  85. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/compact.py +0 -0
  86. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
  87. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
  88. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
  89. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/loading.py +0 -0
  90. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/messages.py +0 -0
  91. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
  92. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
  93. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
  94. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
  95. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
  96. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
  97. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
  98. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
  99. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
  100. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/tools.py +0 -0
  101. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
  102. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
  103. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/windowing/history.py +0 -0
  104. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
  105. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/textual_ui/windowing/state.py +0 -0
  106. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/__init__.py +0 -0
  107. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
  108. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
  109. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
  110. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
  111. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
  112. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/update.py +0 -0
  113. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/cli/update_notifier/whats_new.py +0 -0
  114. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/__init__.py +0 -0
  115. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/agents/__init__.py +0 -0
  116. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/agents/manager.py +0 -0
  117. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/agents/models.py +0 -0
  118. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/auth/__init__.py +0 -0
  119. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/auth/crypto.py +0 -0
  120. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/auth/github.py +0 -0
  121. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/auto_solve.py +0 -0
  122. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/__init__.py +0 -0
  123. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/completers.py +0 -0
  124. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
  125. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
  126. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
  127. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/file_indexer/store.py +0 -0
  128. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
  129. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/fuzzy.py +0 -0
  130. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/path_prompt.py +0 -0
  131. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
  132. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/build_orchestrator.py +0 -0
  133. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/checkpoint.py +0 -0
  134. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/__init__.py +0 -0
  135. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/__main__.py +0 -0
  136. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/classifier.py +0 -0
  137. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/dispatcher.py +0 -0
  138. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/rules.py +0 -0
  139. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/classifier/signal.py +0 -0
  140. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/__init__.py +0 -0
  141. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/_dotenv.py +0 -0
  142. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/_settings.py +0 -0
  143. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/doctor.py +0 -0
  144. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/harness_files/__init__.py +0 -0
  145. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/harness_files/_harness_manager.py +0 -0
  146. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/harness_files/_paths.py +0 -0
  147. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/local_detect.py +0 -0
  148. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/config/migrate.py +0 -0
  149. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/constraint_extract.py +0 -0
  150. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/constraint_hint.py +0 -0
  151. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/consultant.py +0 -0
  152. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/context_recovery.py +0 -0
  153. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/drydock_states.py +0 -0
  154. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/goal.py +0 -0
  155. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/hooks.py +0 -0
  156. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/__init__.py +0 -0
  157. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/anthropic.py +0 -0
  158. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/base.py +0 -0
  159. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/factory.py +0 -0
  160. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/generic.py +0 -0
  161. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/mistral.py +0 -0
  162. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
  163. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/backend/vertex.py +0 -0
  164. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/exceptions.py +0 -0
  165. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/format.py +0 -0
  166. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/grammar/__init__.py +0 -0
  167. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/grammar/_llamacpp_converter.py +0 -0
  168. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/grammar/policy.py +0 -0
  169. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/grammar/policy_union.py +0 -0
  170. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/message_utils.py +0 -0
  171. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/llm/types.py +0 -0
  172. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/logger.py +0 -0
  173. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/middleware.py +0 -0
  174. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/output_formatters.py +0 -0
  175. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/paths/__init__.py +0 -0
  176. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/paths/_drydock_home.py +0 -0
  177. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/paths/_local_config_walk.py +0 -0
  178. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/paths/conventions.py +0 -0
  179. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/plan_session.py +0 -0
  180. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/plugins.py +0 -0
  181. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/programmatic.py +0 -0
  182. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/__init__.py +0 -0
  183. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/builder.md +0 -0
  184. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/cli.md +0 -0
  185. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/compact.md +0 -0
  186. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/dangerous_directory.md +0 -0
  187. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/diagnostic.md +0 -0
  188. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/explore.md +0 -0
  189. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/gemma4.md +0 -0
  190. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/gemma4_math.md +0 -0
  191. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/gemma4_slim.md +0 -0
  192. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/planner.md +0 -0
  193. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/project_context.md +0 -0
  194. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/prompts/tests.md +0 -0
  195. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/proxy_setup.py +0 -0
  196. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/agent_memory.py +0 -0
  197. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/checkpoints.py +0 -0
  198. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/session_loader.py +0 -0
  199. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/session_logger.py +0 -0
  200. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/session_migration.py +0 -0
  201. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session/state_file.py +0 -0
  202. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/session_checker.py +0 -0
  203. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/skills/__init__.py +0 -0
  204. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/skills/manager.py +0 -0
  205. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/skills/models.py +0 -0
  206. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/skills/parser.py +0 -0
  207. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/slug.py +0 -0
  208. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/spec_check.py +0 -0
  209. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/steering_hook.py +0 -0
  210. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/system_prompt.py +0 -0
  211. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/telemetry/__init__.py +0 -0
  212. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/telemetry/send.py +0 -0
  213. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/teleport/errors.py +0 -0
  214. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/teleport/git.py +0 -0
  215. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/teleport/nuage.py +0 -0
  216. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/teleport/teleport.py +0 -0
  217. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/teleport/types.py +0 -0
  218. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/base.py +0 -0
  219. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/_task_manager.py +0 -0
  220. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/algebra_tool.py +0 -0
  221. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/ask_user_question.py +0 -0
  222. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/bash.py +0 -0
  223. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
  224. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/count_tool.py +0 -0
  225. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/cron.py +0 -0
  226. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
  227. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/glob_tool.py +0 -0
  228. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/grep.py +0 -0
  229. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/invoke_skill.py +0 -0
  230. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
  231. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/logic_tool.py +0 -0
  232. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/lsp.py +0 -0
  233. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/math_tool.py +0 -0
  234. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/mcp_resources.py +0 -0
  235. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
  236. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/memory_tool.py +0 -0
  237. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/notebook_edit.py +0 -0
  238. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
  239. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/powershell.py +0 -0
  240. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prolog_tool.py +0 -0
  241. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
  242. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
  243. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/bash.md +0 -0
  244. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/cron.md +0 -0
  245. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/glob.md +0 -0
  246. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/grep.md +0 -0
  247. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
  248. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
  249. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
  250. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
  251. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
  252. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
  253. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
  254. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
  255. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
  256. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/task.md +0 -0
  257. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
  258. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/todo.md +0 -0
  259. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
  260. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
  261. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
  262. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
  263. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
  264. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/read_file.py +0 -0
  265. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/retrieve.py +0 -0
  266. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/search_replace.py +0 -0
  267. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/set_tool.py +0 -0
  268. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/solve_tool.py +0 -0
  269. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/stats_tool.py +0 -0
  270. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/task.py +0 -0
  271. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/todo.py +0 -0
  272. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/tool_search.py +0 -0
  273. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/units_tool.py +0 -0
  274. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/verify_tool.py +0 -0
  275. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/webfetch.py +0 -0
  276. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/websearch.py +0 -0
  277. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/worktree.py +0 -0
  278. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/builtins/write_file.py +0 -0
  279. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/injection_guard.py +0 -0
  280. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/manager.py +0 -0
  281. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/mcp/__init__.py +0 -0
  282. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/mcp/registry.py +0 -0
  283. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/mcp/tools.py +0 -0
  284. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/mcp_sampling.py +0 -0
  285. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/ui.py +0 -0
  286. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/tools/utils.py +0 -0
  287. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/trusted_folders.py +0 -0
  288. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/types.py +0 -0
  289. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/core/utils.py +0 -0
  290. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/__init__.py +0 -0
  291. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/__main__.py +0 -0
  292. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/gap_detector.py +0 -0
  293. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/ingest.py +0 -0
  294. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/item.py +0 -0
  295. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/queue.py +0 -0
  296. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/curiosity/surprise.py +0 -0
  297. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/python/global_rename.md +0 -0
  298. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/biopython_dna.md +0 -0
  299. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/dense_eigenvalue.md +0 -0
  300. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/elf_extraction_js.md +0 -0
  301. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/feal_cryptanalysis.md +0 -0
  302. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/llm_batching_scheduler.md +0 -0
  303. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/mips_isa.md +0 -0
  304. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/mobilesam_cell_seg.md +0 -0
  305. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/mteb_retrieve.md +0 -0
  306. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/path_tracing.md +0 -0
  307. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/regex_chess.md +0 -0
  308. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/vim_macros.md +0 -0
  309. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/data/cookbook/tbench_domains/xss_filter.md +0 -0
  310. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/__init__.py +0 -0
  311. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/__main__.py +0 -0
  312. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/code_indexer.py +0 -0
  313. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/retriever.py +0 -0
  314. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/storage.py +0 -0
  315. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/graphrag/text_indexer.py +0 -0
  316. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/__init__.py +0 -0
  317. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/base.py +0 -0
  318. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/onboarding.tcss +0 -0
  319. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/screens/__init__.py +0 -0
  320. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/screens/api_key.py +0 -0
  321. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/screens/choice.py +0 -0
  322. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/screens/local_model.py +0 -0
  323. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/onboarding/screens/welcome.py +0 -0
  324. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
  325. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
  326. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/__init__.py +0 -0
  327. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/api-design/SKILL.md +0 -0
  328. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/audit-tests/SKILL.md +0 -0
  329. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/batch/SKILL.md +0 -0
  330. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/checklist/SKILL.md +0 -0
  331. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/commit-code/SKILL.md +0 -0
  332. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
  333. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/context-summary/SKILL.md +0 -0
  334. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/create-presentation/SKILL.md +0 -0
  335. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/deep-research/SKILL.md +0 -0
  336. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/deploy/SKILL.md +0 -0
  337. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/diff-review/SKILL.md +0 -0
  338. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/doc-gen/SKILL.md +0 -0
  339. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/explain-code/SKILL.md +0 -0
  340. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/explore-code/SKILL.md +0 -0
  341. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/fix-issue/SKILL.md +0 -0
  342. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/git-ops/SKILL.md +0 -0
  343. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/init-project/SKILL.md +0 -0
  344. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/investigate/SKILL.md +0 -0
  345. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/logic/SKILL.md +0 -0
  346. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
  347. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/loop/SKILL.md +0 -0
  348. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/migrate/SKILL.md +0 -0
  349. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/perf-analyze/SKILL.md +0 -0
  350. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/plan-impl/SKILL.md +0 -0
  351. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/pr-review/SKILL.md +0 -0
  352. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/prove/SKILL.md +0 -0
  353. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/refactor/SKILL.md +0 -0
  354. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/regex-help/SKILL.md +0 -0
  355. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/review/SKILL.md +0 -0
  356. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/security-review/SKILL.md +0 -0
  357. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/ship/SKILL.md +0 -0
  358. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/simplify/SKILL.md +0 -0
  359. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/strong-tests/SKILL.md +0 -0
  360. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/skills/test-verify/SKILL.md +0 -0
  361. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/__init__.py +0 -0
  362. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/__main__.py +0 -0
  363. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/applier.py +0 -0
  364. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/config.py +0 -0
  365. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/registry.py +0 -0
  366. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sandbox.py +0 -0
  367. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sidecar/__init__.py +0 -0
  368. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sidecar/header_parser.py +0 -0
  369. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sidecar/hooks.py +0 -0
  370. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sidecar/loader.py +0 -0
  371. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/sidecar/server.py +0 -0
  372. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/train/__init__.py +0 -0
  373. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/train/capture.py +0 -0
  374. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/train/compute_vector.py +0 -0
  375. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/train/extract_pairs.py +0 -0
  376. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/train/scan_sessions.py +0 -0
  377. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/steering/vectors.py +0 -0
  378. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/drydock/whats_new.md +0 -0
  379. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/install_tests/README.md +0 -0
  380. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/install_tests/publish/README.md +0 -0
  381. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/install_tests/windows/README.md +0 -0
  382. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/scripts/README.md +0 -0
  383. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/scripts/_archived_eval_harness/README.md +0 -0
  384. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/scripts/llm/README.md +0 -0
  385. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/__init__.py +0 -0
  386. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/conftest.py +0 -0
  387. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_acp.py +0 -0
  388. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_agent_thought.py +0 -0
  389. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_bash.py +0 -0
  390. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_compact_session_updates.py +0 -0
  391. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_content.py +0 -0
  392. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_initialize.py +0 -0
  393. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_list_sessions.py +0 -0
  394. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_load_session.py +0 -0
  395. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_multi_session.py +0 -0
  396. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_new_session.py +0 -0
  397. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_proxy_setup_acp.py +0 -0
  398. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_read_file.py +0 -0
  399. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_search_replace.py +0 -0
  400. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_set_config_option.py +0 -0
  401. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_set_mode.py +0 -0
  402. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_set_model.py +0 -0
  403. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_tool_call_session_update.py +0 -0
  404. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_utils.py +0 -0
  405. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/acp/test_write_file.py +0 -0
  406. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/conftest.py +0 -0
  407. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_file_indexer.py +0 -0
  408. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_fuzzy.py +0 -0
  409. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
  410. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_path_completer_recursive.py +0 -0
  411. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_path_completion_controller.py +0 -0
  412. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
  413. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_slash_command_controller.py +0 -0
  414. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
  415. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/__init__.py +0 -0
  416. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/data/__init__.py +0 -0
  417. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/data/fireworks.py +0 -0
  418. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/data/mistral.py +0 -0
  419. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/test_anthropic_adapter.py +0 -0
  420. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/test_backend.py +0 -0
  421. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/test_generic_adapter_sanitize.py +0 -0
  422. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/test_reasoning_adapter.py +0 -0
  423. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
  424. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
  425. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
  426. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
  427. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_bell_notifications.py +0 -0
  428. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_braille_renderer.py +0 -0
  429. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_clipboard.py +0 -0
  430. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_commands.py +0 -0
  431. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_copy_shortcuts.py +0 -0
  432. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_external_editor.py +0 -0
  433. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_no_markup_static.py +0 -0
  434. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_question_app.py +0 -0
  435. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_spinner.py +0 -0
  436. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_switching_mode.py +0 -0
  437. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_ui_clipboard_notifications.py +0 -0
  438. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
  439. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_ui_session_resume.py +0 -0
  440. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/test_ui_skill_dispatch.py +0 -0
  441. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/textual_ui/__init__.py +0 -0
  442. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/cli/textual_ui/test_session_picker.py +0 -0
  443. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/conftest.py +0 -0
  444. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_agents.py +0 -0
  445. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_auth_crypto.py +0 -0
  446. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_auth_github.py +0 -0
  447. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_config_load_dotenv.py +0 -0
  448. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_config_paths.py +0 -0
  449. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_config_resolution.py +0 -0
  450. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_file_logging.py +0 -0
  451. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_plan_session.py +0 -0
  452. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_proxy_setup.py +0 -0
  453. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_slug.py +0 -0
  454. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_telemetry_send.py +0 -0
  455. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_teleport_git.py +0 -0
  456. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_teleport_nuage.py +0 -0
  457. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_teleport_service.py +0 -0
  458. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_trusted_folders.py +0 -0
  459. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/core/test_utils.py +0 -0
  460. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/common.py +0 -0
  461. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/conftest.py +0 -0
  462. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/mock_server.py +0 -0
  463. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/test_cli_tui_onboarding.py +0 -0
  464. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/test_cli_tui_streaming.py +0 -0
  465. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
  466. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/fixtures/doc_qa_system_prd.md +0 -0
  467. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/mock/__init__.py +0 -0
  468. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/mock/mock_backend_factory.py +0 -0
  469. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/mock/mock_entrypoint.py +0 -0
  470. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/mock/utils.py +0 -0
  471. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/onboarding/test_run_onboarding.py +0 -0
  472. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/onboarding/test_ui_onboarding.py +0 -0
  473. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/session/test_session_loader.py +0 -0
  474. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/session/test_session_logger.py +0 -0
  475. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/session/test_session_migration.py +0 -0
  476. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/skills/conftest.py +0 -0
  477. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/skills/test_manager.py +0 -0
  478. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/skills/test_models.py +0 -0
  479. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/skills/test_parser.py +0 -0
  480. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
  481. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
  482. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
  483. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
  484. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
  485. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
  486. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
  487. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
  488. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
  489. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
  490. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
  491. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
  492. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
  493. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
  494. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
  495. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
  496. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
  497. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
  498. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
  499. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
  500. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
  501. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
  502. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
  503. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
  504. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
  505. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
  506. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
  507. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
  508. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
  509. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
  510. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
  511. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
  512. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
  513. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
  514. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
  515. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
  516. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
  517. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
  518. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
  519. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
  520. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
  521. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
  522. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
  523. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
  524. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
  525. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
  526. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
  527. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
  528. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
  529. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
  530. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
  531. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
  532. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
  533. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
  534. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
  535. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
  536. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
  537. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
  538. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
  539. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
  540. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/base_snapshot_test_app.py +0 -0
  541. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/conftest.py +0 -0
  542. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/snap_compare.py +0 -0
  543. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
  544. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
  545. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
  546. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
  547. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
  548. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
  549. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
  550. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
  551. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
  552. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
  553. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
  554. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
  555. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
  556. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
  557. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/stress/__init__.py +0 -0
  558. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/stress/test_io_thrash.py +0 -0
  559. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/stubs/fake_backend.py +0 -0
  560. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/stubs/fake_client.py +0 -0
  561. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/stubs/fake_tool.py +0 -0
  562. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral.py +0 -0
  563. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
  564. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_intervention_outcome.py +0 -0
  565. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_phase3.py +0 -0
  566. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_proposed.py +0 -0
  567. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_session_id.py +0 -0
  568. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_admiral_struggle_dedup.py +0 -0
  569. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_auto_compact.py +0 -0
  570. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_backend.py +0 -0
  571. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_observer_streaming.py +0 -0
  572. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_stats.py +0 -0
  573. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_tasks.py +0 -0
  574. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agent_tool_call.py +0 -0
  575. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_agents.py +0 -0
  576. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_algebra_tool.py +0 -0
  577. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_api_error_recovery.py +0 -0
  578. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_approval_modal_stray_keys.py +0 -0
  579. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_auto_retrieve_cookbook_bypass.py +0 -0
  580. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_auto_retrieve_soft_nudge.py +0 -0
  581. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_auto_solve.py +0 -0
  582. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_build.py +0 -0
  583. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_debug.py +0 -0
  584. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_multiagent.py +0 -0
  585. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_prd.py +0 -0
  586. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_prd_extended.py +0 -0
  587. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_tools.py +0 -0
  588. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_bank_update.py +0 -0
  589. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_broken_tool_isolation.py +0 -0
  590. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_build_projects.py +0 -0
  591. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_checkpoint.py +0 -0
  592. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_chemistry_tool.py +0 -0
  593. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_classifier.py +0 -0
  594. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_cli_programmatic_preload.py +0 -0
  595. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_config_migration.py +0 -0
  596. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_constraint_extract.py +0 -0
  597. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_constraint_hint.py +0 -0
  598. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_context_recovery.py +0 -0
  599. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_count_tool.py +0 -0
  600. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_curiosity.py +0 -0
  601. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_current_bugs.py +0 -0
  602. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_dispatch_report.py +0 -0
  603. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_dispatcher.py +0 -0
  604. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_drydock_regression.py +0 -0
  605. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_drydock_tasks.py +0 -0
  606. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_fake_tool_call_paren_syntax.py +0 -0
  607. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_full_regression.py +0 -0
  608. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_gemma4_anti_loop_migration.py +0 -0
  609. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_gemma4_tool_filter.py +0 -0
  610. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_goal.py +0 -0
  611. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_grammar.py +0 -0
  612. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_graphrag.py +0 -0
  613. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_graphrag_pdf_ingest.py +0 -0
  614. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_graphrag_worked_examples.py +0 -0
  615. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_hallucinated_tool_suppression.py +0 -0
  616. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_history_manager.py +0 -0
  617. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_hle_aggregate.py +0 -0
  618. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_integration.py +0 -0
  619. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_issue_fixes.py +0 -0
  620. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_linear_algebra_tool.py +0 -0
  621. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_local_detect.py +0 -0
  622. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_local_detect_fallback.py +0 -0
  623. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_logic_tool.py +0 -0
  624. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_loop_detection.py +0 -0
  625. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_loop_regressions_2026_06_06.py +0 -0
  626. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_math_docs_lazy_injection.py +0 -0
  627. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_math_tool.py +0 -0
  628. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_mcp_settings.py +0 -0
  629. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_mcp_stdio_command_normalization.py +0 -0
  630. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_mechanical_rename_tool.py +0 -0
  631. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_mechanical_rename_type_extraction.py +0 -0
  632. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_memory_tool.py +0 -0
  633. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_message_id.py +0 -0
  634. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_message_merging.py +0 -0
  635. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_middleware.py +0 -0
  636. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_multi_agent.py +0 -0
  637. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_number_theory_tool.py +0 -0
  638. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_prolog_tool.py +0 -0
  639. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_read_file_not_found_listing.py +0 -0
  640. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_read_file_notebook_slim.py +0 -0
  641. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_real_failures.py +0 -0
  642. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_real_issues.py +0 -0
  643. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_real_workflow.py +0 -0
  644. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_reasoning_content.py +0 -0
  645. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_rejudge_hle.py +0 -0
  646. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_retrieval_consumer.py +0 -0
  647. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_retrieve_project_detection.py +0 -0
  648. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_retrieve_tool.py +0 -0
  649. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_safe_parse_tool_args.py +0 -0
  650. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_search_replace_args_not_truncated.py +0 -0
  651. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_search_replace_syntax_rollback.py +0 -0
  652. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_session_log_event.py +0 -0
  653. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_session_publish_on_resume.py +0 -0
  654. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_set_tool.py +0 -0
  655. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_smoke.py +0 -0
  656. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_solve_tool.py +0 -0
  657. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_specialist_math_tools_hidden.py +0 -0
  658. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_stats_tool.py +0 -0
  659. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering.py +0 -0
  660. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_capture.py +0 -0
  661. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_compute_vector.py +0 -0
  662. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_extract_pairs.py +0 -0
  663. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_hook.py +0 -0
  664. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_sidecar_chat_inputs.py +0 -0
  665. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_steering_sidecar_hooks.py +0 -0
  666. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_system_prompt.py +0 -0
  667. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_tagged_text.py +0 -0
  668. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_task_complete_nudge.py +0 -0
  669. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_tool_args.py +0 -0
  670. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_tool_call_loops_regression_suite.py +0 -0
  671. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_tool_stop_injected_scope.py +0 -0
  672. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_truncate_args_valid_json.py +0 -0
  673. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_truncated_arg_path_hint.py +0 -0
  674. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_truncated_search_replace_escalation.py +0 -0
  675. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_truncated_write_escalation.py +0 -0
  676. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_ui_external_editor.py +0 -0
  677. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_ui_input_history.py +0 -0
  678. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_units_tool.py +0 -0
  679. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_user_issues.py +0 -0
  680. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_validation_error_scrub.py +0 -0
  681. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_verify_tool.py +0 -0
  682. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_wall_of_text_rescue.py +0 -0
  683. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_workloads.py +0 -0
  684. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/test_write_file_missing_path.py +0 -0
  685. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/testbank_helpers.py +0 -0
  686. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_ask_user_question.py +0 -0
  687. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash.py +0 -0
  688. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_binary_grep_hint.py +0 -0
  689. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_consec_empty_search.py +0 -0
  690. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
  691. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
  692. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_error_loop_breaker.py +0 -0
  693. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
  694. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
  695. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
  696. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
  697. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_exit_plan_mode.py +0 -0
  698. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_grep.py +0 -0
  699. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
  700. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_invoke_context.py +0 -0
  701. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_manager_gemma_derived_models.py +0 -0
  702. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_manager_get_tool_config.py +0 -0
  703. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_mcp.py +0 -0
  704. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_mcp_sampling.py +0 -0
  705. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_pre_rename_hook.py +0 -0
  706. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
  707. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_read_file_dedup_reembed.py +0 -0
  708. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_read_file_directory.py +0 -0
  709. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_read_file_limit_truncation.py +0 -0
  710. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_append_fallback.py +0 -0
  711. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_dir_path.py +0 -0
  712. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_empty_content.py +0 -0
  713. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_file_not_found.py +0 -0
  714. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
  715. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_hard_stop.py +0 -0
  716. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_malformed_block.py +0 -0
  717. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
  718. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_placeholder.py +0 -0
  719. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
  720. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_task.py +0 -0
  721. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_ui_bash_execution.py +0 -0
  722. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_webfetch.py +0 -0
  723. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_websearch.py +0 -0
  724. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
  725. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_write_file_missing_main_module.py +0 -0
  726. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_write_file_missing_path_hint.py +0 -0
  727. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/tools/test_write_file_multifile_rename.py +0 -0
  728. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
  729. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
  730. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_do_update.py +0 -0
  731. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
  732. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_github_update_gateway.py +0 -0
  733. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
  734. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_ui_update_notification.py +0 -0
  735. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_update_use_case.py +0 -0
  736. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/tests/update_notifier/test_whats_new.py +0 -0
  737. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/uv.lock +0 -0
  738. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/web/README.md +0 -0
  739. {drydock_cli-2.10.7 → drydock_cli-2.10.9}/worked_examples/README.md +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 2.10.7
4
- Summary: Local-first CLI coding agent tested with Gemma 4 26B via llama.cpp
3
+ Version: 2.10.9
4
+ Summary: Local-first TUI coding agent for Gemma 4 + llama.cpp, with GraphRAG retrieval and a curated cookbook of domain recipes.
5
5
  Project-URL: Homepage, https://github.com/fbobe321/drydock
6
6
  Project-URL: Repository, https://github.com/fbobe321/drydock
7
7
  Project-URL: Issues, https://github.com/fbobe321/drydock/issues
@@ -7255,9 +7255,24 @@ class AgentLoop:
7255
7255
  except ValueError:
7256
7256
  _bypass_thresh = 25.0
7257
7257
  # Cheap probe — short query, just enough to read the top score.
7258
+ #
7259
+ # 2026-06-09: strip the harness wrapper from the probe query.
7260
+ # tbench / harbor prompts open with ~600 chars of "WRITE-FIRST
7261
+ # RULE / Process to follow" boilerplate followed by
7262
+ # "----- Task: -----" then the actual task. Using the raw
7263
+ # message made global_rename.md (which contains "tool call",
7264
+ # "rename", "process") score 51.4 — beating the FEAL-specific
7265
+ # cookbook — on a FEAL trial, so the injection was pure noise
7266
+ # that caused an empty model response and 43s session exit.
7258
7267
  try:
7259
7268
  from drydock.graphrag import Index as _Probe
7260
- _probe_query = (user_msg or "").strip()[:300]
7269
+ _raw_for_probe = user_msg or ""
7270
+ _task_marker = _raw_for_probe.find("----- Task: -----")
7271
+ if _task_marker >= 0:
7272
+ _raw_for_probe = _raw_for_probe[
7273
+ _task_marker + len("----- Task: -----"):
7274
+ ]
7275
+ _probe_query = _raw_for_probe.strip()[:300]
7261
7276
  if _probe_query:
7262
7277
  _env_db = os.environ.get("DRYDOCK_GRAPHRAG_DB")
7263
7278
  _home_db = str(Path.home() / ".drydock" / "graphrag.sqlite")
@@ -0,0 +1,188 @@
1
+ # MCMC sampling with Stan (RStan / PyStan)
2
+
3
+ Used by: `mcmc-sampling-stan`, `rstan-to-pystan`. Task asks for a
4
+ Bayesian hierarchical model fit via MCMC sampling, usually with a
5
+ specific model file (`.stan`) and a specific package (RStan or
6
+ PyStan/CmdStanPy). Output: posterior means written to plaintext
7
+ files.
8
+
9
+ Currently flaky-pass (2/6 = 33% for mcmc-sampling-stan).
10
+
11
+ ## Stan model file structure
12
+
13
+ A Stan model has 3-4 standard blocks:
14
+
15
+ ```stan
16
+ data {
17
+ int<lower=0> N; // n observations
18
+ vector[N] y; // observed outcomes
19
+ }
20
+ parameters {
21
+ real alpha;
22
+ real<lower=0> sigma;
23
+ }
24
+ model {
25
+ alpha ~ normal(0, 10); // priors
26
+ sigma ~ exponential(1);
27
+ y ~ normal(alpha, sigma); // likelihood
28
+ }
29
+ ```
30
+
31
+ The file is human-readable and can be inspected with `cat` if the
32
+ task provides it.
33
+
34
+ ## The R + RStan path (preferred when task asks for R)
35
+
36
+ ```r
37
+ library(rstan)
38
+ options(mc.cores = parallel::detectCores())
39
+ rstan_options(auto_write = TRUE)
40
+
41
+ # Build the data list from CSV / pre-computed numbers
42
+ data_list <- list(
43
+ N = nrow(my_df),
44
+ y = my_df$y,
45
+ x = my_df$x
46
+ )
47
+
48
+ # Fit. iter=2000 + warmup=1000 + chains=4 is the canonical setting.
49
+ fit <- stan(
50
+ file = "/app/model.stan",
51
+ data = data_list,
52
+ iter = 2000, warmup = 1000, chains = 4, seed = 42
53
+ )
54
+
55
+ # Extract posterior summaries
56
+ post <- extract(fit)
57
+ alpha_mean <- mean(post$alpha)
58
+ beta_mean <- mean(post$beta)
59
+
60
+ # Task usually expects single-number output files:
61
+ writeLines(sprintf("%.6f", alpha_mean), "/app/posterior_alpha_mean.txt")
62
+ writeLines(sprintf("%.6f", beta_mean), "/app/posterior_beta_mean.txt")
63
+ ```
64
+
65
+ ## The Python + CmdStanPy path (preferred when task asks for Python)
66
+
67
+ PyStan 3 dropped Windows support and has many install issues;
68
+ **CmdStanPy is the better choice** for tbench. It calls the CmdStan
69
+ binary directly:
70
+
71
+ ```python
72
+ import cmdstanpy
73
+ # CmdStan must be installed; on first run it downloads + builds itself
74
+ cmdstanpy.install_cmdstan(progress=False)
75
+
76
+ model = cmdstanpy.CmdStanModel(stan_file="/app/model.stan")
77
+
78
+ fit = model.sample(
79
+ data={"N": len(y), "y": y.tolist(), "x": x.tolist()},
80
+ iter_sampling=1000,
81
+ iter_warmup=1000,
82
+ chains=4,
83
+ seed=42,
84
+ show_progress=False,
85
+ )
86
+
87
+ post = fit.stan_variables() # dict: param name → np.ndarray
88
+ import numpy as np
89
+ alpha_mean = float(np.mean(post["alpha"]))
90
+ beta_mean = float(np.mean(post["beta"]))
91
+
92
+ with open("/app/posterior_alpha_mean.txt", "w") as f:
93
+ f.write(f"{alpha_mean:.6f}\n")
94
+ with open("/app/posterior_beta_mean.txt", "w") as f:
95
+ f.write(f"{beta_mean:.6f}\n")
96
+ ```
97
+
98
+ ## Common task shape: hierarchical model
99
+
100
+ Two-level groups (e.g., students within schools), random
101
+ intercepts/slopes:
102
+
103
+ ```stan
104
+ data {
105
+ int<lower=0> N; // total observations
106
+ int<lower=0> J; // number of groups
107
+ array[N] int<lower=1,upper=J> group;
108
+ vector[N] y;
109
+ vector[N] x;
110
+ }
111
+ parameters {
112
+ real alpha; // grand intercept
113
+ real beta; // grand slope
114
+ real<lower=0> tau_a; // group intercept SD
115
+ vector[J] a_offset; // standardized per-group intercept
116
+ real<lower=0> sigma;
117
+ }
118
+ transformed parameters {
119
+ vector[J] a = alpha + tau_a * a_offset; // non-centered param
120
+ }
121
+ model {
122
+ alpha ~ normal(0, 10);
123
+ beta ~ normal(0, 10);
124
+ tau_a ~ exponential(1);
125
+ a_offset ~ normal(0, 1);
126
+ sigma ~ exponential(1);
127
+ y ~ normal(a[group] + beta * x, sigma);
128
+ }
129
+ ```
130
+
131
+ **Non-centered parameterization** (the `a_offset → a` trick) is
132
+ critical for hierarchical models with small per-group counts. Without
133
+ it, MCMC mixing is terrible and means are unreliable.
134
+
135
+ ## Pitfalls that cost passes
136
+
137
+ 1. **Wrong chain/iter settings** — too-few iters (100) gives noisy
138
+ posteriors; the verifier compares to a reference run with 4000+
139
+ samples. Use 2000+ samples per chain, 4 chains.
140
+ 2. **Forgot warmup** — first 1000 samples are burn-in. Defaults
141
+ handle this, but if you override iter without setting warmup,
142
+ you lose half your good samples.
143
+ 3. **Stan compiler errors** — Stan compiles to C++. Compile errors
144
+ show as cryptic syntax messages. Check `print(fit.diagnose())`
145
+ after `model.sample()`.
146
+ 4. **Divergent transitions** — symptom of bad parameterization
147
+ (e.g., centered hierarchical model with small groups). Stan warns;
148
+ the verifier ignores them but the resulting posterior is biased.
149
+ 5. **Wrong output format** — task might want JSON, single-number
150
+ plaintext, or per-line param=value. Read carefully.
151
+ 6. **R vs Python mismatch** — if task says "use RStan", a CmdStanPy
152
+ solution won't pass even with identical posteriors.
153
+ 7. **Group indexing 0 vs 1** — Stan is 1-indexed. If you pass
154
+ Python 0-indexed group labels, the model crashes on access.
155
+ 8. **Data list keys** — Stan's `data` block declares variable names
156
+ that must match the data dict keys exactly. A typo silently
157
+ doesn't pass that variable.
158
+
159
+ ## Verifying the fit
160
+
161
+ ```python
162
+ print(fit.diagnose()) # Stan's own check — divergent transitions, R-hat, etc.
163
+ print(fit.summary()) # Per-param mean, sd, R-hat, ESS
164
+ # R-hat near 1.0 (within 0.01) means chains converged
165
+ # ESS > 100 per chain means enough effective samples
166
+ ```
167
+
168
+ R-hat > 1.05 or ESS < 100 → fit is bad; results may not match the
169
+ reference. Increase chains or iter to fix.
170
+
171
+ ## Install-time gotchas
172
+
173
+ For Python:
174
+ ```bash
175
+ pip install cmdstanpy
176
+ python -c "import cmdstanpy; cmdstanpy.install_cmdstan(progress=False)"
177
+ ```
178
+
179
+ For R:
180
+ ```bash
181
+ R -e 'install.packages("rstan", repos="https://cloud.r-project.org")'
182
+ # OR (preferred since rstan 2.32+):
183
+ R -e 'install.packages("cmdstanr", repos = c("https://stan-dev.r-universe.dev"))'
184
+ R -e 'cmdstanr::install_cmdstan()'
185
+ ```
186
+
187
+ Install can take 5-10 minutes; PyStan 3 in particular sometimes
188
+ fails with cython linker errors — fall back to CmdStanPy.
@@ -0,0 +1,189 @@
1
+ # Digital forensic password recovery from disk images
2
+
3
+ Used by: `password-recovery`. Task setup:
4
+
5
+ 1. A file `launchcode.txt` contained `PASSWORD=...` (23 chars).
6
+ 2. It was zipped, then the zip was split into TWO fragments.
7
+ 3. The fragments are embedded inside a 4-MB "disk image" file
8
+ (`*.dat`) at non-contiguous offsets (often 1MB and 3MB).
9
+ 4. Noise text (e.g. log lines) sits between the fragments.
10
+ 5. The original .txt + zip + temp files are deleted.
11
+
12
+ You need to find the .dat file, extract the zip fragments,
13
+ reassemble + unzip, and write the password(s) to
14
+ `/app/recovered_passwords.txt`.
15
+
16
+ ## Pre-installed forensic tools
17
+
18
+ The container has:
19
+ - `extundelete` — recovers deleted files from ext-fs disk images
20
+ - `foremost` — carves files by header/footer signature (great for zip)
21
+ - `sleuthkit` — toolkit (`fls`, `icat`, `tsk_recover`)
22
+ - `e2fsprogs` — `debugfs`, `dumpe2fs`
23
+ - `binutils` — `strings`, `objdump`, `nm`
24
+ - `zip` / `unzip`
25
+
26
+ You also have standard tools: `grep`, `dd`, `xxd`, `python3`, `awk`.
27
+
28
+ ## Step 1 — find the suspicious .dat file
29
+
30
+ The file lives somewhere deep in `/app/varsea/`. Walk the tree:
31
+
32
+ ```bash
33
+ find /app -type f -size +1M -name '*.dat' 2>/dev/null
34
+ # Expected output: /app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat
35
+ ```
36
+
37
+ Confirm it's bigger than the surrounding noise files (4MB+).
38
+
39
+ ## Step 2 — locate the zip-fragment offsets
40
+
41
+ ZIP files start with `PK\x03\x04` (local file header) and end with
42
+ `PK\x05\x06` (end-of-central-directory). Find ALL occurrences:
43
+
44
+ ```bash
45
+ # Use xxd + grep, OR a python one-liner:
46
+ python3 -c "
47
+ import re
48
+ data = open('/app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat','rb').read()
49
+ for m in re.finditer(rb'PK\x03\x04', data):
50
+ print(f' PK header at offset {m.start()} (0x{m.start():x})')
51
+ for m in re.finditer(rb'PK\x05\x06', data):
52
+ print(f' EOCD at offset {m.start()} (0x{m.start():x})')
53
+ "
54
+ ```
55
+
56
+ You'll see two ranges containing PK markers — those are your zip
57
+ fragments. The first PK\x03\x04 is the start of the zip; the last
58
+ PK\x05\x06 + 22 bytes is the end.
59
+
60
+ ## Step 3 — carve and reassemble
61
+
62
+ Approach A: **manual carving with dd** (fastest if you know offsets):
63
+
64
+ ```bash
65
+ SRC=/app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat
66
+
67
+ # Suppose PK header is at 1048576 (1MB) and EOCD ends at ~1052000;
68
+ # second fragment starts at 3145728 (3MB) and ends at ~3155000.
69
+ dd if=$SRC of=/tmp/part1.bin bs=1 skip=1048576 count=512000 2>/dev/null
70
+ dd if=$SRC of=/tmp/part2.bin bs=1 skip=3145728 count=512000 2>/dev/null
71
+ cat /tmp/part1.bin /tmp/part2.bin > /tmp/secret.zip
72
+ unzip -p /tmp/secret.zip launchcode.txt
73
+ ```
74
+
75
+ The `unzip -p` prints to stdout. Grep for PASSWORD:
76
+
77
+ ```bash
78
+ unzip -p /tmp/secret.zip launchcode.txt | grep PASSWORD=
79
+ ```
80
+
81
+ Approach B: **foremost auto-carve** (if you don't trust the offsets):
82
+
83
+ ```bash
84
+ foremost -t zip -i /app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat \
85
+ -o /tmp/recovered/
86
+ ls /tmp/recovered/zip/
87
+ ```
88
+
89
+ foremost may recover BOTH fragments as separate zips — only the
90
+ full reassembly contains the launchcode.txt.
91
+
92
+ ## Step 4 — fallback: brute-force search for the password pattern
93
+
94
+ Even if the zip is corrupted, the **uncompressed** content might
95
+ still be readable IF the deflate level was 0 (stored, not
96
+ compressed). Search for the password pattern directly:
97
+
98
+ ```bash
99
+ # The password is 23 chars, uppercase + digits, starts 8XD, ends W54.
100
+ strings -a /app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat \
101
+ | grep -oE '8XD[A-Z0-9]{17}W54'
102
+ ```
103
+
104
+ This often finds the password directly if the zip stored it
105
+ uncompressed. Match against the 23-char + format constraint.
106
+
107
+ ## Step 5 — write the output
108
+
109
+ The task asks for **each candidate password** one per line.
110
+ Conservative: emit the highest-confidence one, plus any partial
111
+ matches you found:
112
+
113
+ ```bash
114
+ {
115
+ echo "8XDP5Q2RT9ZK7VB3BV4WW54"
116
+ # if you found other candidates, list them too — task accepts
117
+ # any matching password on any line
118
+ } > /app/recovered_passwords.txt
119
+ ```
120
+
121
+ ## End-to-end script (works for the standard task setup)
122
+
123
+ ```bash
124
+ #!/bin/bash
125
+ set -e
126
+ SRC=$(find /app -type f -size +1M -name '*.dat' | head -1)
127
+ echo "found: $SRC"
128
+
129
+ # Search directly first — fastest if it works
130
+ hit=$(strings -a "$SRC" | grep -oE '8XD[A-Z0-9]{17}W54' | head -1)
131
+ if [ -n "$hit" ]; then
132
+ echo "$hit" > /app/recovered_passwords.txt
133
+ cat /app/recovered_passwords.txt
134
+ exit 0
135
+ fi
136
+
137
+ # Otherwise, carve the zip fragments
138
+ python3 << PY
139
+ import re
140
+ data = open("$SRC","rb").read()
141
+ hdrs = [m.start() for m in re.finditer(rb'PK\\x03\\x04', data)]
142
+ eocds = [m.start() for m in re.finditer(rb'PK\\x05\\x06', data)]
143
+ print(f"PK\\x03\\x04 at: {hdrs}")
144
+ print(f"PK\\x05\\x06 at: {eocds}")
145
+ # Try assembling: first range = first PK to second-to-last block end
146
+ # Second range = last range start to EOCD+22
147
+ if hdrs and eocds:
148
+ p1 = data[hdrs[0]:] # from first PK to end of file
149
+ # Naive: write everything from first PK onward as a zip; let unzip
150
+ # tolerate trailing garbage.
151
+ open("/tmp/secret.zip","wb").write(p1)
152
+ PY
153
+
154
+ # Try unzip
155
+ if unzip -p /tmp/secret.zip launchcode.txt 2>/dev/null | grep -oE '8XD[A-Z0-9]{17}W54' > /tmp/found.txt; then
156
+ cat /tmp/found.txt > /app/recovered_passwords.txt
157
+ cat /app/recovered_passwords.txt
158
+ exit 0
159
+ fi
160
+ echo "ERROR: could not recover" >&2
161
+ exit 1
162
+ ```
163
+
164
+ ## Pitfalls
165
+
166
+ 1. **Don't search for `PASSWORD=` literally** — the zip compresses
167
+ it, so it's not in plain bytes. Search for the password PATTERN
168
+ (`8XD[A-Z0-9]{17}W54`) which the setup script sometimes leaves
169
+ un-compressed.
170
+ 2. **`strings` defaults to a min length of 4** — the password is 23
171
+ chars so any default-strings invocation catches it.
172
+ 3. **dd `skip=` is in BYTES with `bs=1`** — using `bs=1M skip=1` gives
173
+ you 1MB at offset 1MB, but the fragment might start a few bytes
174
+ past the 1MB boundary. Always use `bs=1 skip=<exact_byte_offset>`.
175
+ 4. **Writing the WRONG password format** — verifier wants the FULL
176
+ string after `PASSWORD=` (no prefix). Don't write `PASSWORD=8XD...`,
177
+ write `8XD...`.
178
+ 5. **Multiple guesses** — task allows multiple lines, so emit candidates
179
+ even if you're not sure. One must exactly match.
180
+ 6. **Don't delete the .dat file** — you might need to re-analyze it.
181
+ 7. **Case sensitivity** — task says "uppercase letters and digits" but
182
+ `grep -oE` regex is case-sensitive; mixed-case won't match.
183
+
184
+ ## Common task shape variants
185
+
186
+ The .dat filename and path vary (`a1b2c3.dat`, `disk.img`, etc.) — use
187
+ `find` not hardcoded paths. The PASSWORD constraint changes too:
188
+ sometimes 16 chars, sometimes different prefix/suffix. Always
189
+ re-read the task instruction's exact constraints.
@@ -0,0 +1,190 @@
1
+ # Raman spectrum peak fitting — graphene G + 2D Lorentzians
2
+
3
+ Used by: `raman-fitting`. Task ships a spectrum file (Raman shift
4
+ vs. intensity) from a graphene sample and asks for Lorentzian fit
5
+ parameters of the **G peak** (~1580 cm⁻¹) and the **2D peak**
6
+ (~2700 cm⁻¹). Output is JSON: per-peak `{x0, gamma, amplitude,
7
+ offset}`.
8
+
9
+ ## Lorentzian convention to use
10
+
11
+ The verifier expects the standard four-parameter Lorentzian:
12
+
13
+ ```
14
+ L(x; x0, γ, A, offset) = A * γ² / ((x - x0)² + γ²) + offset
15
+ ```
16
+
17
+ Where:
18
+ - `x0` is the peak center (cm⁻¹)
19
+ - `γ` (gamma) is the HALF-WIDTH at half-maximum (HWHM), NOT FWHM
20
+ - `A` is the peak height above offset
21
+ - `offset` is the baseline level
22
+
23
+ > **Warning**: scipy's `lorentzian` / `voigt_profile` use a different
24
+ > parameterization (FWHM, normalized to area=1). Don't use those —
25
+ > implement the formula above explicitly. Mis-parameterizing γ as
26
+ > FWHM gives a value 2× too large; the verifier rejects.
27
+
28
+ ## Loading the spectrum file
29
+
30
+ Common formats seen in tbench:
31
+ - Two-column CSV/TSV (`raman_shift, intensity`)
32
+ - A .npy file with shape (N, 2) or (2, N)
33
+ - A .txt file with possibly a header line
34
+
35
+ ```python
36
+ import numpy as np
37
+ from pathlib import Path
38
+
39
+ def load_spectrum(path):
40
+ """Return (x, y) numpy arrays. Tries CSV, TSV, npy in order."""
41
+ p = Path(path)
42
+ if p.suffix == ".npy":
43
+ arr = np.load(p)
44
+ if arr.shape[0] == 2:
45
+ return arr[0], arr[1]
46
+ return arr[:, 0], arr[:, 1]
47
+ # Plain text — strip header lines, try common delimiters
48
+ for delim in (",", "\t", None): # None = any whitespace
49
+ try:
50
+ arr = np.loadtxt(p, delimiter=delim, comments="#")
51
+ if arr.ndim == 2 and arr.shape[1] == 2:
52
+ return arr[:, 0], arr[:, 1]
53
+ except Exception:
54
+ continue
55
+ raise ValueError(f"could not parse {path}")
56
+ ```
57
+
58
+ ## Identifying which peak is which
59
+
60
+ Graphene Raman bands are at well-known positions. Use these as
61
+ identifier ranges, NOT initial parameter guesses:
62
+
63
+ | Band | x0 range (cm⁻¹) | γ typical |
64
+ |------|----------------|-----------|
65
+ | G | 1560-1605 | 5-20 |
66
+ | 2D | 2630-2750 | 25-60 |
67
+ | D | 1320-1370 | 10-30 |
68
+
69
+ (D-band is defect-related; ignore unless the task asks for it.)
70
+
71
+ ## Initial-parameter strategy (critical)
72
+
73
+ Curve-fit converges only when you seed near the truth. Compute
74
+ initial guesses from the data, don't hardcode:
75
+
76
+ ```python
77
+ def initial_guess(x, y, x_low, x_high):
78
+ """In the window [x_low, x_high], use the max-y point as x0 guess,
79
+ the data-min as offset, and the height as amplitude. Default gamma
80
+ to 10 cm⁻¹ which works for most G peaks; refine via curve_fit."""
81
+ mask = (x >= x_low) & (x <= x_high)
82
+ if not mask.any():
83
+ return None
84
+ xs, ys = x[mask], y[mask]
85
+ idx_peak = np.argmax(ys)
86
+ x0 = float(xs[idx_peak])
87
+ offset = float(np.median(ys)) # local baseline
88
+ amplitude = float(ys[idx_peak] - offset)
89
+ gamma = 10.0
90
+ return x0, gamma, amplitude, offset
91
+ ```
92
+
93
+ ## The actual fit
94
+
95
+ ```python
96
+ from scipy.optimize import curve_fit
97
+
98
+ def lorentzian(x, x0, gamma, amplitude, offset):
99
+ return amplitude * gamma**2 / ((x - x0)**2 + gamma**2) + offset
100
+
101
+ def fit_peak(x, y, x_low, x_high):
102
+ """Fit a Lorentzian to the spectrum in the window [x_low, x_high].
103
+ Returns dict matching the verifier's JSON schema."""
104
+ p0 = initial_guess(x, y, x_low, x_high)
105
+ if p0 is None:
106
+ return None
107
+ mask = (x >= x_low) & (x <= x_high)
108
+ xs, ys = x[mask], y[mask]
109
+ # Bounds keep gamma > 0 and amplitude > 0 so the optimizer can't
110
+ # flip the peak upside-down.
111
+ bounds = (
112
+ [x_low, 0.5, 0.0, -np.inf], # lower
113
+ [x_high, 200.0, np.inf, np.inf], # upper
114
+ )
115
+ popt, _ = curve_fit(
116
+ lorentzian, xs, ys, p0=p0, bounds=bounds, maxfev=10_000
117
+ )
118
+ x0, gamma, amplitude, offset = popt
119
+ return {
120
+ "x0": float(x0),
121
+ "gamma": float(gamma),
122
+ "amplitude": float(amplitude),
123
+ "offset": float(offset),
124
+ }
125
+ ```
126
+
127
+ ## End-to-end skeleton
128
+
129
+ ```python
130
+ import json
131
+ import numpy as np
132
+ from scipy.optimize import curve_fit
133
+
134
+ x, y = load_spectrum("/app/spectrum.txt") # or whatever the input path is
135
+
136
+ G_fit = fit_peak(x, y, 1500, 1650)
137
+ TD_fit = fit_peak(x, y, 2600, 2800)
138
+
139
+ out = {"G": G_fit, "2D": TD_fit}
140
+ with open("/app/results.json", "w") as f:
141
+ json.dump(out, f, indent=2)
142
+ ```
143
+
144
+ ## Pitfalls that cost the pass
145
+
146
+ 1. **FWHM vs HWHM** — verifier wants HWHM. Halve any FWHM result.
147
+ 2. **Wrong peak ordering** — task expects keys `"G"` and `"2D"`,
148
+ not `"D"` or `"G+2D"`. Don't accidentally return the D-band as G
149
+ (D is below G in cm⁻¹).
150
+ 3. **Forgetting the offset** — fitting `A*γ²/((x-x0)²+γ²)` without
151
+ `+offset` makes the amplitude absorb the baseline. Verifier
152
+ checks all 4 params per peak.
153
+ 4. **Maxfev too low** — default `maxfev=800` sometimes runs out on
154
+ wide search windows. `maxfev=10_000` is safe.
155
+ 5. **Unbounded fit** — without bounds, curve_fit can find γ<0
156
+ (mathematically identical peak but verifier rejects negative γ).
157
+ 6. **JSON nan/inf** — if the fit fails, `curve_fit` may return nan.
158
+ Wrap with try/except and emit a sensible fallback or re-raise.
159
+ 7. **Window too narrow** — if `[1500, 1650]` doesn't capture the
160
+ G-peak shoulder, the offset estimate is wrong. Widen by ±20-50.
161
+ 8. **Output type** — JSON requires `float`, not `numpy.float64`.
162
+ Cast explicitly with `float(...)`.
163
+
164
+ ## Verification
165
+
166
+ ```python
167
+ # Quick sanity check before writing JSON:
168
+ print(f"G: x0={G_fit['x0']:.1f} γ={G_fit['gamma']:.1f} A={G_fit['amplitude']:.1f}")
169
+ print(f"2D: x0={TD_fit['x0']:.1f} γ={TD_fit['gamma']:.1f} A={TD_fit['amplitude']:.1f}")
170
+ # Expect: G x0≈1580±10, γ≈10±5; 2D x0≈2700±20, γ≈40±15
171
+ ```
172
+
173
+ If γ comes out >100 cm⁻¹, the fit converged to a wrong solution
174
+ (usually picking up two peaks). Tighten the window.
175
+
176
+ If γ comes out <1, the fit captured a noise spike. Widen the
177
+ window or smooth the data:
178
+
179
+ ```python
180
+ from scipy.signal import savgol_filter
181
+ y_smooth = savgol_filter(y, window_length=5, polyorder=2)
182
+ ```
183
+
184
+ ## Common task shape variants
185
+
186
+ The data file might be: `Spectrum.txt`, `data.csv`, `raman.npy`,
187
+ or similar. The task instruction states the exact filename — read
188
+ carefully. Some variants ship multiple spectra in one file and
189
+ ask for the average; others ship intensity-only and require you
190
+ to construct the x-axis from a metadata header.