@_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.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/bin/openswarm.js +38 -0
- package/config.py +34 -0
- package/data_analyst_agent/.cursor/rules/data_analyst.mdc +43 -0
- package/data_analyst_agent/__init__.py +3 -0
- package/data_analyst_agent/__pycache__/__init__.cpython-312.pyc +0 -0
- package/data_analyst_agent/__pycache__/data_analyst_agent.cpython-312.pyc +0 -0
- package/data_analyst_agent/data_analyst_agent.py +45 -0
- package/data_analyst_agent/instructions.md +173 -0
- package/data_analyst_agent/test_files/test_file.csv +21 -0
- package/data_analyst_agent/tools/__init__.py +6 -0
- package/deep_research/__init__.py +1 -0
- package/deep_research/__pycache__/__init__.cpython-312.pyc +0 -0
- package/deep_research/__pycache__/deep_research.cpython-312.pyc +0 -0
- package/deep_research/deep_research.py +27 -0
- package/deep_research/instructions.md +104 -0
- package/deep_research/tools/__init__.py +1 -0
- package/docs_agent/__init__.py +3 -0
- package/docs_agent/__pycache__/__init__.cpython-312.pyc +0 -0
- package/docs_agent/__pycache__/docs_agent.cpython-312.pyc +0 -0
- package/docs_agent/docs_agent.py +61 -0
- package/docs_agent/instructions.md +418 -0
- package/docs_agent/tools/ConvertDocument.py +323 -0
- package/docs_agent/tools/CreateDocument.py +287 -0
- package/docs_agent/tools/ListDocuments.py +134 -0
- package/docs_agent/tools/ModifyDocument.py +247 -0
- package/docs_agent/tools/RestoreDocument.py +79 -0
- package/docs_agent/tools/ViewDocument.py +153 -0
- package/docs_agent/tools/__init__.py +1 -0
- package/docs_agent/tools/__pycache__/ConvertDocument.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/CreateDocument.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/ListDocuments.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/ModifyDocument.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/RestoreDocument.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/ViewDocument.cpython-312.pyc +0 -0
- package/docs_agent/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__init__.py +1 -0
- package/docs_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/doc_file_utils.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_blocks.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_constants.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_core.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_css.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_images.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_page.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_paragraphs.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_playwright.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_selectors.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_docx_shared.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/__pycache__/html_validation.cpython-312.pyc +0 -0
- package/docs_agent/tools/utils/doc_file_utils.py +29 -0
- package/docs_agent/tools/utils/html_docx_blocks.py +262 -0
- package/docs_agent/tools/utils/html_docx_constants.py +78 -0
- package/docs_agent/tools/utils/html_docx_core.py +138 -0
- package/docs_agent/tools/utils/html_docx_css.py +262 -0
- package/docs_agent/tools/utils/html_docx_images.py +293 -0
- package/docs_agent/tools/utils/html_docx_page.py +185 -0
- package/docs_agent/tools/utils/html_docx_paragraphs.py +342 -0
- package/docs_agent/tools/utils/html_docx_playwright.py +184 -0
- package/docs_agent/tools/utils/html_docx_selectors.py +196 -0
- package/docs_agent/tools/utils/html_docx_shared.py +23 -0
- package/docs_agent/tools/utils/html_docx_tables.py +942 -0
- package/docs_agent/tools/utils/html_validation.py +102 -0
- package/helpers.py +59 -0
- package/image_generation_agent/__init__.py +1 -0
- package/image_generation_agent/__pycache__/__init__.cpython-312.pyc +0 -0
- package/image_generation_agent/__pycache__/image_generation_agent.cpython-312.pyc +0 -0
- package/image_generation_agent/image_generation_agent.py +31 -0
- package/image_generation_agent/instructions.md +80 -0
- package/image_generation_agent/tools/CombineImages.py +211 -0
- package/image_generation_agent/tools/EditImages.py +200 -0
- package/image_generation_agent/tools/GenerateImages.py +184 -0
- package/image_generation_agent/tools/RemoveBackground.py +108 -0
- package/image_generation_agent/tools/__init__.py +2 -0
- package/image_generation_agent/tools/__pycache__/CombineImages.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/__pycache__/EditImages.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/__pycache__/GenerateImages.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/__pycache__/RemoveBackground.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/utils/__init__.py +2 -0
- package/image_generation_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/utils/__pycache__/image_io.cpython-312.pyc +0 -0
- package/image_generation_agent/tools/utils/image_io.py +308 -0
- package/onboard.py +325 -0
- package/orchestrator/__init__.py +3 -0
- package/orchestrator/__pycache__/__init__.cpython-312.pyc +0 -0
- package/orchestrator/__pycache__/orchestrator.cpython-312.pyc +0 -0
- package/orchestrator/instructions.md +90 -0
- package/orchestrator/orchestrator.py +33 -0
- package/package.json +49 -0
- package/patches/__init__.py +1 -0
- package/patches/__pycache__/__init__.cpython-312.pyc +0 -0
- package/patches/__pycache__/patch_agency_swarm_dual_comms.cpython-312.pyc +0 -0
- package/patches/__pycache__/patch_file_attachment_refs.cpython-312.pyc +0 -0
- package/patches/__pycache__/patch_ipython_interpreter_composio.cpython-312.pyc +0 -0
- package/patches/dom-to-pptx+1.1.5.patch +133440 -0
- package/patches/patch_agency_swarm_dual_comms.py +199 -0
- package/patches/patch_file_attachment_refs.py +74 -0
- package/patches/patch_ipython_interpreter_composio.py +54 -0
- package/pyproject.toml +67 -0
- package/run.py +343 -0
- package/server.py +26 -0
- package/shared_instructions.md +119 -0
- package/shared_tools/CopyFile.py +68 -0
- package/shared_tools/ExecuteTool.py +184 -0
- package/shared_tools/FindTools.py +101 -0
- package/shared_tools/ManageConnections.py +43 -0
- package/shared_tools/SearchTools.py +44 -0
- package/shared_tools/__init__.py +7 -0
- package/shared_tools/__pycache__/CopyFile.cpython-312.pyc +0 -0
- package/shared_tools/__pycache__/ExecuteTool.cpython-312.pyc +0 -0
- package/shared_tools/__pycache__/FindTools.cpython-312.pyc +0 -0
- package/shared_tools/__pycache__/ManageConnections.cpython-312.pyc +0 -0
- package/shared_tools/__pycache__/SearchTools.cpython-312.pyc +0 -0
- package/shared_tools/__pycache__/__init__.cpython-312.pyc +0 -0
- package/slides_agent/.cursor/rules/slides-agent-workflow.mdc +9 -0
- package/slides_agent/__init__.py +1 -0
- package/slides_agent/__pycache__/__init__.cpython-312.pyc +0 -0
- package/slides_agent/__pycache__/slides_agent.cpython-312.pyc +0 -0
- package/slides_agent/instructions.md +298 -0
- package/slides_agent/pptx/SKILL.md +528 -0
- package/slides_agent/pptx/html2pptx.md +625 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/slides_agent/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/slides_agent/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/slides_agent/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/slides_agent/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/slides_agent/pptx/ooxml/scripts/pack.py +169 -0
- package/slides_agent/pptx/ooxml/scripts/unpack.py +29 -0
- package/slides_agent/pptx/ooxml/scripts/validate.py +69 -0
- package/slides_agent/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/slides_agent/pptx/ooxml/scripts/validation/base.py +951 -0
- package/slides_agent/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/slides_agent/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/slides_agent/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/slides_agent/pptx/ooxml.md +427 -0
- package/slides_agent/pptx/scripts/html2pptx.js +1092 -0
- package/slides_agent/pptx/scripts/inventory.py +1020 -0
- package/slides_agent/pptx/scripts/rearrange.py +231 -0
- package/slides_agent/pptx/scripts/replace.py +385 -0
- package/slides_agent/pptx/scripts/thumbnail.py +451 -0
- package/slides_agent/slides_agent.py +109 -0
- package/slides_agent/test_deck/_theme.css +92 -0
- package/slides_agent/test_deck/assets/placeholder.svg +11 -0
- package/slides_agent/test_deck/slide_01_title.html +10 -0
- package/slides_agent/test_deck/slide_02_image_split.html +23 -0
- package/slides_agent/test_deck/slide_03_kpi.html +21 -0
- package/slides_agent/tools/ApplyPptxTextReplacements.py +91 -0
- package/slides_agent/tools/BuildPptxFromHtmlSlides.py +221 -0
- package/slides_agent/tools/CheckSlide.py +218 -0
- package/slides_agent/tools/CheckSlideCanvasOverflow.py +221 -0
- package/slides_agent/tools/CreateImageMontage.py +261 -0
- package/slides_agent/tools/CreatePptxThumbnailGrid.py +168 -0
- package/slides_agent/tools/DeleteSlide.py +78 -0
- package/slides_agent/tools/DownloadImage.py +79 -0
- package/slides_agent/tools/EnsureRasterImage.py +157 -0
- package/slides_agent/tools/ExtractPptxTextInventory.py +104 -0
- package/slides_agent/tools/GenerateImage.py +189 -0
- package/slides_agent/tools/ImageSearch.py +127 -0
- package/slides_agent/tools/InsertNewSlides.py +393 -0
- package/slides_agent/tools/ManageTheme.py +112 -0
- package/slides_agent/tools/ModifySlide.py +563 -0
- package/slides_agent/tools/ReadSlide.py +26 -0
- package/slides_agent/tools/RearrangePptxSlidesFromTemplate.py +114 -0
- package/slides_agent/tools/RestoreSnapshot.py +89 -0
- package/slides_agent/tools/SlideScreenshot.py +66 -0
- package/slides_agent/tools/__init__.py +54 -0
- package/slides_agent/tools/__pycache__/ApplyPptxTextReplacements.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/BuildPptxFromHtmlSlides.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/CheckSlide.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/CheckSlideCanvasOverflow.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/CreateImageMontage.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/CreatePptxThumbnailGrid.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/DeleteSlide.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/DownloadImage.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/EnsureRasterImage.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/ExtractPptxTextInventory.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/GenerateImage.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/ImageSearch.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/InsertNewSlides.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/ManageTheme.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/ModifySlide.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/ReadSlide.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/RearrangePptxSlidesFromTemplate.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/RestoreSnapshot.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/SlideScreenshot.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/slide_file_utils.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/slide_html_utils.cpython-312.pyc +0 -0
- package/slides_agent/tools/__pycache__/template_registry.cpython-312.pyc +0 -0
- package/slides_agent/tools/deck_utils.py +31 -0
- package/slides_agent/tools/html2pptx_runner.js +1183 -0
- package/slides_agent/tools/html_writer_instructions.md +149 -0
- package/slides_agent/tools/slide_file_utils.py +108 -0
- package/slides_agent/tools/slide_html_utils.py +354 -0
- package/slides_agent/tools/template_registry.py +55 -0
- package/swarm.py +82 -0
- package/video_generation_agent/__init__.py +1 -0
- package/video_generation_agent/__pycache__/__init__.cpython-312.pyc +0 -0
- package/video_generation_agent/__pycache__/video_generation_agent.cpython-312.pyc +0 -0
- package/video_generation_agent/instructions.md +178 -0
- package/video_generation_agent/tools/AddSubtitles.py +425 -0
- package/video_generation_agent/tools/CombineImages.py +166 -0
- package/video_generation_agent/tools/CombineVideos.py +113 -0
- package/video_generation_agent/tools/EditAudio.py +297 -0
- package/video_generation_agent/tools/EditImage.py +144 -0
- package/video_generation_agent/tools/EditVideoContent.py +369 -0
- package/video_generation_agent/tools/GenerateImage.py +133 -0
- package/video_generation_agent/tools/GenerateVideo.py +556 -0
- package/video_generation_agent/tools/TrimVideo.py +233 -0
- package/video_generation_agent/tools/__init__.py +1 -0
- package/video_generation_agent/tools/__pycache__/AddSubtitles.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/CombineImages.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/CombineVideos.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/EditAudio.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/EditImage.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/EditVideoContent.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/GenerateImage.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/GenerateVideo.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/__pycache__/TrimVideo.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/utils/__init__.py +1 -0
- package/video_generation_agent/tools/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/utils/__pycache__/image_utils.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/utils/__pycache__/video_utils.cpython-312.pyc +0 -0
- package/video_generation_agent/tools/utils/image_utils.py +174 -0
- package/video_generation_agent/tools/utils/video_utils.py +522 -0
- package/video_generation_agent/video_generation_agent.py +26 -0
- package/virtual_assistant/__init__.py +1 -0
- package/virtual_assistant/__pycache__/__init__.cpython-312.pyc +0 -0
- package/virtual_assistant/__pycache__/virtual_assistant.cpython-312.pyc +0 -0
- package/virtual_assistant/instructions.md +206 -0
- package/virtual_assistant/tools/AddLabelToEmail.py +154 -0
- package/virtual_assistant/tools/CheckEventsForDate.py +218 -0
- package/virtual_assistant/tools/CheckUnreadSlackMessages.py +216 -0
- package/virtual_assistant/tools/CreateCalendarEvent.py +261 -0
- package/virtual_assistant/tools/DeleteCalendarEvent.py +137 -0
- package/virtual_assistant/tools/DeleteDraft.py +95 -0
- package/virtual_assistant/tools/DraftEmail.py +239 -0
- package/virtual_assistant/tools/EditFile.py +113 -0
- package/virtual_assistant/tools/FindEmails.py +330 -0
- package/virtual_assistant/tools/GetCurrentTime.py +69 -0
- package/virtual_assistant/tools/GetSlackUserInfo.py +117 -0
- package/virtual_assistant/tools/ListDirectory.py +113 -0
- package/virtual_assistant/tools/ListSkills.py +94 -0
- package/virtual_assistant/tools/ManageLabels.py +295 -0
- package/virtual_assistant/tools/ProductSearch.py +254 -0
- package/virtual_assistant/tools/ReadEmail.py +251 -0
- package/virtual_assistant/tools/ReadFile.py +108 -0
- package/virtual_assistant/tools/ReadSlackMessages.py +191 -0
- package/virtual_assistant/tools/RemoveLabelFromEmail.py +137 -0
- package/virtual_assistant/tools/RescheduleCalendarEvent.py +227 -0
- package/virtual_assistant/tools/ScholarSearch.py +216 -0
- package/virtual_assistant/tools/SendDraft.py +101 -0
- package/virtual_assistant/tools/SendSlackMessage.py +148 -0
- package/virtual_assistant/tools/WriteFile.py +95 -0
- package/virtual_assistant/tools/__init__.py +1 -0
- package/virtual_assistant/tools/__pycache__/AddLabelToEmail.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/CheckEventsForDate.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/CheckUnreadSlackMessages.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/CreateCalendarEvent.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/DeleteCalendarEvent.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/DeleteDraft.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/DraftEmail.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/EditFile.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/FindEmails.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/GetCurrentTime.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/GetSlackUserInfo.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ListDirectory.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ListSkills.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ManageLabels.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ProductSearch.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ReadEmail.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ReadFile.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ReadSlackMessages.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/RemoveLabelFromEmail.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/RescheduleCalendarEvent.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/ScholarSearch.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/SendDraft.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/SendSlackMessage.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/WriteFile.cpython-312.pyc +0 -0
- package/virtual_assistant/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- 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
|
+
]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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)
|