drydock-cli 0.1.0__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 (446) hide show
  1. drydock_cli-0.1.0/.github/CODEOWNERS +7 -0
  2. drydock_cli-0.1.0/.github/DISCUSSION_TEMPLATE/ideas.yml +46 -0
  3. drydock_cli-0.1.0/.github/ISSUE_TEMPLATE/bug-report.yml +58 -0
  4. drydock_cli-0.1.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  5. drydock_cli-0.1.0/.github/workflows/build-and-upload.yml +162 -0
  6. drydock_cli-0.1.0/.github/workflows/ci.yml +132 -0
  7. drydock_cli-0.1.0/.github/workflows/issue-labeler.yml +62 -0
  8. drydock_cli-0.1.0/.github/workflows/release.yml +61 -0
  9. drydock_cli-0.1.0/.gitignore +202 -0
  10. drydock_cli-0.1.0/.pre-commit-config.yaml +35 -0
  11. drydock_cli-0.1.0/.python-version +1 -0
  12. drydock_cli-0.1.0/.typos.toml +7 -0
  13. drydock_cli-0.1.0/.vscode/extensions.json +3 -0
  14. drydock_cli-0.1.0/.vscode/launch.json +85 -0
  15. drydock_cli-0.1.0/.vscode/settings.json +26 -0
  16. drydock_cli-0.1.0/AGENTS.md +142 -0
  17. drydock_cli-0.1.0/CHANGELOG.md +454 -0
  18. drydock_cli-0.1.0/CLAUDE.md +61 -0
  19. drydock_cli-0.1.0/CONTRIBUTING.md +185 -0
  20. drydock_cli-0.1.0/Drydock_rebrand.md +320 -0
  21. drydock_cli-0.1.0/LICENSE +201 -0
  22. drydock_cli-0.1.0/NOTICE +11 -0
  23. drydock_cli-0.1.0/PKG-INFO +681 -0
  24. drydock_cli-0.1.0/PRD.md +212 -0
  25. drydock_cli-0.1.0/README.md +627 -0
  26. drydock_cli-0.1.0/action.yml +60 -0
  27. drydock_cli-0.1.0/distribution/zed/LICENSE +1 -0
  28. drydock_cli-0.1.0/distribution/zed/extension.toml +35 -0
  29. drydock_cli-0.1.0/distribution/zed/icons/mistral_vibe.svg +12 -0
  30. drydock_cli-0.1.0/docs/README.md +8 -0
  31. drydock_cli-0.1.0/docs/acp-setup.md +68 -0
  32. drydock_cli-0.1.0/docs/proxy-setup.md +36 -0
  33. drydock_cli-0.1.0/drydock_terms.md +246 -0
  34. drydock_cli-0.1.0/flake.lock +133 -0
  35. drydock_cli-0.1.0/flake.nix +149 -0
  36. drydock_cli-0.1.0/pyproject.toml +179 -0
  37. drydock_cli-0.1.0/scripts/README.md +20 -0
  38. drydock_cli-0.1.0/scripts/bump_version.py +236 -0
  39. drydock_cli-0.1.0/scripts/deploy_to_github.sh +81 -0
  40. drydock_cli-0.1.0/scripts/install.sh +150 -0
  41. drydock_cli-0.1.0/scripts/prepare_release.py +284 -0
  42. drydock_cli-0.1.0/tests/__init__.py +5 -0
  43. drydock_cli-0.1.0/tests/acp/conftest.py +97 -0
  44. drydock_cli-0.1.0/tests/acp/test_acp.py +965 -0
  45. drydock_cli-0.1.0/tests/acp/test_agent_thought.py +154 -0
  46. drydock_cli-0.1.0/tests/acp/test_bash.py +495 -0
  47. drydock_cli-0.1.0/tests/acp/test_compact_session_updates.py +81 -0
  48. drydock_cli-0.1.0/tests/acp/test_content.py +147 -0
  49. drydock_cli-0.1.0/tests/acp/test_initialize.py +69 -0
  50. drydock_cli-0.1.0/tests/acp/test_list_sessions.py +242 -0
  51. drydock_cli-0.1.0/tests/acp/test_load_session.py +344 -0
  52. drydock_cli-0.1.0/tests/acp/test_multi_session.py +110 -0
  53. drydock_cli-0.1.0/tests/acp/test_new_session.py +151 -0
  54. drydock_cli-0.1.0/tests/acp/test_proxy_setup_acp.py +271 -0
  55. drydock_cli-0.1.0/tests/acp/test_read_file.py +247 -0
  56. drydock_cli-0.1.0/tests/acp/test_search_replace.py +354 -0
  57. drydock_cli-0.1.0/tests/acp/test_set_config_option.py +317 -0
  58. drydock_cli-0.1.0/tests/acp/test_set_mode.py +201 -0
  59. drydock_cli-0.1.0/tests/acp/test_set_model.py +306 -0
  60. drydock_cli-0.1.0/tests/acp/test_tool_call_session_update.py +44 -0
  61. drydock_cli-0.1.0/tests/acp/test_utils.py +55 -0
  62. drydock_cli-0.1.0/tests/acp/test_write_file.py +277 -0
  63. drydock_cli-0.1.0/tests/autocompletion/test_file_indexer.py +349 -0
  64. drydock_cli-0.1.0/tests/autocompletion/test_fuzzy.py +96 -0
  65. drydock_cli-0.1.0/tests/autocompletion/test_path_completer_fuzzy.py +122 -0
  66. drydock_cli-0.1.0/tests/autocompletion/test_path_completer_recursive.py +69 -0
  67. drydock_cli-0.1.0/tests/autocompletion/test_path_completion_controller.py +258 -0
  68. drydock_cli-0.1.0/tests/autocompletion/test_path_prompt_transformer.py +142 -0
  69. drydock_cli-0.1.0/tests/autocompletion/test_slash_command_controller.py +235 -0
  70. drydock_cli-0.1.0/tests/autocompletion/test_ui_chat_autocompletion.py +306 -0
  71. drydock_cli-0.1.0/tests/backend/__init__.py +0 -0
  72. drydock_cli-0.1.0/tests/backend/data/__init__.py +6 -0
  73. drydock_cli-0.1.0/tests/backend/data/fireworks.py +153 -0
  74. drydock_cli-0.1.0/tests/backend/data/mistral.py +150 -0
  75. drydock_cli-0.1.0/tests/backend/test_anthropic_adapter.py +586 -0
  76. drydock_cli-0.1.0/tests/backend/test_backend.py +437 -0
  77. drydock_cli-0.1.0/tests/backend/test_reasoning_adapter.py +254 -0
  78. drydock_cli-0.1.0/tests/backend/test_vertex_anthropic_adapter.py +637 -0
  79. drydock_cli-0.1.0/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +32 -0
  80. drydock_cli-0.1.0/tests/cli/plan_offer/test_decide_plan_offer.py +172 -0
  81. drydock_cli-0.1.0/tests/cli/plan_offer/test_http_whoami_gateway.py +147 -0
  82. drydock_cli-0.1.0/tests/cli/test_bell_notifications.py +151 -0
  83. drydock_cli-0.1.0/tests/cli/test_braille_renderer.py +114 -0
  84. drydock_cli-0.1.0/tests/cli/test_clipboard.py +325 -0
  85. drydock_cli-0.1.0/tests/cli/test_commands.py +62 -0
  86. drydock_cli-0.1.0/tests/cli/test_copy_shortcuts.py +59 -0
  87. drydock_cli-0.1.0/tests/cli/test_external_editor.py +72 -0
  88. drydock_cli-0.1.0/tests/cli/test_no_markup_static.py +19 -0
  89. drydock_cli-0.1.0/tests/cli/test_question_app.py +513 -0
  90. drydock_cli-0.1.0/tests/cli/test_spinner.py +16 -0
  91. drydock_cli-0.1.0/tests/cli/test_switching_mode.py +109 -0
  92. drydock_cli-0.1.0/tests/cli/test_ui_clipboard_notifications.py +40 -0
  93. drydock_cli-0.1.0/tests/cli/test_ui_session_incremental_renderer.py +173 -0
  94. drydock_cli-0.1.0/tests/cli/test_ui_session_resume.py +197 -0
  95. drydock_cli-0.1.0/tests/cli/test_ui_skill_dispatch.py +152 -0
  96. drydock_cli-0.1.0/tests/cli/textual_ui/__init__.py +0 -0
  97. drydock_cli-0.1.0/tests/cli/textual_ui/test_session_picker.py +131 -0
  98. drydock_cli-0.1.0/tests/conftest.py +227 -0
  99. drydock_cli-0.1.0/tests/core/test_agents.py +80 -0
  100. drydock_cli-0.1.0/tests/core/test_auth_crypto.py +46 -0
  101. drydock_cli-0.1.0/tests/core/test_auth_github.py +286 -0
  102. drydock_cli-0.1.0/tests/core/test_config_load_dotenv.py +81 -0
  103. drydock_cli-0.1.0/tests/core/test_config_paths.py +334 -0
  104. drydock_cli-0.1.0/tests/core/test_config_resolution.py +121 -0
  105. drydock_cli-0.1.0/tests/core/test_file_logging.py +280 -0
  106. drydock_cli-0.1.0/tests/core/test_plan_session.py +42 -0
  107. drydock_cli-0.1.0/tests/core/test_proxy_setup.py +304 -0
  108. drydock_cli-0.1.0/tests/core/test_slug.py +34 -0
  109. drydock_cli-0.1.0/tests/core/test_telemetry_send.py +374 -0
  110. drydock_cli-0.1.0/tests/core/test_teleport_git.py +327 -0
  111. drydock_cli-0.1.0/tests/core/test_teleport_nuage.py +337 -0
  112. drydock_cli-0.1.0/tests/core/test_teleport_service.py +418 -0
  113. drydock_cli-0.1.0/tests/core/test_trusted_folders.py +268 -0
  114. drydock_cli-0.1.0/tests/core/test_utils.py +19 -0
  115. drydock_cli-0.1.0/tests/e2e/common.py +86 -0
  116. drydock_cli-0.1.0/tests/e2e/conftest.py +82 -0
  117. drydock_cli-0.1.0/tests/e2e/mock_server.py +149 -0
  118. drydock_cli-0.1.0/tests/e2e/test_cli_tui_onboarding.py +31 -0
  119. drydock_cli-0.1.0/tests/e2e/test_cli_tui_streaming.py +51 -0
  120. drydock_cli-0.1.0/tests/e2e/test_cli_tui_tool_approval.py +87 -0
  121. drydock_cli-0.1.0/tests/mock/__init__.py +0 -0
  122. drydock_cli-0.1.0/tests/mock/mock_backend_factory.py +16 -0
  123. drydock_cli-0.1.0/tests/mock/mock_entrypoint.py +65 -0
  124. drydock_cli-0.1.0/tests/mock/utils.py +60 -0
  125. drydock_cli-0.1.0/tests/onboarding/test_run_onboarding.py +60 -0
  126. drydock_cli-0.1.0/tests/onboarding/test_ui_onboarding.py +57 -0
  127. drydock_cli-0.1.0/tests/session/test_session_loader.py +1065 -0
  128. drydock_cli-0.1.0/tests/session/test_session_logger.py +782 -0
  129. drydock_cli-0.1.0/tests/session/test_session_migration.py +177 -0
  130. drydock_cli-0.1.0/tests/skills/conftest.py +62 -0
  131. drydock_cli-0.1.0/tests/skills/test_manager.py +520 -0
  132. drydock_cli-0.1.0/tests/skills/test_models.py +195 -0
  133. drydock_cli-0.1.0/tests/skills/test_parser.py +115 -0
  134. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +136 -0
  135. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +176 -0
  136. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +201 -0
  137. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +206 -0
  138. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +203 -0
  139. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +201 -0
  140. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +201 -0
  141. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +201 -0
  142. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +200 -0
  143. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +200 -0
  144. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +114 -0
  145. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +137 -0
  146. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +200 -0
  147. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +200 -0
  148. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +203 -0
  149. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +202 -0
  150. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +201 -0
  151. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +200 -0
  152. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +137 -0
  153. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +137 -0
  154. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +137 -0
  155. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +137 -0
  156. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +137 -0
  157. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +137 -0
  158. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +136 -0
  159. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +139 -0
  160. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +137 -0
  161. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +139 -0
  162. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +136 -0
  163. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +136 -0
  164. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +136 -0
  165. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +136 -0
  166. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +136 -0
  167. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +140 -0
  168. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +136 -0
  169. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +140 -0
  170. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +139 -0
  171. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +203 -0
  172. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +203 -0
  173. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +203 -0
  174. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +203 -0
  175. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +204 -0
  176. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +202 -0
  177. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +94 -0
  178. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +94 -0
  179. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +104 -0
  180. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +104 -0
  181. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +104 -0
  182. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +94 -0
  183. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +94 -0
  184. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +94 -0
  185. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +95 -0
  186. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +95 -0
  187. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +94 -0
  188. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +94 -0
  189. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +94 -0
  190. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +202 -0
  191. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +203 -0
  192. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +203 -0
  193. drydock_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +202 -0
  194. drydock_cli-0.1.0/tests/snapshots/base_snapshot_test_app.py +69 -0
  195. drydock_cli-0.1.0/tests/snapshots/conftest.py +10 -0
  196. drydock_cli-0.1.0/tests/snapshots/snap_compare.py +20 -0
  197. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_ask_user_question.py +80 -0
  198. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_basic_conversation.py +33 -0
  199. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +38 -0
  200. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +58 -0
  201. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_modes.py +88 -0
  202. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +114 -0
  203. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_proxy_setup.py +129 -0
  204. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_question_app.py +365 -0
  205. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_reasoning_content.py +146 -0
  206. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_release_update_notification.py +45 -0
  207. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_session_resume.py +47 -0
  208. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +75 -0
  209. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_teleport.py +249 -0
  210. drydock_cli-0.1.0/tests/snapshots/test_ui_snapshot_whats_new.py +156 -0
  211. drydock_cli-0.1.0/tests/stubs/fake_backend.py +149 -0
  212. drydock_cli-0.1.0/tests/stubs/fake_client.py +134 -0
  213. drydock_cli-0.1.0/tests/stubs/fake_tool.py +35 -0
  214. drydock_cli-0.1.0/tests/test_agent_auto_compact.py +127 -0
  215. drydock_cli-0.1.0/tests/test_agent_backend.py +187 -0
  216. drydock_cli-0.1.0/tests/test_agent_observer_streaming.py +643 -0
  217. drydock_cli-0.1.0/tests/test_agent_stats.py +754 -0
  218. drydock_cli-0.1.0/tests/test_agent_tool_call.py +531 -0
  219. drydock_cli-0.1.0/tests/test_agents.py +610 -0
  220. drydock_cli-0.1.0/tests/test_cli_programmatic_preload.py +144 -0
  221. drydock_cli-0.1.0/tests/test_history_manager.py +101 -0
  222. drydock_cli-0.1.0/tests/test_message_id.py +162 -0
  223. drydock_cli-0.1.0/tests/test_message_merging.py +47 -0
  224. drydock_cli-0.1.0/tests/test_middleware.py +607 -0
  225. drydock_cli-0.1.0/tests/test_reasoning_content.py +530 -0
  226. drydock_cli-0.1.0/tests/test_system_prompt.py +44 -0
  227. drydock_cli-0.1.0/tests/test_tagged_text.py +107 -0
  228. drydock_cli-0.1.0/tests/test_ui_external_editor.py +69 -0
  229. drydock_cli-0.1.0/tests/test_ui_input_history.py +285 -0
  230. drydock_cli-0.1.0/tests/tools/test_ask_user_question.py +188 -0
  231. drydock_cli-0.1.0/tests/tools/test_bash.py +91 -0
  232. drydock_cli-0.1.0/tests/tools/test_exit_plan_mode.py +265 -0
  233. drydock_cli-0.1.0/tests/tools/test_grep.py +341 -0
  234. drydock_cli-0.1.0/tests/tools/test_invoke_context.py +106 -0
  235. drydock_cli-0.1.0/tests/tools/test_manager_get_tool_config.py +478 -0
  236. drydock_cli-0.1.0/tests/tools/test_mcp.py +553 -0
  237. drydock_cli-0.1.0/tests/tools/test_mcp_sampling.py +171 -0
  238. drydock_cli-0.1.0/tests/tools/test_task.py +212 -0
  239. drydock_cli-0.1.0/tests/tools/test_ui_bash_execution.py +120 -0
  240. drydock_cli-0.1.0/tests/tools/test_webfetch.py +253 -0
  241. drydock_cli-0.1.0/tests/tools/test_websearch.py +221 -0
  242. drydock_cli-0.1.0/tests/update_notifier/adapters/fake_update_cache_repository.py +17 -0
  243. drydock_cli-0.1.0/tests/update_notifier/adapters/fake_update_gateway.py +22 -0
  244. drydock_cli-0.1.0/tests/update_notifier/test_do_update.py +74 -0
  245. drydock_cli-0.1.0/tests/update_notifier/test_filesystem_update_cache_repository.py +119 -0
  246. drydock_cli-0.1.0/tests/update_notifier/test_github_update_gateway.py +245 -0
  247. drydock_cli-0.1.0/tests/update_notifier/test_pypi_update_gateway.py +155 -0
  248. drydock_cli-0.1.0/tests/update_notifier/test_ui_update_notification.py +389 -0
  249. drydock_cli-0.1.0/tests/update_notifier/test_update_use_case.py +302 -0
  250. drydock_cli-0.1.0/tests/update_notifier/test_whats_new.py +161 -0
  251. drydock_cli-0.1.0/uv.lock +2189 -0
  252. drydock_cli-0.1.0/vibe/__init__.py +6 -0
  253. drydock_cli-0.1.0/vibe/acp/__init__.py +0 -0
  254. drydock_cli-0.1.0/vibe/acp/acp_agent_loop.py +818 -0
  255. drydock_cli-0.1.0/vibe/acp/acp_logger.py +97 -0
  256. drydock_cli-0.1.0/vibe/acp/entrypoint.py +92 -0
  257. drydock_cli-0.1.0/vibe/acp/tools/__init__.py +0 -0
  258. drydock_cli-0.1.0/vibe/acp/tools/base.py +100 -0
  259. drydock_cli-0.1.0/vibe/acp/tools/builtins/bash.py +143 -0
  260. drydock_cli-0.1.0/vibe/acp/tools/builtins/read_file.py +53 -0
  261. drydock_cli-0.1.0/vibe/acp/tools/builtins/search_replace.py +137 -0
  262. drydock_cli-0.1.0/vibe/acp/tools/builtins/todo.py +65 -0
  263. drydock_cli-0.1.0/vibe/acp/tools/builtins/write_file.py +106 -0
  264. drydock_cli-0.1.0/vibe/acp/tools/session_update.py +118 -0
  265. drydock_cli-0.1.0/vibe/acp/utils.py +277 -0
  266. drydock_cli-0.1.0/vibe/cli/__init__.py +0 -0
  267. drydock_cli-0.1.0/vibe/cli/autocompletion/__init__.py +0 -0
  268. drydock_cli-0.1.0/vibe/cli/autocompletion/base.py +22 -0
  269. drydock_cli-0.1.0/vibe/cli/autocompletion/path_completion.py +177 -0
  270. drydock_cli-0.1.0/vibe/cli/autocompletion/slash_command.py +99 -0
  271. drydock_cli-0.1.0/vibe/cli/cli.py +215 -0
  272. drydock_cli-0.1.0/vibe/cli/clipboard.py +171 -0
  273. drydock_cli-0.1.0/vibe/cli/commands.py +121 -0
  274. drydock_cli-0.1.0/vibe/cli/entrypoint.py +163 -0
  275. drydock_cli-0.1.0/vibe/cli/history_manager.py +91 -0
  276. drydock_cli-0.1.0/vibe/cli/plan_offer/adapters/http_whoami_gateway.py +45 -0
  277. drydock_cli-0.1.0/vibe/cli/plan_offer/decide_plan_offer.py +95 -0
  278. drydock_cli-0.1.0/vibe/cli/plan_offer/ports/whoami_gateway.py +66 -0
  279. drydock_cli-0.1.0/vibe/cli/terminal_setup.py +336 -0
  280. drydock_cli-0.1.0/vibe/cli/textual_ui/__init__.py +0 -0
  281. drydock_cli-0.1.0/vibe/cli/textual_ui/ansi_markdown.py +58 -0
  282. drydock_cli-0.1.0/vibe/cli/textual_ui/app.py +1681 -0
  283. drydock_cli-0.1.0/vibe/cli/textual_ui/app.tcss +1074 -0
  284. drydock_cli-0.1.0/vibe/cli/textual_ui/external_editor.py +32 -0
  285. drydock_cli-0.1.0/vibe/cli/textual_ui/handlers/__init__.py +5 -0
  286. drydock_cli-0.1.0/vibe/cli/textual_ui/handlers/event_handler.py +224 -0
  287. drydock_cli-0.1.0/vibe/cli/textual_ui/notifications/__init__.py +11 -0
  288. drydock_cli-0.1.0/vibe/cli/textual_ui/notifications/adapters/__init__.py +0 -0
  289. drydock_cli-0.1.0/vibe/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +60 -0
  290. drydock_cli-0.1.0/vibe/cli/textual_ui/notifications/ports/__init__.py +0 -0
  291. drydock_cli-0.1.0/vibe/cli/textual_ui/notifications/ports/notification_port.py +16 -0
  292. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/__init__.py +0 -0
  293. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/approval_app.py +192 -0
  294. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/banner/banner.py +102 -0
  295. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/banner/petit_chat.py +85 -0
  296. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/braille_renderer.py +58 -0
  297. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/__init__.py +7 -0
  298. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/body.py +252 -0
  299. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/completion_manager.py +58 -0
  300. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/completion_popup.py +43 -0
  301. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/container.py +213 -0
  302. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/chat_input/text_area.py +397 -0
  303. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/compact.py +41 -0
  304. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/config_app.py +177 -0
  305. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/context_progress.py +30 -0
  306. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/load_more.py +43 -0
  307. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/loading.py +204 -0
  308. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/messages.py +280 -0
  309. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/no_markup_static.py +11 -0
  310. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/path_display.py +28 -0
  311. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/proxy_setup_app.py +122 -0
  312. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/question_app.py +507 -0
  313. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/session_picker.py +113 -0
  314. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/spinner.py +194 -0
  315. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/status_message.py +76 -0
  316. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/teleport_message.py +31 -0
  317. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/tool_widgets.py +373 -0
  318. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/tools.py +218 -0
  319. drydock_cli-0.1.0/vibe/cli/textual_ui/widgets/vscode_compat.py +26 -0
  320. drydock_cli-0.1.0/vibe/cli/textual_ui/windowing/__init__.py +29 -0
  321. drydock_cli-0.1.0/vibe/cli/textual_ui/windowing/history.py +106 -0
  322. drydock_cli-0.1.0/vibe/cli/textual_ui/windowing/history_windowing.py +67 -0
  323. drydock_cli-0.1.0/vibe/cli/textual_ui/windowing/state.py +105 -0
  324. drydock_cli-0.1.0/vibe/cli/update_notifier/__init__.py +47 -0
  325. drydock_cli-0.1.0/vibe/cli/update_notifier/adapters/filesystem_update_cache_repository.py +59 -0
  326. drydock_cli-0.1.0/vibe/cli/update_notifier/adapters/github_update_gateway.py +101 -0
  327. drydock_cli-0.1.0/vibe/cli/update_notifier/adapters/pypi_update_gateway.py +107 -0
  328. drydock_cli-0.1.0/vibe/cli/update_notifier/ports/update_cache_repository.py +16 -0
  329. drydock_cli-0.1.0/vibe/cli/update_notifier/ports/update_gateway.py +53 -0
  330. drydock_cli-0.1.0/vibe/cli/update_notifier/update.py +139 -0
  331. drydock_cli-0.1.0/vibe/cli/update_notifier/whats_new.py +49 -0
  332. drydock_cli-0.1.0/vibe/core/__init__.py +5 -0
  333. drydock_cli-0.1.0/vibe/core/agent_loop.py +1585 -0
  334. drydock_cli-0.1.0/vibe/core/agents/__init__.py +29 -0
  335. drydock_cli-0.1.0/vibe/core/agents/manager.py +165 -0
  336. drydock_cli-0.1.0/vibe/core/agents/models.py +172 -0
  337. drydock_cli-0.1.0/vibe/core/auth/__init__.py +6 -0
  338. drydock_cli-0.1.0/vibe/core/auth/crypto.py +137 -0
  339. drydock_cli-0.1.0/vibe/core/auth/github.py +178 -0
  340. drydock_cli-0.1.0/vibe/core/autocompletion/__init__.py +0 -0
  341. drydock_cli-0.1.0/vibe/core/autocompletion/completers.py +258 -0
  342. drydock_cli-0.1.0/vibe/core/autocompletion/file_indexer/__init__.py +10 -0
  343. drydock_cli-0.1.0/vibe/core/autocompletion/file_indexer/ignore_rules.py +168 -0
  344. drydock_cli-0.1.0/vibe/core/autocompletion/file_indexer/indexer.py +187 -0
  345. drydock_cli-0.1.0/vibe/core/autocompletion/file_indexer/store.py +169 -0
  346. drydock_cli-0.1.0/vibe/core/autocompletion/file_indexer/watcher.py +71 -0
  347. drydock_cli-0.1.0/vibe/core/autocompletion/fuzzy.py +189 -0
  348. drydock_cli-0.1.0/vibe/core/autocompletion/path_prompt.py +108 -0
  349. drydock_cli-0.1.0/vibe/core/autocompletion/path_prompt_adapter.py +149 -0
  350. drydock_cli-0.1.0/vibe/core/config/__init__.py +41 -0
  351. drydock_cli-0.1.0/vibe/core/config/_settings.py +603 -0
  352. drydock_cli-0.1.0/vibe/core/config/harness_files/__init__.py +17 -0
  353. drydock_cli-0.1.0/vibe/core/config/harness_files/_harness_manager.py +151 -0
  354. drydock_cli-0.1.0/vibe/core/config/harness_files/_paths.py +8 -0
  355. drydock_cli-0.1.0/vibe/core/drydock_states.py +185 -0
  356. drydock_cli-0.1.0/vibe/core/llm/__init__.py +0 -0
  357. drydock_cli-0.1.0/vibe/core/llm/backend/anthropic.py +631 -0
  358. drydock_cli-0.1.0/vibe/core/llm/backend/base.py +39 -0
  359. drydock_cli-0.1.0/vibe/core/llm/backend/factory.py +7 -0
  360. drydock_cli-0.1.0/vibe/core/llm/backend/generic.py +483 -0
  361. drydock_cli-0.1.0/vibe/core/llm/backend/mistral.py +402 -0
  362. drydock_cli-0.1.0/vibe/core/llm/backend/reasoning_adapter.py +227 -0
  363. drydock_cli-0.1.0/vibe/core/llm/backend/vertex.py +132 -0
  364. drydock_cli-0.1.0/vibe/core/llm/exceptions.py +195 -0
  365. drydock_cli-0.1.0/vibe/core/llm/format.py +184 -0
  366. drydock_cli-0.1.0/vibe/core/llm/message_utils.py +26 -0
  367. drydock_cli-0.1.0/vibe/core/llm/types.py +126 -0
  368. drydock_cli-0.1.0/vibe/core/logger.py +58 -0
  369. drydock_cli-0.1.0/vibe/core/middleware.py +232 -0
  370. drydock_cli-0.1.0/vibe/core/output_formatters.py +85 -0
  371. drydock_cli-0.1.0/vibe/core/paths/__init__.py +31 -0
  372. drydock_cli-0.1.0/vibe/core/paths/_local_config_walk.py +39 -0
  373. drydock_cli-0.1.0/vibe/core/paths/_vibe_home.py +37 -0
  374. drydock_cli-0.1.0/vibe/core/paths/conventions.py +3 -0
  375. drydock_cli-0.1.0/vibe/core/plan_session.py +24 -0
  376. drydock_cli-0.1.0/vibe/core/programmatic.py +130 -0
  377. drydock_cli-0.1.0/vibe/core/prompts/__init__.py +32 -0
  378. drydock_cli-0.1.0/vibe/core/prompts/cli.md +160 -0
  379. drydock_cli-0.1.0/vibe/core/prompts/compact.md +48 -0
  380. drydock_cli-0.1.0/vibe/core/prompts/dangerous_directory.md +5 -0
  381. drydock_cli-0.1.0/vibe/core/prompts/diagnostic.md +24 -0
  382. drydock_cli-0.1.0/vibe/core/prompts/explore.md +50 -0
  383. drydock_cli-0.1.0/vibe/core/prompts/planner.md +15 -0
  384. drydock_cli-0.1.0/vibe/core/prompts/project_context.md +4 -0
  385. drydock_cli-0.1.0/vibe/core/prompts/tests.md +1 -0
  386. drydock_cli-0.1.0/vibe/core/proxy_setup.py +65 -0
  387. drydock_cli-0.1.0/vibe/core/session/session_loader.py +275 -0
  388. drydock_cli-0.1.0/vibe/core/session/session_logger.py +359 -0
  389. drydock_cli-0.1.0/vibe/core/session/session_migration.py +41 -0
  390. drydock_cli-0.1.0/vibe/core/skills/__init__.py +7 -0
  391. drydock_cli-0.1.0/vibe/core/skills/manager.py +128 -0
  392. drydock_cli-0.1.0/vibe/core/skills/models.py +92 -0
  393. drydock_cli-0.1.0/vibe/core/skills/parser.py +39 -0
  394. drydock_cli-0.1.0/vibe/core/slug.py +113 -0
  395. drydock_cli-0.1.0/vibe/core/system_prompt.py +294 -0
  396. drydock_cli-0.1.0/vibe/core/telemetry/__init__.py +0 -0
  397. drydock_cli-0.1.0/vibe/core/telemetry/send.py +197 -0
  398. drydock_cli-0.1.0/vibe/core/teleport/errors.py +9 -0
  399. drydock_cli-0.1.0/vibe/core/teleport/git.py +196 -0
  400. drydock_cli-0.1.0/vibe/core/teleport/nuage.py +185 -0
  401. drydock_cli-0.1.0/vibe/core/teleport/teleport.py +212 -0
  402. drydock_cli-0.1.0/vibe/core/teleport/types.py +54 -0
  403. drydock_cli-0.1.0/vibe/core/tools/base.py +350 -0
  404. drydock_cli-0.1.0/vibe/core/tools/builtins/ask_user_question.py +132 -0
  405. drydock_cli-0.1.0/vibe/core/tools/builtins/bash.py +390 -0
  406. drydock_cli-0.1.0/vibe/core/tools/builtins/exit_plan_mode.py +145 -0
  407. drydock_cli-0.1.0/vibe/core/tools/builtins/grep.py +309 -0
  408. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/__init__.py +0 -0
  409. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/ask_user_question.md +84 -0
  410. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/bash.md +73 -0
  411. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/grep.md +4 -0
  412. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/read_file.md +18 -0
  413. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/search_replace.md +43 -0
  414. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/swe_bench.md +30 -0
  415. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/task.md +24 -0
  416. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/todo.md +199 -0
  417. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/webfetch.md +6 -0
  418. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/websearch.md +25 -0
  419. drydock_cli-0.1.0/vibe/core/tools/builtins/prompts/write_file.md +42 -0
  420. drydock_cli-0.1.0/vibe/core/tools/builtins/read_file.py +195 -0
  421. drydock_cli-0.1.0/vibe/core/tools/builtins/search_replace.py +483 -0
  422. drydock_cli-0.1.0/vibe/core/tools/builtins/task.py +176 -0
  423. drydock_cli-0.1.0/vibe/core/tools/builtins/todo.py +129 -0
  424. drydock_cli-0.1.0/vibe/core/tools/builtins/webfetch.py +200 -0
  425. drydock_cli-0.1.0/vibe/core/tools/builtins/websearch.py +143 -0
  426. drydock_cli-0.1.0/vibe/core/tools/builtins/write_file.py +132 -0
  427. drydock_cli-0.1.0/vibe/core/tools/manager.py +253 -0
  428. drydock_cli-0.1.0/vibe/core/tools/mcp/__init__.py +31 -0
  429. drydock_cli-0.1.0/vibe/core/tools/mcp/registry.py +167 -0
  430. drydock_cli-0.1.0/vibe/core/tools/mcp/tools.py +412 -0
  431. drydock_cli-0.1.0/vibe/core/tools/mcp_sampling.py +115 -0
  432. drydock_cli-0.1.0/vibe/core/tools/ui.py +121 -0
  433. drydock_cli-0.1.0/vibe/core/tools/utils.py +69 -0
  434. drydock_cli-0.1.0/vibe/core/trusted_folders.py +87 -0
  435. drydock_cli-0.1.0/vibe/core/types.py +489 -0
  436. drydock_cli-0.1.0/vibe/core/utils.py +346 -0
  437. drydock_cli-0.1.0/vibe/setup/onboarding/__init__.py +39 -0
  438. drydock_cli-0.1.0/vibe/setup/onboarding/base.py +14 -0
  439. drydock_cli-0.1.0/vibe/setup/onboarding/onboarding.tcss +134 -0
  440. drydock_cli-0.1.0/vibe/setup/onboarding/screens/__init__.py +6 -0
  441. drydock_cli-0.1.0/vibe/setup/onboarding/screens/api_key.py +142 -0
  442. drydock_cli-0.1.0/vibe/setup/onboarding/screens/welcome.py +136 -0
  443. drydock_cli-0.1.0/vibe/setup/trusted_folders/trust_folder_dialog.py +180 -0
  444. drydock_cli-0.1.0/vibe/setup/trusted_folders/trust_folder_dialog.tcss +83 -0
  445. drydock_cli-0.1.0/vibe/whats_new.md +4 -0
  446. drydock_cli-0.1.0/vibe-acp.spec +60 -0
@@ -0,0 +1,7 @@
1
+ # CODEOWNERS
2
+
3
+ # Default owners for everything in the repo
4
+ * @mistralai/mistral-vibe
5
+
6
+ # Owners for specific directories
7
+ # Not needed for now, can be filled later
@@ -0,0 +1,46 @@
1
+ title: "[Feature Request]: "
2
+ labels: []
3
+ body:
4
+ - type: markdown
5
+ attributes:
6
+ value: >
7
+ Feature requests work best when they focus on the problem first. Tell us
8
+ what you're trying to achieve and why existing APIs aren't enough.
9
+
10
+ - type: dropdown
11
+ id: component
12
+ attributes:
13
+ label: Component
14
+ description: Which part of Drydock would this feature apply to?
15
+ options:
16
+ - CLI
17
+ - ACP
18
+ - Both
19
+ - Other
20
+ validations:
21
+ required: true
22
+
23
+ - type: textarea
24
+ id: problem
25
+ attributes:
26
+ label: Problem statement
27
+ description: >
28
+ What use case is blocked? Provide a clear and concise description of the problem.
29
+ placeholder: "I want to be able to use the agent to write a blog post about the benefits of using Drydock"
30
+ validations:
31
+ required: true
32
+
33
+ - type: textarea
34
+ id: proposal
35
+ attributes:
36
+ label: Proposed solution
37
+ description: >
38
+ Sketch the feature you'd like to see. Code snippets welcome.
39
+ validations:
40
+ required: true
41
+
42
+ - type: textarea
43
+ id: extra
44
+ attributes:
45
+ label: Additional context
46
+ description: Links, screenshots, related issues, etc.
@@ -0,0 +1,58 @@
1
+ name: Bug Report
2
+ description: Tell us about a defect in Drydock
3
+ title: "bug: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: >
9
+ Thanks for filing a detailed bug. Fill out every section so we can
10
+ reproduce the issue quickly
11
+
12
+ - type: dropdown
13
+ id: component
14
+ attributes:
15
+ label: Component
16
+ description: Which part of Drydock is affected?
17
+ options:
18
+ - CLI
19
+ - ACP
20
+ - Both
21
+ - Other
22
+ validations:
23
+ required: true
24
+
25
+ - type: textarea
26
+ id: summary
27
+ attributes:
28
+ label: Summary
29
+ description: What went wrong? Keep it short but specific.
30
+ validations:
31
+ required: true
32
+
33
+ - type: textarea
34
+ id: repro
35
+ attributes:
36
+ label: Reproduction steps
37
+ description: >
38
+ Commands, code, or payloads that trigger the bug. Include any relevant
39
+ input files or snippets (redact secrets).
40
+ validations:
41
+ required: true
42
+
43
+ - type: input
44
+ id: versions
45
+ attributes:
46
+ label: Versions / environment
47
+ description: >
48
+ Include Drydock version, uv or pip version and OS.
49
+ placeholder: "drydock 2.4.2, uv 0.9.0 on macOS 15.7"
50
+ validations:
51
+ required: true
52
+
53
+ - type: textarea
54
+ id: logs
55
+ attributes:
56
+ label: Logs & screenshots
57
+ description: Paste relevant stack traces, JSON snippets, or console output.
58
+ render: shell
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Feature request
4
+ url: https://github.com/mistralai/mistral-vibe/discussions/new?category=ideas
5
+ about: Suggest a new feature or improvement via GitHub Discussions
6
+ - name: Ask a question
7
+ url: https://discord.com/channels/1144547040454508606/1447989080720670915
8
+ about: Join the Discord server for support and discussions
9
+ - name: Read the docs
10
+ url: https://docs.mistral.ai/mistral-vibe/introduction
11
+ about: Read the Drydock documentation for more information
@@ -0,0 +1,162 @@
1
+ name: Build and upload
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ configure:
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: read
15
+ outputs:
16
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
17
+ steps:
18
+ - name: Set matrix
19
+ id: set-matrix
20
+ run: |
21
+ if [[ "${{ github.repository }}" == "mistralai/mistral-vibe" ]]; then
22
+ matrix='{
23
+ "include": [
24
+ {"runner": "ubuntu-22.04", "os": "linux", "arch": "x86_64"},
25
+ {"runner": "ubuntu-22.04-arm", "os": "linux", "arch": "aarch64"},
26
+ {"runner": "macos-15-intel", "os": "darwin", "arch": "x86_64"},
27
+ {"runner": "macos-14", "os": "darwin", "arch": "aarch64"},
28
+ {"runner": "windows-2022", "os": "windows", "arch": "x86_64"},
29
+ {"runner": "windows-11-arm", "os": "windows", "arch": "aarch64"}
30
+ ]
31
+ }'
32
+ else # skip ARM Linux/Windows (runners not available on non public repos)
33
+ matrix='{
34
+ "include": [
35
+ {"runner": "ubuntu-22.04", "os": "linux", "arch": "x86_64"},
36
+ {"runner": "macos-15-intel", "os": "darwin", "arch": "x86_64"},
37
+ {"runner": "macos-14", "os": "darwin", "arch": "aarch64"},
38
+ {"runner": "windows-2022", "os": "windows", "arch": "x86_64"}
39
+ ]
40
+ }'
41
+ fi
42
+ echo "matrix=$(echo $matrix | jq -c .)" >> $GITHUB_OUTPUT
43
+
44
+ build-and-upload:
45
+ needs: configure
46
+ name: ${{ matrix.os }}-${{ matrix.arch }}
47
+ permissions:
48
+ contents: read
49
+ strategy:
50
+ matrix: ${{ fromJSON(needs.configure.outputs.matrix) }}
51
+ runs-on: ${{ matrix.runner }}
52
+
53
+ steps:
54
+ - name: echo
55
+ run: echo github.repository=${{ github.repository }}
56
+
57
+ - name: Checkout repository
58
+ uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
59
+
60
+ - name: Install uv with caching
61
+ uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5
62
+ with:
63
+ version: "latest"
64
+ enable-cache: true
65
+ cache-dependency-glob: "uv.lock"
66
+
67
+ - name: Set up Python
68
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
69
+ with:
70
+ python-version: "3.12"
71
+
72
+ - name: Sync dependencies
73
+ run: uv sync --no-dev --group build
74
+
75
+ - name: Build with PyInstaller
76
+ run: uv run --no-dev --group build pyinstaller vibe-acp.spec
77
+
78
+ - name: Get package version with uv (Unix)
79
+ id: get_version_unix
80
+ if: ${{ matrix.os != 'windows' }}
81
+ run: python -c "import subprocess; version = subprocess.check_output(['uv', 'version']).decode().split()[1]; print(f'version={version}')" >> $GITHUB_OUTPUT
82
+
83
+ - name: Get package version with uv (Windows)
84
+ id: get_version_windows
85
+ if: ${{ matrix.os == 'windows' }}
86
+ shell: pwsh
87
+ run: python -c "import subprocess; version = subprocess.check_output(['uv', 'version']).decode().split()[1]; print(f'version={version}')" >> $env:GITHUB_OUTPUT
88
+
89
+ - name: Upload binary as artifact (Unix)
90
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
91
+ if: ${{ matrix.os != 'windows' }}
92
+ with:
93
+ name: vibe-acp-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}
94
+ path: dist/vibe-acp
95
+
96
+ - name: Upload binary as artifact (Windows)
97
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
98
+ if: ${{ matrix.os == 'windows' }}
99
+ with:
100
+ name: vibe-acp-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}
101
+ path: dist/vibe-acp.exe
102
+
103
+ attach-to-release:
104
+ needs: build-and-upload
105
+ runs-on: ubuntu-latest
106
+ if: github.event_name == 'release'
107
+ permissions:
108
+ contents: write
109
+ steps:
110
+ - name: Download all artifacts
111
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
112
+ with:
113
+ path: artifacts
114
+
115
+ - name: Zip artifacts
116
+ run: |
117
+ mkdir release-assets
118
+ for dir in artifacts/*; do
119
+ name=$(basename "$dir")
120
+ if [ -f "$dir/vibe-acp" ]; then
121
+ chmod +x "$dir/vibe-acp"
122
+ zip -j "release-assets/${name}.zip" "$dir/vibe-acp"
123
+ elif [ -f "$dir/vibe-acp.exe" ]; then
124
+ zip -j "release-assets/${name}.zip" "$dir/vibe-acp.exe"
125
+ fi
126
+ done
127
+
128
+ - name: Attach binaries to release
129
+ uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
130
+ with:
131
+ files: release-assets/*.zip
132
+ env:
133
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
134
+
135
+ nix-build:
136
+ needs: configure
137
+ name: "Nix: ${{ matrix.os }}-${{ matrix.arch }}"
138
+ permissions:
139
+ contents: read
140
+ strategy:
141
+ matrix: ${{ fromJSON(needs.configure.outputs.matrix) }}
142
+ runs-on: ${{ matrix.runner }}
143
+ steps:
144
+ - name: Checkout repository
145
+ if: matrix.os != 'windows'
146
+ uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
147
+
148
+ - name: Install Nix
149
+ if: matrix.os != 'windows'
150
+ uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
151
+
152
+ - name: Build with Nix
153
+ if: matrix.os != 'windows'
154
+ shell: bash
155
+ run: |
156
+ nix build .#
157
+
158
+ - name: Nix Smoke Test
159
+ if: matrix.os != 'windows'
160
+ shell: bash
161
+ run: |
162
+ nix run .# -- --version
@@ -0,0 +1,132 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ env:
10
+ PYTHON_VERSION: "3.12"
11
+
12
+ jobs:
13
+ pre-commit:
14
+ name: Pre-commit
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ contents: read
18
+
19
+ steps:
20
+ - name: Checkout repository
21
+ uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
22
+
23
+ - name: Install uv with caching
24
+ uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7
25
+ with:
26
+ version: "latest"
27
+ enable-cache: true
28
+ cache-dependency-glob: "uv.lock"
29
+
30
+ - name: Set up Python
31
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
32
+ with:
33
+ python-version: ${{ env.PYTHON_VERSION }}
34
+
35
+ - name: Sync dependencies
36
+ run: uv sync --all-extras
37
+
38
+ - name: Install pip (required by pre-commit)
39
+ run: uv pip install pip
40
+
41
+ - name: Add virtual environment to PATH
42
+ run: echo "$(pwd)/.venv/bin" >> $GITHUB_PATH
43
+
44
+ - name: Cache pre-commit
45
+ uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
46
+ with:
47
+ path: ~/.cache/pre-commit
48
+ key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
49
+
50
+ - name: Run pre-commit
51
+ run: uv run pre-commit run --all-files --show-diff-on-failure
52
+
53
+ tests:
54
+ name: Tests
55
+ runs-on: ubuntu-latest
56
+ permissions:
57
+ contents: read
58
+
59
+ steps:
60
+ - name: Checkout repository
61
+ uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
62
+
63
+ - name: Install uv with caching
64
+ uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7
65
+ with:
66
+ version: "latest"
67
+ enable-cache: true
68
+ cache-dependency-glob: "uv.lock"
69
+
70
+ - name: Set up Python
71
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
72
+ with:
73
+ python-version: ${{ env.PYTHON_VERSION }}
74
+
75
+ - name: Sync dependencies
76
+ run: uv sync --all-extras
77
+
78
+ - name: Verify CLI can start
79
+ run: |
80
+ uv run vibe --help
81
+ uv run vibe-acp --help
82
+
83
+ - name: Install ripgrep
84
+ run: sudo apt-get update && sudo apt-get install -y ripgrep
85
+
86
+ - name: Run tests
87
+ run: uv run pytest --ignore tests/snapshots
88
+
89
+ snapshot-tests:
90
+ name: Snapshot Tests
91
+ runs-on: ubuntu-latest
92
+ permissions:
93
+ contents: read
94
+
95
+ steps:
96
+ - name: Checkout repository
97
+ uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
98
+
99
+ - name: Install uv with caching
100
+ uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7
101
+ with:
102
+ version: "latest"
103
+ enable-cache: true
104
+ cache-dependency-glob: "uv.lock"
105
+
106
+ - name: Set up Python
107
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
108
+ with:
109
+ python-version: ${{ env.PYTHON_VERSION }}
110
+
111
+ - name: Sync dependencies
112
+ run: uv sync --all-extras
113
+
114
+ - name: Run snapshot tests
115
+ id: snapshot-tests
116
+ run: uv run pytest tests/snapshots
117
+ continue-on-error: true
118
+
119
+ - name: Upload snapshot report
120
+ if: steps.snapshot-tests.outcome == 'failure'
121
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
122
+ with:
123
+ name: snapshot-report
124
+ path: snapshot_report.html
125
+ if-no-files-found: warn
126
+ retention-days: 3
127
+
128
+ - name: Fail job if snapshot tests failed
129
+ if: steps.snapshot-tests.outcome == 'failure'
130
+ run: |
131
+ echo "Snapshot tests failed, failing job."
132
+ exit 1
@@ -0,0 +1,62 @@
1
+ name: Issue Labeler
2
+
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+
7
+ jobs:
8
+ label-component:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+ issues: write
13
+ steps:
14
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
15
+
16
+ - name: Parse bug report form
17
+ id: parse-bug
18
+ uses: stefanbuck/github-issue-parser@25f1485edffc1fee3ea68eb9f59a72e58720ffc4 # v3
19
+ with:
20
+ template-path: .github/ISSUE_TEMPLATE/bug-report.yml
21
+ continue-on-error: true
22
+
23
+ - name: Parse feature request form
24
+ id: parse-feature
25
+ uses: stefanbuck/github-issue-parser@25f1485edffc1fee3ea68eb9f59a72e58720ffc4 # v3
26
+ with:
27
+ template-path: .github/ISSUE_TEMPLATE/feature-request.yml
28
+ continue-on-error: true
29
+
30
+ - name: Apply component label
31
+ uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
32
+ with:
33
+ script: |
34
+ // Get component from either bug report or feature request
35
+ const bugComponent = '${{ steps.parse-bug.outputs.issueparser_component }}';
36
+ const featureComponent = '${{ steps.parse-feature.outputs.issueparser_component }}';
37
+ const component = bugComponent || featureComponent;
38
+
39
+ if (!component) {
40
+ console.log('No component field found, skipping labeling');
41
+ return;
42
+ }
43
+
44
+ const labels = [];
45
+
46
+ if (component === 'CLI') {
47
+ labels.push('CLI');
48
+ } else if (component === 'ACP') {
49
+ labels.push('ACP');
50
+ } else if (component === 'Both') {
51
+ labels.push('CLI', 'ACP');
52
+ }
53
+
54
+ if (labels.length > 0) {
55
+ await github.rest.issues.addLabels({
56
+ owner: context.repo.owner,
57
+ repo: context.repo.repo,
58
+ issue_number: context.issue.number,
59
+ labels: labels
60
+ });
61
+ console.log(`Added labels: ${labels.join(', ')}`);
62
+ }
@@ -0,0 +1,61 @@
1
+ name: Release to Pipy and Zed's store
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ release-pypy:
10
+ name: Release to Pypi
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: pypi
14
+ url: https://pypi.org/p/mistral-vibe
15
+ permissions:
16
+ id-token: write
17
+ contents: read
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5
30
+
31
+ - name: Install dependencies
32
+ run: uv sync --locked --dev
33
+
34
+ - name: Build package
35
+ run: uv build
36
+
37
+ - name: Upload artifacts
38
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
39
+ with:
40
+ name: dist
41
+ path: dist/
42
+
43
+ - name: Publish distribution to PyPI
44
+ if: github.repository == 'mistralai/mistral-vibe'
45
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
46
+
47
+ release-zed-extension:
48
+ name: Release Zed Extension
49
+ runs-on: ubuntu-latest
50
+ if: github.repository == 'mistralai/mistral-vibe'
51
+ permissions:
52
+ contents: read
53
+ environment:
54
+ name: zed
55
+ steps:
56
+ - uses: huacnlee/zed-extension-action@8cd592a0d24e1e41157740f1a529aeabddc88a1b # v2
57
+ with:
58
+ extension-name: mistral-vibe
59
+ push-to: mistralai/zed-extensions
60
+ env:
61
+ COMMITTER_TOKEN: ${{ secrets.ZED_EXTENSION_GITHUB_TOKEN }}