@_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,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"]
|