bloom-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.
- bloom_cli-0.1.0/.github/CODEOWNERS +7 -0
- bloom_cli-0.1.0/.github/DISCUSSION_TEMPLATE/ideas.yml +46 -0
- bloom_cli-0.1.0/.github/ISSUE_TEMPLATE/bug-report.yml +58 -0
- bloom_cli-0.1.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
- bloom_cli-0.1.0/.github/workflows/build-and-upload.yml +162 -0
- bloom_cli-0.1.0/.github/workflows/ci.yml +132 -0
- bloom_cli-0.1.0/.github/workflows/issue-labeler.yml +62 -0
- bloom_cli-0.1.0/.github/workflows/release.yml +61 -0
- bloom_cli-0.1.0/.gitignore +203 -0
- bloom_cli-0.1.0/.pre-commit-config.yaml +34 -0
- bloom_cli-0.1.0/.python-version +1 -0
- bloom_cli-0.1.0/.typos.toml +7 -0
- bloom_cli-0.1.0/.vscode/extensions.json +3 -0
- bloom_cli-0.1.0/.vscode/launch.json +85 -0
- bloom_cli-0.1.0/.vscode/settings.json +26 -0
- bloom_cli-0.1.0/AGENTS.md +135 -0
- bloom_cli-0.1.0/CHANGELOG.md +319 -0
- bloom_cli-0.1.0/CONTRIBUTING.md +169 -0
- bloom_cli-0.1.0/LICENSE +202 -0
- bloom_cli-0.1.0/PKG-INFO +146 -0
- bloom_cli-0.1.0/README.md +99 -0
- bloom_cli-0.1.0/action.yml +60 -0
- bloom_cli-0.1.0/bloom/__init__.py +6 -0
- bloom_cli-0.1.0/bloom/acp/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/acp/acp_agent_loop.py +559 -0
- bloom_cli-0.1.0/bloom/acp/entrypoint.py +81 -0
- bloom_cli-0.1.0/bloom/acp/tools/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/acp/tools/base.py +100 -0
- bloom_cli-0.1.0/bloom/acp/tools/builtins/bash.py +134 -0
- bloom_cli-0.1.0/bloom/acp/tools/builtins/read_file.py +56 -0
- bloom_cli-0.1.0/bloom/acp/tools/builtins/search_replace.py +129 -0
- bloom_cli-0.1.0/bloom/acp/tools/builtins/todo.py +65 -0
- bloom_cli-0.1.0/bloom/acp/tools/builtins/write_file.py +98 -0
- bloom_cli-0.1.0/bloom/acp/tools/session_update.py +118 -0
- bloom_cli-0.1.0/bloom/acp/utils.py +113 -0
- bloom_cli-0.1.0/bloom/cli/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/cli/autocompletion/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/cli/autocompletion/base.py +22 -0
- bloom_cli-0.1.0/bloom/cli/autocompletion/path_completion.py +177 -0
- bloom_cli-0.1.0/bloom/cli/autocompletion/slash_command.py +99 -0
- bloom_cli-0.1.0/bloom/cli/cli.py +190 -0
- bloom_cli-0.1.0/bloom/cli/clipboard.py +92 -0
- bloom_cli-0.1.0/bloom/cli/commands.py +103 -0
- bloom_cli-0.1.0/bloom/cli/entrypoint.py +166 -0
- bloom_cli-0.1.0/bloom/cli/history_manager.py +91 -0
- bloom_cli-0.1.0/bloom/cli/terminal_setup.py +323 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/ansi_markdown.py +58 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/app.py +1328 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/app.tcss +982 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/external_editor.py +32 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/handlers/__init__.py +5 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/handlers/event_handler.py +147 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/terminal_theme.py +266 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/approval_app.py +192 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/banner/banner.py +92 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/banner/bee.py +278 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/braille_renderer.py +58 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/__init__.py +7 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/body.py +214 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/completion_manager.py +58 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/completion_popup.py +43 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/container.py +195 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/chat_input/text_area.py +365 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/compact.py +41 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/config_app.py +204 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/context_progress.py +30 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/load_more.py +43 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/loading.py +201 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/messages.py +277 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/no_markup_static.py +11 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/path_display.py +28 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/question_app.py +496 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/spinner.py +194 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/status_message.py +76 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/tool_widgets.py +371 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/widgets/tools.py +201 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/windowing/__init__.py +29 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/windowing/history.py +105 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/windowing/history_windowing.py +71 -0
- bloom_cli-0.1.0/bloom/cli/textual_ui/windowing/state.py +105 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/__init__.py +47 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/adapters/filesystem_update_cache_repository.py +59 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/adapters/github_update_gateway.py +101 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/adapters/pypi_update_gateway.py +107 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/ports/update_cache_repository.py +16 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/ports/update_gateway.py +53 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/update.py +139 -0
- bloom_cli-0.1.0/bloom/cli/update_notifier/whats_new.py +49 -0
- bloom_cli-0.1.0/bloom/core/__init__.py +5 -0
- bloom_cli-0.1.0/bloom/core/agent_loop.py +961 -0
- bloom_cli-0.1.0/bloom/core/agents/__init__.py +31 -0
- bloom_cli-0.1.0/bloom/core/agents/manager.py +165 -0
- bloom_cli-0.1.0/bloom/core/agents/models.py +139 -0
- bloom_cli-0.1.0/bloom/core/auth/__init__.py +6 -0
- bloom_cli-0.1.0/bloom/core/auth/crypto.py +137 -0
- bloom_cli-0.1.0/bloom/core/auth/github.py +178 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/completers.py +257 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/file_indexer/__init__.py +10 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/file_indexer/ignore_rules.py +156 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/file_indexer/indexer.py +179 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/file_indexer/store.py +169 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/file_indexer/watcher.py +71 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/fuzzy.py +189 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/path_prompt.py +108 -0
- bloom_cli-0.1.0/bloom/core/autocompletion/path_prompt_adapter.py +149 -0
- bloom_cli-0.1.0/bloom/core/config.py +588 -0
- bloom_cli-0.1.0/bloom/core/llm/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/core/llm/backend/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/core/llm/backend/factory.py +6 -0
- bloom_cli-0.1.0/bloom/core/llm/backend/generic.py +447 -0
- bloom_cli-0.1.0/bloom/core/llm/exceptions.py +195 -0
- bloom_cli-0.1.0/bloom/core/llm/format.py +183 -0
- bloom_cli-0.1.0/bloom/core/llm/model_discovery.py +103 -0
- bloom_cli-0.1.0/bloom/core/llm/types.py +120 -0
- bloom_cli-0.1.0/bloom/core/middleware.py +220 -0
- bloom_cli-0.1.0/bloom/core/output_formatters.py +85 -0
- bloom_cli-0.1.0/bloom/core/paths/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/core/paths/config_paths.py +66 -0
- bloom_cli-0.1.0/bloom/core/paths/global_paths.py +40 -0
- bloom_cli-0.1.0/bloom/core/programmatic.py +51 -0
- bloom_cli-0.1.0/bloom/core/prompts/__init__.py +31 -0
- bloom_cli-0.1.0/bloom/core/prompts/cli.md +46 -0
- bloom_cli-0.1.0/bloom/core/prompts/compact.md +48 -0
- bloom_cli-0.1.0/bloom/core/prompts/dangerous_directory.md +5 -0
- bloom_cli-0.1.0/bloom/core/prompts/project_context.md +8 -0
- bloom_cli-0.1.0/bloom/core/prompts/tests.md +1 -0
- bloom_cli-0.1.0/bloom/core/session/session_loader.py +157 -0
- bloom_cli-0.1.0/bloom/core/session/session_logger.py +318 -0
- bloom_cli-0.1.0/bloom/core/session/session_migration.py +41 -0
- bloom_cli-0.1.0/bloom/core/skills/__init__.py +7 -0
- bloom_cli-0.1.0/bloom/core/skills/manager.py +133 -0
- bloom_cli-0.1.0/bloom/core/skills/models.py +92 -0
- bloom_cli-0.1.0/bloom/core/skills/parser.py +39 -0
- bloom_cli-0.1.0/bloom/core/system_prompt.py +470 -0
- bloom_cli-0.1.0/bloom/core/tools/base.py +336 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/ask_user_question.py +134 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/bash.py +357 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/grep.py +310 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/__init__.py +0 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/ask_user_question.md +84 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/bash.md +73 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/grep.md +4 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/read_file.md +13 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/search_replace.md +43 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/task.md +24 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/todo.md +199 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/prompts/write_file.md +42 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/read_file.py +222 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/search_replace.py +456 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/task.py +154 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/todo.py +134 -0
- bloom_cli-0.1.0/bloom/core/tools/builtins/write_file.py +160 -0
- bloom_cli-0.1.0/bloom/core/tools/manager.py +341 -0
- bloom_cli-0.1.0/bloom/core/tools/mcp.py +358 -0
- bloom_cli-0.1.0/bloom/core/tools/ui.py +68 -0
- bloom_cli-0.1.0/bloom/core/trusted_folders.py +83 -0
- bloom_cli-0.1.0/bloom/core/types.py +396 -0
- bloom_cli-0.1.0/bloom/core/utils.py +350 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/__init__.py +53 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/base.py +14 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/onboarding.tcss +230 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/screens/__init__.py +7 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/screens/api_key.py +170 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/screens/theme_selection.py +164 -0
- bloom_cli-0.1.0/bloom/setup/onboarding/screens/welcome.py +136 -0
- bloom_cli-0.1.0/bloom/setup/trusted_folders/trust_folder_dialog.py +180 -0
- bloom_cli-0.1.0/bloom/setup/trusted_folders/trust_folder_dialog.tcss +83 -0
- bloom_cli-0.1.0/bloom/whats_new.md +7 -0
- bloom_cli-0.1.0/bloom-acp.spec +60 -0
- bloom_cli-0.1.0/distribution/zed/LICENSE +1 -0
- bloom_cli-0.1.0/distribution/zed/extension.toml +35 -0
- bloom_cli-0.1.0/distribution/zed/icons/bloom.svg +12 -0
- bloom_cli-0.1.0/docs/README.md +7 -0
- bloom_cli-0.1.0/docs/acp-setup.md +58 -0
- bloom_cli-0.1.0/flake.lock +133 -0
- bloom_cli-0.1.0/flake.nix +149 -0
- bloom_cli-0.1.0/pyproject.toml +168 -0
- bloom_cli-0.1.0/scripts/README.md +20 -0
- bloom_cli-0.1.0/scripts/bump_version.py +212 -0
- bloom_cli-0.1.0/scripts/install.sh +112 -0
- bloom_cli-0.1.0/scripts/prepare_release.py +284 -0
- bloom_cli-0.1.0/tests/__init__.py +5 -0
- bloom_cli-0.1.0/tests/acp/conftest.py +42 -0
- bloom_cli-0.1.0/tests/acp/test_acp.py +953 -0
- bloom_cli-0.1.0/tests/acp/test_agent_thought.py +154 -0
- bloom_cli-0.1.0/tests/acp/test_bash.py +495 -0
- bloom_cli-0.1.0/tests/acp/test_compact_session_updates.py +80 -0
- bloom_cli-0.1.0/tests/acp/test_content.py +147 -0
- bloom_cli-0.1.0/tests/acp/test_initialize.py +65 -0
- bloom_cli-0.1.0/tests/acp/test_multi_session.py +110 -0
- bloom_cli-0.1.0/tests/acp/test_new_session.py +116 -0
- bloom_cli-0.1.0/tests/acp/test_read_file.py +247 -0
- bloom_cli-0.1.0/tests/acp/test_search_replace.py +354 -0
- bloom_cli-0.1.0/tests/acp/test_set_mode.py +178 -0
- bloom_cli-0.1.0/tests/acp/test_set_model.py +306 -0
- bloom_cli-0.1.0/tests/acp/test_write_file.py +277 -0
- bloom_cli-0.1.0/tests/autocompletion/test_file_indexer.py +231 -0
- bloom_cli-0.1.0/tests/autocompletion/test_fuzzy.py +96 -0
- bloom_cli-0.1.0/tests/autocompletion/test_path_completer_fuzzy.py +122 -0
- bloom_cli-0.1.0/tests/autocompletion/test_path_completer_recursive.py +69 -0
- bloom_cli-0.1.0/tests/autocompletion/test_path_completion_controller.py +258 -0
- bloom_cli-0.1.0/tests/autocompletion/test_path_prompt_transformer.py +142 -0
- bloom_cli-0.1.0/tests/autocompletion/test_slash_command_controller.py +235 -0
- bloom_cli-0.1.0/tests/autocompletion/test_ui_chat_autocompletion.py +297 -0
- bloom_cli-0.1.0/tests/backend/__init__.py +0 -0
- bloom_cli-0.1.0/tests/backend/data/__init__.py +6 -0
- bloom_cli-0.1.0/tests/backend/data/fireworks.py +153 -0
- bloom_cli-0.1.0/tests/backend/test_backend.py +349 -0
- bloom_cli-0.1.0/tests/cli/test_braille_renderer.py +114 -0
- bloom_cli-0.1.0/tests/cli/test_clipboard.py +205 -0
- bloom_cli-0.1.0/tests/cli/test_copy_shortcuts.py +59 -0
- bloom_cli-0.1.0/tests/cli/test_external_editor.py +72 -0
- bloom_cli-0.1.0/tests/cli/test_no_markup_static.py +19 -0
- bloom_cli-0.1.0/tests/cli/test_question_app.py +513 -0
- bloom_cli-0.1.0/tests/cli/test_spinner.py +16 -0
- bloom_cli-0.1.0/tests/cli/test_ui_clipboard_notifications.py +40 -0
- bloom_cli-0.1.0/tests/cli/test_ui_session_incremental_renderer.py +160 -0
- bloom_cli-0.1.0/tests/cli/test_ui_session_resume.py +187 -0
- bloom_cli-0.1.0/tests/conftest.py +170 -0
- bloom_cli-0.1.0/tests/core/test_agents.py +80 -0
- bloom_cli-0.1.0/tests/core/test_auth_crypto.py +46 -0
- bloom_cli-0.1.0/tests/core/test_auth_github.py +286 -0
- bloom_cli-0.1.0/tests/core/test_config_load_dotenv.py +81 -0
- bloom_cli-0.1.0/tests/core/test_config_resolution.py +53 -0
- bloom_cli-0.1.0/tests/core/test_trusted_folders.py +205 -0
- bloom_cli-0.1.0/tests/mock/__init__.py +0 -0
- bloom_cli-0.1.0/tests/mock/mock_backend_factory.py +16 -0
- bloom_cli-0.1.0/tests/mock/mock_entrypoint.py +57 -0
- bloom_cli-0.1.0/tests/mock/utils.py +60 -0
- bloom_cli-0.1.0/tests/onboarding/test_run_onboarding.py +60 -0
- bloom_cli-0.1.0/tests/onboarding/test_ui_onboarding.py +70 -0
- bloom_cli-0.1.0/tests/session/test_session_loader.py +637 -0
- bloom_cli-0.1.0/tests/session/test_session_logger.py +703 -0
- bloom_cli-0.1.0/tests/session/test_session_migration.py +177 -0
- bloom_cli-0.1.0/tests/skills/conftest.py +62 -0
- bloom_cli-0.1.0/tests/skills/test_manager.py +440 -0
- bloom_cli-0.1.0/tests/skills/test_models.py +195 -0
- bloom_cli-0.1.0/tests/skills/test_parser.py +115 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +176 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +201 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +205 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +201 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +201 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +201 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +200 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +200 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +139 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +137 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +139 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +140 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +136 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +140 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +139 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +203 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +203 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +203 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +203 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +204 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +202 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +104 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +104 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +104 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +95 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +95 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +94 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +202 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +202 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +202 -0
- bloom_cli-0.1.0/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +202 -0
- bloom_cli-0.1.0/tests/snapshots/base_snapshot_test_app.py +54 -0
- bloom_cli-0.1.0/tests/snapshots/snap_compare.py +20 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_ask_user_question.py +80 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_basic_conversation.py +33 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +38 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_modes.py +84 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_question_app.py +365 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_reasoning_content.py +146 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_release_update_notification.py +45 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_session_resume.py +47 -0
- bloom_cli-0.1.0/tests/snapshots/test_ui_snapshot_whats_new.py +126 -0
- bloom_cli-0.1.0/tests/stubs/fake_backend.py +139 -0
- bloom_cli-0.1.0/tests/stubs/fake_client.py +134 -0
- bloom_cli-0.1.0/tests/stubs/fake_tool.py +35 -0
- bloom_cli-0.1.0/tests/test_agent_auto_compact.py +54 -0
- bloom_cli-0.1.0/tests/test_agent_backend.py +72 -0
- bloom_cli-0.1.0/tests/test_agent_observer_streaming.py +590 -0
- bloom_cli-0.1.0/tests/test_agent_stats.py +701 -0
- bloom_cli-0.1.0/tests/test_agent_tool_call.py +496 -0
- bloom_cli-0.1.0/tests/test_agents.py +618 -0
- bloom_cli-0.1.0/tests/test_cli_programmatic_preload.py +136 -0
- bloom_cli-0.1.0/tests/test_history_manager.py +101 -0
- bloom_cli-0.1.0/tests/test_message_id.py +162 -0
- bloom_cli-0.1.0/tests/test_middleware.py +137 -0
- bloom_cli-0.1.0/tests/test_system_prompt.py +44 -0
- bloom_cli-0.1.0/tests/test_tagged_text.py +107 -0
- bloom_cli-0.1.0/tests/test_ui_external_editor.py +69 -0
- bloom_cli-0.1.0/tests/test_ui_input_history.py +119 -0
- bloom_cli-0.1.0/tests/tools/test_ask_user_question.py +188 -0
- bloom_cli-0.1.0/tests/tools/test_bash.py +91 -0
- bloom_cli-0.1.0/tests/tools/test_grep.py +358 -0
- bloom_cli-0.1.0/tests/tools/test_invoke_context.py +106 -0
- bloom_cli-0.1.0/tests/tools/test_manager_get_tool_config.py +414 -0
- bloom_cli-0.1.0/tests/tools/test_mcp.py +308 -0
- bloom_cli-0.1.0/tests/tools/test_task.py +168 -0
- bloom_cli-0.1.0/tests/tools/test_ui_bash_execution.py +120 -0
- bloom_cli-0.1.0/tests/update_notifier/adapters/fake_update_cache_repository.py +17 -0
- bloom_cli-0.1.0/tests/update_notifier/adapters/fake_update_gateway.py +22 -0
- bloom_cli-0.1.0/tests/update_notifier/test_do_update.py +74 -0
- bloom_cli-0.1.0/tests/update_notifier/test_filesystem_update_cache_repository.py +119 -0
- bloom_cli-0.1.0/tests/update_notifier/test_github_update_gateway.py +245 -0
- bloom_cli-0.1.0/tests/update_notifier/test_pypi_update_gateway.py +146 -0
- bloom_cli-0.1.0/tests/update_notifier/test_ui_update_notification.py +389 -0
- bloom_cli-0.1.0/tests/update_notifier/test_update_use_case.py +302 -0
- bloom_cli-0.1.0/tests/update_notifier/test_whats_new.py +161 -0
- bloom_cli-0.1.0/uv.lock +1900 -0
|
@@ -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 Bloom 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 Bloom"
|
|
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 Bloom
|
|
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 Bloom 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 Bloom version, uv or pip version and OS.
|
|
49
|
+
placeholder: "bloom-cli 1.2.0, 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/Ilm-Alan/bloom/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 Mistral AI Discord server for support and discussions
|
|
9
|
+
- name: Read the docs
|
|
10
|
+
url: https://github.com/Ilm-Alan/bloom#readme
|
|
11
|
+
about: Read the Bloom 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 }}" == "Ilm-Alan/bloom" ]]; 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 bloom-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: bloom-acp-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}
|
|
94
|
+
path: dist/bloom-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: bloom-acp-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}
|
|
101
|
+
path: dist/bloom-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/bloom-acp" ]; then
|
|
121
|
+
chmod +x "$dir/bloom-acp"
|
|
122
|
+
zip -j "release-assets/${name}.zip" "$dir/bloom-acp"
|
|
123
|
+
elif [ -f "$dir/bloom-acp.exe" ]; then
|
|
124
|
+
zip -j "release-assets/${name}.zip" "$dir/bloom-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 bloom --help
|
|
81
|
+
uv run bloom-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/bloom-cli
|
|
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 == 'Ilm-Alan/bloom'
|
|
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 == 'Ilm-Alan/bloom'
|
|
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: bloom-cli
|
|
59
|
+
push-to: mistralai/zed-extensions
|
|
60
|
+
env:
|
|
61
|
+
COMMITTER_TOKEN: ${{ secrets.ZED_EXTENSION_GITHUB_TOKEN }}
|