open-swarm 0.1.1745125933__tar.gz → 0.1.1745126277__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/PKG-INFO +12 -8
  2. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/README.md +11 -7
  3. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/pyproject.toml +1 -1
  4. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/README.md +19 -18
  5. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/blueprint_audit_status.json +1 -1
  6. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +160 -72
  7. open_swarm-0.1.1745126277/src/swarm/blueprints/codey/README.md +143 -0
  8. open_swarm-0.1.1745126277/src/swarm/blueprints/codey/blueprint_codey.py +1295 -0
  9. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/codey/codey_cli.py +10 -0
  10. open_swarm-0.1.1745126277/src/swarm/blueprints/codey/session_logs/session_2025-04-19T01-15-31.md +17 -0
  11. open_swarm-0.1.1745126277/src/swarm/blueprints/codey/session_logs/session_2025-04-19T01-16-03.md +17 -0
  12. open_swarm-0.1.1745126277/src/swarm/blueprints/common/operation_box_utils.py +83 -0
  13. open_swarm-0.1.1745126277/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +26 -0
  14. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +182 -9
  15. open_swarm-0.1.1745126277/src/swarm/blueprints/django_chat/blueprint_django_chat.py +268 -0
  16. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +142 -13
  17. open_swarm-0.1.1745126277/src/swarm/blueprints/geese/README.md +97 -0
  18. open_swarm-0.1.1745126277/src/swarm/blueprints/geese/blueprint_geese.py +803 -0
  19. open_swarm-0.1.1745126277/src/swarm/blueprints/geese/geese_cli.py +102 -0
  20. open_swarm-0.1.1745126277/src/swarm/blueprints/jeeves/blueprint_jeeves.py +712 -0
  21. open_swarm-0.1.1745126277/src/swarm/blueprints/jeeves/jeeves_cli.py +55 -0
  22. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +109 -22
  23. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +172 -40
  24. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +79 -41
  25. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +82 -35
  26. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +56 -24
  27. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/poets/blueprint_poets.py +141 -100
  28. open_swarm-0.1.1745126277/src/swarm/blueprints/poets/poets_cli.py +23 -0
  29. open_swarm-0.1.1745126277/src/swarm/blueprints/rue_code/README.md +8 -0
  30. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/rue_code/blueprint_rue_code.py +188 -20
  31. open_swarm-0.1.1745126277/src/swarm/blueprints/rue_code/rue_code_cli.py +43 -0
  32. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/apps.py +12 -0
  33. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/blueprint_family_ties.py +349 -0
  34. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/models.py +19 -0
  35. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/serializers.py +10 -0
  36. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/settings.py +17 -0
  37. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/urls.py +11 -0
  38. open_swarm-0.1.1745126277/src/swarm/blueprints/stewie/views.py +26 -0
  39. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +54 -39
  40. open_swarm-0.1.1745126277/src/swarm/blueprints/whinge_surf/README.md +22 -0
  41. open_swarm-0.1.1745126277/src/swarm/blueprints/whinge_surf/__init__.py +1 -0
  42. open_swarm-0.1.1745126277/src/swarm/blueprints/whinge_surf/blueprint_whinge_surf.py +565 -0
  43. open_swarm-0.1.1745126277/src/swarm/blueprints/whinge_surf/whinge_surf_cli.py +99 -0
  44. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +66 -37
  45. open_swarm-0.1.1745126277/src/swarm/blueprints/zeus/__init__.py +2 -0
  46. open_swarm-0.1.1745126277/src/swarm/blueprints/zeus/apps.py +4 -0
  47. open_swarm-0.1.1745126277/src/swarm/blueprints/zeus/blueprint_zeus.py +270 -0
  48. open_swarm-0.1.1745126277/src/swarm/blueprints/zeus/zeus_cli.py +13 -0
  49. open_swarm-0.1.1745126277/src/swarm/cli/async_input.py +65 -0
  50. open_swarm-0.1.1745126277/src/swarm/cli/async_input_demo.py +32 -0
  51. open_swarm-0.1.1745125933/src/swarm/blueprints/codey/README.md +0 -63
  52. open_swarm-0.1.1745125933/src/swarm/blueprints/codey/blueprint_codey.py +0 -389
  53. open_swarm-0.1.1745125933/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +0 -303
  54. open_swarm-0.1.1745125933/src/swarm/blueprints/django_chat/blueprint_django_chat.py +0 -142
  55. open_swarm-0.1.1745125933/src/swarm/blueprints/geese/blueprint_geese.py +0 -219
  56. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/.gitignore +0 -0
  57. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/LICENSE +0 -0
  58. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/__init__.py +0 -0
  59. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/agent/__init__.py +0 -0
  60. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/apps.py +0 -0
  61. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/auth.py +0 -0
  62. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
  63. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/codey/CODEY.md +0 -0
  64. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/codey/instructions.md +0 -0
  65. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/divine_code/__init__.py +0 -0
  66. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/divine_code/apps.py +0 -0
  67. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/django_chat/apps.py +0 -0
  68. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
  69. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/django_chat/urls.py +0 -0
  70. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/django_chat/views.py +0 -0
  71. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/flock/__init__.py +0 -0
  72. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
  73. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/rue_code/__init__.py +0 -0
  74. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
  75. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
  76. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/consumers.py +0 -0
  77. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/agent_utils.py +0 -0
  78. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/blueprint_base.py +0 -0
  79. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/blueprint_discovery.py +0 -0
  80. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/blueprint_runner.py +0 -0
  81. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/blueprint_utils.py +0 -0
  82. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/blueprint_ux.py +0 -0
  83. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/build_launchers.py +0 -0
  84. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/build_swarm_wrapper.py +0 -0
  85. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/__init__.py +0 -0
  86. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/commands/__init__.py +0 -0
  87. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/commands/blueprint_management.py +0 -0
  88. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/interactive_shell.py +0 -0
  89. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/main.py +0 -0
  90. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/utils/__init__.py +0 -0
  91. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/cli/utils/discover_commands.py +0 -0
  92. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/common_utils.py +0 -0
  93. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/config_loader.py +0 -0
  94. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/config_manager.py +0 -0
  95. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/output_utils.py +0 -0
  96. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/server_config.py +0 -0
  97. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/session_logger.py +0 -0
  98. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/setup_wizard.py +0 -0
  99. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/slash_commands.py +0 -0
  100. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/spinner.py +0 -0
  101. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/swarm_api.py +0 -0
  102. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/swarm_cli.py +0 -0
  103. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/swarm_wrapper.py +0 -0
  104. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/utils/__init__.py +0 -0
  105. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/core/utils/logger.py +0 -0
  106. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/__init__.py +0 -0
  107. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/__init__.py +0 -0
  108. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/cli_handler.py +0 -0
  109. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/django_utils.py +0 -0
  110. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
  111. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
  112. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
  113. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/__init__.py +0 -0
  114. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
  115. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/cli_args.py +0 -0
  116. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/__init__.py +0 -0
  117. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/blueprint_management.py +0 -0
  118. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/config_management.py +0 -0
  119. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/edit_config.py +0 -0
  120. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/list_blueprints.py +0 -0
  121. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/validate_env.py +0 -0
  122. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/commands/validate_envvars.py +0 -0
  123. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/interactive_shell.py +0 -0
  124. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/main.py +0 -0
  125. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/selection.py +0 -0
  126. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils/__init__.py +0 -0
  127. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils/async_input.py +0 -0
  128. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
  129. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
  130. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils/prompt_user.py +0 -0
  131. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/cli/utils.py +0 -0
  132. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/config/__init__.py +0 -0
  133. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/config/config_loader.py +0 -0
  134. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/launchers/__init__.py +0 -0
  135. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/launchers/swarm_api.py +0 -0
  136. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/extensions/launchers/swarm_cli.py +0 -0
  137. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/management/__init__.py +0 -0
  138. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/management/commands/__init__.py +0 -0
  139. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/management/commands/runserver.py +0 -0
  140. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/messages.py +0 -0
  141. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/middleware.py +0 -0
  142. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
  143. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/migrations/__init__.py +0 -0
  144. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/models.py +0 -0
  145. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/permissions.py +0 -0
  146. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/repl/__init__.py +0 -0
  147. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/repl/repl.py +0 -0
  148. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/serializers.py +0 -0
  149. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/settings.py +0 -0
  150. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
  151. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
  152. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
  153. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
  154. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
  155. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
  156. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
  157. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
  158. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
  159. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
  160. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
  161. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
  162. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
  163. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
  164. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
  165. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
  166. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
  167. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
  168. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
  169. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
  170. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
  171. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
  172. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
  173. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
  174. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
  175. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
  176. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
  177. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
  178. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
  179. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
  180. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
  181. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
  182. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/css/dropdown.css +0 -0
  183. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/htmx/htmx.min.js +0 -0
  184. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/js/dropdown.js +0 -0
  185. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/base.css +0 -0
  186. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
  187. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/chat.css +0 -0
  188. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
  189. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
  190. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
  191. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
  192. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
  193. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/general.css +0 -0
  194. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/layout.css +0 -0
  195. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
  196. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
  197. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
  198. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/messages.css +0 -0
  199. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/messenger.css +0 -0
  200. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/settings.css +0 -0
  201. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/simple.css +0 -0
  202. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/slack.css +0 -0
  203. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/style.css +0 -0
  204. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/theme.css +0 -0
  205. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/css/toast.css +0 -0
  206. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/auth.js +0 -0
  207. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
  208. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
  209. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
  210. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/debug.js +0 -0
  211. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/events.js +0 -0
  212. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/main.js +0 -0
  213. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/messages.js +0 -0
  214. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
  215. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
  216. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
  217. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
  218. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
  219. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
  220. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
  221. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
  222. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
  223. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
  224. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/rendering.js +0 -0
  225. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/settings.js +0 -0
  226. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
  227. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
  228. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
  229. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/splash.js +0 -0
  230. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/theme.js +0 -0
  231. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/toast.js +0 -0
  232. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/ui.js +0 -0
  233. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/js/validation.js +0 -0
  234. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
  235. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
  236. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
  237. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
  238. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
  239. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
  240. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
  241. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
  242. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
  243. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/close.svg +0 -0
  244. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
  245. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
  246. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
  247. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
  248. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
  249. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
  250. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
  251. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
  252. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
  253. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
  254. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
  255. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/save.svg +0 -0
  256. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/search.svg +0 -0
  257. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
  258. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
  259. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
  260. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
  261. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
  262. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
  263. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
  264. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
  265. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
  266. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
  267. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
  268. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/account/login.html +0 -0
  269. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/account/signup.html +0 -0
  270. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/base.html +0 -0
  271. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/chat.html +0 -0
  272. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/index.html +0 -0
  273. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
  274. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/header.html +0 -0
  275. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
  276. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
  277. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
  278. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
  279. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/message_ui.html +0 -0
  280. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/rest_mode/slackbot.html +0 -0
  281. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/simple_blueprint_page.html +0 -0
  282. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
  283. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/websocket_partials/system_message.html +0 -0
  284. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/templates/websocket_partials/user_message.html +0 -0
  285. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/tool_executor.py +0 -0
  286. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/urls.py +0 -0
  287. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/util.py +0 -0
  288. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/ansi_box.py +0 -0
  289. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/color_utils.py +0 -0
  290. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/context_utils.py +0 -0
  291. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/disable_tracing.py +0 -0
  292. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/general_utils.py +0 -0
  293. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/log_utils.py +0 -0
  294. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/logger.py +0 -0
  295. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/logger_setup.py +0 -0
  296. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/message_sequence.py +0 -0
  297. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/message_utils.py +0 -0
  298. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/openai_patch.py +0 -0
  299. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/utils/redact.py +0 -0
  300. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/ux/ansi_box.py +0 -0
  301. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/ux/spinner.py +0 -0
  302. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/__init__.py +0 -0
  303. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/api_views.py +0 -0
  304. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/chat_views.py +0 -0
  305. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/core_views.py +0 -0
  306. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/message_views.py +0 -0
  307. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/model_views.py +0 -0
  308. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/utils.py +0 -0
  309. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/views/web_views.py +0 -0
  310. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/src/swarm/wsgi.py +0 -0
  311. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/__init__.py +0 -0
  312. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/api/conftest.py +0 -0
  313. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/api/test_chat_completions_auth_async.py +0 -0
  314. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/api/test_chat_completions_failing_async.py +0 -0
  315. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/api/test_chat_completions_validation_async.py +0 -0
  316. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_chatbot.py +0 -0
  317. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey.py +0 -0
  318. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_approval_mode.py +0 -0
  319. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_blueprint.py +0 -0
  320. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_blueprint_full.py +0 -0
  321. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_context.py +0 -0
  322. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_feedback.py +0 -0
  323. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_github.py +0 -0
  324. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_history.py +0 -0
  325. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_instructions.py +0 -0
  326. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_invalid_model.py +0 -0
  327. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_output.py +0 -0
  328. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_codey_spinner_and_box.py +0 -0
  329. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_dilbot_universe.py +0 -0
  330. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_divine_code.py +0 -0
  331. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_echocraft.py +0 -0
  332. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_family_ties.py +0 -0
  333. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_gaggle.py.disabled +0 -0
  334. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_geese.py +0 -0
  335. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_geese_agent_mcp_assignment.py +0 -0
  336. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_geese_spinner_and_box.py +0 -0
  337. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_gotchaman.py +0 -0
  338. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_jeeves.py +0 -0
  339. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_jeeves_progressive_tool.py +0 -0
  340. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_jeeves_spinner_and_box.py +0 -0
  341. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_mcp_demo.py +0 -0
  342. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_mission_improbable.py +0 -0
  343. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_monkai_magic.py +0 -0
  344. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_nebula_shellz.py +0 -0
  345. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_omniplex.py +0 -0
  346. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_poets.py +0 -0
  347. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_rue_code_cost.py +0 -0
  348. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_rue_code_spinner_and_box.py +0 -0
  349. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_suggestion.py +0 -0
  350. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_whinge_surf.py +0 -0
  351. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_whinge_surf_analysis.py +0 -0
  352. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_whinge_surf_spinner_and_box.py +0 -0
  353. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_whiskeytangofoxtrot.py +0 -0
  354. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_zeus.py +0 -0
  355. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_zeus_cli.py +0 -0
  356. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/blueprints/test_zeus_spinner_and_box.py +0 -0
  357. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/cli/test_cli_config.py +0 -0
  358. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/cli/test_launchers.py +0 -0
  359. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/cli/test_list_blueprints.py +0 -0
  360. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/conftest.py +0 -0
  361. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_blueprint_model_override.py +0 -0
  362. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_config_default_generation.py +0 -0
  363. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_config_discovery.py +0 -0
  364. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_config_loader.py +0 -0
  365. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_fallback_to_default_model.py +0 -0
  366. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_mcp_server_config.py +0 -0
  367. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/core/test_redact_sensitive_data.py +0 -0
  368. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/extensions/launchers/test_swarm_api_launcher.py +0 -0
  369. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_codey.py +0 -0
  370. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_commands.py +0 -0
  371. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_geese.py +0 -0
  372. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_jeeves.py +0 -0
  373. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_rue_code.py +0 -0
  374. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_whinge.py +0 -0
  375. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/integration/test_cli_zeus.py +0 -0
  376. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/manual/test_blueprintbase_init.py +0 -0
  377. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/swarm_config.json +0 -0
  378. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_chucks_angels.sh +0 -0
  379. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_codey_binary.py +0 -0
  380. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_digitalbutlers.sh +0 -0
  381. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_dilbot_universe.sh +0 -0
  382. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_divine_code.sh +0 -0
  383. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_django_chat.sh +0 -0
  384. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_echocraft.sh +0 -0
  385. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_family_ties.sh +0 -0
  386. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_flock.sh +0 -0
  387. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_gaggle.sh +0 -0
  388. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_gotchaman.sh +0 -0
  389. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_monkai-magic.sh +0 -0
  390. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_nebula_shellz.sh +0 -0
  391. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_omniplex.sh +0 -0
  392. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_poets.sh +0 -0
  393. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_rue-code.sh +0 -0
  394. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_rue_code_binary.py +0 -0
  395. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_suggestion.sh +0 -0
  396. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_university.sh +0 -0
  397. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_whinge_binary.py +0 -0
  398. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
  399. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_zeus.sh +0 -0
  400. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/system/test_zeus_binary.py +0 -0
  401. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_blueprint_loading.py +0 -0
  402. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_cli_mode_selection.py +0 -0
  403. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_core_filter_duplicate_system_messages.py +0 -0
  404. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_core_filter_messages.py +0 -0
  405. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_core_truncate_message_history.py +0 -0
  406. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_core_update_null_content.py +0 -0
  407. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_dummy.py +0 -0
  408. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/test_truncate_message_history.py +0 -0
  409. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/blueprints/rue_code/test_rue_code_tools.py +0 -0
  410. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_ansi_box.py +0 -0
  411. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_blueprint_base_config.py +0 -0
  412. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_operation_box_utils.py +0 -0
  413. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_output_utils.py +0 -0
  414. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_redact.py +0 -0
  415. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_slash_commands.py +0 -0
  416. {open_swarm-0.1.1745125933 → open_swarm-0.1.1745126277}/tests/unit/test_spinner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-swarm
3
- Version: 0.1.1745125933
3
+ Version: 0.1.1745126277
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
@@ -335,18 +335,22 @@ Open Swarm and its blueprints use a variety of environment variables for configu
335
335
  | `DJANGO_CSRF_TRUSTED_ORIGINS` | Comma-separated trusted origins for CSRF protection | `http://localhost:8000,...`|
336
336
  | `ENABLE_ADMIN` | Enable admin web interface | `false` |
337
337
  | `ENABLE_API_AUTH` | Require API authentication | `true` |
338
+ | `SWARM_COMMAND_TIMEOUT` | Timeout in seconds for all shell commands run by blueprints | Optional (recommended) |
338
339
 
339
340
  #### Blueprint/Tool-Specific Variables
340
341
  - Some blueprints and MCP tools may require additional env vars (e.g., Google API keys, Slack tokens, etc.).
341
342
  - Refer to the blueprint's docstring or config for details.
342
343
 
343
- #### Usage Example
344
- ```bash
345
- export OPENAI_API_KEY="sk-..."
346
- export SWARM_API_KEY="..."
347
- export LITELLM_BASE_URL="https://open-litellm.fly.dev/v1"
348
- # ... set other variables as needed
349
- ```
344
+ #### Timeout Configuration
345
+ - **SWARM_COMMAND_TIMEOUT**: Controls the maximum time (in seconds) a shell command is allowed to run in any blueprint. If not set, defaults to 60 seconds for most commands, 120 seconds for cloud CLI tools (AWS, Fly.io, Vercel).
346
+ - Set via environment variable: `export SWARM_COMMAND_TIMEOUT=90`
347
+ - If a command exceeds the timeout, a clear error message will be shown in the CLI or operation box.
348
+ - Applies to all blueprints and CLI tools that execute shell commands.
349
+ - To override for a single run: `SWARM_COMMAND_TIMEOUT=30 swarm-cli run ...`
350
+
351
+ #### Test Timeouts
352
+ - All integration tests have a global timeout (30s) via pytest-timeout.
353
+ - Some tests have explicit per-test timeouts (see test source for details).
350
354
 
351
355
  ---
352
356
 
@@ -247,18 +247,22 @@ Open Swarm and its blueprints use a variety of environment variables for configu
247
247
  | `DJANGO_CSRF_TRUSTED_ORIGINS` | Comma-separated trusted origins for CSRF protection | `http://localhost:8000,...`|
248
248
  | `ENABLE_ADMIN` | Enable admin web interface | `false` |
249
249
  | `ENABLE_API_AUTH` | Require API authentication | `true` |
250
+ | `SWARM_COMMAND_TIMEOUT` | Timeout in seconds for all shell commands run by blueprints | Optional (recommended) |
250
251
 
251
252
  #### Blueprint/Tool-Specific Variables
252
253
  - Some blueprints and MCP tools may require additional env vars (e.g., Google API keys, Slack tokens, etc.).
253
254
  - Refer to the blueprint's docstring or config for details.
254
255
 
255
- #### Usage Example
256
- ```bash
257
- export OPENAI_API_KEY="sk-..."
258
- export SWARM_API_KEY="..."
259
- export LITELLM_BASE_URL="https://open-litellm.fly.dev/v1"
260
- # ... set other variables as needed
261
- ```
256
+ #### Timeout Configuration
257
+ - **SWARM_COMMAND_TIMEOUT**: Controls the maximum time (in seconds) a shell command is allowed to run in any blueprint. If not set, defaults to 60 seconds for most commands, 120 seconds for cloud CLI tools (AWS, Fly.io, Vercel).
258
+ - Set via environment variable: `export SWARM_COMMAND_TIMEOUT=90`
259
+ - If a command exceeds the timeout, a clear error message will be shown in the CLI or operation box.
260
+ - Applies to all blueprints and CLI tools that execute shell commands.
261
+ - To override for a single run: `SWARM_COMMAND_TIMEOUT=30 swarm-cli run ...`
262
+
263
+ #### Test Timeouts
264
+ - All integration tests have a global timeout (30s) via pytest-timeout.
265
+ - Some tests have explicit per-test timeouts (see test source for details).
262
266
 
263
267
  ---
264
268
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "open-swarm"
7
- version = "0.1.1745125933"
7
+ version = "0.1.1745126277"
8
8
  description = "Open Swarm: Orchestrating AI Agent Swarms with Django"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -6,24 +6,25 @@ This directory contains example blueprints for the Open Swarm framework, showcas
6
6
 
7
7
  These blueprints have been updated to use the `BlueprintBase` class, `openai-agents` library conventions (like `Agent`, `@function_tool`, agent-as-tool delegation), and standardized configuration loading.
8
8
 
9
- | Blueprint Name | CLI (`uv run ...`) Example Instruction | What it Demonstrates | Key Features | MCP Servers Used (Examples) |
10
- |---------------------------------|-------------------------------------------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------------|-----------------------------|
11
- | **EchoCraft** | `--instruction "Repeat this message"` | Simplest blueprint, direct input echo | Basic `BlueprintBase` structure, Agent `process` override | None |
12
- | **Suggestion** | `--instruction "Topic: AI Ethics"` | Generating structured JSON output | Agent `output_type=TypedDict`, JSON mode | None |
13
- | **Chatbot** | `--instruction "Tell me a joke"` | Basic single-agent conversation | Standard `Agent` interaction with LLM | None |
14
- | **BurntNoodles** | `--instruction "Check git status"` | Coordinating Git & testing tasks via function tools & agent delegation | `@function_tool` for CLI commands, Agent-as-tool delegation | None |
15
- | **RueCode** | `--instruction "Refactor this python code..."` | Multi-agent code generation/refactoring workflow | Agent-as-tool delegation, specialized agent roles (Coordinator, Code, etc.) | memory |
16
- | **NebulaShellzzar** | `--instruction "List files in /tmp"` | Matrix-themed sysadmin/coding tasks with delegation | Agent-as-tool delegation, `@function_tool` for shell/code analysis | memory |
17
- | **DigitalButlers** | `--instruction "Search for nearby restaurants"` | Delegating tasks requiring specific MCPs (search, home automation) | Agent-as-tool delegation, MCP usage by specialist agents | duckduckgo-search, home-assistant |
18
- | **DilbotUniverse (SQLite)** | `--instruction "Start the SDLC"` | Comedic SDLC simulation, instructions loaded from SQLite | Agent-as-tool delegation, SQLite integration for dynamic prompts | sqlite |
19
- | **FamilyTies** | `--instruction "Create WP post titled 'Hello'..."` | Coordinating WordPress operations via MCP | Agent-as-tool delegation, specialized agent using specific MCP (WP) | server-wp-mcp |
20
- | **MissionImprobable (SQLite)** | `--instruction "Use RollinFumble to run 'pwd'"` | Spy-themed ops, instructions from SQLite, multi-level delegation | Agent-as-tool delegation, SQLite integration, MCP usage (fs, shell, mem) | memory, filesystem, mcp-shell |
21
- | **WhiskeyTangoFoxtrot** | `--instruction "Find free vector DBs"` | Hierarchical agents tracking services using DB & web search | Multi-level agent delegation, SQLite, various search/scrape/doc MCPs | sqlite, brave-search, mcp-npx-fetch, mcp-doc-forge, filesystem |
22
- | **DivineOps** | `--instruction "Design user auth API"` | Large-scale SW dev coordination (Design, Implement, DB, DevOps, Docs) | Complex delegation, wide range of MCP usage (search, shell, db, fs...) | memory, filesystem, mcp-shell, sqlite, sequential-thinking, brave-search |
23
- | **Gaggle** | `--instruction "Write story: cat library"` | Collaborative story writing (Planner, Writer, Editor) | Agent-as-tool delegation, function tools for writing steps | None |
24
- | **MonkaiMagic** | `--instruction "List AWS S3 buckets"` | Cloud operations (AWS, Fly, Vercel) via direct CLI function tools | `@function_tool` for external CLIs, agent-as-tool delegation | mcp-shell (for Sandy) |
25
- | **UnapologeticPress (SQLite)** | `--instruction "Write poem: city rain"` | Collaborative poetry writing by distinct "poet" agents, SQLite instructions | Agent-as-tool (all-to-all), SQLite, broad MCP usage | Various (see blueprint) |
26
- | **Omniplex** | `--instruction "Use filesystem to read README.md"` | Dynamically routes tasks based on MCP server type (npx, uvx, other) | Dynamic agent/tool creation based on available MCPs | Dynamic (all available) |
9
+ | Blueprint Name | CLI (`uv run ...`) Example Instruction | What it Demonstrates | Key Features | Tags | MCP Servers Used (Examples) |
10
+ |---------------------------------|-------------------------------------------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------------|-----------------------|-----------------------------|
11
+ | **EchoCraft** | `--instruction "Repeat this message"` | Simplest blueprint, direct input echo | Basic `BlueprintBase` structure, Agent `process` override | | None |
12
+ | **Suggestion** | `--instruction "Topic: AI Ethics"` | Generating structured JSON output | Agent `output_type=TypedDict`, JSON mode | | None |
13
+ | **Chatbot** | `--instruction "Tell me a joke"` | Basic single-agent conversation | Standard `Agent` interaction with LLM | | None |
14
+ | **BurntNoodles** | `--instruction "Check git status"` | Coordinating Git & testing tasks via function tools & agent delegation | `@function_tool` for CLI commands, Agent-as-tool delegation | | None |
15
+ | **RueCode** | `--instruction "Refactor this python code..."` | Multi-agent code generation/refactoring workflow | Agent-as-tool delegation, specialized agent roles (Coordinator, Code, etc.) | software-development | memory |
16
+ | **NebulaShellzzar** | `--instruction "List files in /tmp"` | Matrix-themed sysadmin/coding tasks with delegation | Agent-as-tool delegation, `@function_tool` for shell/code analysis | | memory |
17
+ | **DigitalButlers** | `--instruction "Search for nearby restaurants"` | Delegating tasks requiring specific MCPs (search, home automation) | Agent-as-tool delegation, MCP usage by specialist agents | | duckduckgo-search, home-assistant |
18
+ | **DilbotUniverse (SQLite)** | `--instruction "Start the SDLC"` | Comedic SDLC simulation, instructions loaded from SQLite | Agent-as-tool delegation, SQLite integration for dynamic prompts | | sqlite |
19
+ | **Stewie** | `--instruction "Create WP post titled 'Hello'..."` | Coordinating WordPress operations via MCP | Agent-as-tool delegation, specialized agent using specific MCP (WP) | | server-wp-mcp |
20
+ | **MissionImprobable (SQLite)** | `--instruction "Use RollinFumble to run 'pwd'"` | Spy-themed ops, instructions from SQLite, multi-level delegation | Agent-as-tool delegation, SQLite integration, MCP usage (fs, shell, mem) | | memory, filesystem, mcp-shell |
21
+ | **WhiskeyTangoFoxtrot** | `--instruction "Find free vector DBs"` | Hierarchical agents tracking services using DB & web search | Multi-level agent delegation, SQLite, various search/scrape/doc MCPs | | sqlite, brave-search, mcp-npx-fetch, mcp-doc-forge, filesystem |
22
+ | **Zeus** | `--instruction "Design user auth API"` | Replacement for DivineOps/DivineCode/DivineAss, large-scale SW dev coordination (Design, Implement, DB, DevOps, Docs) | Complex delegation, wide range of MCP usage (search, shell, db, fs...) | software-development | memory, filesystem, mcp-shell, sqlite, sequential-thinking, brave-search |
23
+ | **WhingeSurf** | `--instruction "Analyze blueprint code"` | Self-analyzing/auto-improving blueprint, meta-agent demo | Code analysis, self-improvement, UX/ANSI output, meta-agent logic | software-development | None |
24
+ | **Gaggle** | `--instruction "Write story: cat library"` | Collaborative story writing (Planner, Writer, Editor) | Agent-as-tool delegation, function tools for writing steps | | None |
25
+ | **MonkaiMagic** | `--instruction "List AWS S3 buckets"` | Cloud operations (AWS, Fly, Vercel) via direct CLI function tools | `@function_tool` for external CLIs, agent-as-tool delegation | | mcp-shell (for Sandy) |
26
+ | **UnapologeticPress (SQLite)** | `--instruction "Write poem: city rain"` | Collaborative poetry writing by distinct "poet" agents, SQLite instructions | Agent-as-tool (all-to-all), SQLite, broad MCP usage | | Various (see blueprint) |
27
+ | **Omniplex** | `--instruction "Use filesystem to read README.md"` | Dynamically routes tasks based on MCP server type (npx, uvx, other) | Dynamic agent/tool creation based on available MCPs | | Dynamic (all available) |
27
28
 
28
29
  ## WIP / Needs Refactoring
29
30
 
@@ -11,7 +11,6 @@
11
11
  {"name": "dilbot", "status": "unknown", "notes": "Needs audit"},
12
12
  {"name": "divine_code", "status": "unknown", "notes": "Needs audit"},
13
13
  {"name": "django_chat", "status": "unknown", "notes": "Needs audit"},
14
- {"name": "family_ties", "status": "unknown", "notes": "Needs audit"},
15
14
  {"name": "flock", "status": "unknown", "notes": "Needs audit"},
16
15
  {"name": "gaggle", "status": "unknown", "notes": "Needs audit"},
17
16
  {"name": "gatcha", "status": "unknown", "notes": "Needs audit"},
@@ -21,6 +20,7 @@
21
20
  {"name": "nebula_shellz", "status": "unknown", "notes": "Needs audit"},
22
21
  {"name": "omniplex", "status": "unknown", "notes": "Needs audit"},
23
22
  {"name": "shell_demo", "status": "unknown", "notes": "Needs audit"},
23
+ {"name": "stewie", "status": "unknown", "notes": "Needs audit"},
24
24
  {"name": "unapologetic_press", "status": "unknown", "notes": "Needs audit"},
25
25
  {"name": "whiskeytango_foxtrot", "status": "unknown", "notes": "Needs audit"}
26
26
  ]
@@ -7,18 +7,6 @@ import sys
7
7
  from typing import Dict, Any, List, ClassVar, Optional
8
8
  import argparse
9
9
 
10
- # Set logging to WARNING by default unless SWARM_DEBUG=1
11
- if not os.environ.get("SWARM_DEBUG"):
12
- logging.basicConfig(level=logging.WARNING)
13
- else:
14
- logging.basicConfig(level=logging.DEBUG)
15
-
16
- # Set logging to WARNING by default unless SWARM_DEBUG=1
17
- if not os.environ.get("SWARM_DEBUG"):
18
- logging.basicConfig(level=logging.WARNING)
19
- else:
20
- logging.basicConfig(level=logging.DEBUG)
21
-
22
10
  # Set logging to WARNING by default unless SWARM_DEBUG=1
23
11
  if not os.environ.get("SWARM_DEBUG"):
24
12
  logging.basicConfig(level=logging.WARNING)
@@ -30,40 +18,22 @@ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..
30
18
  src_path = os.path.join(project_root, 'src')
31
19
  if src_path not in sys.path: sys.path.insert(0, src_path)
32
20
 
33
- from typing import Optional
34
- from pathlib import Path
35
- try:
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
52
- from agents.models.interface import Model
53
- from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
54
- from openai import AsyncOpenAI
55
- from swarm.core.blueprint_base import BlueprintBase
56
- except ImportError as e:
57
- print(f"ERROR: Import failed in ChatbotBlueprint: {e}. Check dependencies.")
58
- print(f"sys.path: {sys.path}")
59
- sys.exit(1)
21
+ from agents import Agent, function_tool
22
+ from agents.mcp import MCPServer
23
+ from agents.models.interface import Model
24
+ from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
25
+ from openai import AsyncOpenAI
26
+ from swarm.core.blueprint_base import BlueprintBase
27
+ from swarm.core.blueprint_ux import BlueprintUXImproved
28
+ from agents import Runner
60
29
 
61
30
  logger = logging.getLogger(__name__)
62
31
 
63
32
  # --- Define the Blueprint ---
64
33
  class ChatbotBlueprint(BlueprintBase):
65
- def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
66
- super().__init__(blueprint_id, config_path=config_path, **kwargs)
34
+ def __init__(self, blueprint_id: str = "chatbot", config=None, config_path=None, **kwargs):
35
+ super().__init__(blueprint_id, config=config, config_path=config_path, **kwargs)
36
+ self.ux = BlueprintUXImproved(style="serious")
67
37
  class DummyLLM:
68
38
  def chat_completion_stream(self, messages, **_):
69
39
  class DummyStream:
@@ -93,18 +63,15 @@ class ChatbotBlueprint(BlueprintBase):
93
63
  _openai_client_cache: Dict[str, AsyncOpenAI] = {}
94
64
  _model_instance_cache: Dict[str, Model] = {}
95
65
 
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
-
66
+ @function_tool
102
67
  def read_file(path: str) -> str:
103
68
  try:
104
69
  with open(path, 'r') as f:
105
70
  return f.read()
106
71
  except Exception as e:
107
72
  return f"ERROR: {e}"
73
+
74
+ @function_tool
108
75
  def write_file(path: str, content: str) -> str:
109
76
  try:
110
77
  with open(path, 'w') as f:
@@ -112,22 +79,37 @@ class ChatbotBlueprint(BlueprintBase):
112
79
  return "OK: file written"
113
80
  except Exception as e:
114
81
  return f"ERROR: {e}"
82
+
83
+ @function_tool
115
84
  def list_files(directory: str = '.') -> str:
116
85
  try:
117
86
  return '\n'.join(os.listdir(directory))
118
87
  except Exception as e:
119
88
  return f"ERROR: {e}"
89
+
90
+ @function_tool
120
91
  def execute_shell_command(command: str) -> str:
121
92
  import subprocess
93
+ import os
94
+ import logging
95
+ logger = logging.getLogger(__name__)
96
+ logger.info(f"Executing shell command: {command}")
122
97
  try:
123
- result = subprocess.run(command, shell=True, capture_output=True, text=True)
124
- return result.stdout + result.stderr
98
+ timeout = int(os.getenv("SWARM_COMMAND_TIMEOUT", "60"))
99
+ result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout)
100
+ output = f"Exit Code: {result.returncode}\n"
101
+ if result.stdout:
102
+ output += f"STDOUT:\n{result.stdout}\n"
103
+ if result.stderr:
104
+ output += f"STDERR:\n{result.stderr}\n"
105
+ logger.info(f"Command finished. Exit Code: {result.returncode}")
106
+ return output.strip()
107
+ except subprocess.TimeoutExpired:
108
+ logger.error(f"Command timed out: {command}")
109
+ return f"Error: Command timed out after {os.getenv('SWARM_COMMAND_TIMEOUT', '60')} seconds."
125
110
  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')
111
+ logger.error(f"Error executing command '{command}': {e}", exc_info=True)
112
+ return f"Error executing command: {e}"
131
113
 
132
114
  # --- Model Instantiation Helper --- (Standard helper)
133
115
  def _get_model_instance(self, profile_name: str) -> Model:
@@ -179,34 +161,128 @@ You are a helpful and friendly chatbot. Respond directly to the user's input in
179
161
  name="Chatbot",
180
162
  model=model_instance,
181
163
  instructions=chatbot_instructions,
182
- tools=[self.read_file_tool, self.write_file_tool, self.list_files_tool, self.execute_shell_command_tool],
164
+ tools=[self.read_file, self.write_file, self.list_files, self.execute_shell_command],
183
165
  mcp_servers=mcp_servers # Pass along, though likely unused
184
166
  )
185
167
 
186
168
  logger.debug("Chatbot agent created.")
187
169
  return chatbot_agent
188
170
 
189
- async def run(self, messages: List[Dict[str, Any]], **kwargs) -> Any:
171
+ async def run(self, messages: List[Dict[str, Any]], **kwargs):
190
172
  """Main execution entry point for the Chatbot blueprint."""
191
173
  logger.info("ChatbotBlueprint run method called.")
192
174
  instruction = messages[-1].get("content", "") if messages else ""
193
- async for chunk in self._run_non_interactive(instruction, **kwargs):
194
- yield chunk
195
- logger.info("ChatbotBlueprint run method finished.")
196
-
197
- async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
198
- mcp_servers = kwargs.get("mcp_servers", [])
199
- agent = self.create_starting_agent(mcp_servers=mcp_servers)
200
175
  from agents import Runner
201
- import os
202
- model_name = os.getenv("LITELLM_MODEL") or os.getenv("DEFAULT_LLM") or "gpt-3.5-turbo"
176
+ spinner_idx = 0
177
+ start_time = time.time()
178
+ spinner_yield_interval = 1.0 # seconds
179
+ last_spinner_time = start_time
180
+ yielded_spinner = False
181
+ result_chunks = []
203
182
  try:
204
- result = await Runner.run(agent, instruction)
205
- yield {"messages": [{"role": "assistant", "content": getattr(result, 'final_output', str(result))}]}
183
+ runner_gen = Runner.run(self.create_starting_agent([]), instruction)
184
+ while True:
185
+ now = time.time()
186
+ try:
187
+ chunk = next(runner_gen)
188
+ result_chunks.append(chunk)
189
+ # If chunk is a final result, wrap and yield
190
+ if chunk and isinstance(chunk, dict) and "messages" in chunk:
191
+ content = chunk["messages"][0]["content"] if chunk["messages"] else ""
192
+ summary = self.ux.summary("Operation", len(result_chunks), {"instruction": instruction[:40]})
193
+ box = self.ux.ansi_emoji_box(
194
+ title="Chatbot Result",
195
+ content=content,
196
+ summary=summary,
197
+ params={"instruction": instruction[:40]},
198
+ result_count=len(result_chunks),
199
+ op_type="run",
200
+ status="success"
201
+ )
202
+ yield {"messages": [{"role": "assistant", "content": box}]}
203
+ else:
204
+ yield chunk
205
+ yielded_spinner = False
206
+ except StopIteration:
207
+ break
208
+ except Exception:
209
+ if now - last_spinner_time >= spinner_yield_interval:
210
+ taking_long = (now - start_time > 10)
211
+ spinner_msg = self.ux.spinner(spinner_idx, taking_long=taking_long)
212
+ yield {"messages": [{"role": "assistant", "content": spinner_msg}]}
213
+ spinner_idx += 1
214
+ last_spinner_time = now
215
+ yielded_spinner = True
216
+ if not result_chunks and not yielded_spinner:
217
+ yield {"messages": [{"role": "assistant", "content": self.ux.spinner(0)}]}
206
218
  except Exception as e:
207
- logger.error(f"Error during non-interactive run: {e}", exc_info=True)
219
+ logger.error(f"Error during Chatbot run: {e}", exc_info=True)
208
220
  yield {"messages": [{"role": "assistant", "content": f"An error occurred: {e}"}]}
209
221
 
222
+ # --- Spinner and ANSI/emoji operation box for unified UX ---
223
+ from swarm.ux.ansi_box import ansi_box
224
+ from rich.console import Console
225
+ from rich.style import Style
226
+ from rich.text import Text
227
+ import threading
228
+ import time
229
+
230
+ class ChatbotSpinner:
231
+ FRAMES = [
232
+ "Generating.", "Generating..", "Generating...", "Running...",
233
+ "⠋ Generating...", "⠙ Generating...", "⠹ Generating...", "⠸ Generating...",
234
+ "⠼ Generating...", "⠴ Generating...", "⠦ Generating...", "⠧ Generating...",
235
+ "⠇ Generating...", "⠏ Generating...", "🤖 Generating...", "💡 Generating...", "✨ Generating..."
236
+ ]
237
+ SLOW_FRAME = "⏳ Generating... Taking longer than expected"
238
+ INTERVAL = 0.12
239
+ SLOW_THRESHOLD = 10 # seconds
240
+
241
+ def __init__(self):
242
+ self._stop_event = threading.Event()
243
+ self._thread = None
244
+ self._start_time = None
245
+ self.console = Console()
246
+
247
+ def start(self):
248
+ self._stop_event.clear()
249
+ self._start_time = time.time()
250
+ self._thread = threading.Thread(target=self._spin, daemon=True)
251
+ self._thread.start()
252
+
253
+ def _spin(self):
254
+ idx = 0
255
+ while not self._stop_event.is_set():
256
+ elapsed = time.time() - self._start_time
257
+ if elapsed > self.SLOW_THRESHOLD:
258
+ txt = Text(self.SLOW_FRAME, style=Style(color="yellow", bold=True))
259
+ else:
260
+ frame = self.FRAMES[idx % len(self.FRAMES)]
261
+ txt = Text(frame, style=Style(color="cyan", bold=True))
262
+ self.console.print(txt, end="\r", soft_wrap=True, highlight=False)
263
+ time.sleep(self.INTERVAL)
264
+ idx += 1
265
+ self.console.print(" " * 40, end="\r") # Clear line
266
+
267
+ def stop(self, final_message="Done!"):
268
+ self._stop_event.set()
269
+ if self._thread:
270
+ self._thread.join()
271
+ self.console.print(Text(final_message, style=Style(color="green", bold=True)))
272
+
273
+ def print_operation_box(op_type, results, params=None, result_type="chat", taking_long=False):
274
+ emoji = "💬" if result_type == "chat" else "🔍"
275
+ style = 'success' if result_type == "chat" else 'default'
276
+ box_title = op_type if op_type else ("Chatbot Output" if result_type == "chat" else "Results")
277
+ summary_lines = []
278
+ count = len(results) if isinstance(results, list) else 0
279
+ summary_lines.append(f"Results: {count}")
280
+ if params:
281
+ for k, v in params.items():
282
+ summary_lines.append(f"{k.capitalize()}: {v}")
283
+ box_content = "\n".join(summary_lines + ["\n".join(map(str, results))])
284
+ ansi_box(box_title, box_content, count=count, params=params, style=style if not taking_long else 'warning', emoji=emoji)
285
+
210
286
  # Standard Python entry point
211
287
  if __name__ == "__main__":
212
288
  import sys
@@ -225,8 +301,20 @@ if __name__ == "__main__":
225
301
 
226
302
  blueprint = ChatbotBlueprint(blueprint_id="chatbot")
227
303
  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)
304
+ spinner = ChatbotSpinner()
305
+ spinner.start()
306
+ try:
307
+ all_results = []
308
+ async for chunk in blueprint._run_non_interactive(instruction):
309
+ msg = chunk["messages"][0]["content"]
310
+ if not msg.startswith("An error occurred:"):
311
+ all_results.append(msg)
312
+ finally:
313
+ spinner.stop()
314
+ print_operation_box(
315
+ op_type="Chatbot Output",
316
+ results=all_results,
317
+ params={"instruction": instruction},
318
+ result_type="chat"
319
+ )
232
320
  asyncio.run(runner())
@@ -0,0 +1,143 @@
1
+ # Codey Blueprint
2
+
3
+ **Codey** is special because it presents advanced session management and code automation for developers using Open Swarm. It provides a seamless experience for managing code sessions, running code, and integrating with git and other developer tools.
4
+
5
+ ## Special Feature
6
+ - **Session Management & Code Automation:** Manage your coding sessions, automate repetitive tasks, and streamline your workflow with Codey.
7
+
8
+ 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.
9
+
10
+ ---
11
+
12
+ ## ✅ Features Implemented
13
+
14
+ - **Global Instructions**: Reads and injects `~/.codey/instructions.md` as a base prompt for orchestration/coordinator agent.
15
+ - **Agent Delegation**: Supports delegating tasks to specialized sub-agents (e.g., GitHub agent, code review agent).
16
+ - **Tool Integration**: Git, file, and shell tools available to agents (e.g., git status, add, commit, push, file read/write).
17
+ - **Dynamic Prompt Construction**: User requests, history, and tool descriptions included in LLM prompt.
18
+ - **Basic ANSI/Emoji Output**: Some CLI output uses boxes/emojis for better UX.
19
+ - **Rich Syntax Highlighting**: Code fences in assistant responses are colorized via Rich.
20
+ - **Slash Commands**: Built-in `/help`, `/compact`, `/model`, `/approval`, `/history`, `/clear`, and `/clearhistory` available.
21
+ - **Testable via CLI**: Supports test-driven development and CLI-based interaction.
22
+ - **Project-Level Instructions**: Automatically loaded and injected from `CODEY.md` if present in the project. No manual step required.
23
+ - **Interactive/Approval Mode**: Supports interactive prompts for git operations in suggest mode.
24
+ - **Unified Rich Output Formatting**: Unified and enhanced rich output formatting (boxes, emojis, result summaries).
25
+ - **Custom Spinner/Progress Messages**: Custom spinner/progress messages for better UX.
26
+ - **Persistent Session Logging/Audit Trail**: Persistent log of actions, plans, or outputs.
27
+ - **Full-Context Mode**: Full-context mode for large refactor/analysis.
28
+ - **Writable Root/Sandboxing CLI/Config Support**: Writable root/sandboxing CLI/config support.
29
+ - **Command Suggestions/Typeahead/Autocomplete**: Command suggestions/typeahead/autocomplete (CLI and slash commands).
30
+ - **Session/History Management and Overlays**: Session/history management and overlays.
31
+ - **Model Selection Overlay and CLI/Agent-Specific Support**: Model selection overlay and CLI/agent-specific support.
32
+ - **Help and Onboarding Overlays**: Help and onboarding overlays.
33
+ - **Desktop Notification Support**: Desktop notification support (optional).
34
+ - **Dangerous Auto-Approve Flag/UX**: Dangerous auto-approve flag/UX.
35
+ - **Output Formatting/Full Stdout Option**: Output formatting/full stdout option.
36
+ - **Image Input**: Image input (CLI/UX, future-proof).
37
+
38
+ ---
39
+
40
+ ## ⚠️ Features Partially Implemented
41
+
42
+ - **File/Directory Context Awareness**: File tools exist, but no automatic context file loading or project scanning.
43
+ - **Rich Output Formatting**: Some ANSI/emoji UX, but not unified or as rich as Codex.
44
+ - **User Feedback Loop**: No mechanism for user feedback/corrections mid-session.
45
+
46
+ ---
47
+
48
+ ## ❌ Features Not Yet Implemented
49
+
50
+ - **Automatic Plan/Changelog Updates**: Agent does not maintain `.codey/plan_*.md` or changelogs automatically.
51
+ - **Automatic Context Injection**: Agent does not scan/include relevant files automatically in prompts.
52
+
53
+ ---
54
+
55
+ ## Codex CLI Feature Parity Checklist
56
+
57
+ This blueprint aims to match all core and advanced features of the OpenAI Codex CLI. Below is the current status:
58
+
59
+ ### ✅ Already Implemented
60
+ - Rich output/emoji/spinner UX (unified for search, analysis, file ops)
61
+ - Modular agent/blueprint system
62
+ - Interactive CLI mode (basic)
63
+ - Approval mode for git ops and some agent actions
64
+ - Syntax-highlighted code output
65
+ - Project-level instruction auto-loading (e.g., CODEY.md)
66
+ - Slash commands: `/help`, `/compact`, `/model`, `/approval`, `/history`, `/clear`, `/clearhistory` (basic)
67
+ - Persistent session logging/audit trail
68
+ - Full-context mode for large refactor/analysis
69
+ - Writable root/sandboxing CLI/config support
70
+ - Command suggestions/typeahead/autocomplete (CLI and slash commands)
71
+ - Session/history management and overlays
72
+ - Model selection overlay and CLI/agent-specific support
73
+ - Help and onboarding overlays
74
+ - Desktop notification support (optional)
75
+ - Dangerous auto-approve flag/UX
76
+ - Output formatting/full stdout option
77
+ - Image input (CLI/UX, future-proof)
78
+
79
+ ### ⚠️ Partially Implemented
80
+ - Approval modes (full-auto, interactive, granular gating for all agent/file/code actions)
81
+ - Directory sandboxing (not enforced everywhere, no network controls)
82
+ - CLI/config file support (not unified or live-reloadable)
83
+ - Version control integration (git ops for suggest mode only)
84
+
85
+ ### ❌ Not Yet Implemented
86
+ - Auto dependency install for generated code
87
+ - Automatic context/project file injection
88
+ - Plan/changelog file maintenance
89
+ - User feedback/correction loop
90
+ - Streaming token-by-token CLI output
91
+ - Non-interactive/CI/headless mode
92
+ - Multimodal input (screenshots/diagrams)
93
+ - Atomic commit/rollback for all agent actions
94
+ - Safety/ZDR org restrictions
95
+
96
+ ---
97
+
98
+ ### Implementation Roadmap
99
+ - [ ] Approval modes for all agent/file/code actions
100
+ - [ ] Directory/network sandboxing for all agent execution
101
+ - [ ] Auto dependency install for generated code
102
+ - [ ] Automatic context injection for prompts
103
+ - [ ] Plan/changelog file maintenance
104
+ - [ ] User feedback/correction loop
105
+ - [ ] Streaming CLI output
106
+ - [ ] Non-interactive/CI/headless mode
107
+ - [ ] Multimodal input support
108
+ - [ ] Atomic commit/rollback for all agent actions
109
+ - [ ] Safety/ZDR org restrictions
110
+
111
+ ---
112
+
113
+ **See the root README for framework-wide feature status.**
114
+
115
+ ---
116
+
117
+ ## TODO
118
+
119
+ - [x] Implement interactive/approval mode for agent actions
120
+ - [x] Unify and enhance rich output formatting (boxes, emojis, result summaries)
121
+ - [x] Add custom spinner/progress messages
122
+ - [x] Enable automatic plan/changelog file updates
123
+ - [x] Add project-level instruction auto-loading (e.g., `CODEY.md`)
124
+ - [ ] Improve file/directory context awareness and context injection
125
+ - [ ] Add user feedback/correction loop
126
+ - [x] Add persistent session logging/audit trail
127
+ - [ ] Implement summarization logic for `/compact` slash command
128
+ - [ ] Implement model switching for `/model` slash command
129
+ - [ ] Implement approval toggle for `/approval` slash command
130
+ - [ ] Implement session history persistence for `/history` and `/clearhistory`
131
+ - [ ] Enhance screen/context clearing for `/clear` slash command
132
+ - [ ] Add interactive overlays for `/help`, `/model`, `/approval`, `/history`
133
+ - [ ] Support external editor integration for prompts (e.g., `/edit` or Ctrl+E)
134
+ - [ ] Add keyboard shortcut support (Ctrl+J newline, arrow history, Esc interrupt, Ctrl+C quit)
135
+ - [ ] Enable streaming token-by-token responses in CLI
136
+ - [ ] Expose `/explain` slash command for detailed shell command explanations
137
+ - [ ] Add file-related slash commands (`/ls`, `/cat`, `/edit`)
138
+ - [ ] Implement live config reload from `.env` or config file
139
+ - [ ] Add suggestion/autocomplete for commands
140
+
141
+ ---
142
+
143
+ Contributions and suggestions welcome! See `~/.codey/instructions.md` for global defaults, and update this TODO list as features are added.