@_vrsen/openswarm 0.1.0

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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/bin/openswarm.js +38 -0
  4. package/config.py +34 -0
  5. package/data_analyst_agent/.cursor/rules/data_analyst.mdc +43 -0
  6. package/data_analyst_agent/__init__.py +3 -0
  7. package/data_analyst_agent/__pycache__/__init__.cpython-312.pyc +0 -0
  8. package/data_analyst_agent/__pycache__/data_analyst_agent.cpython-312.pyc +0 -0
  9. package/data_analyst_agent/data_analyst_agent.py +45 -0
  10. package/data_analyst_agent/instructions.md +173 -0
  11. package/data_analyst_agent/test_files/test_file.csv +21 -0
  12. package/data_analyst_agent/tools/__init__.py +6 -0
  13. package/deep_research/__init__.py +1 -0
  14. package/deep_research/__pycache__/__init__.cpython-312.pyc +0 -0
  15. package/deep_research/__pycache__/deep_research.cpython-312.pyc +0 -0
  16. package/deep_research/deep_research.py +27 -0
  17. package/deep_research/instructions.md +104 -0
  18. package/deep_research/tools/__init__.py +1 -0
  19. package/docs_agent/__init__.py +3 -0
  20. package/docs_agent/__pycache__/__init__.cpython-312.pyc +0 -0
  21. package/docs_agent/__pycache__/docs_agent.cpython-312.pyc +0 -0
  22. package/docs_agent/docs_agent.py +61 -0
  23. package/docs_agent/instructions.md +418 -0
  24. package/docs_agent/tools/ConvertDocument.py +323 -0
  25. package/docs_agent/tools/CreateDocument.py +287 -0
  26. package/docs_agent/tools/ListDocuments.py +134 -0
  27. package/docs_agent/tools/ModifyDocument.py +247 -0
  28. package/docs_agent/tools/RestoreDocument.py +79 -0
  29. package/docs_agent/tools/ViewDocument.py +153 -0
  30. package/docs_agent/tools/__init__.py +1 -0
  31. package/docs_agent/tools/__pycache__/ConvertDocument.cpython-312.pyc +0 -0
  32. package/docs_agent/tools/__pycache__/CreateDocument.cpython-312.pyc +0 -0
  33. package/docs_agent/tools/__pycache__/ListDocuments.cpython-312.pyc +0 -0
  34. package/docs_agent/tools/__pycache__/ModifyDocument.cpython-312.pyc +0 -0
  35. package/docs_agent/tools/__pycache__/RestoreDocument.cpython-312.pyc +0 -0
  36. package/docs_agent/tools/__pycache__/ViewDocument.cpython-312.pyc +0 -0
  37. package/docs_agent/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  38. package/docs_agent/tools/utils/__init__.py +1 -0
  39. package/docs_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  40. package/docs_agent/tools/utils/__pycache__/doc_file_utils.cpython-312.pyc +0 -0
  41. package/docs_agent/tools/utils/__pycache__/html_docx_blocks.cpython-312.pyc +0 -0
  42. package/docs_agent/tools/utils/__pycache__/html_docx_constants.cpython-312.pyc +0 -0
  43. package/docs_agent/tools/utils/__pycache__/html_docx_core.cpython-312.pyc +0 -0
  44. package/docs_agent/tools/utils/__pycache__/html_docx_css.cpython-312.pyc +0 -0
  45. package/docs_agent/tools/utils/__pycache__/html_docx_images.cpython-312.pyc +0 -0
  46. package/docs_agent/tools/utils/__pycache__/html_docx_page.cpython-312.pyc +0 -0
  47. package/docs_agent/tools/utils/__pycache__/html_docx_paragraphs.cpython-312.pyc +0 -0
  48. package/docs_agent/tools/utils/__pycache__/html_docx_playwright.cpython-312.pyc +0 -0
  49. package/docs_agent/tools/utils/__pycache__/html_docx_selectors.cpython-312.pyc +0 -0
  50. package/docs_agent/tools/utils/__pycache__/html_docx_shared.cpython-312.pyc +0 -0
  51. package/docs_agent/tools/utils/__pycache__/html_validation.cpython-312.pyc +0 -0
  52. package/docs_agent/tools/utils/doc_file_utils.py +29 -0
  53. package/docs_agent/tools/utils/html_docx_blocks.py +262 -0
  54. package/docs_agent/tools/utils/html_docx_constants.py +78 -0
  55. package/docs_agent/tools/utils/html_docx_core.py +138 -0
  56. package/docs_agent/tools/utils/html_docx_css.py +262 -0
  57. package/docs_agent/tools/utils/html_docx_images.py +293 -0
  58. package/docs_agent/tools/utils/html_docx_page.py +185 -0
  59. package/docs_agent/tools/utils/html_docx_paragraphs.py +342 -0
  60. package/docs_agent/tools/utils/html_docx_playwright.py +184 -0
  61. package/docs_agent/tools/utils/html_docx_selectors.py +196 -0
  62. package/docs_agent/tools/utils/html_docx_shared.py +23 -0
  63. package/docs_agent/tools/utils/html_docx_tables.py +942 -0
  64. package/docs_agent/tools/utils/html_validation.py +102 -0
  65. package/helpers.py +59 -0
  66. package/image_generation_agent/__init__.py +1 -0
  67. package/image_generation_agent/__pycache__/__init__.cpython-312.pyc +0 -0
  68. package/image_generation_agent/__pycache__/image_generation_agent.cpython-312.pyc +0 -0
  69. package/image_generation_agent/image_generation_agent.py +31 -0
  70. package/image_generation_agent/instructions.md +80 -0
  71. package/image_generation_agent/tools/CombineImages.py +211 -0
  72. package/image_generation_agent/tools/EditImages.py +200 -0
  73. package/image_generation_agent/tools/GenerateImages.py +184 -0
  74. package/image_generation_agent/tools/RemoveBackground.py +108 -0
  75. package/image_generation_agent/tools/__init__.py +2 -0
  76. package/image_generation_agent/tools/__pycache__/CombineImages.cpython-312.pyc +0 -0
  77. package/image_generation_agent/tools/__pycache__/EditImages.cpython-312.pyc +0 -0
  78. package/image_generation_agent/tools/__pycache__/GenerateImages.cpython-312.pyc +0 -0
  79. package/image_generation_agent/tools/__pycache__/RemoveBackground.cpython-312.pyc +0 -0
  80. package/image_generation_agent/tools/utils/__init__.py +2 -0
  81. package/image_generation_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  82. package/image_generation_agent/tools/utils/__pycache__/image_io.cpython-312.pyc +0 -0
  83. package/image_generation_agent/tools/utils/image_io.py +308 -0
  84. package/onboard.py +325 -0
  85. package/orchestrator/__init__.py +3 -0
  86. package/orchestrator/__pycache__/__init__.cpython-312.pyc +0 -0
  87. package/orchestrator/__pycache__/orchestrator.cpython-312.pyc +0 -0
  88. package/orchestrator/instructions.md +90 -0
  89. package/orchestrator/orchestrator.py +33 -0
  90. package/package.json +49 -0
  91. package/patches/__init__.py +1 -0
  92. package/patches/__pycache__/__init__.cpython-312.pyc +0 -0
  93. package/patches/__pycache__/patch_agency_swarm_dual_comms.cpython-312.pyc +0 -0
  94. package/patches/__pycache__/patch_file_attachment_refs.cpython-312.pyc +0 -0
  95. package/patches/__pycache__/patch_ipython_interpreter_composio.cpython-312.pyc +0 -0
  96. package/patches/dom-to-pptx+1.1.5.patch +133440 -0
  97. package/patches/patch_agency_swarm_dual_comms.py +199 -0
  98. package/patches/patch_file_attachment_refs.py +74 -0
  99. package/patches/patch_ipython_interpreter_composio.py +54 -0
  100. package/pyproject.toml +67 -0
  101. package/run.py +343 -0
  102. package/server.py +26 -0
  103. package/shared_instructions.md +119 -0
  104. package/shared_tools/CopyFile.py +68 -0
  105. package/shared_tools/ExecuteTool.py +184 -0
  106. package/shared_tools/FindTools.py +101 -0
  107. package/shared_tools/ManageConnections.py +43 -0
  108. package/shared_tools/SearchTools.py +44 -0
  109. package/shared_tools/__init__.py +7 -0
  110. package/shared_tools/__pycache__/CopyFile.cpython-312.pyc +0 -0
  111. package/shared_tools/__pycache__/ExecuteTool.cpython-312.pyc +0 -0
  112. package/shared_tools/__pycache__/FindTools.cpython-312.pyc +0 -0
  113. package/shared_tools/__pycache__/ManageConnections.cpython-312.pyc +0 -0
  114. package/shared_tools/__pycache__/SearchTools.cpython-312.pyc +0 -0
  115. package/shared_tools/__pycache__/__init__.cpython-312.pyc +0 -0
  116. package/slides_agent/.cursor/rules/slides-agent-workflow.mdc +9 -0
  117. package/slides_agent/__init__.py +1 -0
  118. package/slides_agent/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/slides_agent/__pycache__/slides_agent.cpython-312.pyc +0 -0
  120. package/slides_agent/instructions.md +298 -0
  121. package/slides_agent/pptx/SKILL.md +528 -0
  122. package/slides_agent/pptx/html2pptx.md +625 -0
  123. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  124. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  125. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  126. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  127. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  128. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  129. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  130. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  131. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  132. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  133. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  134. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  135. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  136. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  137. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  138. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  139. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  140. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  141. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  142. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  143. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  144. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  145. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  146. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  147. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  148. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  149. package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  150. package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  151. package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  152. package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  153. package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  154. package/slides_agent/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  155. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  156. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  157. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  158. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  159. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  160. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  161. package/slides_agent/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  162. package/slides_agent/pptx/ooxml/scripts/pack.py +169 -0
  163. package/slides_agent/pptx/ooxml/scripts/unpack.py +29 -0
  164. package/slides_agent/pptx/ooxml/scripts/validate.py +69 -0
  165. package/slides_agent/pptx/ooxml/scripts/validation/__init__.py +15 -0
  166. package/slides_agent/pptx/ooxml/scripts/validation/base.py +951 -0
  167. package/slides_agent/pptx/ooxml/scripts/validation/docx.py +274 -0
  168. package/slides_agent/pptx/ooxml/scripts/validation/pptx.py +315 -0
  169. package/slides_agent/pptx/ooxml/scripts/validation/redlining.py +279 -0
  170. package/slides_agent/pptx/ooxml.md +427 -0
  171. package/slides_agent/pptx/scripts/html2pptx.js +1092 -0
  172. package/slides_agent/pptx/scripts/inventory.py +1020 -0
  173. package/slides_agent/pptx/scripts/rearrange.py +231 -0
  174. package/slides_agent/pptx/scripts/replace.py +385 -0
  175. package/slides_agent/pptx/scripts/thumbnail.py +451 -0
  176. package/slides_agent/slides_agent.py +109 -0
  177. package/slides_agent/test_deck/_theme.css +92 -0
  178. package/slides_agent/test_deck/assets/placeholder.svg +11 -0
  179. package/slides_agent/test_deck/slide_01_title.html +10 -0
  180. package/slides_agent/test_deck/slide_02_image_split.html +23 -0
  181. package/slides_agent/test_deck/slide_03_kpi.html +21 -0
  182. package/slides_agent/tools/ApplyPptxTextReplacements.py +91 -0
  183. package/slides_agent/tools/BuildPptxFromHtmlSlides.py +221 -0
  184. package/slides_agent/tools/CheckSlide.py +218 -0
  185. package/slides_agent/tools/CheckSlideCanvasOverflow.py +221 -0
  186. package/slides_agent/tools/CreateImageMontage.py +261 -0
  187. package/slides_agent/tools/CreatePptxThumbnailGrid.py +168 -0
  188. package/slides_agent/tools/DeleteSlide.py +78 -0
  189. package/slides_agent/tools/DownloadImage.py +79 -0
  190. package/slides_agent/tools/EnsureRasterImage.py +157 -0
  191. package/slides_agent/tools/ExtractPptxTextInventory.py +104 -0
  192. package/slides_agent/tools/GenerateImage.py +189 -0
  193. package/slides_agent/tools/ImageSearch.py +127 -0
  194. package/slides_agent/tools/InsertNewSlides.py +393 -0
  195. package/slides_agent/tools/ManageTheme.py +112 -0
  196. package/slides_agent/tools/ModifySlide.py +563 -0
  197. package/slides_agent/tools/ReadSlide.py +26 -0
  198. package/slides_agent/tools/RearrangePptxSlidesFromTemplate.py +114 -0
  199. package/slides_agent/tools/RestoreSnapshot.py +89 -0
  200. package/slides_agent/tools/SlideScreenshot.py +66 -0
  201. package/slides_agent/tools/__init__.py +54 -0
  202. package/slides_agent/tools/__pycache__/ApplyPptxTextReplacements.cpython-312.pyc +0 -0
  203. package/slides_agent/tools/__pycache__/BuildPptxFromHtmlSlides.cpython-312.pyc +0 -0
  204. package/slides_agent/tools/__pycache__/CheckSlide.cpython-312.pyc +0 -0
  205. package/slides_agent/tools/__pycache__/CheckSlideCanvasOverflow.cpython-312.pyc +0 -0
  206. package/slides_agent/tools/__pycache__/CreateImageMontage.cpython-312.pyc +0 -0
  207. package/slides_agent/tools/__pycache__/CreatePptxThumbnailGrid.cpython-312.pyc +0 -0
  208. package/slides_agent/tools/__pycache__/DeleteSlide.cpython-312.pyc +0 -0
  209. package/slides_agent/tools/__pycache__/DownloadImage.cpython-312.pyc +0 -0
  210. package/slides_agent/tools/__pycache__/EnsureRasterImage.cpython-312.pyc +0 -0
  211. package/slides_agent/tools/__pycache__/ExtractPptxTextInventory.cpython-312.pyc +0 -0
  212. package/slides_agent/tools/__pycache__/GenerateImage.cpython-312.pyc +0 -0
  213. package/slides_agent/tools/__pycache__/ImageSearch.cpython-312.pyc +0 -0
  214. package/slides_agent/tools/__pycache__/InsertNewSlides.cpython-312.pyc +0 -0
  215. package/slides_agent/tools/__pycache__/ManageTheme.cpython-312.pyc +0 -0
  216. package/slides_agent/tools/__pycache__/ModifySlide.cpython-312.pyc +0 -0
  217. package/slides_agent/tools/__pycache__/ReadSlide.cpython-312.pyc +0 -0
  218. package/slides_agent/tools/__pycache__/RearrangePptxSlidesFromTemplate.cpython-312.pyc +0 -0
  219. package/slides_agent/tools/__pycache__/RestoreSnapshot.cpython-312.pyc +0 -0
  220. package/slides_agent/tools/__pycache__/SlideScreenshot.cpython-312.pyc +0 -0
  221. package/slides_agent/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  222. package/slides_agent/tools/__pycache__/slide_file_utils.cpython-312.pyc +0 -0
  223. package/slides_agent/tools/__pycache__/slide_html_utils.cpython-312.pyc +0 -0
  224. package/slides_agent/tools/__pycache__/template_registry.cpython-312.pyc +0 -0
  225. package/slides_agent/tools/deck_utils.py +31 -0
  226. package/slides_agent/tools/html2pptx_runner.js +1183 -0
  227. package/slides_agent/tools/html_writer_instructions.md +149 -0
  228. package/slides_agent/tools/slide_file_utils.py +108 -0
  229. package/slides_agent/tools/slide_html_utils.py +354 -0
  230. package/slides_agent/tools/template_registry.py +55 -0
  231. package/swarm.py +82 -0
  232. package/video_generation_agent/__init__.py +1 -0
  233. package/video_generation_agent/__pycache__/__init__.cpython-312.pyc +0 -0
  234. package/video_generation_agent/__pycache__/video_generation_agent.cpython-312.pyc +0 -0
  235. package/video_generation_agent/instructions.md +178 -0
  236. package/video_generation_agent/tools/AddSubtitles.py +425 -0
  237. package/video_generation_agent/tools/CombineImages.py +166 -0
  238. package/video_generation_agent/tools/CombineVideos.py +113 -0
  239. package/video_generation_agent/tools/EditAudio.py +297 -0
  240. package/video_generation_agent/tools/EditImage.py +144 -0
  241. package/video_generation_agent/tools/EditVideoContent.py +369 -0
  242. package/video_generation_agent/tools/GenerateImage.py +133 -0
  243. package/video_generation_agent/tools/GenerateVideo.py +556 -0
  244. package/video_generation_agent/tools/TrimVideo.py +233 -0
  245. package/video_generation_agent/tools/__init__.py +1 -0
  246. package/video_generation_agent/tools/__pycache__/AddSubtitles.cpython-312.pyc +0 -0
  247. package/video_generation_agent/tools/__pycache__/CombineImages.cpython-312.pyc +0 -0
  248. package/video_generation_agent/tools/__pycache__/CombineVideos.cpython-312.pyc +0 -0
  249. package/video_generation_agent/tools/__pycache__/EditAudio.cpython-312.pyc +0 -0
  250. package/video_generation_agent/tools/__pycache__/EditImage.cpython-312.pyc +0 -0
  251. package/video_generation_agent/tools/__pycache__/EditVideoContent.cpython-312.pyc +0 -0
  252. package/video_generation_agent/tools/__pycache__/GenerateImage.cpython-312.pyc +0 -0
  253. package/video_generation_agent/tools/__pycache__/GenerateVideo.cpython-312.pyc +0 -0
  254. package/video_generation_agent/tools/__pycache__/TrimVideo.cpython-312.pyc +0 -0
  255. package/video_generation_agent/tools/utils/__init__.py +1 -0
  256. package/video_generation_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  257. package/video_generation_agent/tools/utils/__pycache__/image_utils.cpython-312.pyc +0 -0
  258. package/video_generation_agent/tools/utils/__pycache__/video_utils.cpython-312.pyc +0 -0
  259. package/video_generation_agent/tools/utils/image_utils.py +174 -0
  260. package/video_generation_agent/tools/utils/video_utils.py +522 -0
  261. package/video_generation_agent/video_generation_agent.py +26 -0
  262. package/virtual_assistant/__init__.py +1 -0
  263. package/virtual_assistant/__pycache__/__init__.cpython-312.pyc +0 -0
  264. package/virtual_assistant/__pycache__/virtual_assistant.cpython-312.pyc +0 -0
  265. package/virtual_assistant/instructions.md +206 -0
  266. package/virtual_assistant/tools/AddLabelToEmail.py +154 -0
  267. package/virtual_assistant/tools/CheckEventsForDate.py +218 -0
  268. package/virtual_assistant/tools/CheckUnreadSlackMessages.py +216 -0
  269. package/virtual_assistant/tools/CreateCalendarEvent.py +261 -0
  270. package/virtual_assistant/tools/DeleteCalendarEvent.py +137 -0
  271. package/virtual_assistant/tools/DeleteDraft.py +95 -0
  272. package/virtual_assistant/tools/DraftEmail.py +239 -0
  273. package/virtual_assistant/tools/EditFile.py +113 -0
  274. package/virtual_assistant/tools/FindEmails.py +330 -0
  275. package/virtual_assistant/tools/GetCurrentTime.py +69 -0
  276. package/virtual_assistant/tools/GetSlackUserInfo.py +117 -0
  277. package/virtual_assistant/tools/ListDirectory.py +113 -0
  278. package/virtual_assistant/tools/ListSkills.py +94 -0
  279. package/virtual_assistant/tools/ManageLabels.py +295 -0
  280. package/virtual_assistant/tools/ProductSearch.py +254 -0
  281. package/virtual_assistant/tools/ReadEmail.py +251 -0
  282. package/virtual_assistant/tools/ReadFile.py +108 -0
  283. package/virtual_assistant/tools/ReadSlackMessages.py +191 -0
  284. package/virtual_assistant/tools/RemoveLabelFromEmail.py +137 -0
  285. package/virtual_assistant/tools/RescheduleCalendarEvent.py +227 -0
  286. package/virtual_assistant/tools/ScholarSearch.py +216 -0
  287. package/virtual_assistant/tools/SendDraft.py +101 -0
  288. package/virtual_assistant/tools/SendSlackMessage.py +148 -0
  289. package/virtual_assistant/tools/WriteFile.py +95 -0
  290. package/virtual_assistant/tools/__init__.py +1 -0
  291. package/virtual_assistant/tools/__pycache__/AddLabelToEmail.cpython-312.pyc +0 -0
  292. package/virtual_assistant/tools/__pycache__/CheckEventsForDate.cpython-312.pyc +0 -0
  293. package/virtual_assistant/tools/__pycache__/CheckUnreadSlackMessages.cpython-312.pyc +0 -0
  294. package/virtual_assistant/tools/__pycache__/CreateCalendarEvent.cpython-312.pyc +0 -0
  295. package/virtual_assistant/tools/__pycache__/DeleteCalendarEvent.cpython-312.pyc +0 -0
  296. package/virtual_assistant/tools/__pycache__/DeleteDraft.cpython-312.pyc +0 -0
  297. package/virtual_assistant/tools/__pycache__/DraftEmail.cpython-312.pyc +0 -0
  298. package/virtual_assistant/tools/__pycache__/EditFile.cpython-312.pyc +0 -0
  299. package/virtual_assistant/tools/__pycache__/FindEmails.cpython-312.pyc +0 -0
  300. package/virtual_assistant/tools/__pycache__/GetCurrentTime.cpython-312.pyc +0 -0
  301. package/virtual_assistant/tools/__pycache__/GetSlackUserInfo.cpython-312.pyc +0 -0
  302. package/virtual_assistant/tools/__pycache__/ListDirectory.cpython-312.pyc +0 -0
  303. package/virtual_assistant/tools/__pycache__/ListSkills.cpython-312.pyc +0 -0
  304. package/virtual_assistant/tools/__pycache__/ManageLabels.cpython-312.pyc +0 -0
  305. package/virtual_assistant/tools/__pycache__/ProductSearch.cpython-312.pyc +0 -0
  306. package/virtual_assistant/tools/__pycache__/ReadEmail.cpython-312.pyc +0 -0
  307. package/virtual_assistant/tools/__pycache__/ReadFile.cpython-312.pyc +0 -0
  308. package/virtual_assistant/tools/__pycache__/ReadSlackMessages.cpython-312.pyc +0 -0
  309. package/virtual_assistant/tools/__pycache__/RemoveLabelFromEmail.cpython-312.pyc +0 -0
  310. package/virtual_assistant/tools/__pycache__/RescheduleCalendarEvent.cpython-312.pyc +0 -0
  311. package/virtual_assistant/tools/__pycache__/ScholarSearch.cpython-312.pyc +0 -0
  312. package/virtual_assistant/tools/__pycache__/SendDraft.cpython-312.pyc +0 -0
  313. package/virtual_assistant/tools/__pycache__/SendSlackMessage.cpython-312.pyc +0 -0
  314. package/virtual_assistant/tools/__pycache__/WriteFile.cpython-312.pyc +0 -0
  315. package/virtual_assistant/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  316. package/virtual_assistant/virtual_assistant.py +52 -0
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Runtime monkey patch for Agency Swarm dual communication tools per pair.
4
+
5
+ This patches classes/functions in memory (no framework file rewriting):
6
+ - agency.setup.parse_agent_flows
7
+ - agency.setup.configure_agents
8
+ - agency.core.parse_agent_flows
9
+ - agency.core.configure_agents
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from typing import Any
15
+
16
+
17
+ def _add_tool_class_for_pair(
18
+ mapping: dict[tuple[str, str], list[type]],
19
+ pair_key: tuple[str, str],
20
+ tool_class: type | None,
21
+ ) -> None:
22
+ if tool_class is None:
23
+ return
24
+ classes = mapping.setdefault(pair_key, [])
25
+ if tool_class in classes:
26
+ raise ValueError(
27
+ f"Duplicate communication tool class detected for {pair_key[0]} -> {pair_key[1]}: "
28
+ f"{tool_class.__name__}. Each tool class for a pair can only be defined once."
29
+ )
30
+ classes.append(tool_class)
31
+
32
+
33
+ def apply_dual_comms_patch() -> None:
34
+ import warnings
35
+
36
+ from agency_swarm.agent.agent_flow import AgentFlow
37
+ from agency_swarm.agent.core import Agent
38
+ from agency_swarm.agency import core as core_mod
39
+ from agency_swarm.agency import setup as setup_mod
40
+ from agency_swarm.tools.send_message import Handoff, SendMessage, SendMessageHandoff
41
+
42
+ if getattr(setup_mod, "_dual_comms_patch_applied", False):
43
+ return
44
+
45
+ def parse_agent_flows_patched(
46
+ agency: Any, communication_flows: list[Any]
47
+ ) -> tuple[list[tuple[Agent, Agent]], dict[tuple[str, str], list[type]]]:
48
+ basic_flows: list[tuple[Agent, Agent]] = []
49
+ tool_class_mapping: dict[tuple[str, str], list[type]] = {}
50
+ seen_flows: set[tuple[str, str]] = set()
51
+
52
+ chain_flows = AgentFlow.get_and_clear_chain_flows()
53
+ chain_flows_used = False
54
+
55
+ for flow_entry in communication_flows:
56
+ if isinstance(flow_entry, AgentFlow):
57
+ flow_entry = (flow_entry, None)
58
+
59
+ if isinstance(flow_entry, (tuple, list)) and len(flow_entry) == 2:
60
+ first, second = flow_entry
61
+
62
+ if isinstance(first, Agent) and isinstance(second, Agent):
63
+ flow_key = (first.name, second.name)
64
+ if flow_key in seen_flows:
65
+ raise ValueError(
66
+ f"Duplicate communication flow detected: {first.name} -> {second.name}. "
67
+ "Each agent-to-agent communication can only be defined once."
68
+ )
69
+ seen_flows.add(flow_key)
70
+ basic_flows.append((first, second))
71
+
72
+ elif isinstance(first, AgentFlow) and (isinstance(second, type) or second is None):
73
+ tool_class = second
74
+ direct_flows = first.get_all_flows()
75
+ if not chain_flows_used:
76
+ all_flows = direct_flows + [f for f in chain_flows if f not in direct_flows]
77
+ chain_flows_used = True
78
+ else:
79
+ all_flows = direct_flows
80
+
81
+ for sender, receiver in all_flows:
82
+ flow_key = (sender.name, receiver.name)
83
+ if flow_key not in seen_flows:
84
+ seen_flows.add(flow_key)
85
+ basic_flows.append((sender, receiver))
86
+ elif tool_class is None:
87
+ raise ValueError(
88
+ f"Duplicate communication flow detected: {sender.name} -> {receiver.name}. "
89
+ "Each agent-to-agent communication can only be defined once unless adding "
90
+ "a distinct tool class."
91
+ )
92
+ _add_tool_class_for_pair(tool_class_mapping, flow_key, tool_class)
93
+ else:
94
+ raise TypeError(
95
+ f"Invalid communication flow entry: {flow_entry}. "
96
+ "Expected (Agent, Agent) or (AgentFlow, tool_class)."
97
+ )
98
+
99
+ elif isinstance(flow_entry, (tuple, list)) and len(flow_entry) == 3:
100
+ sender, receiver, tool_class = flow_entry
101
+
102
+ if not isinstance(sender, Agent) or not isinstance(receiver, Agent):
103
+ raise TypeError(f"Invalid communication flow entry: {flow_entry}. Expected (Agent, Agent, tool_class).")
104
+
105
+ # The agency factory reconstructs flows from _communication_tool_classes,
106
+ # which stores lists of types per pair. Accept both a single class and a list.
107
+ tool_classes = tool_class if isinstance(tool_class, (list, tuple)) else [tool_class]
108
+ for tc in tool_classes:
109
+ if not isinstance(tc, type):
110
+ raise TypeError(f"Invalid tool class in communication flow: {tc}. Expected a class type.")
111
+
112
+ flow_key = (sender.name, receiver.name)
113
+ if flow_key not in seen_flows:
114
+ seen_flows.add(flow_key)
115
+ basic_flows.append((sender, receiver))
116
+
117
+ for tc in tool_classes:
118
+ _add_tool_class_for_pair(tool_class_mapping, flow_key, tc)
119
+
120
+ else:
121
+ raise ValueError(f"Invalid communication flow entry: {flow_entry}. Expected 2 or 3 elements.")
122
+
123
+ return basic_flows, tool_class_mapping
124
+
125
+ def configure_agents_patched(agency: Any, defined_communication_flows: list[tuple[Agent, Agent]]) -> None:
126
+ setup_mod.logger.info("Configuring agents...")
127
+
128
+ communication_map: dict[str, list[str]] = {agent_name: [] for agent_name in agency.agents}
129
+ for sender, receiver in defined_communication_flows:
130
+ sender_name = sender.name
131
+ receiver_name = receiver.name
132
+ if receiver_name not in communication_map[sender_name]:
133
+ communication_map[sender_name].append(receiver_name)
134
+
135
+ for agent_name, agent_instance in agency.agents.items():
136
+ runtime_state = agency._agent_runtime_state[agent_name]
137
+ allowed_recipients = communication_map.get(agent_name, [])
138
+
139
+ if allowed_recipients:
140
+ setup_mod.logger.debug(f"Agent '{agent_name}' can send messages to: {allowed_recipients}")
141
+ for recipient_name in allowed_recipients:
142
+ recipient_agent = agency.agents[recipient_name]
143
+ pair_key = (agent_name, recipient_name)
144
+ configured = agency._communication_tool_classes.get(pair_key, [])
145
+ tool_classes = list(configured) if configured else [agency.send_message_tool_class or SendMessage]
146
+
147
+ try:
148
+ for effective_tool_class in tool_classes:
149
+ if isinstance(effective_tool_class, Handoff) or (
150
+ isinstance(effective_tool_class, type) and issubclass(effective_tool_class, Handoff)
151
+ ):
152
+ if (
153
+ not setup_mod._warned_deprecated_send_message_handoff
154
+ and isinstance(effective_tool_class, type)
155
+ and issubclass(effective_tool_class, SendMessageHandoff)
156
+ ):
157
+ warnings.warn(
158
+ "SendMessageHandoff is deprecated; use Handoff instead.",
159
+ DeprecationWarning,
160
+ stacklevel=3,
161
+ )
162
+ setup_mod._warned_deprecated_send_message_handoff = True
163
+
164
+ handoff_instance = effective_tool_class().create_handoff(recipient_agent=recipient_agent)
165
+ runtime_state.handoffs.append(handoff_instance)
166
+ setup_mod.logger.debug(f"Added Handoff for {agent_name} -> {recipient_name}")
167
+ else:
168
+ chosen_tool_class = effective_tool_class or SendMessage
169
+ if not isinstance(chosen_tool_class, type) or not issubclass(chosen_tool_class, SendMessage):
170
+ chosen_tool_class = SendMessage
171
+
172
+ agent_instance.register_subagent(
173
+ recipient_agent,
174
+ send_message_tool_class=chosen_tool_class,
175
+ runtime_state=runtime_state,
176
+ )
177
+ except Exception as e:
178
+ setup_mod.logger.error(
179
+ f"Error registering subagent '{recipient_name}' for sender '{agent_name}': {e}",
180
+ exc_info=True,
181
+ )
182
+ else:
183
+ setup_mod.logger.debug(f"Agent '{agent_name}' has no explicitly defined outgoing communication paths.")
184
+
185
+ setup_mod.logger.info("Agent configuration complete.")
186
+
187
+ setup_mod.parse_agent_flows = parse_agent_flows_patched
188
+ setup_mod.configure_agents = configure_agents_patched
189
+
190
+ # Agency.__init__ uses these symbols imported into core module scope.
191
+ core_mod.parse_agent_flows = parse_agent_flows_patched
192
+ core_mod.configure_agents = configure_agents_patched
193
+
194
+ setup_mod._dual_comms_patch_applied = True
195
+
196
+
197
+ if __name__ == "__main__":
198
+ apply_dual_comms_patch()
199
+ print("Dual communication monkey patch applied in current Python process.")
@@ -0,0 +1,74 @@
1
+ """
2
+ Patch: inject attachment file references into the user message.
3
+ """
4
+
5
+ _PATCH_APPLIED = False
6
+
7
+
8
+ def apply_file_attachment_reference_patch() -> None:
9
+ global _PATCH_APPLIED
10
+ if _PATCH_APPLIED:
11
+ return
12
+ _PATCH_APPLIED = True
13
+ _patch_endpoint_handler_factories()
14
+
15
+
16
+ def _build_attachment_note(file_urls: dict[str, str]) -> str:
17
+ lines = [
18
+ "\n\n[SYSTEM NOTE] The user attached the following files.",
19
+ "Use ONLY the URLs below as file references in your tools (e.g. as `input_image_ref`).",
20
+ "Any /mnt/data/ paths you see are internal OpenAI server paths — they are NOT real local paths and must NOT be used or shown to the user:",
21
+ ]
22
+ for filename, ref in file_urls.items():
23
+ lines.append(f" - {filename}: {ref}")
24
+ return "\n".join(lines)
25
+
26
+
27
+ def _patch_endpoint_handler_factories() -> None:
28
+ from fastapi import Depends
29
+ from fastapi import Request as FastAPIRequest
30
+ from agency_swarm.integrations.fastapi_utils import endpoint_handlers as eh
31
+
32
+ _original_make_response = eh.make_response_endpoint
33
+ _original_make_stream = eh.make_stream_endpoint
34
+ _original_make_agui = eh.make_agui_chat_endpoint
35
+
36
+ def patched_make_response_endpoint(request_model, agency_factory, verify_token, allowed_local_dirs=None):
37
+ original_handler = _original_make_response(request_model, agency_factory, verify_token, allowed_local_dirs)
38
+
39
+ async def handler(request: request_model, token: str = Depends(verify_token)):
40
+ if getattr(request, "file_urls", None):
41
+ note = _build_attachment_note(request.file_urls)
42
+ existing = getattr(request, "additional_instructions", None) or ""
43
+ request = request.model_copy(update={"additional_instructions": (existing + "\n\n" + note).strip()})
44
+ return await original_handler(request, token)
45
+
46
+ return handler
47
+
48
+ def patched_make_stream_endpoint(request_model, agency_factory, verify_token, run_registry, allowed_local_dirs=None):
49
+ original_handler = _original_make_stream(request_model, agency_factory, verify_token, run_registry, allowed_local_dirs)
50
+
51
+ async def handler(http_request: FastAPIRequest, request: request_model, token: str = Depends(verify_token)):
52
+ if getattr(request, "file_urls", None):
53
+ note = _build_attachment_note(request.file_urls)
54
+ existing = getattr(request, "additional_instructions", None) or ""
55
+ request = request.model_copy(update={"additional_instructions": (existing + "\n\n" + note).strip()})
56
+ return await original_handler(http_request, request, token)
57
+
58
+ return handler
59
+
60
+ def patched_make_agui_endpoint(request_model, agency_factory, verify_token, allowed_local_dirs=None):
61
+ original_handler = _original_make_agui(request_model, agency_factory, verify_token, allowed_local_dirs)
62
+
63
+ async def handler(request: request_model, token: str = Depends(verify_token)):
64
+ if getattr(request, "file_urls", None):
65
+ note = _build_attachment_note(request.file_urls)
66
+ existing = getattr(request, "additional_instructions", None) or ""
67
+ request = request.model_copy(update={"additional_instructions": (existing + "\n\n" + note).strip()})
68
+ return await original_handler(request, token)
69
+
70
+ return handler
71
+
72
+ eh.make_response_endpoint = patched_make_response_endpoint
73
+ eh.make_stream_endpoint = patched_make_stream_endpoint
74
+ eh.make_agui_chat_endpoint = patched_make_agui_endpoint
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+
6
+ def _build_bootstrap_code() -> str:
7
+ root_dir = str(Path(__file__).resolve().parents[1]).replace("\\", "\\\\")
8
+
9
+ return f"""
10
+ import sys
11
+
12
+ if r"{root_dir}" not in sys.path:
13
+ sys.path.insert(0, r"{root_dir}")
14
+
15
+ import helpers as _helpers
16
+ from helpers import get_composio_client, get_composio_user_id
17
+
18
+ composio = get_composio_client()
19
+ user_id = get_composio_user_id()
20
+ _helpers.composio = composio
21
+ _helpers.user_id = user_id
22
+ """.strip()
23
+
24
+
25
+ def apply_ipython_composio_context_patch() -> None:
26
+ """Prepend a bootstrap snippet to every IPythonInterpreter run.
27
+
28
+ The snippet imports helpers and resolves the module-level `composio` and
29
+ `user_id` singletons from the environment so that Composio tool calls made
30
+ inside the kernel work without any manual setup.
31
+ """
32
+ from agency_swarm.tools import IPythonInterpreter
33
+
34
+ if getattr(IPythonInterpreter, "_composio_context_patch_applied", False):
35
+ return
36
+
37
+ original_run = IPythonInterpreter.run
38
+
39
+ async def run_with_composio_context(self):
40
+ original_code = self.code
41
+ bootstrap = _build_bootstrap_code()
42
+ self.code = f"{bootstrap}\n\n{original_code}"
43
+ try:
44
+ return await original_run(self)
45
+ finally:
46
+ self.code = original_code
47
+
48
+ IPythonInterpreter.run = run_with_composio_context
49
+ IPythonInterpreter._composio_context_patch_applied = True
50
+
51
+
52
+ if __name__ == "__main__":
53
+ apply_ipython_composio_context_patch()
54
+ print("IPythonInterpreter Composio context patch applied.")
package/pyproject.toml ADDED
@@ -0,0 +1,67 @@
1
+ [project]
2
+ name = "open-swarm"
3
+ description = "An open-source multi-agent AI team built on Agency Swarm and the OpenAI Agents SDK"
4
+ version = "0.1.0"
5
+ license = { text = "MIT" }
6
+ keywords = ["agency-swarm", "openai", "multi-agent", "open-source", "openswarm"]
7
+ requires-python = ">=3.10"
8
+ dependencies = [
9
+ "agency-swarm[fastapi,jupyter,litellm] @ git+https://github.com/VRSEN/agency-swarm.git@main",
10
+ "questionary>=2.0.0",
11
+ "python-dotenv",
12
+ "rich",
13
+ "fastapi",
14
+ "uvicorn",
15
+ "composio-core",
16
+ "composio-openai-agents",
17
+ "pytz",
18
+ # Data analysis
19
+ "pandas>=2.0.0",
20
+ "numpy>=1.24.0",
21
+ "scipy>=1.10.0",
22
+ "statsmodels>=0.14.0",
23
+ "scikit-learn>=1.3.0",
24
+ # Visualisation
25
+ "matplotlib>=3.5.0",
26
+ "seaborn>=0.12.0",
27
+ "plotly>=5.14.0",
28
+ # Excel / CSV
29
+ "openpyxl>=3.1.0",
30
+ "xlrd>=2.0.0",
31
+ # Jupyter / IPython
32
+ "jupyter>=1.0.0",
33
+ "ipython>=8.0.0",
34
+ "nbformat>=5.0.0",
35
+ # Image processing
36
+ "pillow>=9.0.0",
37
+ "opencv-python-headless",
38
+ # PowerPoint / document processing
39
+ "python-pptx>=1.0.0",
40
+ "defusedxml>=0.7.0",
41
+ "pdf2image>=1.16.0",
42
+ "markitdown[pptx]>=0.1.0",
43
+ "six>=1.16.0",
44
+ "python-docx",
45
+ "tinycss2",
46
+ "beautifulsoup4",
47
+ "cairosvg",
48
+ "weasyprint",
49
+ "html2text",
50
+ "playwright",
51
+ # AI / media generation
52
+ "google-genai",
53
+ "fal-client",
54
+ "moviepy<2",
55
+ "imageio-ffmpeg",
56
+ "httpx",
57
+ ]
58
+
59
+ [project.scripts]
60
+ openswarm = "run:main"
61
+
62
+ [tool.setuptools.packages.find]
63
+ where = ["."]
64
+ exclude = ["agentswarm-cli*", "venv*", ".venv*", ".agency_swarm*", "node_modules*", "*.node_modules*", "activity*", "mnt*", "pptx*", "slides"]
65
+
66
+ [tool.setuptools.package-data]
67
+ "*" = ["*.md", "*.json", "agency.exe"]