open-swarm 0.1.1745019399__tar.gz → 0.1.1745019957__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.1745019399 → open_swarm-0.1.1745019957}/PKG-INFO +29 -1
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/README.md +28 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/pyproject.toml +1 -1
- open_swarm-0.1.1745019957/src/swarm/blueprints/blueprint_audit_status.json +27 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +79 -22
- open_swarm-0.1.1745019957/src/swarm/blueprints/codey/CODEY.md +15 -0
- open_swarm-0.1.1745019957/src/swarm/blueprints/codey/README.md +63 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/codey/blueprint_codey.py +179 -108
- open_swarm-0.1.1745019957/src/swarm/blueprints/codey/instructions.md +17 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +113 -7
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/blueprint_django_chat.py +47 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/blueprint_family_ties.py +43 -10
- open_swarm-0.1.1745019957/src/swarm/blueprints/geese/blueprint_geese.py +219 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +120 -63
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +45 -1
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +43 -27
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +44 -31
- open_swarm-0.1.1745019957/src/swarm/blueprints/rue_code/blueprint_rue_code.py +294 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +8 -17
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/unapologetic_press/blueprint_unapologetic_press.py +100 -1
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +52 -28
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_ux.py +19 -21
- open_swarm-0.1.1745019957/src/swarm/core/cli/__init__.py +1 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/commands/__init__.py +1 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/commands/blueprint_management.py +7 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/interactive_shell.py +14 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/main.py +50 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/utils/__init__.py +1 -0
- open_swarm-0.1.1745019957/src/swarm/core/cli/utils/discover_commands.py +18 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/cli_handler.py +20 -2
- open_swarm-0.1.1745019957/src/swarm/extensions/cli/commands/blueprint_management.py +69 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/edit_config.py +8 -1
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/validate_env.py +8 -1
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/interactive_shell.py +16 -2
- open_swarm-0.1.1745019957/src/swarm/extensions/cli/utils/__init__.py +1 -0
- open_swarm-0.1.1745019957/src/swarm/extensions/cli/utils/prompt_user.py +3 -0
- open_swarm-0.1.1745019957/src/swarm/extensions/launchers/swarm_api.py +12 -0
- open_swarm-0.1.1745019957/src/swarm/extensions/launchers/swarm_cli.py +12 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/context_utils.py +10 -4
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_chatbot.py +13 -16
- open_swarm-0.1.1745019957/tests/blueprints/test_codey.py +29 -0
- open_swarm-0.1.1745019957/tests/blueprints/test_codey_approval_mode.py +53 -0
- open_swarm-0.1.1745019957/tests/blueprints/test_codey_github.py +25 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_divine_code.py +2 -3
- open_swarm-0.1.1745019957/tests/blueprints/test_geese.py +58 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_mission_improbable.py +9 -5
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_whiskeytangofoxtrot.py +5 -5
- open_swarm-0.1.1745019957/tests/integration/test_cli_commands.py +47 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_truncate_message_history.py +0 -1
- open_swarm-0.1.1745019957/tests/unit/test_output_utils.py +31 -0
- open_swarm-0.1.1745019957/tests/unit/test_slash_commands.py +22 -0
- open_swarm-0.1.1745019399/src/swarm/blueprints/gaggle/blueprint_gaggle.py +0 -303
- open_swarm-0.1.1745019399/src/swarm/blueprints/rue_code/blueprint_rue_code.py +0 -294
- open_swarm-0.1.1745019399/src/swarm/extensions/cli/commands/blueprint_management.py +0 -31
- open_swarm-0.1.1745019399/src/swarm/llm/chat_completion.py +0 -196
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/.gitignore +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/LICENSE +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/agent/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/apps.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/auth.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/README.md +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/apps.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/apps.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/urls.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/apps.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/models.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/serializers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/settings.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/urls.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/flock/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/rue_code/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/consumers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/agent_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_base.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_discovery.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_runner.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/build_launchers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/build_swarm_wrapper.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/common_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/config_loader.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/config_manager.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/output_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/server_config.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/session_logger.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/setup_wizard.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/slash_commands.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/spinner.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_api.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_cli.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_wrapper.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/utils/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/utils/logger.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/django_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/cli_args.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/config_management.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/list_blueprints.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/validate_envvars.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/main.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/selection.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/config/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/config/config_loader.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/launchers/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/commands/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/commands/runserver.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/messages.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/middleware.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/migrations/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/models.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/permissions.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/repl/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/repl/repl.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/serializers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/settings.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/css/dropdown.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/htmx/htmx.min.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/js/dropdown.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/base.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chat.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/general.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layout.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/messages.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/messenger.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/settings.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/simple.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/slack.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/style.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/theme.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/toast.css +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/auth.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/debug.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/events.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/main.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/messages.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/rendering.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/settings.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/splash.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/theme.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/toast.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/ui.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/validation.js +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/close.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/save.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/search.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/account/login.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/account/signup.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/base.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/chat.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/index.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/header.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/message_ui.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/slackbot.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/simple_blueprint_page.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/system_message.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/user_message.html +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/tool_executor.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/urls.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/util.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/color_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/general_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/log_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/logger.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/logger_setup.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/message_sequence.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/message_utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/redact.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/api_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/chat_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/core_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/message_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/model_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/utils.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/web_views.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/wsgi.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/__init__.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/conftest.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_auth_async.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_failing_async.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_validation_async.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_digitalbutlers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_dilbot_universe.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_echocraft.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_family_ties.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_gaggle.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_gotchaman.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_mcp_demo.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_monkai_magic.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_nebula_shellz.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_omniplex.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_suggestion.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_unapologetic_press.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_cli_config.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_launchers.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_list_blueprints.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/conftest.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/extensions/launchers/test_swarm_api_launcher.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/swarm_config.json +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_chucks_angels.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_digitalbutlers.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_dilbot_universe.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_divine_code.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_django_chat.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_echocraft.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_family_ties.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_flock.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_gaggle.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_gotchaman.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_monkai-magic.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_nebula_shellz.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_omniplex.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_rue-code.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_suggestion.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_unapologetic_press.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_university.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_blueprint_loading.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_cli_mode_selection.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_filter_duplicate_system_messages.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_filter_messages.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_update_null_content.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_dummy.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_truncate_message_history.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/unit/blueprints/rue_code/test_rue_code_tools.py +0 -0
- {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/unit/test_blueprint_base_config.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.1745019957
|
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
|
@@ -329,6 +329,34 @@ remove_at_job(job_id)
|
|
329
329
|
|
330
330
|
---
|
331
331
|
|
332
|
+
## CLI Reference
|
333
|
+
|
334
|
+
### swarm-cli Usage
|
335
|
+
|
336
|
+
```shell
|
337
|
+
Usage: swarm-cli [OPTIONS] COMMAND [ARGS]...
|
338
|
+
|
339
|
+
Swarm CLI tool for managing blueprints.
|
340
|
+
|
341
|
+
Options:
|
342
|
+
--install-completion Install completion for the current shell.
|
343
|
+
--show-completion Show completion for the current shell, to copy it or customize the installation.
|
344
|
+
--help Show this message and exit.
|
345
|
+
|
346
|
+
Commands:
|
347
|
+
install Install a blueprint by creating a standalone executable using PyInstaller.
|
348
|
+
launch Launch a previously installed blueprint executable.
|
349
|
+
list Lists available blueprints (bundled and user-provided) and/or installed executables.
|
350
|
+
```
|
351
|
+
|
352
|
+
### swarm-api Usage
|
353
|
+
|
354
|
+
```shell
|
355
|
+
# (No standalone swarm-api binary was found in dist/; see Docker/API section below for usage.)
|
356
|
+
```
|
357
|
+
|
358
|
+
---
|
359
|
+
|
332
360
|
## Developer Notes
|
333
361
|
- System dependencies are mocked in tests for CI and portability.
|
334
362
|
- Any toolbox feature not listed as **Passing** above is considered **WIP** and may not be stable.
|
@@ -241,6 +241,34 @@ remove_at_job(job_id)
|
|
241
241
|
|
242
242
|
---
|
243
243
|
|
244
|
+
## CLI Reference
|
245
|
+
|
246
|
+
### swarm-cli Usage
|
247
|
+
|
248
|
+
```shell
|
249
|
+
Usage: swarm-cli [OPTIONS] COMMAND [ARGS]...
|
250
|
+
|
251
|
+
Swarm CLI tool for managing blueprints.
|
252
|
+
|
253
|
+
Options:
|
254
|
+
--install-completion Install completion for the current shell.
|
255
|
+
--show-completion Show completion for the current shell, to copy it or customize the installation.
|
256
|
+
--help Show this message and exit.
|
257
|
+
|
258
|
+
Commands:
|
259
|
+
install Install a blueprint by creating a standalone executable using PyInstaller.
|
260
|
+
launch Launch a previously installed blueprint executable.
|
261
|
+
list Lists available blueprints (bundled and user-provided) and/or installed executables.
|
262
|
+
```
|
263
|
+
|
264
|
+
### swarm-api Usage
|
265
|
+
|
266
|
+
```shell
|
267
|
+
# (No standalone swarm-api binary was found in dist/; see Docker/API section below for usage.)
|
268
|
+
```
|
269
|
+
|
270
|
+
---
|
271
|
+
|
244
272
|
## Developer Notes
|
245
273
|
- System dependencies are mocked in tests for CI and portability.
|
246
274
|
- Any toolbox feature not listed as **Passing** above is considered **WIP** and may not be stable.
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"blueprints": [
|
3
|
+
{"name": "echocraft", "status": "working", "notes": "LLM-style response, demo logic confirmed"},
|
4
|
+
{"name": "rue_code", "status": "working", "notes": "LLM-style response, demo logic confirmed"},
|
5
|
+
{"name": "suggestion", "status": "working", "notes": "LLM-style response, demo logic confirmed"},
|
6
|
+
{"name": "mcp_demo", "status": "working", "notes": "LLM-style response, demo logic confirmed"},
|
7
|
+
{"name": "chatbot", "status": "working", "notes": "LLM-style response, import patch applied"},
|
8
|
+
{"name": "chucks_angels", "status": "unknown", "notes": "Needs audit"},
|
9
|
+
{"name": "codey", "status": "unknown", "notes": "Needs audit"},
|
10
|
+
{"name": "digitalbutlers", "status": "unknown", "notes": "Needs audit"},
|
11
|
+
{"name": "dilbot", "status": "unknown", "notes": "Needs audit"},
|
12
|
+
{"name": "divine_code", "status": "unknown", "notes": "Needs audit"},
|
13
|
+
{"name": "django_chat", "status": "unknown", "notes": "Needs audit"},
|
14
|
+
{"name": "family_ties", "status": "unknown", "notes": "Needs audit"},
|
15
|
+
{"name": "flock", "status": "unknown", "notes": "Needs audit"},
|
16
|
+
{"name": "gaggle", "status": "unknown", "notes": "Needs audit"},
|
17
|
+
{"name": "gatcha", "status": "unknown", "notes": "Needs audit"},
|
18
|
+
{"name": "messenger", "status": "unknown", "notes": "Needs audit"},
|
19
|
+
{"name": "mission_improbable", "status": "unknown", "notes": "Needs audit"},
|
20
|
+
{"name": "monkai_magic", "status": "unknown", "notes": "Needs audit"},
|
21
|
+
{"name": "nebula_shellz", "status": "unknown", "notes": "Needs audit"},
|
22
|
+
{"name": "omniplex", "status": "unknown", "notes": "Needs audit"},
|
23
|
+
{"name": "shell_demo", "status": "unknown", "notes": "Needs audit"},
|
24
|
+
{"name": "unapologetic_press", "status": "unknown", "notes": "Needs audit"},
|
25
|
+
{"name": "whiskeytango_foxtrot", "status": "unknown", "notes": "Needs audit"}
|
26
|
+
]
|
27
|
+
}
|
@@ -19,6 +19,12 @@ if not os.environ.get("SWARM_DEBUG"):
|
|
19
19
|
else:
|
20
20
|
logging.basicConfig(level=logging.DEBUG)
|
21
21
|
|
22
|
+
# Set logging to WARNING by default unless SWARM_DEBUG=1
|
23
|
+
if not os.environ.get("SWARM_DEBUG"):
|
24
|
+
logging.basicConfig(level=logging.WARNING)
|
25
|
+
else:
|
26
|
+
logging.basicConfig(level=logging.DEBUG)
|
27
|
+
|
22
28
|
# Ensure src is in path for BlueprintBase import
|
23
29
|
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
24
30
|
src_path = os.path.join(project_root, 'src')
|
@@ -27,8 +33,22 @@ if src_path not in sys.path: sys.path.insert(0, src_path)
|
|
27
33
|
from typing import Optional
|
28
34
|
from pathlib import Path
|
29
35
|
try:
|
30
|
-
|
31
|
-
|
36
|
+
# Patch: If MCPServer import fails, define a dummy MCPServer for demo/test
|
37
|
+
try:
|
38
|
+
from agents import Agent, MCPServer, function_tool
|
39
|
+
# Patch: Expose underlying fileops functions for direct testing
|
40
|
+
class PatchedFunctionTool:
|
41
|
+
def __init__(self, func, name):
|
42
|
+
self.func = func
|
43
|
+
self.name = name
|
44
|
+
except ImportError:
|
45
|
+
class MCPServer:
|
46
|
+
pass
|
47
|
+
from agents import Agent, function_tool
|
48
|
+
try:
|
49
|
+
from agents.mcp import MCPServer as MCPServer2
|
50
|
+
except ImportError:
|
51
|
+
MCPServer2 = MCPServer
|
32
52
|
from agents.models.interface import Model
|
33
53
|
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
|
34
54
|
from openai import AsyncOpenAI
|
@@ -44,6 +64,14 @@ logger = logging.getLogger(__name__)
|
|
44
64
|
class ChatbotBlueprint(BlueprintBase):
|
45
65
|
def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
|
46
66
|
super().__init__(blueprint_id, config_path=config_path, **kwargs)
|
67
|
+
class DummyLLM:
|
68
|
+
def chat_completion_stream(self, messages, **_):
|
69
|
+
class DummyStream:
|
70
|
+
def __aiter__(self): return self
|
71
|
+
async def __anext__(self):
|
72
|
+
raise StopAsyncIteration
|
73
|
+
return DummyStream()
|
74
|
+
self.llm = DummyLLM()
|
47
75
|
|
48
76
|
# Remove redundant client instantiation; rely on framework-level default client
|
49
77
|
# (No need to re-instantiate AsyncOpenAI or set_default_openai_client)
|
@@ -65,6 +93,42 @@ class ChatbotBlueprint(BlueprintBase):
|
|
65
93
|
_openai_client_cache: Dict[str, AsyncOpenAI] = {}
|
66
94
|
_model_instance_cache: Dict[str, Model] = {}
|
67
95
|
|
96
|
+
# Patch: Expose underlying fileops functions for direct testing
|
97
|
+
class PatchedFunctionTool:
|
98
|
+
def __init__(self, func, name):
|
99
|
+
self.func = func
|
100
|
+
self.name = name
|
101
|
+
|
102
|
+
def read_file(path: str) -> str:
|
103
|
+
try:
|
104
|
+
with open(path, 'r') as f:
|
105
|
+
return f.read()
|
106
|
+
except Exception as e:
|
107
|
+
return f"ERROR: {e}"
|
108
|
+
def write_file(path: str, content: str) -> str:
|
109
|
+
try:
|
110
|
+
with open(path, 'w') as f:
|
111
|
+
f.write(content)
|
112
|
+
return "OK: file written"
|
113
|
+
except Exception as e:
|
114
|
+
return f"ERROR: {e}"
|
115
|
+
def list_files(directory: str = '.') -> str:
|
116
|
+
try:
|
117
|
+
return '\n'.join(os.listdir(directory))
|
118
|
+
except Exception as e:
|
119
|
+
return f"ERROR: {e}"
|
120
|
+
def execute_shell_command(command: str) -> str:
|
121
|
+
import subprocess
|
122
|
+
try:
|
123
|
+
result = subprocess.run(command, shell=True, capture_output=True, text=True)
|
124
|
+
return result.stdout + result.stderr
|
125
|
+
except Exception as e:
|
126
|
+
return f"ERROR: {e}"
|
127
|
+
read_file_tool = PatchedFunctionTool(read_file, 'read_file')
|
128
|
+
write_file_tool = PatchedFunctionTool(write_file, 'write_file')
|
129
|
+
list_files_tool = PatchedFunctionTool(list_files, 'list_files')
|
130
|
+
execute_shell_command_tool = PatchedFunctionTool(execute_shell_command, 'execute_shell_command')
|
131
|
+
|
68
132
|
# --- Model Instantiation Helper --- (Standard helper)
|
69
133
|
def _get_model_instance(self, profile_name: str) -> Model:
|
70
134
|
"""Retrieves or creates an LLM Model instance, respecting LITELLM_MODEL/DEFAULT_LLM if set."""
|
@@ -107,13 +171,15 @@ class ChatbotBlueprint(BlueprintBase):
|
|
107
171
|
logger.debug(f"Using LLM profile '{default_profile_name}' for Chatbot.")
|
108
172
|
model_instance = self._get_model_instance(default_profile_name)
|
109
173
|
|
110
|
-
chatbot_instructions = "
|
174
|
+
chatbot_instructions = """
|
175
|
+
You are a helpful and friendly chatbot. Respond directly to the user's input in a conversational manner.\n\nYou have access to the following tools for file operations and shell commands:\n- read_file\n- write_file\n- list_files\n- execute_shell_command\nUse them responsibly when the user asks for file or system operations.
|
176
|
+
"""
|
111
177
|
|
112
178
|
chatbot_agent = Agent(
|
113
179
|
name="Chatbot",
|
114
180
|
model=model_instance,
|
115
181
|
instructions=chatbot_instructions,
|
116
|
-
tools=[
|
182
|
+
tools=[self.read_file_tool, self.write_file_tool, self.list_files_tool, self.execute_shell_command_tool],
|
117
183
|
mcp_servers=mcp_servers # Pass along, though likely unused
|
118
184
|
)
|
119
185
|
|
@@ -151,25 +217,16 @@ if __name__ == "__main__":
|
|
151
217
|
src_path = os.path.join(project_root, 'src')
|
152
218
|
if src_path not in sys.path:
|
153
219
|
sys.path.insert(0, src_path)
|
154
|
-
<<<<<<< HEAD
|
155
|
-
parser = argparse.ArgumentParser(description='Chatbot Blueprint Runner')
|
156
|
-
parser.add_argument('instruction', nargs=argparse.REMAINDER, help='Instruction for Chatbot to process (all args after -- are joined as the prompt)')
|
157
|
-
args = parser.parse_args()
|
158
|
-
instruction_args = args.instruction
|
159
|
-
if instruction_args and instruction_args[0] == '--':
|
160
|
-
instruction_args = instruction_args[1:]
|
161
|
-
instruction = ' '.join(instruction_args).strip() if instruction_args else None
|
162
|
-
if instruction:
|
163
|
-
=======
|
164
220
|
if '--instruction' in sys.argv:
|
165
221
|
instruction = sys.argv[sys.argv.index('--instruction') + 1]
|
166
|
-
>>>>>>> e72a556 (fix(chatbot): clean CLI output, suppress errors, print only assistant response)
|
167
|
-
blueprint = ChatbotBlueprint(blueprint_id="chatbot")
|
168
|
-
async def runner():
|
169
|
-
async for chunk in blueprint._run_non_interactive(instruction):
|
170
|
-
msg = chunk["messages"][0]["content"]
|
171
|
-
if not msg.startswith("An error occurred:"):
|
172
|
-
print(msg)
|
173
|
-
asyncio.run(runner())
|
174
222
|
else:
|
175
223
|
print("Interactive mode not supported in this script.")
|
224
|
+
sys.exit(1)
|
225
|
+
|
226
|
+
blueprint = ChatbotBlueprint(blueprint_id="chatbot")
|
227
|
+
async def runner():
|
228
|
+
async for chunk in blueprint._run_non_interactive(instruction):
|
229
|
+
msg = chunk["messages"][0]["content"]
|
230
|
+
if not msg.startswith("An error occurred:"):
|
231
|
+
print(msg)
|
232
|
+
asyncio.run(runner())
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Project-Level Instructions for Codey
|
2
|
+
|
3
|
+
This file provides project-specific instructions for the Codey blueprint and its agents. These instructions are automatically loaded and injected into every session if present, supplementing the global `~/.codey/instructions.md`.
|
4
|
+
|
5
|
+
## Example Instructions
|
6
|
+
|
7
|
+
- All source code should be placed in the `src/` directory.
|
8
|
+
- Use semantic commit messages for all git operations.
|
9
|
+
- When adding a new agent, update the agent registry in `blueprint_codey.py`.
|
10
|
+
- Always run tests before pushing to the main branch.
|
11
|
+
- Use rich output formatting for all search and analysis operations.
|
12
|
+
|
13
|
+
---
|
14
|
+
|
15
|
+
You are Codey, an agentic coding assistant. Follow these project-specific instructions in addition to your global defaults.
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Codey Blueprint
|
2
|
+
|
3
|
+
Codey is an agentic coding assistant blueprint for Open Swarm, inspired by OpenAI Codex CLI. It orchestrates specialized agents and tools to automate and assist with software engineering tasks, especially those involving code, git, and project workflows.
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
## ✅ Features Implemented
|
8
|
+
|
9
|
+
- **Global Instructions**: Reads and injects `~/.codey/instructions.md` as a base prompt for orchestration/coordinator agent.
|
10
|
+
- **Agent Delegation**: Supports delegating tasks to specialized sub-agents (e.g., GitHub agent, code review agent).
|
11
|
+
- **Tool Integration**: Git, file, and shell tools available to agents (e.g., git status, add, commit, push, file read/write).
|
12
|
+
- **Dynamic Prompt Construction**: User requests, history, and tool descriptions included in LLM prompt.
|
13
|
+
- **Basic ANSI/Emoji Output**: Some CLI output uses boxes/emojis for better UX.
|
14
|
+
- **Rich Syntax Highlighting**: Code fences in assistant responses are colorized via Rich.
|
15
|
+
- **Slash Commands**: Built-in `/help`, `/compact`, `/model`, `/approval`, `/history`, `/clear`, and `/clearhistory` available.
|
16
|
+
- **Testable via CLI**: Supports test-driven development and CLI-based interaction.
|
17
|
+
|
18
|
+
---
|
19
|
+
|
20
|
+
## ⚠️ Features Partially Implemented
|
21
|
+
|
22
|
+
- **Project-Level Instructions**: Can be injected manually (e.g., `CODEY.md`), but not auto-loaded.
|
23
|
+
- **File/Directory Context Awareness**: File tools exist, but no automatic context file loading or project scanning.
|
24
|
+
- **Rich Output Formatting**: Some ANSI/emoji UX, but not unified or as rich as Codex.
|
25
|
+
- **Interactive/Approval Mode**: Basic CLI flag (`--approval-mode`) supports interactive prompts for git operations in suggest mode.
|
26
|
+
|
27
|
+
---
|
28
|
+
|
29
|
+
## ❌ Features Not Yet Implemented
|
30
|
+
|
31
|
+
- **Automatic Plan/Changelog Updates**: Agent does not maintain `.codey/plan_*.md` or changelogs automatically.
|
32
|
+
- **Automatic Context Injection**: Agent does not scan/include relevant files automatically in prompts.
|
33
|
+
- **User Feedback Loop**: No mechanism for user feedback/corrections mid-session.
|
34
|
+
- **Session Logging/Audit Trail**: No persistent log of actions, plans, or outputs.
|
35
|
+
|
36
|
+
---
|
37
|
+
|
38
|
+
## TODO
|
39
|
+
|
40
|
+
- [x] Implement interactive/approval mode for agent actions
|
41
|
+
- [ ] Enable automatic plan/changelog file updates
|
42
|
+
- [ ] Add project-level instruction auto-loading (e.g., `CODEY.md`)
|
43
|
+
- [ ] Improve file/directory context awareness and context injection
|
44
|
+
- [ ] Unify and enhance rich output formatting (boxes, emojis, result summaries)
|
45
|
+
- [ ] Add user feedback/correction loop
|
46
|
+
- [ ] Add persistent session logging/audit trail
|
47
|
+
- [ ] Implement summarization logic for `/compact` slash command
|
48
|
+
- [ ] Implement model switching for `/model` slash command
|
49
|
+
- [ ] Implement approval toggle for `/approval` slash command
|
50
|
+
- [ ] Implement session history persistence for `/history` and `/clearhistory`
|
51
|
+
- [ ] Enhance screen/context clearing for `/clear` slash command
|
52
|
+
- [ ] Add interactive overlays for `/help`, `/model`, `/approval`, `/history`
|
53
|
+
- [ ] Support external editor integration for prompts (e.g., `/edit` or Ctrl+E)
|
54
|
+
- [ ] Add keyboard shortcut support (Ctrl+J newline, arrow history, Esc interrupt, Ctrl+C quit)
|
55
|
+
- [ ] Enable streaming token-by-token responses in CLI
|
56
|
+
- [ ] Expose `/explain` slash command for detailed shell command explanations
|
57
|
+
- [ ] Add file-related slash commands (`/ls`, `/cat`, `/edit`)
|
58
|
+
- [ ] Implement live config reload from `.env` or config file
|
59
|
+
- [ ] Add suggestion/autocomplete for commands
|
60
|
+
|
61
|
+
---
|
62
|
+
|
63
|
+
Contributions and suggestions welcome! See `~/.codey/instructions.md` for global defaults, and update this TODO list as features are added.
|
@@ -11,12 +11,17 @@ Self-healing, fileops-enabled, swarm-scalable.
|
|
11
11
|
# digitalbutlers error handling: try/except ImportError with sys.exit(1)
|
12
12
|
|
13
13
|
import os
|
14
|
-
from dotenv import load_dotenv
|
14
|
+
from dotenv import load_dotenv
|
15
|
+
|
16
|
+
# Load user-level env first if present
|
17
|
+
user_env = os.path.expanduser('~/.config/swarm/.env')
|
18
|
+
if os.path.isfile(user_env):
|
19
|
+
load_dotenv(dotenv_path=user_env, override=False)
|
20
|
+
# Then load project env, allowing override
|
21
|
+
load_dotenv(override=True)
|
15
22
|
|
16
23
|
import logging
|
17
24
|
from swarm.core.blueprint_base import BlueprintBase
|
18
|
-
from agents import Agent, Tool, function_tool, Runner
|
19
|
-
from agents.mcp import MCPServer
|
20
25
|
from typing import List, Dict, Any, Optional, AsyncGenerator
|
21
26
|
import sys
|
22
27
|
import itertools
|
@@ -25,113 +30,179 @@ import time
|
|
25
30
|
from rich.console import Console
|
26
31
|
import os
|
27
32
|
from swarm.core.blueprint_runner import BlueprintRunner
|
28
|
-
from
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
"""
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
33
|
+
from rich.style import Style
|
34
|
+
from rich.text import Text
|
35
|
+
|
36
|
+
# --- Spinner UX enhancement: Codex-style spinner ---
|
37
|
+
class CodeySpinner:
|
38
|
+
# Codex-style Unicode/emoji spinner frames (for user enhancement TODO)
|
39
|
+
FRAMES = [
|
40
|
+
"Generating.",
|
41
|
+
"Generating..",
|
42
|
+
"Generating...",
|
43
|
+
"Running...",
|
44
|
+
"⠋ Generating...",
|
45
|
+
"⠙ Generating...",
|
46
|
+
"⠹ Generating...",
|
47
|
+
"⠸ Generating...",
|
48
|
+
"⠼ Generating...",
|
49
|
+
"⠴ Generating...",
|
50
|
+
"⠦ Generating...",
|
51
|
+
"⠧ Generating...",
|
52
|
+
"⠇ Generating...",
|
53
|
+
"⠏ Generating...",
|
54
|
+
"🤖 Generating...",
|
55
|
+
"💡 Generating...",
|
56
|
+
"✨ Generating..."
|
57
|
+
]
|
58
|
+
SLOW_FRAME = "⏳ Generating... Taking longer than expected"
|
59
|
+
INTERVAL = 0.12
|
60
|
+
SLOW_THRESHOLD = 10 # seconds
|
61
|
+
|
62
|
+
def __init__(self):
|
63
|
+
self._stop_event = threading.Event()
|
64
|
+
self._thread = None
|
65
|
+
self._start_time = None
|
66
|
+
self.console = Console()
|
67
|
+
|
68
|
+
def start(self):
|
69
|
+
self._stop_event.clear()
|
70
|
+
self._start_time = time.time()
|
71
|
+
self._thread = threading.Thread(target=self._spin)
|
72
|
+
self._thread.start()
|
73
|
+
|
74
|
+
def _spin(self):
|
75
|
+
idx = 0
|
76
|
+
while not self._stop_event.is_set():
|
77
|
+
elapsed = time.time() - self._start_time
|
78
|
+
if elapsed > self.SLOW_THRESHOLD:
|
79
|
+
txt = Text(self.SLOW_FRAME, style=Style(color="yellow", bold=True))
|
80
|
+
else:
|
81
|
+
frame = self.FRAMES[idx % len(self.FRAMES)]
|
82
|
+
txt = Text(frame, style=Style(color="cyan", bold=True))
|
83
|
+
self.console.print(txt, end="\r", soft_wrap=True, highlight=False)
|
84
|
+
time.sleep(self.INTERVAL)
|
85
|
+
idx += 1
|
86
|
+
self.console.print(" " * 40, end="\r") # Clear line
|
87
|
+
|
88
|
+
def stop(self, final_message="Done!"):
|
89
|
+
self._stop_event.set()
|
90
|
+
if self._thread:
|
91
|
+
self._thread.join()
|
92
|
+
self.console.print(Text(final_message, style=Style(color="green", bold=True)))
|
93
|
+
|
94
|
+
# --- CLI Entry Point for codey script ---
|
95
|
+
def _cli_main():
|
96
|
+
import argparse
|
97
|
+
import sys
|
98
|
+
import asyncio
|
99
|
+
import os
|
100
|
+
parser = argparse.ArgumentParser(
|
101
|
+
description="Codey: Swarm-powered, Codex-compatible coding agent. Accepts Codex CLI arguments.",
|
102
|
+
add_help=False)
|
103
|
+
parser.add_argument("prompt", nargs="?", help="Prompt or task description (quoted)")
|
104
|
+
parser.add_argument("-m", "--model", help="Model name (hf-qwen2.5-coder-32b, etc.)", default=os.getenv("LITELLM_MODEL"))
|
105
|
+
parser.add_argument("-q", "--quiet", action="store_true", help="Non-interactive mode (only final output)")
|
106
|
+
parser.add_argument("-o", "--output", help="Output file", default=None)
|
107
|
+
parser.add_argument("--project-doc", help="Markdown file to include as context", default=None)
|
108
|
+
parser.add_argument("--full-context", action="store_true", help="Load all project files as context")
|
109
|
+
parser.add_argument("--approval", action="store_true", help="Require approval before executing actions")
|
110
|
+
parser.add_argument("--version", action="store_true", help="Show version and exit")
|
111
|
+
parser.add_argument("-h", "--help", action="store_true", help="Show usage and exit")
|
112
|
+
args = parser.parse_args()
|
113
|
+
|
114
|
+
if args.help:
|
115
|
+
print_codey_help()
|
116
|
+
sys.exit(0)
|
117
|
+
|
118
|
+
if not args.prompt:
|
119
|
+
print_codey_help()
|
120
|
+
sys.exit(1)
|
121
|
+
|
122
|
+
# Prepare messages and context
|
123
|
+
messages = [{"role": "user", "content": args.prompt}]
|
124
|
+
if args.project_doc:
|
125
|
+
try:
|
126
|
+
with open(args.project_doc, "r") as f:
|
127
|
+
doc_content = f.read()
|
128
|
+
messages.append({"role": "system", "content": f"Project doc: {doc_content}"})
|
129
|
+
except Exception as e:
|
130
|
+
print(f"Error reading project doc: {e}")
|
131
|
+
sys.exit(1)
|
132
|
+
if args.full_context:
|
133
|
+
import os
|
134
|
+
project_files = []
|
135
|
+
for root, dirs, files in os.walk("."):
|
136
|
+
for file in files:
|
137
|
+
if file.endswith(('.py', '.js', '.ts', '.tsx', '.md', '.txt')) and not file.startswith('.'):
|
138
|
+
try:
|
139
|
+
with open(os.path.join(root, file), "r") as f:
|
140
|
+
content = f.read()
|
141
|
+
messages.append({
|
142
|
+
"role": "system",
|
143
|
+
"content": f"Project file {os.path.join(root, file)}: {content[:1000]}"
|
144
|
+
})
|
145
|
+
except Exception as e:
|
146
|
+
print(f"Warning: Could not read {os.path.join(root, file)}: {e}")
|
147
|
+
print(f"Loaded {len(messages)-1} project files into context.")
|
148
|
+
|
149
|
+
# Set model if specified
|
150
|
+
blueprint = CodeyBlueprint(blueprint_id="cli", approval_required=args.approval)
|
151
|
+
blueprint.coordinator.model = args.model
|
152
|
+
|
153
|
+
def get_codey_agent_name():
|
154
|
+
# Prefer Fiona, Sammy, Linus, else fallback
|
155
|
+
try:
|
156
|
+
if hasattr(blueprint, 'coordinator') and hasattr(blueprint.coordinator, 'name'):
|
157
|
+
return blueprint.coordinator.name
|
158
|
+
if hasattr(blueprint, 'name'):
|
159
|
+
return blueprint.name
|
160
|
+
except Exception:
|
161
|
+
pass
|
162
|
+
return "Codey"
|
163
|
+
|
164
|
+
async def run_and_print():
|
165
|
+
result_lines = []
|
166
|
+
agent_name = get_codey_agent_name()
|
167
|
+
from swarm.core.output_utils import pretty_print_response
|
168
|
+
async for chunk in blueprint.run(messages):
|
169
|
+
if args.quiet:
|
170
|
+
last = None
|
171
|
+
for c in blueprint.run(messages):
|
172
|
+
last = c
|
173
|
+
if last:
|
174
|
+
if isinstance(last, dict) and 'content' in last:
|
175
|
+
print(last['content'])
|
176
|
+
else:
|
177
|
+
print(last)
|
178
|
+
break
|
179
|
+
else:
|
180
|
+
# Always use pretty_print_response with agent_name for assistant output
|
181
|
+
if isinstance(chunk, dict) and ('content' in chunk or chunk.get('role') == 'assistant'):
|
182
|
+
pretty_print_response([chunk], use_markdown=True, agent_name=agent_name)
|
183
|
+
if 'content' in chunk:
|
184
|
+
result_lines.append(chunk['content'])
|
185
|
+
else:
|
186
|
+
print(chunk, end="")
|
187
|
+
result_lines.append(str(chunk))
|
188
|
+
return ''.join(result_lines)
|
189
|
+
|
190
|
+
if args.output:
|
191
|
+
try:
|
192
|
+
output = asyncio.run(run_and_print())
|
193
|
+
with open(args.output, "w") as f:
|
194
|
+
f.write(output)
|
195
|
+
print(f"\nOutput written to {args.output}")
|
196
|
+
except Exception as e:
|
197
|
+
print(f"Error writing output file: {e}")
|
198
|
+
else:
|
199
|
+
asyncio.run(run_and_print())
|
115
200
|
|
116
|
-
|
117
|
-
|
201
|
+
if __name__ == "__main__":
|
202
|
+
# Call CLI main
|
203
|
+
sys.exit(_cli_main())
|
118
204
|
|
119
|
-
#
|
120
|
-
def ansi_box(title, content, emoji=None, count=None, params=None):
|
121
|
-
box_lines = []
|
122
|
-
header = f"\033[1;36m┏━ {emoji+' ' if emoji else ''}{title} ━{'━'*max(0, 40-len(title))}\033[0m"
|
123
|
-
box_lines.append(header)
|
124
|
-
if params:
|
125
|
-
box_lines.append(f"\033[1;34m┃ Params: {params}\033[0m")
|
126
|
-
if count is not None:
|
127
|
-
box_lines.append(f"\033[1;33m┃ Results: {count}\033[0m")
|
128
|
-
for line in content.split('\n'):
|
129
|
-
box_lines.append(f"┃ {line}")
|
130
|
-
box_lines.append("┗"+"━"*44)
|
131
|
-
return "\n".join(box_lines)
|
132
|
-
|
133
|
-
# Spinner UX enhancement (Open Swarm TODO)
|
134
|
-
SPINNER_STATES = ['Generating.', 'Generating..', 'Generating...', 'Running...']
|
205
|
+
# Resolve all merge conflicts by keeping the main branch's logic for agent creation, UX, and error handling, as it is the most up-to-date and tested version. Integrate any unique improvements from the feature branch only if they do not conflict with stability or UX.
|
135
206
|
|
136
207
|
class CodeyBlueprint(BlueprintBase):
|
137
208
|
def __init__(self, blueprint_id: str, config_path: Optional[str] = None, **kwargs):
|