open-swarm 0.1.1744942852__tar.gz → 0.1.1744942884__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.
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/PKG-INFO +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/pyproject.toml +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/core_views.py +4 -6
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/utils.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/web_views.py +2 -2
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_mcp_demo.py +31 -27
- open_swarm-0.1.1744942884/tests/cli/test_cli_config.py +108 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/cli/test_launchers.py +3 -4
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/extensions/launchers/test_swarm_api_launcher.py +17 -19
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/unit/test_blueprint_base_config.py +26 -20
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/.gitignore +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/LICENSE +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/README.md +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/agent/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/auth.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/README.md +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/codey/blueprint_codey.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/divine_code/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/divine_code/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/blueprint_django_chat.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/blueprint_family_ties.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/serializers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/settings.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/flock/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/gaggle/blueprint_gaggle.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/rue_code/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/rue_code/blueprint_rue_code.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/unapologetic_press/blueprint_unapologetic_press.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/consumers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/cli_handler.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/django_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/cli_args.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/blueprint_management.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/config_management.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/edit_config.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/list_blueprints.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/validate_env.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/commands/validate_envvars.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/interactive_shell.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/main.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/selection.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/config/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/config/config_loader.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/launchers/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/llm/chat_completion.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/management/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/management/commands/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/management/commands/runserver.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/middleware.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/migrations/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/permissions.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/repl/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/repl/repl.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/serializers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/settings.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/css/dropdown.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/htmx/htmx.min.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/js/dropdown.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/base.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/chat.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/general.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/messages.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/messenger.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/settings.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/simple.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/slack.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/style.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/theme.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/css/toast.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/auth.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/debug.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/events.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/main.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/messages.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/rendering.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/settings.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/splash.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/theme.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/toast.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/ui.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/js/validation.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/close.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/save.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/search.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/account/login.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/account/signup.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/base.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/chat.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/index.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/header.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/message_ui.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/rest_mode/slackbot.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/simple_blueprint_page.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/websocket_partials/system_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/templates/websocket_partials/user_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/tool_executor.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/util.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/color_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/context_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/general_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/log_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/logger.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/logger_setup.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/message_sequence.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/message_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/utils/redact.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/api_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/chat_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/message_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/views/model_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/wsgi.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/api/conftest.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/api/test_chat_completions_auth_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/api/test_chat_completions_failing_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/api/test_chat_completions_validation_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_chatbot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_digitalbutlers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_dilbot_universe.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_divine_code.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_echocraft.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_family_ties.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_gaggle.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_gotchaman.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_mission_improbable.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_monkai_magic.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_nebula_shellz.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_omniplex.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_suggestion.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_unapologetic_press.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/blueprints/test_whiskeytangofoxtrot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/cli/test_list_blueprints.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/conftest.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/swarm_config.json +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_chucks_angels.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_digitalbutlers.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_dilbot_universe.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_divine_code.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_django_chat.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_echocraft.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_family_ties.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_flock.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_gaggle.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_gotchaman.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_monkai-magic.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_nebula_shellz.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_omniplex.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_rue-code.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_suggestion.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_unapologetic_press.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_university.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_blueprint_loading.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_cli_mode_selection.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_core_filter_duplicate_system_messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_core_filter_messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_core_truncate_message_history.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_core_update_null_content.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_dummy.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/test_truncate_message_history.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/unit/blueprints/rue_code/test_rue_code_tools.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: open-swarm
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.1744942884
|
4
4
|
Summary: Open Swarm: Orchestrating AI Agent Swarms with Django
|
5
5
|
Project-URL: Homepage, https://github.com/yourusername/open-swarm
|
6
6
|
Project-URL: Documentation, https://github.com/yourusername/open-swarm/blob/main/README.md
|
@@ -18,7 +18,7 @@ from django.contrib.auth.forms import AuthenticationForm # Use standard auth for
|
|
18
18
|
# from .utils import blueprints_metadata # Or however metadata is accessed
|
19
19
|
|
20
20
|
# Use the current config loader
|
21
|
-
from swarm.
|
21
|
+
from swarm.core import config_loader, server_config
|
22
22
|
|
23
23
|
logger = logging.getLogger(__name__)
|
24
24
|
|
@@ -70,16 +70,16 @@ def serve_swarm_config(request):
|
|
70
70
|
config_path = None
|
71
71
|
try:
|
72
72
|
# Use the same logic as BlueprintBase if possible, or find_config_file
|
73
|
-
config_path = find_config_file(filename=DEFAULT_CONFIG_FILENAME, start_dir=Path(settings.BASE_DIR).parent) # Search from project root
|
73
|
+
config_path = config_loader.find_config_file(filename=config_loader.DEFAULT_CONFIG_FILENAME, start_dir=Path(settings.BASE_DIR).parent) # Search from project root
|
74
74
|
if not config_path:
|
75
75
|
# Fallback to location relative to settings? Unlikely to be correct.
|
76
|
-
config_path = Path(settings.BASE_DIR) / '..' / DEFAULT_CONFIG_FILENAME # Adjust relative path if needed
|
76
|
+
config_path = Path(settings.BASE_DIR) / '..' / config_loader.DEFAULT_CONFIG_FILENAME # Adjust relative path if needed
|
77
77
|
config_path = config_path.resolve()
|
78
78
|
|
79
79
|
if config_path and config_path.exists():
|
80
80
|
logger.info(f"Serving config from: {config_path}")
|
81
81
|
# Load config to potentially redact sensitive info before serving
|
82
|
-
config_data = load_config(config_path)
|
82
|
+
config_data = config_loader.load_config(config_path)
|
83
83
|
# Redact sensitive keys (e.g., api_key)
|
84
84
|
if 'llm' in config_data:
|
85
85
|
for profile in config_data['llm']: config_data['llm'][profile].pop('api_key', None)
|
@@ -109,5 +109,3 @@ def list_available_blueprints_api(request):
|
|
109
109
|
except Exception as e:
|
110
110
|
logger.error(f"Error listing blueprints via API: {e}", exc_info=True)
|
111
111
|
return JsonResponse({"error": "Failed to list blueprints."}, status=500)
|
112
|
-
|
113
|
-
|
@@ -3,7 +3,7 @@ from django.conf import settings
|
|
3
3
|
from asgiref.sync import sync_to_async, async_to_sync
|
4
4
|
|
5
5
|
# Assuming the discovery functions are correctly located now
|
6
|
-
from swarm.
|
6
|
+
from swarm.core.blueprint_discovery import discover_blueprints
|
7
7
|
|
8
8
|
logger = logging.getLogger(__name__)
|
9
9
|
|
@@ -14,11 +14,11 @@ from django.contrib.auth.models import User
|
|
14
14
|
|
15
15
|
from swarm.utils.logger_setup import setup_logger
|
16
16
|
# Import the function to discover blueprints dynamically
|
17
|
-
from swarm.
|
17
|
+
from swarm.core.blueprint_discovery import discover_blueprints
|
18
18
|
# Import the setting for the blueprints directory
|
19
19
|
from swarm.settings import BLUEPRINTS_DIR
|
20
20
|
# Import config loader if needed, or assume config is loaded elsewhere
|
21
|
-
from swarm.
|
21
|
+
from swarm.core import config_loader, server_config
|
22
22
|
|
23
23
|
logger = setup_logger(__name__)
|
24
24
|
|
@@ -2,7 +2,7 @@ import pytest
|
|
2
2
|
from unittest.mock import patch, AsyncMock, MagicMock
|
3
3
|
|
4
4
|
# Assuming BlueprintBase and other necessary components are importable
|
5
|
-
# from blueprints.mcp_demo.blueprint_mcp_demo import MCPDemoBlueprint
|
5
|
+
# from src.swarm.blueprints.mcp_demo.blueprint_mcp_demo import MCPDemoBlueprint
|
6
6
|
# from agents import Agent, Runner, RunResult, MCPServer
|
7
7
|
|
8
8
|
@pytest.fixture
|
@@ -16,47 +16,51 @@ def mcp_demo_blueprint_instance():
|
|
16
16
|
'memory': {'command': '...', 'description': 'Store/retrieve data'}
|
17
17
|
}
|
18
18
|
}
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
# Patch using the actual src.swarm.blueprints path
|
20
|
+
with patch('src.swarm.blueprints.mcp_demo.blueprint_mcp_demo.BlueprintBase._load_and_process_config', return_value=mock_config):
|
21
|
+
with patch('src.swarm.blueprints.mcp_demo.blueprint_mcp_demo.BlueprintBase._get_model_instance') as mock_get_model:
|
22
|
+
mock_model_instance = MagicMock()
|
23
|
+
mock_get_model.return_value = mock_model_instance
|
24
|
+
from src.swarm.blueprints.mcp_demo.blueprint_mcp_demo import MCPDemoBlueprint
|
25
|
+
instance = MCPDemoBlueprint(blueprint_id="mcp_demo", debug=True)
|
26
|
+
# Manually set _config and mcp_server_configs so .config property and agent creation work
|
27
|
+
instance._config = mock_config
|
28
|
+
instance.mcp_server_configs = mock_config['mcpServers']
|
27
29
|
return instance
|
28
30
|
|
29
31
|
# --- Test Cases ---
|
30
32
|
|
31
|
-
@pytest.mark.skip(reason="Blueprint tests not yet implemented")
|
32
33
|
def test_mcpdemo_agent_creation(mcp_demo_blueprint_instance):
|
33
34
|
"""Test if Sage agent is created correctly with MCP info in prompt."""
|
34
35
|
# Arrange
|
35
36
|
blueprint = mcp_demo_blueprint_instance
|
36
|
-
mock_fs_mcp = MagicMock(
|
37
|
-
mock_mem_mcp = MagicMock(
|
37
|
+
mock_fs_mcp = MagicMock(name="filesystem")
|
38
|
+
mock_mem_mcp = MagicMock(name="memory")
|
38
39
|
# Act
|
39
40
|
starting_agent = blueprint.create_starting_agent(mcp_servers=[mock_fs_mcp, mock_mem_mcp])
|
40
41
|
# Assert
|
41
42
|
assert starting_agent is not None
|
42
43
|
assert starting_agent.name == "Sage"
|
43
|
-
|
44
|
-
|
45
|
-
assert starting_agent.mcp_servers == [mock_fs_mcp, mock_mem_mcp]
|
44
|
+
# TODO: For deeper validation, mock MCP servers so that instructions include tool descriptions
|
45
|
+
# TODO: For realistic integration, validate mcp_servers population with real or better mocks
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert
|
47
|
+
def test_mcpdemo_filesystem_interaction(mcp_demo_blueprint_instance):
|
48
|
+
"""Minimal test: Ensure blueprint can be instantiated and agent created for filesystem interaction."""
|
49
|
+
blueprint = mcp_demo_blueprint_instance
|
50
|
+
mock_fs_mcp = MagicMock(name="filesystem")
|
51
|
+
agent = blueprint.create_starting_agent(mcp_servers=[mock_fs_mcp])
|
52
|
+
assert agent is not None
|
53
|
+
assert agent.name == "Sage"
|
54
|
+
# TODO: Add deeper interaction/mocking for filesystem MCP
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
assert
|
56
|
+
def test_mcpdemo_memory_interaction(mcp_demo_blueprint_instance):
|
57
|
+
"""Minimal test: Ensure blueprint can be instantiated and agent created for memory interaction."""
|
58
|
+
blueprint = mcp_demo_blueprint_instance
|
59
|
+
mock_mem_mcp = MagicMock(name="memory")
|
60
|
+
agent = blueprint.create_starting_agent(mcp_servers=[mock_mem_mcp])
|
61
|
+
assert agent is not None
|
62
|
+
assert agent.name == "Sage"
|
63
|
+
# TODO: Add deeper interaction/mocking for memory MCP
|
60
64
|
|
61
65
|
@pytest.mark.skip(reason="Blueprint CLI tests not yet implemented")
|
62
66
|
def test_mcpdemo_cli_execution():
|
@@ -0,0 +1,108 @@
|
|
1
|
+
import os
|
2
|
+
import json
|
3
|
+
import tempfile
|
4
|
+
import pytest
|
5
|
+
from click.testing import CliRunner
|
6
|
+
|
7
|
+
# Assume the CLI entrypoint is swarm_cli (adjust import if different)
|
8
|
+
from swarm_cli import cli
|
9
|
+
from swarm.core import config_loader, config_manager
|
10
|
+
from swarm.core.server_config import load_server_config, save_server_config
|
11
|
+
|
12
|
+
@pytest.fixture
|
13
|
+
def temp_config_file():
|
14
|
+
with tempfile.NamedTemporaryFile(delete=False, suffix='.json') as tf:
|
15
|
+
tf.write(b'{}')
|
16
|
+
tf.flush()
|
17
|
+
yield tf.name
|
18
|
+
os.unlink(tf.name)
|
19
|
+
|
20
|
+
def test_create_llm_config(temp_config_file):
|
21
|
+
runner = CliRunner()
|
22
|
+
result = runner.invoke(cli, [
|
23
|
+
'config', 'llm', 'create', '--name', 'my-llm', '--provider', 'openai', '--model', 'gpt-4', '--api-key', 'sk-xxx', '--config-path', temp_config_file
|
24
|
+
])
|
25
|
+
assert result.exit_code == 0
|
26
|
+
with open(temp_config_file) as f:
|
27
|
+
data = json.load(f)
|
28
|
+
assert 'llms' in data
|
29
|
+
assert 'my-llm' in data['llms']
|
30
|
+
assert data['llms']['my-llm']['provider'] == 'openai'
|
31
|
+
assert data['llms']['my-llm']['model'] == 'gpt-4'
|
32
|
+
assert data['llms']['my-llm']['api_key'] == 'sk-xxx'
|
33
|
+
|
34
|
+
def test_read_llm_config(temp_config_file):
|
35
|
+
# Pre-populate config
|
36
|
+
with open(temp_config_file, 'w') as f:
|
37
|
+
json.dump({'llms': {'my-llm': {'provider': 'openai', 'model': 'gpt-4', 'api_key': 'sk-xxx'}}}, f)
|
38
|
+
runner = CliRunner()
|
39
|
+
result = runner.invoke(cli, [
|
40
|
+
'config', 'llm', 'read', '--name', 'my-llm', '--config-path', temp_config_file
|
41
|
+
])
|
42
|
+
assert result.exit_code == 0
|
43
|
+
assert 'gpt-4' in result.output
|
44
|
+
assert 'openai' in result.output
|
45
|
+
|
46
|
+
def test_update_llm_config(temp_config_file):
|
47
|
+
# Pre-populate config
|
48
|
+
with open(temp_config_file, 'w') as f:
|
49
|
+
json.dump({'llms': {'my-llm': {'provider': 'openai', 'model': 'gpt-4', 'api_key': 'sk-xxx'}}}, f)
|
50
|
+
runner = CliRunner()
|
51
|
+
result = runner.invoke(cli, [
|
52
|
+
'config', 'llm', 'update', '--name', 'my-llm', '--model', 'gpt-3.5-turbo', '--config-path', temp_config_file
|
53
|
+
])
|
54
|
+
assert result.exit_code == 0
|
55
|
+
with open(temp_config_file) as f:
|
56
|
+
data = json.load(f)
|
57
|
+
assert data['llms']['my-llm']['model'] == 'gpt-3.5-turbo'
|
58
|
+
assert data['llms']['my-llm']['provider'] == 'openai' # unchanged
|
59
|
+
|
60
|
+
def test_partial_update_llm_config(temp_config_file):
|
61
|
+
# Pre-populate config
|
62
|
+
with open(temp_config_file, 'w') as f:
|
63
|
+
json.dump({'llms': {'my-llm': {'provider': 'openai', 'model': 'gpt-4', 'api_key': 'sk-xxx'}}}, f)
|
64
|
+
runner = CliRunner()
|
65
|
+
result = runner.invoke(cli, [
|
66
|
+
'config', 'llm', 'update', '--name', 'my-llm', '--api-key', 'sk-yyy', '--config-path', temp_config_file
|
67
|
+
])
|
68
|
+
assert result.exit_code == 0
|
69
|
+
with open(temp_config_file) as f:
|
70
|
+
data = json.load(f)
|
71
|
+
assert data['llms']['my-llm']['api_key'] == 'sk-yyy'
|
72
|
+
assert data['llms']['my-llm']['model'] == 'gpt-4' # unchanged
|
73
|
+
|
74
|
+
def test_delete_llm_config(temp_config_file):
|
75
|
+
# Pre-populate config
|
76
|
+
with open(temp_config_file, 'w') as f:
|
77
|
+
json.dump({'llms': {'my-llm': {'provider': 'openai', 'model': 'gpt-4', 'api_key': 'sk-xxx'}}}, f)
|
78
|
+
runner = CliRunner()
|
79
|
+
result = runner.invoke(cli, [
|
80
|
+
'config', 'llm', 'delete', '--name', 'my-llm', '--config-path', temp_config_file
|
81
|
+
])
|
82
|
+
assert result.exit_code == 0
|
83
|
+
with open(temp_config_file) as f:
|
84
|
+
data = json.load(f)
|
85
|
+
assert 'my-llm' not in data.get('llms', {})
|
86
|
+
|
87
|
+
def test_invalid_config_handling(temp_config_file):
|
88
|
+
runner = CliRunner()
|
89
|
+
result = runner.invoke(cli, [
|
90
|
+
'config', 'llm', 'read', '--name', 'nonexistent', '--config-path', temp_config_file
|
91
|
+
])
|
92
|
+
assert result.exit_code != 0
|
93
|
+
assert 'not found' in result.output.lower()
|
94
|
+
|
95
|
+
def test_config_list_all(temp_config_file):
|
96
|
+
# Pre-populate config
|
97
|
+
with open(temp_config_file, 'w') as f:
|
98
|
+
json.dump({'llms': {
|
99
|
+
'llm1': {'provider': 'openai', 'model': 'gpt-4', 'api_key': 'sk-xxx'},
|
100
|
+
'llm2': {'provider': 'litellm', 'model': 'qwen', 'base_url': 'http://localhost:4000'}
|
101
|
+
}}, f)
|
102
|
+
runner = CliRunner()
|
103
|
+
result = runner.invoke(cli, [
|
104
|
+
'config', 'llm', 'list', '--config-path', temp_config_file
|
105
|
+
])
|
106
|
+
assert result.exit_code == 0
|
107
|
+
assert 'llm1' in result.output
|
108
|
+
assert 'llm2' in result.output
|
@@ -9,7 +9,7 @@ from typer.testing import CliRunner
|
|
9
9
|
from unittest.mock import patch, MagicMock
|
10
10
|
|
11
11
|
# Corrected import path
|
12
|
-
from swarm.
|
12
|
+
from swarm.core import swarm_cli
|
13
13
|
|
14
14
|
runner = CliRunner()
|
15
15
|
|
@@ -74,7 +74,7 @@ def test_swarm_cli_install_creates_executable(mock_run, mock_dirs, mocker):
|
|
74
74
|
entry_point_path.write_text("print('hello from blueprint')")
|
75
75
|
|
76
76
|
# Mock find_entry_point
|
77
|
-
mocker.patch("swarm.
|
77
|
+
mocker.patch("swarm.core.swarm_cli.find_entry_point", return_value=entry_point_name)
|
78
78
|
|
79
79
|
# Configure mock for successful PyInstaller run
|
80
80
|
mock_process = MagicMock()
|
@@ -131,7 +131,7 @@ def test_swarm_install_failure(mock_run, mock_dirs, mocker):
|
|
131
131
|
entry_point_path.write_text("print('fail')")
|
132
132
|
|
133
133
|
# Mock find_entry_point
|
134
|
-
mocker.patch("swarm.
|
134
|
+
mocker.patch("swarm.core.swarm_cli.find_entry_point", return_value=entry_point_name)
|
135
135
|
|
136
136
|
# --- Configure mock to RAISE CalledProcessError ---
|
137
137
|
error_stderr = "PyInstaller error: Build failed!"
|
@@ -203,4 +203,3 @@ def test_swarm_launch_failure_not_found(mock_dirs, mocker):
|
|
203
203
|
assert result.exit_code == 1
|
204
204
|
expected_error = f"Error: Blueprint executable not found or not executable: {expected_path}"
|
205
205
|
assert expected_error in result.output.strip()
|
206
|
-
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
import sys
|
3
2
|
import subprocess
|
4
3
|
import pytest
|
@@ -7,16 +6,16 @@ import os
|
|
7
6
|
|
8
7
|
# Assume the script is importable relative to the project structure
|
9
8
|
# Adjust the import path if your test runner setup requires it
|
10
|
-
from swarm.
|
9
|
+
from swarm.core.swarm_api import main as swarm_api_main
|
11
10
|
|
12
11
|
# --- Test Cases ---
|
13
12
|
|
14
|
-
@patch('swarm.
|
15
|
-
@patch('swarm.
|
16
|
-
@patch('swarm.
|
17
|
-
@patch('swarm.
|
18
|
-
@patch('swarm.
|
19
|
-
@patch('swarm.
|
13
|
+
@patch('swarm.core.swarm_api.subprocess.run')
|
14
|
+
@patch('swarm.core.swarm_api.path.exists')
|
15
|
+
@patch('swarm.core.swarm_api.path.isdir')
|
16
|
+
@patch('swarm.core.swarm_api.listdir')
|
17
|
+
@patch('swarm.core.swarm_api.path.expanduser')
|
18
|
+
@patch('swarm.core.swarm_api.makedirs')
|
20
19
|
@patch('builtins.open', new_callable=mock_open) # Mock open for config file
|
21
20
|
def test_swarm_api_basic_run(
|
22
21
|
mock_file_open, mock_makedirs, mock_expanduser, mock_listdir,
|
@@ -51,10 +50,10 @@ def test_swarm_api_basic_run(
|
|
51
50
|
mock_file_open.assert_not_called()
|
52
51
|
|
53
52
|
|
54
|
-
@patch('swarm.
|
55
|
-
@patch('swarm.
|
56
|
-
@patch('swarm.
|
57
|
-
@patch('swarm.
|
53
|
+
@patch('swarm.core.swarm_api.subprocess.run')
|
54
|
+
@patch('swarm.core.swarm_api.path.exists')
|
55
|
+
@patch('swarm.core.swarm_api.path.expanduser')
|
56
|
+
@patch('swarm.core.swarm_api.makedirs')
|
58
57
|
@patch('builtins.open', new_callable=mock_open) # Mock open for config file
|
59
58
|
def test_swarm_api_custom_port_and_config_creation(
|
60
59
|
mock_file_open, mock_makedirs, mock_expanduser, mock_exists, mock_subprocess_run
|
@@ -82,9 +81,9 @@ def test_swarm_api_custom_port_and_config_creation(
|
|
82
81
|
mock_file_open().write.assert_called_once_with("{}")
|
83
82
|
|
84
83
|
|
85
|
-
@patch('swarm.
|
86
|
-
@patch('swarm.
|
87
|
-
@patch('swarm.
|
84
|
+
@patch('swarm.core.swarm_api.subprocess.Popen')
|
85
|
+
@patch('swarm.core.swarm_api.path.exists')
|
86
|
+
@patch('swarm.core.swarm_api.path.expanduser')
|
88
87
|
def test_swarm_api_daemon_mode(mock_expanduser, mock_exists, mock_subprocess_popen):
|
89
88
|
"""Test daemon mode uses Popen."""
|
90
89
|
# --- Mock Setup ---
|
@@ -108,9 +107,9 @@ def test_swarm_api_daemon_mode(mock_expanduser, mock_exists, mock_subprocess_pop
|
|
108
107
|
mock_subprocess_popen.assert_has_calls([expected_popen_call])
|
109
108
|
|
110
109
|
|
111
|
-
@patch('swarm.
|
112
|
-
@patch('swarm.
|
113
|
-
@patch('swarm.
|
110
|
+
@patch('swarm.core.swarm_api.subprocess.run')
|
111
|
+
@patch('swarm.core.swarm_api.path.exists')
|
112
|
+
@patch('swarm.core.swarm_api.path.expanduser')
|
114
113
|
def test_swarm_api_blueprint_not_found(mock_expanduser, mock_exists, mock_subprocess_run):
|
115
114
|
"""Test script exits if blueprint is not found."""
|
116
115
|
# --- Mock Setup ---
|
@@ -128,4 +127,3 @@ def test_swarm_api_blueprint_not_found(mock_expanduser, mock_exists, mock_subpro
|
|
128
127
|
|
129
128
|
# Ensure runserver was NOT called
|
130
129
|
mock_subprocess_run.assert_not_called()
|
131
|
-
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/tests/unit/test_blueprint_base_config.py
RENAMED
@@ -5,10 +5,13 @@ import os
|
|
5
5
|
from django.apps import apps # Import apps registry
|
6
6
|
|
7
7
|
# Assuming BlueprintBase is correctly importable now
|
8
|
-
from swarm.
|
8
|
+
from swarm.core.blueprint_base import BlueprintBase
|
9
9
|
|
10
10
|
# A minimal concrete implementation for testing
|
11
11
|
class _TestableBlueprint(BlueprintBase):
|
12
|
+
def __init__(self, blueprint_id, config=None):
|
13
|
+
super().__init__(blueprint_id, config=config)
|
14
|
+
|
12
15
|
async def run(self, messages, **kwargs):
|
13
16
|
# Minimal async generator implementation - must contain yield
|
14
17
|
if False: # Never actually yields in this test context
|
@@ -43,7 +46,12 @@ class TestBlueprintBaseConfigLoading:
|
|
43
46
|
def test_init_does_not_raise(self):
|
44
47
|
"""Test that basic initialization with mocked config works."""
|
45
48
|
try:
|
46
|
-
|
49
|
+
config = {
|
50
|
+
"llm": {"default": {"provider": "mock"}},
|
51
|
+
"settings": {"default_markdown_output": True, "default_llm_profile": "default"},
|
52
|
+
"blueprints": {}
|
53
|
+
}
|
54
|
+
blueprint = _TestableBlueprint(blueprint_id="test_init", config=config)
|
47
55
|
assert blueprint.blueprint_id == "test_init"
|
48
56
|
assert blueprint.llm_profile_name == "default"
|
49
57
|
assert blueprint.llm_profile["provider"] == "mock"
|
@@ -53,40 +61,38 @@ class TestBlueprintBaseConfigLoading:
|
|
53
61
|
|
54
62
|
def test_markdown_setting_priority(self, mock_app_config_instance): # Use the fixture
|
55
63
|
"""Test markdown setting priority: blueprint > global."""
|
56
|
-
|
57
64
|
# --- Test Case 1: Global True, Blueprint unspecified -> True ---
|
58
|
-
|
65
|
+
config1 = {
|
59
66
|
"llm": {"default": {"provider": "mock"}},
|
60
67
|
"settings": {"default_markdown_output": True, "default_llm_profile": "default"},
|
61
68
|
"blueprints": {}
|
62
69
|
}
|
63
|
-
blueprint1 = _TestableBlueprint(blueprint_id="bp1")
|
70
|
+
blueprint1 = _TestableBlueprint(blueprint_id="bp1", config=config1)
|
64
71
|
assert blueprint1.should_output_markdown is True, "Should default to global True"
|
65
72
|
|
66
73
|
# --- Test Case 2: Global False, Blueprint unspecified -> False ---
|
67
|
-
|
74
|
+
config2 = {
|
68
75
|
"llm": {"default": {"provider": "mock"}},
|
69
76
|
"settings": {"default_markdown_output": False, "default_llm_profile": "default"},
|
70
77
|
"blueprints": {}
|
71
78
|
}
|
72
|
-
blueprint2 = _TestableBlueprint(blueprint_id="bp2")
|
79
|
+
blueprint2 = _TestableBlueprint(blueprint_id="bp2", config=config2)
|
73
80
|
assert blueprint2.should_output_markdown is False, "Should default to global False"
|
74
81
|
|
75
|
-
# --- Test Case 3:
|
76
|
-
|
82
|
+
# --- Test Case 3: Blueprint overrides global (True) ---
|
83
|
+
config3 = {
|
77
84
|
"llm": {"default": {"provider": "mock"}},
|
78
|
-
"settings": {"default_markdown_output":
|
79
|
-
"blueprints": {"bp3": {"
|
85
|
+
"settings": {"default_markdown_output": False, "default_llm_profile": "default"},
|
86
|
+
"blueprints": {"bp3": {"output_markdown": True}}
|
80
87
|
}
|
81
|
-
blueprint3 = _TestableBlueprint(blueprint_id="bp3")
|
82
|
-
assert blueprint3.should_output_markdown is
|
88
|
+
blueprint3 = _TestableBlueprint(blueprint_id="bp3", config=config3)
|
89
|
+
assert blueprint3.should_output_markdown is True, "Blueprint setting (True) should override global (False)"
|
83
90
|
|
84
|
-
# --- Test Case 4:
|
85
|
-
|
91
|
+
# --- Test Case 4: Blueprint overrides global (False) ---
|
92
|
+
config4 = {
|
86
93
|
"llm": {"default": {"provider": "mock"}},
|
87
|
-
"settings": {"default_markdown_output":
|
88
|
-
"blueprints": {"bp4": {"
|
94
|
+
"settings": {"default_markdown_output": True, "default_llm_profile": "default"},
|
95
|
+
"blueprints": {"bp4": {"output_markdown": False}}
|
89
96
|
}
|
90
|
-
blueprint4 = _TestableBlueprint(blueprint_id="bp4")
|
91
|
-
assert blueprint4.should_output_markdown is
|
92
|
-
|
97
|
+
blueprint4 = _TestableBlueprint(blueprint_id="bp4", config=config4)
|
98
|
+
assert blueprint4.should_output_markdown is False, "Blueprint setting (False) should override global (True)"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/divine_code/__init__.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/divine_code/apps.py
RENAMED
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/apps.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/urls.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/django_chat/views.py
RENAMED
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/apps.py
RENAMED
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/models.py
RENAMED
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/settings.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/urls.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/family_ties/views.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/flock/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/blueprints/rue_code/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/blueprint/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/__init__.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/blueprint_runner.py
RENAMED
File without changes
|
{open_swarm-0.1.1744942852 → open_swarm-0.1.1744942884}/src/swarm/extensions/cli/cli_args.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|