open-swarm 0.1.1744942852__tar.gz → 0.1.1744943015__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.1744943015}/PKG-INFO +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/pyproject.toml +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/django_chat/blueprint_django_chat.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/blueprint_family_ties.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +30 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +29 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +28 -18
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/rue_code/blueprint_rue_code.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/unapologetic_press/blueprint_unapologetic_press.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/blueprint_management.py +3 -3
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/config_management.py +5 -6
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/edit_config.py +8 -6
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/list_blueprints.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/validate_env.py +3 -3
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/validate_envvars.py +6 -6
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/core_views.py +4 -6
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/utils.py +1 -1
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/web_views.py +2 -2
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_mcp_demo.py +31 -27
- open_swarm-0.1.1744943015/tests/cli/test_cli_config.py +108 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/cli/test_launchers.py +3 -4
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/extensions/launchers/test_swarm_api_launcher.py +17 -19
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/unit/test_blueprint_base_config.py +26 -20
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/.gitignore +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/LICENSE +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/README.md +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/agent/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/auth.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/README.md +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/codey/blueprint_codey.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/divine_code/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/divine_code/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/django_chat/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/django_chat/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/django_chat/views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/serializers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/settings.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/family_ties/views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/flock/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/gaggle/blueprint_gaggle.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/rue_code/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/consumers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/cli_handler.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/django_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/cli_args.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/commands/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/interactive_shell.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/main.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/selection.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/cli/utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/config/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/config/config_loader.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/extensions/launchers/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/llm/chat_completion.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/management/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/management/commands/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/management/commands/runserver.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/middleware.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/migrations/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/models.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/permissions.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/repl/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/repl/repl.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/serializers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/settings.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/css/dropdown.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/htmx/htmx.min.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/js/dropdown.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/base.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/chat.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/general.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/messages.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/messenger.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/settings.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/simple.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/slack.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/style.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/theme.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/css/toast.css +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/auth.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/debug.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/events.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/main.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/messages.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/rendering.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/settings.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/splash.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/theme.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/toast.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/ui.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/js/validation.js +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/close.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/save.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/search.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/account/login.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/account/signup.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/base.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/chat.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/index.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/header.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/message_ui.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/rest_mode/slackbot.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/simple_blueprint_page.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/websocket_partials/system_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/templates/websocket_partials/user_message.html +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/tool_executor.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/urls.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/util.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/color_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/context_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/general_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/log_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/logger.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/logger_setup.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/message_sequence.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/message_utils.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/utils/redact.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/api_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/chat_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/message_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/views/model_views.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/src/swarm/wsgi.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/__init__.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/api/conftest.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/api/test_chat_completions_auth_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/api/test_chat_completions_failing_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/api/test_chat_completions_validation_async.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_chatbot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_digitalbutlers.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_dilbot_universe.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_divine_code.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_echocraft.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_family_ties.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_gaggle.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_gotchaman.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_mission_improbable.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_monkai_magic.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_nebula_shellz.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_omniplex.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_suggestion.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_unapologetic_press.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/blueprints/test_whiskeytangofoxtrot.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/cli/test_list_blueprints.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/conftest.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/swarm_config.json +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_chucks_angels.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_digitalbutlers.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_dilbot_universe.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_divine_code.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_django_chat.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_echocraft.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_family_ties.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_flock.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_gaggle.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_gotchaman.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_monkai-magic.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_nebula_shellz.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_omniplex.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_rue-code.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_suggestion.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_unapologetic_press.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_university.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_blueprint_loading.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_cli_mode_selection.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_core_filter_duplicate_system_messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_core_filter_messages.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_core_truncate_message_history.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_core_update_null_content.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_dummy.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/tests/test_truncate_message_history.py +0 -0
- {open_swarm-0.1.1744942852 → open_swarm-0.1.1744943015}/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.1744943015
|
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
|
@@ -16,7 +16,7 @@ try:
|
|
16
16
|
from agents.models.interface import Model
|
17
17
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
18
18
|
from openai import AsyncOpenAI
|
19
|
-
from swarm.
|
19
|
+
from swarm.core.blueprint_base import BlueprintBase
|
20
20
|
except ImportError as e:
|
21
21
|
print(f"ERROR: Import failed in DigitalButlersBlueprint: {e}. Check 'openai-agents' install and project structure.")
|
22
22
|
print(f"Attempted import from directory: {os.path.dirname(__file__)}")
|
@@ -16,7 +16,7 @@ try:
|
|
16
16
|
from agents.models.interface import Model
|
17
17
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
18
18
|
from openai import AsyncOpenAI
|
19
|
-
from swarm.
|
19
|
+
from swarm.core.blueprint_base import BlueprintBase
|
20
20
|
except ImportError as e:
|
21
21
|
print(f"ERROR: Import failed in DivineOpsBlueprint: {e}. Check 'openai-agents' install and project structure.")
|
22
22
|
print(f"sys.path: {sys.path}")
|
@@ -44,7 +44,7 @@ from django.contrib.auth.decorators import login_required
|
|
44
44
|
from django.views.decorators.csrf import csrf_exempt
|
45
45
|
from django.contrib.auth.models import User
|
46
46
|
from swarm.models import ChatConversation, ChatMessage
|
47
|
-
from swarm.
|
47
|
+
from swarm.core.blueprint_base import BlueprintBase as Blueprint
|
48
48
|
from swarm.utils.logger_setup import setup_logger
|
49
49
|
|
50
50
|
logger = setup_logger(__name__)
|
@@ -6,7 +6,7 @@ from typing import List, Dict, Any, AsyncGenerator
|
|
6
6
|
import uuid # Import uuid to generate IDs
|
7
7
|
import time # Import time for timestamp
|
8
8
|
|
9
|
-
from swarm.
|
9
|
+
from swarm.core.blueprint_base import BlueprintBase
|
10
10
|
|
11
11
|
logger = logging.getLogger(__name__)
|
12
12
|
|
@@ -16,7 +16,7 @@ try:
|
|
16
16
|
from agents.models.interface import Model
|
17
17
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
18
18
|
from openai import AsyncOpenAI
|
19
|
-
from swarm.
|
19
|
+
from swarm.core.blueprint_base import BlueprintBase
|
20
20
|
except ImportError as e:
|
21
21
|
print(f"ERROR: Import failed in FamilyTiesBlueprint: {e}. Check dependencies.")
|
22
22
|
print(f"sys.path: {sys.path}")
|
@@ -14,7 +14,7 @@ try:
|
|
14
14
|
from agents.models.interface import Model
|
15
15
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
16
16
|
from openai import AsyncOpenAI
|
17
|
-
from swarm.
|
17
|
+
from swarm.core.blueprint_base import BlueprintBase
|
18
18
|
except ImportError as e:
|
19
19
|
print(f"ERROR: Import failed in MCPDemoBlueprint: {e}. Check dependencies.")
|
20
20
|
print(f"sys.path: {sys.path}")
|
@@ -128,6 +128,35 @@ class MCPDemoBlueprint(BlueprintBase):
|
|
128
128
|
logger.debug("Sage agent created.")
|
129
129
|
return sage_agent
|
130
130
|
|
131
|
+
async def run(self, messages: List[dict], **kwargs):
|
132
|
+
"""Main execution entry point for the MCP Demo blueprint."""
|
133
|
+
logger.info("MCPDemoBlueprint run method called.")
|
134
|
+
instruction = messages[-1].get("content", "") if messages else ""
|
135
|
+
try:
|
136
|
+
mcp_servers = kwargs.get("mcp_servers", [])
|
137
|
+
starting_agent = self.create_starting_agent(mcp_servers=mcp_servers)
|
138
|
+
from agents import Runner
|
139
|
+
if not starting_agent.model:
|
140
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: No model instance available for MCPDemo agent. Check your OPENAI_API_KEY, or LITELLM_MODEL/LITELLM_BASE_URL config."}]}
|
141
|
+
return
|
142
|
+
if not starting_agent.tools:
|
143
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: No tools registered for MCPDemo agent. Only direct LLM output is possible."}]}
|
144
|
+
required_mcps = self.metadata.get('required_mcp_servers', [])
|
145
|
+
missing_mcps = [m for m in required_mcps if m not in [s.name for s in mcp_servers]]
|
146
|
+
if missing_mcps:
|
147
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: Missing required MCP servers: {', '.join(missing_mcps)}. Some features may not work."}]}
|
148
|
+
from rich.console import Console
|
149
|
+
console = Console()
|
150
|
+
with console.status("Generating...", spinner="dots") as status:
|
151
|
+
async for chunk in Runner.run(starting_agent, instruction):
|
152
|
+
content = chunk.get("content")
|
153
|
+
if content and ("function call" in content or "args" in content):
|
154
|
+
continue
|
155
|
+
yield chunk
|
156
|
+
logger.info("MCPDemoBlueprint run method finished.")
|
157
|
+
except Exception as e:
|
158
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: {e}"}]}
|
159
|
+
|
131
160
|
# Standard Python entry point
|
132
161
|
if __name__ == "__main__":
|
133
162
|
MCPDemoBlueprint.main()
|
@@ -17,7 +17,7 @@ try:
|
|
17
17
|
from agents.models.interface import Model
|
18
18
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
19
19
|
from openai import AsyncOpenAI
|
20
|
-
from swarm.
|
20
|
+
from swarm.core.blueprint_base import BlueprintBase
|
21
21
|
except ImportError as e:
|
22
22
|
print(f"ERROR: Import failed in MissionImprobableBlueprint: {e}. Check dependencies.")
|
23
23
|
print(f"sys.path: {sys.path}")
|
@@ -29,7 +29,7 @@ try:
|
|
29
29
|
from agents.models.interface import Model
|
30
30
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
31
31
|
from openai import AsyncOpenAI
|
32
|
-
from swarm.
|
32
|
+
from swarm.core.blueprint_base import BlueprintBase
|
33
33
|
except ImportError as e:
|
34
34
|
print(f"ERROR: Import failed in MonkaiMagicBlueprint: {e}. Check dependencies.")
|
35
35
|
print(f"sys.path: {sys.path}")
|
@@ -13,7 +13,7 @@ try:
|
|
13
13
|
from agents.models.interface import Model
|
14
14
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
15
15
|
from openai import AsyncOpenAI
|
16
|
-
from swarm.
|
16
|
+
from swarm.core.blueprint_base import BlueprintBase
|
17
17
|
from rich.panel import Panel # Import Panel for splash screen
|
18
18
|
except ImportError as e:
|
19
19
|
print(f"ERROR: Import failed in nebula_shellz: {e}. Ensure 'openai-agents' install and structure.")
|
@@ -170,5 +170,33 @@ Initializing NebulaShellzzar Crew...
|
|
170
170
|
logger.debug("NebulaShellzzar agent team created. Morpheus is the starting agent.") # Changed to DEBUG
|
171
171
|
return morpheus
|
172
172
|
|
173
|
+
async def run(self, messages: List[dict], **kwargs):
|
174
|
+
logger.info("NebuchaShellzzarBlueprint run method called.")
|
175
|
+
instruction = messages[-1].get("content", "") if messages else ""
|
176
|
+
try:
|
177
|
+
mcp_servers = kwargs.get("mcp_servers", [])
|
178
|
+
starting_agent = self.create_starting_agent(mcp_servers=mcp_servers)
|
179
|
+
from agents import Runner
|
180
|
+
if not starting_agent.model:
|
181
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: No model instance available for NebuchaShellzzar agent. Check your OPENAI_API_KEY, or LITELLM_MODEL/LITELLM_BASE_URL config."}]}
|
182
|
+
return
|
183
|
+
if not starting_agent.tools:
|
184
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: No tools registered for NebuchaShellzzar agent. Only direct LLM output is possible."}]}
|
185
|
+
required_mcps = self.metadata.get('required_mcp_servers', [])
|
186
|
+
missing_mcps = [m for m in required_mcps if m not in [s.name for s in mcp_servers]]
|
187
|
+
if missing_mcps:
|
188
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: Missing required MCP servers: {', '.join(missing_mcps)}. Some features may not work."}]}
|
189
|
+
from rich.console import Console
|
190
|
+
console = Console()
|
191
|
+
with console.status("Generating...", spinner="dots") as status:
|
192
|
+
async for chunk in Runner.run(starting_agent, instruction):
|
193
|
+
content = chunk.get("content")
|
194
|
+
if content and ("function call" in content or "args" in content):
|
195
|
+
continue
|
196
|
+
yield chunk
|
197
|
+
logger.info("NebuchaShellzzarBlueprint run method finished.")
|
198
|
+
except Exception as e:
|
199
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: {e}"}]}
|
200
|
+
|
173
201
|
if __name__ == "__main__":
|
174
202
|
NebuchaShellzzarBlueprint.main()
|
@@ -14,7 +14,7 @@ try:
|
|
14
14
|
from agents.models.interface import Model
|
15
15
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
16
16
|
from openai import AsyncOpenAI
|
17
|
-
from swarm.
|
17
|
+
from swarm.core.blueprint_base import BlueprintBase
|
18
18
|
except ImportError as e:
|
19
19
|
print(f"ERROR: Import failed in OmniplexBlueprint: {e}. Check dependencies.")
|
20
20
|
print(f"sys.path: {sys.path}")
|
@@ -216,26 +216,36 @@ class OmniplexBlueprint(BlueprintBase):
|
|
216
216
|
logger.info(f"Omniplex Coordinator created with tools for: {[t.name for t in team_tools]}")
|
217
217
|
return coordinator_agent
|
218
218
|
|
219
|
-
async def run(self, messages:
|
220
|
-
|
221
|
-
|
219
|
+
async def run(self, messages: list, **kwargs):
|
220
|
+
import logging
|
221
|
+
if not hasattr(self, "logger"):
|
222
|
+
self.logger = logging.getLogger(__name__)
|
223
|
+
self.logger.info("OmniplexBlueprint run method called.")
|
222
224
|
instruction = messages[-1].get("content", "") if messages else ""
|
223
|
-
async for chunk in self._run_non_interactive(instruction, **kwargs):
|
224
|
-
yield chunk
|
225
|
-
logger.info("OmniplexBlueprint run method finished.")
|
226
|
-
|
227
|
-
async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
|
228
|
-
logger.info(f"Running OmniplexBlueprint non-interactively with instruction: '{instruction[:100]}...'")
|
229
|
-
mcp_servers = kwargs.get("mcp_servers", [])
|
230
|
-
agent = self.create_starting_agent(mcp_servers=mcp_servers)
|
231
|
-
from agents import Runner
|
232
|
-
model_name = os.getenv("LITELLM_MODEL") or os.getenv("DEFAULT_LLM") or "gpt-3.5-turbo"
|
233
225
|
try:
|
234
|
-
|
235
|
-
|
226
|
+
mcp_servers = kwargs.get("mcp_servers", [])
|
227
|
+
agent = self.create_starting_agent(mcp_servers=mcp_servers)
|
228
|
+
from agents import Runner
|
229
|
+
if not agent.model:
|
230
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: No model instance available for Omniplex agent. Check your OPENAI_API_KEY, or LITELLM_MODEL/LITELLM_BASE_URL config."}]}
|
231
|
+
return
|
232
|
+
if not agent.tools:
|
233
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: No tools registered for Omniplex agent. Only direct LLM output is possible."}]}
|
234
|
+
required_mcps = self.metadata.get('required_mcp_servers', [])
|
235
|
+
missing_mcps = [m for m in required_mcps if m not in [s.name for s in mcp_servers]]
|
236
|
+
if missing_mcps:
|
237
|
+
yield {"messages": [{"role": "assistant", "content": f"Warning: Missing required MCP servers: {', '.join(missing_mcps)}. Some features may not work."}]}
|
238
|
+
from rich.console import Console
|
239
|
+
console = Console()
|
240
|
+
with console.status("Generating...", spinner="dots") as status:
|
241
|
+
async for chunk in Runner.run(agent, instruction):
|
242
|
+
content = chunk.get("content")
|
243
|
+
if content and ("function call" in content or "args" in content):
|
244
|
+
continue
|
245
|
+
yield chunk
|
246
|
+
self.logger.info("OmniplexBlueprint run method finished.")
|
236
247
|
except Exception as e:
|
237
|
-
|
238
|
-
yield {"messages": [{"role": "assistant", "content": f"An error occurred: {e}"}]}
|
248
|
+
yield {"messages": [{"role": "assistant", "content": f"Error: {e}"}]}
|
239
249
|
|
240
250
|
# Standard Python entry point
|
241
251
|
if __name__ == "__main__":
|
@@ -13,7 +13,7 @@ logger = logging.getLogger(__name__)
|
|
13
13
|
|
14
14
|
# Attempt to import BlueprintBase, handle potential ImportError during early setup/testing
|
15
15
|
try:
|
16
|
-
from swarm.
|
16
|
+
from swarm.core.blueprint_base import BlueprintBase
|
17
17
|
except ImportError as e:
|
18
18
|
logger.error(f"Import failed: {e}. Check 'openai-agents' install and project structure.")
|
19
19
|
# *** REMOVED sys.exit(1) ***
|
@@ -14,7 +14,7 @@ try:
|
|
14
14
|
from agents.models.interface import Model
|
15
15
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
16
16
|
from openai import AsyncOpenAI
|
17
|
-
from swarm.
|
17
|
+
from swarm.core.blueprint_base import BlueprintBase
|
18
18
|
except ImportError as e:
|
19
19
|
print(f"ERROR: Failed to import 'agents' or 'BlueprintBase'. Is 'openai-agents' installed and src in PYTHONPATH? Details: {e}")
|
20
20
|
sys.exit(1)
|
@@ -18,7 +18,7 @@ try:
|
|
18
18
|
from agents.models.interface import Model
|
19
19
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
20
20
|
from openai import AsyncOpenAI
|
21
|
-
from swarm.
|
21
|
+
from swarm.core.blueprint_base import BlueprintBase
|
22
22
|
except ImportError as e:
|
23
23
|
print(f"ERROR: Import failed in UnapologeticPressBlueprint: {e}. Check dependencies.")
|
24
24
|
print(f"sys.path: {sys.path}")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Handles blueprint discovery and validation for the CLI
|
2
2
|
|
3
|
-
from swarm.
|
4
|
-
from swarm.
|
3
|
+
from swarm.core.blueprint_discovery import discover_blueprints
|
4
|
+
from swarm.core.config_loader import load_server_config
|
5
5
|
|
6
6
|
def list_blueprints():
|
7
7
|
"""List available blueprints and their metadata."""
|
@@ -16,7 +16,7 @@ def list_blueprints():
|
|
16
16
|
cat > src/swarm/extensions/cli/commands/config_management.py << 'EOF'
|
17
17
|
# Handles configuration management workflows (e.g., LLM, MCP servers)
|
18
18
|
|
19
|
-
from swarm.
|
19
|
+
from swarm.core.config_loader import (
|
20
20
|
load_server_config,
|
21
21
|
save_server_config,
|
22
22
|
)
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# Handles configuration management workflows (e.g., LLM, MCP servers)
|
2
2
|
|
3
|
-
from swarm.
|
4
|
-
|
5
|
-
|
6
|
-
)
|
3
|
+
from swarm.core import config_loader
|
4
|
+
from swarm.core import config_manager
|
5
|
+
from swarm.core import server_config
|
7
6
|
|
8
7
|
def add_llm(model_name, api_key):
|
9
8
|
"""Add a new LLM configuration."""
|
10
|
-
config = load_server_config()
|
9
|
+
config = config_loader.load_server_config()
|
11
10
|
if "llms" not in config:
|
12
11
|
config["llms"] = {}
|
13
12
|
config["llms"][model_name] = {"api_key": api_key}
|
14
|
-
save_server_config(config)
|
13
|
+
config_manager.save_server_config(config)
|
15
14
|
print(f"Added LLM '{model_name}' to configuration.")
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import argparse
|
2
2
|
import json
|
3
|
-
from swarm.
|
4
|
-
|
5
|
-
|
3
|
+
from swarm.core import (
|
4
|
+
config_loader,
|
5
|
+
config_manager,
|
6
|
+
server_config,
|
7
|
+
setup_wizard,
|
6
8
|
)
|
7
9
|
from pathlib import Path
|
8
10
|
|
@@ -60,7 +62,7 @@ def main():
|
|
60
62
|
args = parser.parse_args()
|
61
63
|
|
62
64
|
try:
|
63
|
-
config = load_server_config(str(CONFIG_PATH))
|
65
|
+
config = config_loader.load_server_config(str(CONFIG_PATH))
|
64
66
|
except FileNotFoundError as e:
|
65
67
|
print(f"Error: {e}")
|
66
68
|
return
|
@@ -69,9 +71,9 @@ def main():
|
|
69
71
|
list_config(config)
|
70
72
|
elif args.interactive:
|
71
73
|
edit_config_interactive(config)
|
72
|
-
save_server_config(str(CONFIG_PATH), config)
|
74
|
+
config_loader.save_server_config(str(CONFIG_PATH), config)
|
73
75
|
elif args.field and args.value:
|
74
76
|
edit_config_field(config, args.field, args.value)
|
75
|
-
save_server_config(str(CONFIG_PATH), config)
|
77
|
+
config_loader.save_server_config(str(CONFIG_PATH), config)
|
76
78
|
else:
|
77
79
|
parser.print_help()
|
@@ -4,7 +4,7 @@ Description: Lists all blueprints available in the system.
|
|
4
4
|
"""
|
5
5
|
|
6
6
|
from pathlib import Path
|
7
|
-
from swarm.
|
7
|
+
from swarm.core.blueprint_discovery import discover_blueprints
|
8
8
|
|
9
9
|
# Metadata for dynamic registration
|
10
10
|
description = "Lists all blueprints available in the system."
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import os
|
2
2
|
import argparse
|
3
|
-
from swarm.
|
4
|
-
from swarm.
|
3
|
+
from swarm.core import config_loader, config_manager, server_config
|
4
|
+
from swarm.core.blueprint_base import BlueprintBase
|
5
5
|
|
6
6
|
CONFIG_PATH = "swarm_config.json"
|
7
7
|
|
@@ -43,7 +43,7 @@ def main():
|
|
43
43
|
args = parser.parse_args()
|
44
44
|
|
45
45
|
try:
|
46
|
-
config = load_server_config(CONFIG_PATH)
|
46
|
+
config = server_config.load_server_config(CONFIG_PATH)
|
47
47
|
except FileNotFoundError as e:
|
48
48
|
print(f"Error: {e}")
|
49
49
|
return
|
@@ -1,5 +1,5 @@
|
|
1
|
-
from swarm.
|
2
|
-
from swarm.
|
1
|
+
from swarm.core.blueprint_discovery import discover_blueprints
|
2
|
+
from swarm.core import config_loader, config_manager, server_config
|
3
3
|
import argparse
|
4
4
|
|
5
5
|
def validate_envvars(blueprint_name=None):
|
@@ -19,16 +19,16 @@ def validate_envvars(blueprint_name=None):
|
|
19
19
|
print(f"Blueprint '{blueprint_name}' not found.")
|
20
20
|
return
|
21
21
|
required_vars = blueprint.get("env_vars", [])
|
22
|
-
env_vars = load_env_config()
|
23
|
-
validation = validate_env_vars(env_vars, required_vars)
|
22
|
+
env_vars = config_loader.load_env_config()
|
23
|
+
validation = config_manager.validate_env_vars(env_vars, required_vars)
|
24
24
|
print(f"Validation for '{blueprint_name}': {validation}")
|
25
25
|
else:
|
26
26
|
# Global validation
|
27
|
-
env_vars = load_env_config()
|
27
|
+
env_vars = config_loader.load_env_config()
|
28
28
|
print("Global Environment Validation:")
|
29
29
|
for blueprint_name, blueprint_data in blueprints.items():
|
30
30
|
required_vars = blueprint_data.get("env_vars", [])
|
31
|
-
validation = validate_env_vars(env_vars, required_vars)
|
31
|
+
validation = config_manager.validate_env_vars(env_vars, required_vars)
|
32
32
|
print(f"Validation for '{blueprint_name}': {validation}")
|
33
33
|
|
34
34
|
def main():
|
@@ -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():
|