@_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,114 @@
1
+ """Rearrange PowerPoint slides based on a sequence of indices."""
2
+
3
+ import sys
4
+ from pathlib import Path
5
+ from typing import List, Union
6
+
7
+ from agency_swarm.tools import BaseTool
8
+ from pydantic import Field
9
+
10
+ # Add pptx/scripts to path for rearrange module
11
+ PPTX_SCRIPTS_DIR = Path(__file__).parent.parent / "pptx" / "scripts"
12
+ sys.path.insert(0, str(PPTX_SCRIPTS_DIR))
13
+
14
+
15
+ class RearrangePptxSlidesFromTemplate(BaseTool):
16
+ """
17
+ Build a new presentation from a template by duplicating and reordering slides.
18
+
19
+ Takes a template PPTX and a sequence of 0-based slide indices, then creates
20
+ a new presentation with slides in the specified order. The same slide index
21
+ can appear multiple times to duplicate that slide.
22
+
23
+ Example: slide_sequence=[0, 5, 5, 12, 3] creates a 5-slide deck using
24
+ slides 0, 5 (twice), 12, and 3 from the template.
25
+ """
26
+
27
+ template_pptx: str = Field(
28
+ ...,
29
+ description="Path to the template PowerPoint file (.pptx)",
30
+ )
31
+ output_pptx: str = Field(
32
+ ...,
33
+ description="Path where the rearranged presentation will be saved",
34
+ )
35
+ slide_sequence: Union[str, List[int]] = Field(
36
+ ...,
37
+ description="Comma-separated string or list of 0-based slide indices (e.g., '0,5,5,12,3' or [0,5,5,12,3])",
38
+ )
39
+ overwrite: bool = Field(
40
+ default=False,
41
+ description=(
42
+ "If False, return an error when the output PPTX already exists. "
43
+ "If True, overwrite the existing file."
44
+ ),
45
+ )
46
+
47
+ def run(self) -> str:
48
+ """Rearrange slides and save the new presentation."""
49
+ import sys
50
+ from pathlib import Path as PathLib
51
+
52
+ # Add pptx/scripts to path for rearrange import
53
+ scripts_dir = PathLib(__file__).parent.parent / "pptx" / "scripts"
54
+ if str(scripts_dir) not in sys.path:
55
+ sys.path.insert(0, str(scripts_dir))
56
+
57
+ from rearrange import rearrange_presentation # type: ignore
58
+
59
+ template_path = Path(self.template_pptx)
60
+ output_path = Path(self.output_pptx)
61
+
62
+ # Validate template exists
63
+ if not template_path.exists():
64
+ return f"Error: Template file not found: {self.template_pptx}"
65
+ if template_path.suffix.lower() != ".pptx":
66
+ return f"Error: Template must be a PowerPoint file (.pptx), got: {template_path.suffix}"
67
+
68
+ # Parse slide sequence
69
+ if isinstance(self.slide_sequence, str):
70
+ try:
71
+ sequence = [int(x.strip()) for x in self.slide_sequence.split(",")]
72
+ except ValueError:
73
+ return "Error: Invalid sequence format. Use comma-separated integers (e.g., '0,5,5,12,3')"
74
+ else:
75
+ sequence = list(self.slide_sequence)
76
+
77
+ if not sequence:
78
+ return "Error: Slide sequence cannot be empty"
79
+
80
+ # Ensure output directory exists
81
+ output_path.parent.mkdir(parents=True, exist_ok=True)
82
+ if output_path.exists() and not self.overwrite:
83
+ return (
84
+ "Error: Output file already exists. "
85
+ "Set overwrite=True to replace it or add a postfix to the filename."
86
+ )
87
+
88
+ # Rearrange presentation
89
+ try:
90
+ rearrange_presentation(template_path, output_path, sequence)
91
+ return (
92
+ f"Presentation saved to: {output_path}\n"
93
+ f"Created {len(sequence)} slides from template"
94
+ )
95
+ except ValueError as e:
96
+ return f"Error: {e}"
97
+
98
+
99
+ if __name__ == "__main__":
100
+ # Test with a sample file if available
101
+ import tempfile
102
+
103
+ test_pptx = Path(__file__).parent.parent / "files" / "test.pptx"
104
+ if test_pptx.exists():
105
+ with tempfile.NamedTemporaryFile(suffix=".pptx", delete=False) as f:
106
+ tool = RearrangePptxSlidesFromTemplate(
107
+ template_pptx=str(test_pptx),
108
+ output_pptx=f.name,
109
+ slide_sequence="0,0,0", # Duplicate first slide 3 times
110
+ )
111
+ print(tool.run())
112
+ else:
113
+ print(f"Test file not found: {test_pptx}")
114
+ print("Tool definition is valid.")
@@ -0,0 +1,89 @@
1
+ """Restore HTML slides from a PPTX export snapshot."""
2
+ from agency_swarm.tools import BaseTool
3
+ from pydantic import Field
4
+
5
+ from .slide_file_utils import get_project_dir, restore_snapshot_html
6
+
7
+
8
+ class RestoreSnapshot(BaseTool):
9
+ """
10
+ Restore the working HTML slides from a previous PPTX export snapshot.
11
+
12
+ Every time BuildPptxFromHtmlSlides runs it saves a self-contained snapshot
13
+ of the slide HTML alongside the PPTX:
14
+
15
+ my_deck.pptx
16
+ my_deck.pptx.slides/
17
+ 1.html
18
+ 2.html
19
+
20
+
21
+ Use this tool to roll back the working slides in a project to the state
22
+ captured in any previous export. The tool:
23
+
24
+ 1. Reads each numbered HTML file from the snapshot directory.
25
+ 2. Extracts the inlined ``_theme.css`` back to disk so the theme is
26
+ available for future edits.
27
+ 3. Writes the restored ``slide_01.html``, ``slide_02.html``, … files into
28
+ the project directory, ready to work with.
29
+
30
+ To see which exports are available, list *.pptx files in the project folder.
31
+ """
32
+
33
+ project_name: str = Field(
34
+ ...,
35
+ description="Presentation project folder name (e.g. 'my_pitch')",
36
+ )
37
+ pptx_filename: str = Field(
38
+ ...,
39
+ description=(
40
+ "Filename of the PPTX export to restore from, e.g. 'my_deck.pptx' "
41
+ "or 'my_deck_v2.pptx'. The file must exist in the project folder."
42
+ ),
43
+ )
44
+
45
+ def run(self) -> str:
46
+ project_dir = get_project_dir(self.project_name)
47
+ pptx_name = self.pptx_filename if self.pptx_filename.endswith(".pptx") else f"{self.pptx_filename}.pptx"
48
+ slides_dir = project_dir / f"{pptx_name}.slides"
49
+
50
+ if not slides_dir.exists():
51
+ available = sorted(p.name for p in project_dir.glob("*.pptx.slides") if p.is_dir())
52
+ hint = (
53
+ "\nAvailable snapshots:\n" + "\n".join(f" {d}" for d in available)
54
+ if available else "\nNo snapshots found in this project."
55
+ )
56
+ return f"Error: No snapshot found for '{pptx_name}'.{hint}"
57
+
58
+ snapshot_files = sorted(
59
+ [p for p in slides_dir.glob("*.html") if p.stem.isdigit()],
60
+ key=lambda p: int(p.stem),
61
+ )
62
+ if not snapshot_files:
63
+ return "Error: Snapshot directory is empty"
64
+
65
+ pad_width = max(2, len(str(len(snapshot_files))))
66
+ css_written = False
67
+ restored_slides: list[str] = []
68
+
69
+ for i, snapshot in enumerate(snapshot_files, start=1):
70
+ html = snapshot.read_text(encoding="utf-8")
71
+ restored_html, css_files = restore_snapshot_html(html)
72
+
73
+ if not css_written and css_files:
74
+ for filename, css in css_files.items():
75
+ (project_dir / filename).write_text(css, encoding="utf-8")
76
+ css_written = True
77
+
78
+ slide_name = f"slide_{i:0{pad_width}d}.html"
79
+ (project_dir / slide_name).write_text(restored_html, encoding="utf-8")
80
+ restored_slides.append(slide_name)
81
+
82
+ summary = "\n".join(f" {s}" for s in restored_slides)
83
+ return (
84
+ f"Restored {len(restored_slides)} slide(s) to {project_dir}:\n{summary}"
85
+ )
86
+
87
+ if __name__ == "__main__":
88
+ tool = RestoreSnapshot(project_name="dinosaur_presentation_v2", pptx_filename="dinosaur_presentation_v2.pptx")
89
+ print(tool.run())
@@ -0,0 +1,66 @@
1
+ """Render a slide to an image attachment."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from agency_swarm.tools import BaseTool
6
+ from pydantic import Field
7
+
8
+ from .CheckSlide import CheckSlide
9
+ from .slide_file_utils import get_project_dir, list_slide_files
10
+
11
+
12
+ class SlideScreenshot(BaseTool):
13
+ """
14
+ Render a single HTML slide from a project to an image attachment.
15
+ Cannot be ran in parallel with other tools.
16
+ """
17
+
18
+ project_name: str = Field(
19
+ ...,
20
+ description="Project folder name",
21
+ )
22
+ slide_name: str = Field(
23
+ ...,
24
+ description="Slide filename (e.g., 'slide_01_title' or 'slide_01_title.html')",
25
+ )
26
+ slide_index: int | None = Field(
27
+ default=None,
28
+ description="Optional 1-based slide index to render using project slide order",
29
+ )
30
+ output_image_path: str | None = Field(
31
+ default=None,
32
+ description="Optional output image path (.jpg)",
33
+ )
34
+ layout: str = Field(
35
+ default="LAYOUT_16x9_1280",
36
+ description="Layout for HTML slides",
37
+ )
38
+
39
+ class ToolConfig:
40
+ one_call_at_a_time: bool = True
41
+
42
+ def run(self):
43
+ project_dir = get_project_dir(self.project_name)
44
+ slide_path = None
45
+ if self.slide_index is not None:
46
+ slides = list_slide_files(project_dir)
47
+ if self.slide_index < 1 or self.slide_index > len(slides):
48
+ return f"Error: slide_index out of range (1-{len(slides)})"
49
+ slide_path = slides[self.slide_index - 1].path
50
+ else:
51
+ slide_name = self.slide_name if self.slide_name.endswith(".html") else f"{self.slide_name}.html"
52
+ slide_path = project_dir / slide_name
53
+ if not slide_path.exists():
54
+ return f"Error: Slide not found at {slide_path}"
55
+
56
+ tool = CheckSlide(
57
+ slide_path=str(slide_path),
58
+ output_image_path=self.output_image_path,
59
+ layout=self.layout,
60
+ )
61
+ return tool.run()
62
+
63
+
64
+ if __name__ == "__main__":
65
+ tool = SlideScreenshot(project_name="claude_cowork_deck", slide_name="slide_01_title", output_image_path="test.jpg")
66
+ print(tool.run())
@@ -0,0 +1,54 @@
1
+ """Tools for the slides_agent."""
2
+
3
+ # Slide creation and management: InsertNewSlides then ModifySlide
4
+ from .InsertNewSlides import InsertNewSlides
5
+ from .ModifySlide import ModifySlide
6
+ from .ManageTheme import ManageTheme
7
+ from .DeleteSlide import DeleteSlide
8
+ from .SlideScreenshot import SlideScreenshot
9
+ from .ReadSlide import ReadSlide
10
+
11
+ # PPTX building and validation
12
+ from .BuildPptxFromHtmlSlides import BuildPptxFromHtmlSlides
13
+ from .RestoreSnapshot import RestoreSnapshot
14
+ from .CreatePptxThumbnailGrid import CreatePptxThumbnailGrid
15
+ from .CheckSlideCanvasOverflow import CheckSlideCanvasOverflow
16
+ from .CheckSlide import CheckSlide
17
+
18
+ # Template-based editing (for existing PPTX files)
19
+ from .ExtractPptxTextInventory import ExtractPptxTextInventory
20
+ from .RearrangePptxSlidesFromTemplate import RearrangePptxSlidesFromTemplate
21
+ from .ApplyPptxTextReplacements import ApplyPptxTextReplacements
22
+
23
+ # Asset utilities
24
+ from .EnsureRasterImage import EnsureRasterImage
25
+ from .CreateImageMontage import CreateImageMontage
26
+ from .DownloadImage import DownloadImage
27
+ from .ImageSearch import ImageSearch
28
+ from .GenerateImage import GenerateImage
29
+
30
+ __all__ = [
31
+ # Slide management
32
+ "InsertNewSlides",
33
+ "ModifySlide",
34
+ "ManageTheme",
35
+ "DeleteSlide",
36
+ "SlideScreenshot",
37
+ "ReadSlide",
38
+ # PPTX building
39
+ "BuildPptxFromHtmlSlides",
40
+ "RestoreSnapshot",
41
+ "CreatePptxThumbnailGrid",
42
+ "CheckSlideCanvasOverflow",
43
+ "CheckSlide",
44
+ # Template editing
45
+ "ExtractPptxTextInventory",
46
+ "RearrangePptxSlidesFromTemplate",
47
+ "ApplyPptxTextReplacements",
48
+ # Assets
49
+ "EnsureRasterImage",
50
+ "CreateImageMontage",
51
+ "DownloadImage",
52
+ "ImageSearch",
53
+ "GenerateImage",
54
+ ]
@@ -0,0 +1,31 @@
1
+ """Utilities for slides_agent test deck."""
2
+
3
+ from pathlib import Path
4
+ import shutil
5
+
6
+ from .slide_file_utils import get_project_dir
7
+
8
+
9
+ def test_deck_dir() -> Path:
10
+ return Path(__file__).resolve().parents[1] / "test_deck"
11
+
12
+
13
+ def test_project_dir(project_name: str) -> Path:
14
+ return get_project_dir(project_name)
15
+
16
+
17
+ def load_theme_css() -> str:
18
+ return (test_deck_dir() / "_theme.css").read_text(encoding="utf-8")
19
+
20
+
21
+ def load_slide_body(slide_name: str) -> str:
22
+ return (test_deck_dir() / f"{slide_name}.html").read_text(encoding="utf-8")
23
+
24
+
25
+ def ensure_assets(project_name: str) -> None:
26
+ assets_src = test_deck_dir() / "assets"
27
+ assets_dst = test_project_dir(project_name) / "assets"
28
+ assets_dst.mkdir(parents=True, exist_ok=True)
29
+ for asset in assets_src.iterdir():
30
+ if asset.is_file():
31
+ shutil.copy2(asset, assets_dst / asset.name)