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.
Files changed (344) hide show
  1. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/PKG-INFO +29 -1
  2. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/README.md +28 -0
  3. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/pyproject.toml +1 -1
  4. open_swarm-0.1.1745019957/src/swarm/blueprints/blueprint_audit_status.json +27 -0
  5. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +79 -22
  6. open_swarm-0.1.1745019957/src/swarm/blueprints/codey/CODEY.md +15 -0
  7. open_swarm-0.1.1745019957/src/swarm/blueprints/codey/README.md +63 -0
  8. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/codey/blueprint_codey.py +179 -108
  9. open_swarm-0.1.1745019957/src/swarm/blueprints/codey/instructions.md +17 -0
  10. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +113 -7
  11. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/blueprint_django_chat.py +47 -0
  12. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/blueprint_family_ties.py +43 -10
  13. open_swarm-0.1.1745019957/src/swarm/blueprints/geese/blueprint_geese.py +219 -0
  14. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +120 -63
  15. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +45 -1
  16. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +43 -27
  17. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +44 -31
  18. open_swarm-0.1.1745019957/src/swarm/blueprints/rue_code/blueprint_rue_code.py +294 -0
  19. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +8 -17
  20. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/unapologetic_press/blueprint_unapologetic_press.py +100 -1
  21. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +52 -28
  22. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_ux.py +19 -21
  23. open_swarm-0.1.1745019957/src/swarm/core/cli/__init__.py +1 -0
  24. open_swarm-0.1.1745019957/src/swarm/core/cli/commands/__init__.py +1 -0
  25. open_swarm-0.1.1745019957/src/swarm/core/cli/commands/blueprint_management.py +7 -0
  26. open_swarm-0.1.1745019957/src/swarm/core/cli/interactive_shell.py +14 -0
  27. open_swarm-0.1.1745019957/src/swarm/core/cli/main.py +50 -0
  28. open_swarm-0.1.1745019957/src/swarm/core/cli/utils/__init__.py +1 -0
  29. open_swarm-0.1.1745019957/src/swarm/core/cli/utils/discover_commands.py +18 -0
  30. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/cli_handler.py +20 -2
  31. open_swarm-0.1.1745019957/src/swarm/extensions/cli/commands/blueprint_management.py +69 -0
  32. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/edit_config.py +8 -1
  33. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/validate_env.py +8 -1
  34. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/interactive_shell.py +16 -2
  35. open_swarm-0.1.1745019957/src/swarm/extensions/cli/utils/__init__.py +1 -0
  36. open_swarm-0.1.1745019957/src/swarm/extensions/cli/utils/prompt_user.py +3 -0
  37. open_swarm-0.1.1745019957/src/swarm/extensions/launchers/swarm_api.py +12 -0
  38. open_swarm-0.1.1745019957/src/swarm/extensions/launchers/swarm_cli.py +12 -0
  39. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/context_utils.py +10 -4
  40. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_chatbot.py +13 -16
  41. open_swarm-0.1.1745019957/tests/blueprints/test_codey.py +29 -0
  42. open_swarm-0.1.1745019957/tests/blueprints/test_codey_approval_mode.py +53 -0
  43. open_swarm-0.1.1745019957/tests/blueprints/test_codey_github.py +25 -0
  44. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_divine_code.py +2 -3
  45. open_swarm-0.1.1745019957/tests/blueprints/test_geese.py +58 -0
  46. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_mission_improbable.py +9 -5
  47. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_whiskeytangofoxtrot.py +5 -5
  48. open_swarm-0.1.1745019957/tests/integration/test_cli_commands.py +47 -0
  49. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_truncate_message_history.py +0 -1
  50. open_swarm-0.1.1745019957/tests/unit/test_output_utils.py +31 -0
  51. open_swarm-0.1.1745019957/tests/unit/test_slash_commands.py +22 -0
  52. open_swarm-0.1.1745019399/src/swarm/blueprints/gaggle/blueprint_gaggle.py +0 -303
  53. open_swarm-0.1.1745019399/src/swarm/blueprints/rue_code/blueprint_rue_code.py +0 -294
  54. open_swarm-0.1.1745019399/src/swarm/extensions/cli/commands/blueprint_management.py +0 -31
  55. open_swarm-0.1.1745019399/src/swarm/llm/chat_completion.py +0 -196
  56. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/.gitignore +0 -0
  57. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/LICENSE +0 -0
  58. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/__init__.py +0 -0
  59. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/agent/__init__.py +0 -0
  60. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/apps.py +0 -0
  61. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/auth.py +0 -0
  62. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/README.md +0 -0
  63. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
  64. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +0 -0
  65. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/__init__.py +0 -0
  66. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/divine_code/apps.py +0 -0
  67. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/apps.py +0 -0
  68. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
  69. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/urls.py +0 -0
  70. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/django_chat/views.py +0 -0
  71. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +0 -0
  72. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/apps.py +0 -0
  73. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/models.py +0 -0
  74. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/serializers.py +0 -0
  75. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/settings.py +0 -0
  76. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/urls.py +0 -0
  77. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/family_ties/views.py +0 -0
  78. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/flock/__init__.py +0 -0
  79. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +0 -0
  80. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
  81. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/rue_code/__init__.py +0 -0
  82. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
  83. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
  84. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/consumers.py +0 -0
  85. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/agent_utils.py +0 -0
  86. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_base.py +0 -0
  87. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_discovery.py +0 -0
  88. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_runner.py +0 -0
  89. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/blueprint_utils.py +0 -0
  90. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/build_launchers.py +0 -0
  91. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/build_swarm_wrapper.py +0 -0
  92. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/common_utils.py +0 -0
  93. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/config_loader.py +0 -0
  94. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/config_manager.py +0 -0
  95. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/output_utils.py +0 -0
  96. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/server_config.py +0 -0
  97. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/session_logger.py +0 -0
  98. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/setup_wizard.py +0 -0
  99. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/slash_commands.py +0 -0
  100. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/spinner.py +0 -0
  101. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_api.py +0 -0
  102. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_cli.py +0 -0
  103. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/swarm_wrapper.py +0 -0
  104. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/utils/__init__.py +0 -0
  105. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/core/utils/logger.py +0 -0
  106. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/__init__.py +0 -0
  107. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/__init__.py +0 -0
  108. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/django_utils.py +0 -0
  109. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
  110. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
  111. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
  112. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/__init__.py +0 -0
  113. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
  114. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/cli_args.py +0 -0
  115. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/__init__.py +0 -0
  116. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/config_management.py +0 -0
  117. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/list_blueprints.py +0 -0
  118. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/commands/validate_envvars.py +0 -0
  119. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/main.py +0 -0
  120. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/selection.py +0 -0
  121. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
  122. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
  123. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/cli/utils.py +0 -0
  124. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/config/__init__.py +0 -0
  125. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/config/config_loader.py +0 -0
  126. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/extensions/launchers/__init__.py +0 -0
  127. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/__init__.py +0 -0
  128. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/commands/__init__.py +0 -0
  129. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/management/commands/runserver.py +0 -0
  130. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/messages.py +0 -0
  131. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/middleware.py +0 -0
  132. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
  133. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/migrations/__init__.py +0 -0
  134. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/models.py +0 -0
  135. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/permissions.py +0 -0
  136. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/repl/__init__.py +0 -0
  137. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/repl/repl.py +0 -0
  138. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/serializers.py +0 -0
  139. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/settings.py +0 -0
  140. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
  141. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
  142. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
  143. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
  144. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
  145. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
  146. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
  147. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
  148. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
  149. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
  150. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
  151. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
  152. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
  153. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
  154. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
  155. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
  156. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
  157. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
  158. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
  159. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
  160. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
  161. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
  162. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
  163. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
  164. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
  165. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
  166. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
  167. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
  168. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
  169. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
  170. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
  171. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
  172. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/css/dropdown.css +0 -0
  173. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/htmx/htmx.min.js +0 -0
  174. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/js/dropdown.js +0 -0
  175. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/base.css +0 -0
  176. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
  177. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chat.css +0 -0
  178. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
  179. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
  180. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
  181. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
  182. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
  183. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/general.css +0 -0
  184. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layout.css +0 -0
  185. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
  186. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
  187. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
  188. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/messages.css +0 -0
  189. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/messenger.css +0 -0
  190. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/settings.css +0 -0
  191. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/simple.css +0 -0
  192. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/slack.css +0 -0
  193. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/style.css +0 -0
  194. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/theme.css +0 -0
  195. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/css/toast.css +0 -0
  196. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/auth.js +0 -0
  197. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
  198. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
  199. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
  200. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/debug.js +0 -0
  201. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/events.js +0 -0
  202. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/main.js +0 -0
  203. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/messages.js +0 -0
  204. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
  205. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
  206. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
  207. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
  208. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
  209. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
  210. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
  211. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
  212. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
  213. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
  214. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/rendering.js +0 -0
  215. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/settings.js +0 -0
  216. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
  217. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
  218. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
  219. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/splash.js +0 -0
  220. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/theme.js +0 -0
  221. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/toast.js +0 -0
  222. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/ui.js +0 -0
  223. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/js/validation.js +0 -0
  224. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
  225. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
  226. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
  227. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
  228. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
  229. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
  230. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
  231. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
  232. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
  233. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/close.svg +0 -0
  234. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
  235. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
  236. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
  237. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
  238. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
  239. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
  240. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
  241. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
  242. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
  243. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
  244. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
  245. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/save.svg +0 -0
  246. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/search.svg +0 -0
  247. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
  248. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
  249. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
  250. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
  251. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
  252. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
  253. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
  254. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
  255. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
  256. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
  257. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
  258. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/account/login.html +0 -0
  259. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/account/signup.html +0 -0
  260. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/base.html +0 -0
  261. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/chat.html +0 -0
  262. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/index.html +0 -0
  263. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
  264. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/header.html +0 -0
  265. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
  266. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
  267. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
  268. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
  269. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/message_ui.html +0 -0
  270. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/rest_mode/slackbot.html +0 -0
  271. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/simple_blueprint_page.html +0 -0
  272. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
  273. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/system_message.html +0 -0
  274. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/templates/websocket_partials/user_message.html +0 -0
  275. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/tool_executor.py +0 -0
  276. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/urls.py +0 -0
  277. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/util.py +0 -0
  278. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/color_utils.py +0 -0
  279. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/general_utils.py +0 -0
  280. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/log_utils.py +0 -0
  281. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/logger.py +0 -0
  282. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/logger_setup.py +0 -0
  283. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/message_sequence.py +0 -0
  284. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/message_utils.py +0 -0
  285. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/utils/redact.py +0 -0
  286. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/__init__.py +0 -0
  287. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/api_views.py +0 -0
  288. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/chat_views.py +0 -0
  289. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/core_views.py +0 -0
  290. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/message_views.py +0 -0
  291. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/model_views.py +0 -0
  292. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/utils.py +0 -0
  293. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/views/web_views.py +0 -0
  294. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/src/swarm/wsgi.py +0 -0
  295. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/__init__.py +0 -0
  296. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/conftest.py +0 -0
  297. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_auth_async.py +0 -0
  298. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_failing_async.py +0 -0
  299. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/api/test_chat_completions_validation_async.py +0 -0
  300. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_digitalbutlers.py +0 -0
  301. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_dilbot_universe.py +0 -0
  302. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_echocraft.py +0 -0
  303. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_family_ties.py +0 -0
  304. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_gaggle.py +0 -0
  305. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_gotchaman.py +0 -0
  306. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_mcp_demo.py +0 -0
  307. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_monkai_magic.py +0 -0
  308. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_nebula_shellz.py +0 -0
  309. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_omniplex.py +0 -0
  310. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_suggestion.py +0 -0
  311. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/blueprints/test_unapologetic_press.py +0 -0
  312. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_cli_config.py +0 -0
  313. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_launchers.py +0 -0
  314. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/cli/test_list_blueprints.py +0 -0
  315. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/conftest.py +0 -0
  316. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/extensions/launchers/test_swarm_api_launcher.py +0 -0
  317. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/swarm_config.json +0 -0
  318. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_chucks_angels.sh +0 -0
  319. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_digitalbutlers.sh +0 -0
  320. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_dilbot_universe.sh +0 -0
  321. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_divine_code.sh +0 -0
  322. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_django_chat.sh +0 -0
  323. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_echocraft.sh +0 -0
  324. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_family_ties.sh +0 -0
  325. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_flock.sh +0 -0
  326. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_gaggle.sh +0 -0
  327. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_gotchaman.sh +0 -0
  328. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_monkai-magic.sh +0 -0
  329. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_nebula_shellz.sh +0 -0
  330. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_omniplex.sh +0 -0
  331. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_rue-code.sh +0 -0
  332. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_suggestion.sh +0 -0
  333. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_unapologetic_press.sh +0 -0
  334. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_university.sh +0 -0
  335. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
  336. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_blueprint_loading.py +0 -0
  337. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_cli_mode_selection.py +0 -0
  338. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_filter_duplicate_system_messages.py +0 -0
  339. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_filter_messages.py +0 -0
  340. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_core_update_null_content.py +0 -0
  341. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_dummy.py +0 -0
  342. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/test_truncate_message_history.py +0 -0
  343. {open_swarm-0.1.1745019399 → open_swarm-0.1.1745019957}/tests/unit/blueprints/rue_code/test_rue_code_tools.py +0 -0
  344. {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.1745019399
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.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "open-swarm"
7
- version = "0.1.1745019399"
7
+ version = "0.1.1745019957"
8
8
  description = "Open Swarm: Orchestrating AI Agent Swarms with Django"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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
- from agents import Agent, MCPServer
31
- from agents.mcp import MCPServer
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 = "You are a helpful and friendly chatbot. Respond directly to the user's input in a conversational manner."
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=[], # No function tools needed for simple chat
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; load_dotenv(override=True)
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 swarm.core.spinner import Spinner as TerminalSpinner
29
-
30
- # --- Tool Logic Definitions ---
31
- def git_status() -> str:
32
- return "OK: git status placeholder"
33
- def git_diff() -> str:
34
- return "OK: git diff placeholder"
35
- def git_add() -> str:
36
- return "OK: git add placeholder"
37
- def git_commit(message: str) -> str:
38
- return f"OK: git commit '{message}' placeholder"
39
- def git_push() -> str:
40
- return "OK: git push placeholder"
41
- def run_npm_test(args: str = "") -> str:
42
- return "OK: npm test placeholder"
43
- def run_pytest(args: str = "") -> str:
44
- return "OK: pytest placeholder"
45
-
46
- # Patch: Expose underlying fileops functions for direct testing
47
- class PatchedFunctionTool:
48
- def __init__(self, func, name):
49
- self.func = func
50
- self.name = name
51
-
52
- # --- FileOps Tool Logic Definitions ---
53
- def read_file(path: str) -> str:
54
- try:
55
- with open(path, 'r') as f:
56
- return f.read()
57
- except Exception as e:
58
- return f"ERROR: {e}"
59
- def write_file(path: str, content: str) -> str:
60
- try:
61
- with open(path, 'w') as f:
62
- f.write(content)
63
- return "OK: file written"
64
- except Exception as e:
65
- return f"ERROR: {e}"
66
- def list_files(directory: str = '.') -> str:
67
- try:
68
- return '\n'.join(os.listdir(directory))
69
- except Exception as e:
70
- return f"ERROR: {e}"
71
- def execute_shell_command(command: str) -> str:
72
- import subprocess
73
- try:
74
- result = subprocess.run(command, shell=True, capture_output=True, text=True)
75
- return result.stdout + result.stderr
76
- except Exception as e:
77
- return f"ERROR: {e}"
78
- read_file_tool = PatchedFunctionTool(read_file, 'read_file')
79
- write_file_tool = PatchedFunctionTool(write_file, 'write_file')
80
- list_files_tool = PatchedFunctionTool(list_files, 'list_files')
81
- execute_shell_command_tool = PatchedFunctionTool(execute_shell_command, 'execute_shell_command')
82
-
83
- git_status_tool = function_tool(git_status)
84
- git_diff_tool = function_tool(git_diff)
85
- git_add_tool = function_tool(git_add)
86
- git_commit_tool = function_tool(git_commit)
87
- git_push_tool = function_tool(git_push)
88
- run_npm_test_tool = function_tool(run_npm_test)
89
- run_pytest_tool = function_tool(run_pytest)
90
-
91
- linus_corvalds_instructions = """
92
- You are Linus Corvalds, the resolute leader of the Codey creative team.
93
-
94
- Respond directly and naturally to any user prompt that is creative, general, or conversational (for example, if the user asks you to write a poem, haiku, or answer a question, reply in plain language—do NOT invoke any tools or functions).
95
-
96
- Only use your available tools (git_status, git_diff, git_add, git_commit, git_push) if the user specifically requests a git/code operation, or if the request cannot be fulfilled without a tool.
97
-
98
- You can use fileops tools (read_file, write_file, list_files, execute_shell_command) for any file or shell tasks.
99
-
100
- If you are unsure, prefer a direct response. Never output tool schema, argument names, or placeholders to the user.
101
- """
102
-
103
- fiona_instructions = """
104
- You are Fiona Flame, the diligent git ops specialist for the Codey team.
105
-
106
- Respond directly and naturally to creative or conversational prompts. Only use your tools (git_status, git_diff, git_add, git_commit, git_push) for explicit git/code requests.
107
-
108
- You can use fileops tools (read_file, write_file, list_files, execute_shell_command) for any file or shell tasks.
109
- """
110
-
111
- sammy_instructions = """
112
- You are SammyScript, the test runner and automation specialist.
113
-
114
- For creative or general prompts, reply in natural language. Only use your tools (run_npm_test, run_pytest) for explicit test/code requests.
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
- You can use fileops tools (read_file, write_file, list_files, execute_shell_command) for any file or shell tasks.
117
- """
201
+ if __name__ == "__main__":
202
+ # Call CLI main
203
+ sys.exit(_cli_main())
118
204
 
119
- # --- ANSI/Emoji Box Output Helpers ---
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):