ai-parrot 0.17.2__cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
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.
- agentui/.prettierrc +15 -0
- agentui/QUICKSTART.md +272 -0
- agentui/README.md +59 -0
- agentui/env.example +16 -0
- agentui/jsconfig.json +14 -0
- agentui/package-lock.json +4242 -0
- agentui/package.json +34 -0
- agentui/scripts/postinstall/apply-patches.mjs +260 -0
- agentui/src/app.css +61 -0
- agentui/src/app.d.ts +13 -0
- agentui/src/app.html +12 -0
- agentui/src/components/LoadingSpinner.svelte +64 -0
- agentui/src/components/ThemeSwitcher.svelte +159 -0
- agentui/src/components/index.js +4 -0
- agentui/src/lib/api/bots.ts +60 -0
- agentui/src/lib/api/chat.ts +22 -0
- agentui/src/lib/api/http.ts +25 -0
- agentui/src/lib/components/BotCard.svelte +33 -0
- agentui/src/lib/components/ChatBubble.svelte +63 -0
- agentui/src/lib/components/Toast.svelte +21 -0
- agentui/src/lib/config.ts +20 -0
- agentui/src/lib/stores/auth.svelte.ts +73 -0
- agentui/src/lib/stores/theme.svelte.js +64 -0
- agentui/src/lib/stores/toast.svelte.ts +31 -0
- agentui/src/lib/utils/conversation.ts +39 -0
- agentui/src/routes/+layout.svelte +20 -0
- agentui/src/routes/+page.svelte +232 -0
- agentui/src/routes/login/+page.svelte +200 -0
- agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
- agentui/src/routes/talk/[agentId]/+page.ts +7 -0
- agentui/static/README.md +1 -0
- agentui/svelte.config.js +11 -0
- agentui/tailwind.config.ts +53 -0
- agentui/tsconfig.json +3 -0
- agentui/vite.config.ts +10 -0
- ai_parrot-0.17.2.dist-info/METADATA +472 -0
- ai_parrot-0.17.2.dist-info/RECORD +535 -0
- ai_parrot-0.17.2.dist-info/WHEEL +6 -0
- ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
- ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
- ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
- crew-builder/.prettierrc +15 -0
- crew-builder/QUICKSTART.md +259 -0
- crew-builder/README.md +113 -0
- crew-builder/env.example +17 -0
- crew-builder/jsconfig.json +14 -0
- crew-builder/package-lock.json +4182 -0
- crew-builder/package.json +37 -0
- crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
- crew-builder/src/app.css +62 -0
- crew-builder/src/app.d.ts +13 -0
- crew-builder/src/app.html +12 -0
- crew-builder/src/components/LoadingSpinner.svelte +64 -0
- crew-builder/src/components/ThemeSwitcher.svelte +149 -0
- crew-builder/src/components/index.js +9 -0
- crew-builder/src/lib/api/bots.ts +60 -0
- crew-builder/src/lib/api/chat.ts +80 -0
- crew-builder/src/lib/api/client.ts +56 -0
- crew-builder/src/lib/api/crew/crew.ts +136 -0
- crew-builder/src/lib/api/index.ts +5 -0
- crew-builder/src/lib/api/o365/auth.ts +65 -0
- crew-builder/src/lib/auth/auth.ts +54 -0
- crew-builder/src/lib/components/AgentNode.svelte +43 -0
- crew-builder/src/lib/components/BotCard.svelte +33 -0
- crew-builder/src/lib/components/ChatBubble.svelte +67 -0
- crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
- crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
- crew-builder/src/lib/components/JsonViewer.svelte +24 -0
- crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
- crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
- crew-builder/src/lib/components/Toast.svelte +67 -0
- crew-builder/src/lib/components/Toolbar.svelte +157 -0
- crew-builder/src/lib/components/index.ts +10 -0
- crew-builder/src/lib/config.ts +8 -0
- crew-builder/src/lib/stores/auth.svelte.ts +228 -0
- crew-builder/src/lib/stores/crewStore.ts +369 -0
- crew-builder/src/lib/stores/theme.svelte.js +145 -0
- crew-builder/src/lib/stores/toast.svelte.ts +69 -0
- crew-builder/src/lib/utils/conversation.ts +39 -0
- crew-builder/src/lib/utils/markdown.ts +122 -0
- crew-builder/src/lib/utils/talkHistory.ts +47 -0
- crew-builder/src/routes/+layout.svelte +20 -0
- crew-builder/src/routes/+page.svelte +539 -0
- crew-builder/src/routes/agents/+page.svelte +247 -0
- crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
- crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
- crew-builder/src/routes/builder/+page.svelte +204 -0
- crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
- crew-builder/src/routes/crew/ask/+page.ts +1 -0
- crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
- crew-builder/src/routes/login/+page.svelte +197 -0
- crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
- crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
- crew-builder/static/README.md +1 -0
- crew-builder/svelte.config.js +11 -0
- crew-builder/tailwind.config.ts +53 -0
- crew-builder/tsconfig.json +3 -0
- crew-builder/vite.config.ts +10 -0
- mcp_servers/calculator_server.py +309 -0
- parrot/__init__.py +27 -0
- parrot/__pycache__/__init__.cpython-310.pyc +0 -0
- parrot/__pycache__/version.cpython-310.pyc +0 -0
- parrot/_version.py +34 -0
- parrot/a2a/__init__.py +48 -0
- parrot/a2a/client.py +658 -0
- parrot/a2a/discovery.py +89 -0
- parrot/a2a/mixin.py +257 -0
- parrot/a2a/models.py +376 -0
- parrot/a2a/server.py +770 -0
- parrot/agents/__init__.py +29 -0
- parrot/bots/__init__.py +12 -0
- parrot/bots/a2a_agent.py +19 -0
- parrot/bots/abstract.py +3139 -0
- parrot/bots/agent.py +1129 -0
- parrot/bots/basic.py +9 -0
- parrot/bots/chatbot.py +669 -0
- parrot/bots/data.py +1618 -0
- parrot/bots/database/__init__.py +5 -0
- parrot/bots/database/abstract.py +3071 -0
- parrot/bots/database/cache.py +286 -0
- parrot/bots/database/models.py +468 -0
- parrot/bots/database/prompts.py +154 -0
- parrot/bots/database/retries.py +98 -0
- parrot/bots/database/router.py +269 -0
- parrot/bots/database/sql.py +41 -0
- parrot/bots/db/__init__.py +6 -0
- parrot/bots/db/abstract.py +556 -0
- parrot/bots/db/bigquery.py +602 -0
- parrot/bots/db/cache.py +85 -0
- parrot/bots/db/documentdb.py +668 -0
- parrot/bots/db/elastic.py +1014 -0
- parrot/bots/db/influx.py +898 -0
- parrot/bots/db/mock.py +96 -0
- parrot/bots/db/multi.py +783 -0
- parrot/bots/db/prompts.py +185 -0
- parrot/bots/db/sql.py +1255 -0
- parrot/bots/db/tools.py +212 -0
- parrot/bots/document.py +680 -0
- parrot/bots/hrbot.py +15 -0
- parrot/bots/kb.py +170 -0
- parrot/bots/mcp.py +36 -0
- parrot/bots/orchestration/README.md +463 -0
- parrot/bots/orchestration/__init__.py +1 -0
- parrot/bots/orchestration/agent.py +155 -0
- parrot/bots/orchestration/crew.py +3330 -0
- parrot/bots/orchestration/fsm.py +1179 -0
- parrot/bots/orchestration/hr.py +434 -0
- parrot/bots/orchestration/storage/__init__.py +4 -0
- parrot/bots/orchestration/storage/memory.py +100 -0
- parrot/bots/orchestration/storage/mixin.py +119 -0
- parrot/bots/orchestration/verify.py +202 -0
- parrot/bots/product.py +204 -0
- parrot/bots/prompts/__init__.py +96 -0
- parrot/bots/prompts/agents.py +155 -0
- parrot/bots/prompts/data.py +216 -0
- parrot/bots/prompts/output_generation.py +8 -0
- parrot/bots/scraper/__init__.py +3 -0
- parrot/bots/scraper/models.py +122 -0
- parrot/bots/scraper/scraper.py +1173 -0
- parrot/bots/scraper/templates.py +115 -0
- parrot/bots/stores/__init__.py +5 -0
- parrot/bots/stores/local.py +172 -0
- parrot/bots/webdev.py +81 -0
- parrot/cli.py +17 -0
- parrot/clients/__init__.py +16 -0
- parrot/clients/base.py +1491 -0
- parrot/clients/claude.py +1191 -0
- parrot/clients/factory.py +129 -0
- parrot/clients/google.py +4567 -0
- parrot/clients/gpt.py +1975 -0
- parrot/clients/grok.py +432 -0
- parrot/clients/groq.py +986 -0
- parrot/clients/hf.py +582 -0
- parrot/clients/models.py +18 -0
- parrot/conf.py +395 -0
- parrot/embeddings/__init__.py +9 -0
- parrot/embeddings/base.py +157 -0
- parrot/embeddings/google.py +98 -0
- parrot/embeddings/huggingface.py +74 -0
- parrot/embeddings/openai.py +84 -0
- parrot/embeddings/processor.py +88 -0
- parrot/exceptions.c +13868 -0
- parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/exceptions.pxd +22 -0
- parrot/exceptions.pxi +15 -0
- parrot/exceptions.pyx +44 -0
- parrot/generators/__init__.py +29 -0
- parrot/generators/base.py +200 -0
- parrot/generators/html.py +293 -0
- parrot/generators/react.py +205 -0
- parrot/generators/streamlit.py +203 -0
- parrot/generators/template.py +105 -0
- parrot/handlers/__init__.py +4 -0
- parrot/handlers/agent.py +861 -0
- parrot/handlers/agents/__init__.py +1 -0
- parrot/handlers/agents/abstract.py +900 -0
- parrot/handlers/bots.py +338 -0
- parrot/handlers/chat.py +915 -0
- parrot/handlers/creation.sql +192 -0
- parrot/handlers/crew/ARCHITECTURE.md +362 -0
- parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
- parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
- parrot/handlers/crew/__init__.py +0 -0
- parrot/handlers/crew/handler.py +801 -0
- parrot/handlers/crew/models.py +229 -0
- parrot/handlers/crew/redis_persistence.py +523 -0
- parrot/handlers/jobs/__init__.py +10 -0
- parrot/handlers/jobs/job.py +384 -0
- parrot/handlers/jobs/mixin.py +627 -0
- parrot/handlers/jobs/models.py +115 -0
- parrot/handlers/jobs/worker.py +31 -0
- parrot/handlers/models.py +596 -0
- parrot/handlers/o365_auth.py +105 -0
- parrot/handlers/stream.py +337 -0
- parrot/interfaces/__init__.py +6 -0
- parrot/interfaces/aws.py +143 -0
- parrot/interfaces/credentials.py +113 -0
- parrot/interfaces/database.py +27 -0
- parrot/interfaces/google.py +1123 -0
- parrot/interfaces/hierarchy.py +1227 -0
- parrot/interfaces/http.py +651 -0
- parrot/interfaces/images/__init__.py +0 -0
- parrot/interfaces/images/plugins/__init__.py +24 -0
- parrot/interfaces/images/plugins/abstract.py +58 -0
- parrot/interfaces/images/plugins/analisys.py +148 -0
- parrot/interfaces/images/plugins/classify.py +150 -0
- parrot/interfaces/images/plugins/classifybase.py +182 -0
- parrot/interfaces/images/plugins/detect.py +150 -0
- parrot/interfaces/images/plugins/exif.py +1103 -0
- parrot/interfaces/images/plugins/hash.py +52 -0
- parrot/interfaces/images/plugins/vision.py +104 -0
- parrot/interfaces/images/plugins/yolo.py +66 -0
- parrot/interfaces/images/plugins/zerodetect.py +197 -0
- parrot/interfaces/o365.py +978 -0
- parrot/interfaces/onedrive.py +822 -0
- parrot/interfaces/sharepoint.py +1435 -0
- parrot/interfaces/soap.py +257 -0
- parrot/loaders/__init__.py +8 -0
- parrot/loaders/abstract.py +1131 -0
- parrot/loaders/audio.py +199 -0
- parrot/loaders/basepdf.py +53 -0
- parrot/loaders/basevideo.py +1568 -0
- parrot/loaders/csv.py +409 -0
- parrot/loaders/docx.py +116 -0
- parrot/loaders/epubloader.py +316 -0
- parrot/loaders/excel.py +199 -0
- parrot/loaders/factory.py +55 -0
- parrot/loaders/files/__init__.py +0 -0
- parrot/loaders/files/abstract.py +39 -0
- parrot/loaders/files/html.py +26 -0
- parrot/loaders/files/text.py +63 -0
- parrot/loaders/html.py +152 -0
- parrot/loaders/markdown.py +442 -0
- parrot/loaders/pdf.py +373 -0
- parrot/loaders/pdfmark.py +320 -0
- parrot/loaders/pdftables.py +506 -0
- parrot/loaders/ppt.py +476 -0
- parrot/loaders/qa.py +63 -0
- parrot/loaders/splitters/__init__.py +10 -0
- parrot/loaders/splitters/base.py +138 -0
- parrot/loaders/splitters/md.py +228 -0
- parrot/loaders/splitters/token.py +143 -0
- parrot/loaders/txt.py +26 -0
- parrot/loaders/video.py +89 -0
- parrot/loaders/videolocal.py +218 -0
- parrot/loaders/videounderstanding.py +377 -0
- parrot/loaders/vimeo.py +167 -0
- parrot/loaders/web.py +599 -0
- parrot/loaders/youtube.py +504 -0
- parrot/manager/__init__.py +5 -0
- parrot/manager/manager.py +1030 -0
- parrot/mcp/__init__.py +28 -0
- parrot/mcp/adapter.py +105 -0
- parrot/mcp/cli.py +174 -0
- parrot/mcp/client.py +119 -0
- parrot/mcp/config.py +75 -0
- parrot/mcp/integration.py +842 -0
- parrot/mcp/oauth.py +933 -0
- parrot/mcp/server.py +225 -0
- parrot/mcp/transports/__init__.py +3 -0
- parrot/mcp/transports/base.py +279 -0
- parrot/mcp/transports/grpc_session.py +163 -0
- parrot/mcp/transports/http.py +312 -0
- parrot/mcp/transports/mcp.proto +108 -0
- parrot/mcp/transports/quic.py +1082 -0
- parrot/mcp/transports/sse.py +330 -0
- parrot/mcp/transports/stdio.py +309 -0
- parrot/mcp/transports/unix.py +395 -0
- parrot/mcp/transports/websocket.py +547 -0
- parrot/memory/__init__.py +16 -0
- parrot/memory/abstract.py +209 -0
- parrot/memory/agent.py +32 -0
- parrot/memory/cache.py +175 -0
- parrot/memory/core.py +555 -0
- parrot/memory/file.py +153 -0
- parrot/memory/mem.py +131 -0
- parrot/memory/redis.py +613 -0
- parrot/models/__init__.py +46 -0
- parrot/models/basic.py +118 -0
- parrot/models/compliance.py +208 -0
- parrot/models/crew.py +395 -0
- parrot/models/detections.py +654 -0
- parrot/models/generation.py +85 -0
- parrot/models/google.py +223 -0
- parrot/models/groq.py +23 -0
- parrot/models/openai.py +30 -0
- parrot/models/outputs.py +285 -0
- parrot/models/responses.py +938 -0
- parrot/notifications/__init__.py +743 -0
- parrot/openapi/__init__.py +3 -0
- parrot/openapi/components.yaml +641 -0
- parrot/openapi/config.py +322 -0
- parrot/outputs/__init__.py +32 -0
- parrot/outputs/formats/__init__.py +108 -0
- parrot/outputs/formats/altair.py +359 -0
- parrot/outputs/formats/application.py +122 -0
- parrot/outputs/formats/base.py +351 -0
- parrot/outputs/formats/bokeh.py +356 -0
- parrot/outputs/formats/card.py +424 -0
- parrot/outputs/formats/chart.py +436 -0
- parrot/outputs/formats/d3.py +255 -0
- parrot/outputs/formats/echarts.py +310 -0
- parrot/outputs/formats/generators/__init__.py +0 -0
- parrot/outputs/formats/generators/abstract.py +61 -0
- parrot/outputs/formats/generators/panel.py +145 -0
- parrot/outputs/formats/generators/streamlit.py +86 -0
- parrot/outputs/formats/generators/terminal.py +63 -0
- parrot/outputs/formats/holoviews.py +310 -0
- parrot/outputs/formats/html.py +147 -0
- parrot/outputs/formats/jinja2.py +46 -0
- parrot/outputs/formats/json.py +87 -0
- parrot/outputs/formats/map.py +933 -0
- parrot/outputs/formats/markdown.py +172 -0
- parrot/outputs/formats/matplotlib.py +237 -0
- parrot/outputs/formats/mixins/__init__.py +0 -0
- parrot/outputs/formats/mixins/emaps.py +855 -0
- parrot/outputs/formats/plotly.py +341 -0
- parrot/outputs/formats/seaborn.py +310 -0
- parrot/outputs/formats/table.py +397 -0
- parrot/outputs/formats/template_report.py +138 -0
- parrot/outputs/formats/yaml.py +125 -0
- parrot/outputs/formatter.py +152 -0
- parrot/outputs/templates/__init__.py +95 -0
- parrot/pipelines/__init__.py +0 -0
- parrot/pipelines/abstract.py +210 -0
- parrot/pipelines/detector.py +124 -0
- parrot/pipelines/models.py +90 -0
- parrot/pipelines/planogram.py +3002 -0
- parrot/pipelines/table.sql +97 -0
- parrot/plugins/__init__.py +106 -0
- parrot/plugins/importer.py +80 -0
- parrot/py.typed +0 -0
- parrot/registry/__init__.py +18 -0
- parrot/registry/registry.py +594 -0
- parrot/scheduler/__init__.py +1189 -0
- parrot/scheduler/models.py +60 -0
- parrot/security/__init__.py +16 -0
- parrot/security/prompt_injection.py +268 -0
- parrot/security/security_events.sql +25 -0
- parrot/services/__init__.py +1 -0
- parrot/services/mcp/__init__.py +8 -0
- parrot/services/mcp/config.py +13 -0
- parrot/services/mcp/server.py +295 -0
- parrot/services/o365_remote_auth.py +235 -0
- parrot/stores/__init__.py +7 -0
- parrot/stores/abstract.py +352 -0
- parrot/stores/arango.py +1090 -0
- parrot/stores/bigquery.py +1377 -0
- parrot/stores/cache.py +106 -0
- parrot/stores/empty.py +10 -0
- parrot/stores/faiss_store.py +1157 -0
- parrot/stores/kb/__init__.py +9 -0
- parrot/stores/kb/abstract.py +68 -0
- parrot/stores/kb/cache.py +165 -0
- parrot/stores/kb/doc.py +325 -0
- parrot/stores/kb/hierarchy.py +346 -0
- parrot/stores/kb/local.py +457 -0
- parrot/stores/kb/prompt.py +28 -0
- parrot/stores/kb/redis.py +659 -0
- parrot/stores/kb/store.py +115 -0
- parrot/stores/kb/user.py +374 -0
- parrot/stores/models.py +59 -0
- parrot/stores/pgvector.py +3 -0
- parrot/stores/postgres.py +2853 -0
- parrot/stores/utils/__init__.py +0 -0
- parrot/stores/utils/chunking.py +197 -0
- parrot/telemetry/__init__.py +3 -0
- parrot/telemetry/mixin.py +111 -0
- parrot/template/__init__.py +3 -0
- parrot/template/engine.py +259 -0
- parrot/tools/__init__.py +23 -0
- parrot/tools/abstract.py +644 -0
- parrot/tools/agent.py +363 -0
- parrot/tools/arangodbsearch.py +537 -0
- parrot/tools/arxiv_tool.py +188 -0
- parrot/tools/calculator/__init__.py +3 -0
- parrot/tools/calculator/operations/__init__.py +38 -0
- parrot/tools/calculator/operations/calculus.py +80 -0
- parrot/tools/calculator/operations/statistics.py +76 -0
- parrot/tools/calculator/tool.py +150 -0
- parrot/tools/cloudwatch.py +988 -0
- parrot/tools/codeinterpreter/__init__.py +127 -0
- parrot/tools/codeinterpreter/executor.py +371 -0
- parrot/tools/codeinterpreter/internals.py +473 -0
- parrot/tools/codeinterpreter/models.py +643 -0
- parrot/tools/codeinterpreter/prompts.py +224 -0
- parrot/tools/codeinterpreter/tool.py +664 -0
- parrot/tools/company_info/__init__.py +6 -0
- parrot/tools/company_info/tool.py +1138 -0
- parrot/tools/correlationanalysis.py +437 -0
- parrot/tools/database/abstract.py +286 -0
- parrot/tools/database/bq.py +115 -0
- parrot/tools/database/cache.py +284 -0
- parrot/tools/database/models.py +95 -0
- parrot/tools/database/pg.py +343 -0
- parrot/tools/databasequery.py +1159 -0
- parrot/tools/db.py +1800 -0
- parrot/tools/ddgo.py +370 -0
- parrot/tools/decorators.py +271 -0
- parrot/tools/dftohtml.py +282 -0
- parrot/tools/document.py +549 -0
- parrot/tools/ecs.py +819 -0
- parrot/tools/edareport.py +368 -0
- parrot/tools/elasticsearch.py +1049 -0
- parrot/tools/employees.py +462 -0
- parrot/tools/epson/__init__.py +96 -0
- parrot/tools/excel.py +683 -0
- parrot/tools/file/__init__.py +13 -0
- parrot/tools/file/abstract.py +76 -0
- parrot/tools/file/gcs.py +378 -0
- parrot/tools/file/local.py +284 -0
- parrot/tools/file/s3.py +511 -0
- parrot/tools/file/tmp.py +309 -0
- parrot/tools/file/tool.py +501 -0
- parrot/tools/file_reader.py +129 -0
- parrot/tools/flowtask/__init__.py +19 -0
- parrot/tools/flowtask/tool.py +761 -0
- parrot/tools/gittoolkit.py +508 -0
- parrot/tools/google/__init__.py +18 -0
- parrot/tools/google/base.py +169 -0
- parrot/tools/google/tools.py +1251 -0
- parrot/tools/googlelocation.py +5 -0
- parrot/tools/googleroutes.py +5 -0
- parrot/tools/googlesearch.py +5 -0
- parrot/tools/googlesitesearch.py +5 -0
- parrot/tools/googlevoice.py +2 -0
- parrot/tools/gvoice.py +695 -0
- parrot/tools/ibisworld/README.md +225 -0
- parrot/tools/ibisworld/__init__.py +11 -0
- parrot/tools/ibisworld/tool.py +366 -0
- parrot/tools/jiratoolkit.py +1718 -0
- parrot/tools/manager.py +1098 -0
- parrot/tools/math.py +152 -0
- parrot/tools/metadata.py +476 -0
- parrot/tools/msteams.py +1621 -0
- parrot/tools/msword.py +635 -0
- parrot/tools/multidb.py +580 -0
- parrot/tools/multistoresearch.py +369 -0
- parrot/tools/networkninja.py +167 -0
- parrot/tools/nextstop/__init__.py +4 -0
- parrot/tools/nextstop/base.py +286 -0
- parrot/tools/nextstop/employee.py +733 -0
- parrot/tools/nextstop/store.py +462 -0
- parrot/tools/notification.py +435 -0
- parrot/tools/o365/__init__.py +42 -0
- parrot/tools/o365/base.py +295 -0
- parrot/tools/o365/bundle.py +522 -0
- parrot/tools/o365/events.py +554 -0
- parrot/tools/o365/mail.py +992 -0
- parrot/tools/o365/onedrive.py +497 -0
- parrot/tools/o365/sharepoint.py +641 -0
- parrot/tools/openapi_toolkit.py +904 -0
- parrot/tools/openweather.py +527 -0
- parrot/tools/pdfprint.py +1001 -0
- parrot/tools/powerbi.py +518 -0
- parrot/tools/powerpoint.py +1113 -0
- parrot/tools/pricestool.py +146 -0
- parrot/tools/products/__init__.py +246 -0
- parrot/tools/prophet_tool.py +171 -0
- parrot/tools/pythonpandas.py +630 -0
- parrot/tools/pythonrepl.py +910 -0
- parrot/tools/qsource.py +436 -0
- parrot/tools/querytoolkit.py +395 -0
- parrot/tools/quickeda.py +827 -0
- parrot/tools/resttool.py +553 -0
- parrot/tools/retail/__init__.py +0 -0
- parrot/tools/retail/bby.py +528 -0
- parrot/tools/sandboxtool.py +703 -0
- parrot/tools/sassie/__init__.py +352 -0
- parrot/tools/scraping/__init__.py +7 -0
- parrot/tools/scraping/docs/select.md +466 -0
- parrot/tools/scraping/documentation.md +1278 -0
- parrot/tools/scraping/driver.py +436 -0
- parrot/tools/scraping/models.py +576 -0
- parrot/tools/scraping/options.py +85 -0
- parrot/tools/scraping/orchestrator.py +517 -0
- parrot/tools/scraping/readme.md +740 -0
- parrot/tools/scraping/tool.py +3115 -0
- parrot/tools/seasonaldetection.py +642 -0
- parrot/tools/shell_tool/__init__.py +5 -0
- parrot/tools/shell_tool/actions.py +408 -0
- parrot/tools/shell_tool/engine.py +155 -0
- parrot/tools/shell_tool/models.py +322 -0
- parrot/tools/shell_tool/tool.py +442 -0
- parrot/tools/site_search.py +214 -0
- parrot/tools/textfile.py +418 -0
- parrot/tools/think.py +378 -0
- parrot/tools/toolkit.py +298 -0
- parrot/tools/webapp_tool.py +187 -0
- parrot/tools/whatif.py +1279 -0
- parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
- parrot/tools/workday/__init__.py +6 -0
- parrot/tools/workday/models.py +1389 -0
- parrot/tools/workday/tool.py +1293 -0
- parrot/tools/yfinance_tool.py +306 -0
- parrot/tools/zipcode.py +217 -0
- parrot/utils/__init__.py +2 -0
- parrot/utils/helpers.py +73 -0
- parrot/utils/parsers/__init__.py +5 -0
- parrot/utils/parsers/toml.c +12078 -0
- parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/parsers/toml.pyx +21 -0
- parrot/utils/toml.py +11 -0
- parrot/utils/types.cpp +20936 -0
- parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/types.pyx +213 -0
- parrot/utils/uv.py +11 -0
- parrot/version.py +10 -0
- parrot/yaml-rs/Cargo.lock +350 -0
- parrot/yaml-rs/Cargo.toml +19 -0
- parrot/yaml-rs/pyproject.toml +19 -0
- parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
- parrot/yaml-rs/src/lib.rs +222 -0
- requirements/docker-compose.yml +24 -0
- requirements/requirements-dev.txt +21 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Office365 Tools for AI-Parrot.
|
|
3
|
+
|
|
4
|
+
Base classes and utilities for Office365 integration tools.
|
|
5
|
+
Supports multiple authentication modes:
|
|
6
|
+
- Direct (admin/client credentials)
|
|
7
|
+
- On-Behalf-Of (OBO)
|
|
8
|
+
- Delegated (interactive user login)
|
|
9
|
+
"""
|
|
10
|
+
from typing import Dict, Any, Optional, Type, List
|
|
11
|
+
from abc import abstractmethod
|
|
12
|
+
import contextlib
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
import asyncio
|
|
15
|
+
from pydantic import BaseModel, Field
|
|
16
|
+
from navconfig.logging import logging
|
|
17
|
+
from ..abstract import AbstractTool, AbstractToolArgsSchema, ToolResult
|
|
18
|
+
# Import your O365Client
|
|
19
|
+
from ...interfaces.o365 import O365Client
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class O365AuthMode:
|
|
23
|
+
"""Authentication modes for Office365 tools."""
|
|
24
|
+
DIRECT = "direct" # Admin/App credentials
|
|
25
|
+
OBO = "on_behalf_of" # On-Behalf-Of flow
|
|
26
|
+
DELEGATED = "delegated" # Interactive user login
|
|
27
|
+
CACHED = "cached" # Use cached interactive session
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class O365ToolArgsSchema(AbstractToolArgsSchema):
|
|
31
|
+
"""Base schema for Office365 tool arguments."""
|
|
32
|
+
auth_mode: Optional[str] = Field(
|
|
33
|
+
default=None,
|
|
34
|
+
description="Authentication mode: 'direct', 'on_behalf_of', 'delegated', or 'cached'. If not provided, uses the tool's default_auth_mode."
|
|
35
|
+
)
|
|
36
|
+
user_assertion: Optional[str] = Field(
|
|
37
|
+
default=None,
|
|
38
|
+
description="User assertion token for OBO flow"
|
|
39
|
+
)
|
|
40
|
+
user_id: Optional[str] = Field(
|
|
41
|
+
default=None,
|
|
42
|
+
description=(
|
|
43
|
+
"Target mailbox user principal name or ID. Required when using app-only "
|
|
44
|
+
"(client credentials) authentication to access user-specific resources."
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class O365Tool(AbstractTool):
|
|
50
|
+
"""
|
|
51
|
+
Base class for Office365 tools that interact with Microsoft Graph API.
|
|
52
|
+
|
|
53
|
+
This class provides:
|
|
54
|
+
- Integration with O365Client
|
|
55
|
+
- Multiple authentication modes
|
|
56
|
+
- Error handling and logging
|
|
57
|
+
- Async execution support
|
|
58
|
+
|
|
59
|
+
Subclasses should implement:
|
|
60
|
+
- _execute_graph_operation(): Perform the actual Graph API operation
|
|
61
|
+
|
|
62
|
+
Authentication Modes:
|
|
63
|
+
1. DIRECT: Uses client credentials (app-only access)
|
|
64
|
+
- Best for: Admin operations, bulk operations
|
|
65
|
+
- Requires: client_id, client_secret, tenant_id
|
|
66
|
+
|
|
67
|
+
2. ON_BEHALF_OF: Uses OBO flow with user assertion
|
|
68
|
+
- Best for: Acting on behalf of authenticated user
|
|
69
|
+
- Requires: client_id, client_secret, tenant_id, user_assertion
|
|
70
|
+
|
|
71
|
+
3. DELEGATED: Interactive user login
|
|
72
|
+
- Best for: User-specific operations with full permissions
|
|
73
|
+
- Requires: Interactive browser login
|
|
74
|
+
|
|
75
|
+
4. CACHED: Reuse cached interactive session
|
|
76
|
+
- Best for: Subsequent operations after interactive login
|
|
77
|
+
- Requires: Previous interactive_login() call
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
name: str = "o365_base"
|
|
81
|
+
description: str = "Base Office365 tool"
|
|
82
|
+
args_schema: Type[BaseModel] = O365ToolArgsSchema
|
|
83
|
+
return_direct: bool = False
|
|
84
|
+
|
|
85
|
+
def __init__(
|
|
86
|
+
self,
|
|
87
|
+
credentials: Optional[Dict[str, Any]] = None,
|
|
88
|
+
default_auth_mode: str = O365AuthMode.DIRECT,
|
|
89
|
+
scopes: Optional[List[str]] = None,
|
|
90
|
+
**kwargs
|
|
91
|
+
):
|
|
92
|
+
"""
|
|
93
|
+
Initialize Office365 tool.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
credentials: Dict with O365 credentials (client_id, client_secret, tenant_id, etc.)
|
|
97
|
+
default_auth_mode: Default authentication mode to use
|
|
98
|
+
scopes: List of Graph API scopes
|
|
99
|
+
**kwargs: Additional arguments for AbstractTool
|
|
100
|
+
"""
|
|
101
|
+
super().__init__(**kwargs)
|
|
102
|
+
|
|
103
|
+
self.credentials = credentials or {}
|
|
104
|
+
self.default_auth_mode = default_auth_mode
|
|
105
|
+
self.scopes = scopes
|
|
106
|
+
self._client: Optional[O365Client] = None
|
|
107
|
+
self._client_cache: Dict[str, O365Client] = {} # Cache clients by auth mode
|
|
108
|
+
self._authenticated = False # Track auth state
|
|
109
|
+
self.logger = logging.getLogger(f'Parrot.Tools.{self.__class__.__name__}')
|
|
110
|
+
|
|
111
|
+
async def _get_client(
|
|
112
|
+
self,
|
|
113
|
+
auth_mode: str = None,
|
|
114
|
+
user_assertion: str = None,
|
|
115
|
+
scopes: List[str] = None
|
|
116
|
+
) -> O365Client:
|
|
117
|
+
"""
|
|
118
|
+
Get or create O365Client based on authentication mode.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
auth_mode: Authentication mode to use
|
|
122
|
+
user_assertion: User assertion for OBO flow
|
|
123
|
+
scopes: Graph API scopes
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
Configured O365Client instance
|
|
127
|
+
"""
|
|
128
|
+
auth_mode = auth_mode or self.default_auth_mode
|
|
129
|
+
scopes = scopes or self.scopes
|
|
130
|
+
cache_key = f"{auth_mode}_{user_assertion or 'none'}"
|
|
131
|
+
|
|
132
|
+
# Check cache
|
|
133
|
+
if cache_key in self._client_cache:
|
|
134
|
+
cached_client = self._client_cache[cache_key]
|
|
135
|
+
cached_client.set_auth_mode(auth_mode)
|
|
136
|
+
return cached_client
|
|
137
|
+
|
|
138
|
+
# Create new client
|
|
139
|
+
client_credentials = self.credentials.copy()
|
|
140
|
+
|
|
141
|
+
# Handle OBO flow
|
|
142
|
+
if auth_mode == O365AuthMode.OBO:
|
|
143
|
+
if not user_assertion:
|
|
144
|
+
raise ValueError("user_assertion is required for OBO authentication")
|
|
145
|
+
client_credentials['assertion'] = user_assertion
|
|
146
|
+
|
|
147
|
+
# Create and configure client
|
|
148
|
+
client = O365Client(
|
|
149
|
+
credentials=client_credentials
|
|
150
|
+
)
|
|
151
|
+
client.processing_credentials()
|
|
152
|
+
client.set_auth_mode(auth_mode)
|
|
153
|
+
|
|
154
|
+
try:
|
|
155
|
+
if auth_mode == O365AuthMode.DIRECT:
|
|
156
|
+
# Client credentials flow
|
|
157
|
+
self.logger.info("Using direct (client credentials) authentication")
|
|
158
|
+
await asyncio.get_event_loop().run_in_executor(
|
|
159
|
+
None,
|
|
160
|
+
client.acquire_token,
|
|
161
|
+
scopes or self.scopes
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
elif auth_mode == O365AuthMode.OBO:
|
|
165
|
+
# On-Behalf-Of flow
|
|
166
|
+
self.logger.info("Using On-Behalf-Of authentication")
|
|
167
|
+
await asyncio.get_event_loop().run_in_executor(
|
|
168
|
+
None,
|
|
169
|
+
client.acquire_token_on_behalf_of,
|
|
170
|
+
user_assertion,
|
|
171
|
+
scopes or self.scopes
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
elif auth_mode == O365AuthMode.DELEGATED:
|
|
175
|
+
if not self._authenticated:
|
|
176
|
+
await client.interactive_login(scopes=scopes)
|
|
177
|
+
self._authenticated = True
|
|
178
|
+
else:
|
|
179
|
+
await client.ensure_interactive_session(scopes=scopes)
|
|
180
|
+
elif auth_mode == O365AuthMode.CACHED:
|
|
181
|
+
# Use cached session
|
|
182
|
+
self.logger.info("Using cached interactive session")
|
|
183
|
+
await client.ensure_interactive_session(scopes=scopes or self.scopes)
|
|
184
|
+
|
|
185
|
+
else:
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"Unknown authentication mode: {auth_mode}"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# Cache the client
|
|
191
|
+
self._client_cache[cache_key] = client
|
|
192
|
+
|
|
193
|
+
return client
|
|
194
|
+
|
|
195
|
+
except Exception as e:
|
|
196
|
+
self.logger.error(f"Failed to authenticate O365Client: {e}")
|
|
197
|
+
raise
|
|
198
|
+
|
|
199
|
+
@abstractmethod
|
|
200
|
+
async def _execute_graph_operation(
|
|
201
|
+
self,
|
|
202
|
+
client: O365Client,
|
|
203
|
+
**kwargs
|
|
204
|
+
) -> Any:
|
|
205
|
+
"""
|
|
206
|
+
Execute the actual Graph API operation.
|
|
207
|
+
|
|
208
|
+
Subclasses must implement this method to perform specific operations.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
client: Authenticated O365Client instance
|
|
212
|
+
**kwargs: Operation-specific parameters
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
Operation result
|
|
216
|
+
"""
|
|
217
|
+
pass
|
|
218
|
+
|
|
219
|
+
async def _execute(self, **kwargs) -> ToolResult:
|
|
220
|
+
"""
|
|
221
|
+
Execute the Office365 tool.
|
|
222
|
+
|
|
223
|
+
This method handles:
|
|
224
|
+
1. Authentication setup
|
|
225
|
+
2. Calling the specific Graph operation
|
|
226
|
+
3. Error handling
|
|
227
|
+
4. Result formatting
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
**kwargs: Tool arguments including auth parameters
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
ToolResult with operation outcome
|
|
234
|
+
"""
|
|
235
|
+
start_time = datetime.now()
|
|
236
|
+
|
|
237
|
+
try:
|
|
238
|
+
# Extract auth parameters
|
|
239
|
+
auth_mode = kwargs.pop('auth_mode', None) or self.default_auth_mode
|
|
240
|
+
user_assertion = kwargs.pop('user_assertion', None)
|
|
241
|
+
scopes = kwargs.pop('scopes', None) or self.scopes
|
|
242
|
+
|
|
243
|
+
self.logger.debug(
|
|
244
|
+
f"Executing with auth_mode={auth_mode}, "
|
|
245
|
+
f"default_auth_mode={self.default_auth_mode}"
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
# Get authenticated client
|
|
249
|
+
client = await self._get_client(
|
|
250
|
+
auth_mode=auth_mode,
|
|
251
|
+
user_assertion=user_assertion,
|
|
252
|
+
scopes=scopes
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
# Execute the operation
|
|
256
|
+
self.logger.info(f"Executing {self.name} operation")
|
|
257
|
+
result = await self._execute_graph_operation(client, **kwargs)
|
|
258
|
+
|
|
259
|
+
# Calculate execution time
|
|
260
|
+
execution_time = (datetime.now() - start_time).total_seconds()
|
|
261
|
+
|
|
262
|
+
return ToolResult(
|
|
263
|
+
status="success",
|
|
264
|
+
result=result,
|
|
265
|
+
metadata={
|
|
266
|
+
"tool": self.name,
|
|
267
|
+
"auth_mode": auth_mode,
|
|
268
|
+
"execution_time": execution_time,
|
|
269
|
+
"timestamp": datetime.now().isoformat()
|
|
270
|
+
}
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
except Exception as e:
|
|
274
|
+
self.logger.error(f"Error executing {self.name}: {e}", exc_info=True)
|
|
275
|
+
execution_time = (datetime.now() - start_time).total_seconds()
|
|
276
|
+
|
|
277
|
+
return ToolResult(
|
|
278
|
+
status="error",
|
|
279
|
+
result=None,
|
|
280
|
+
error=str(e),
|
|
281
|
+
metadata={
|
|
282
|
+
"tool": self.name,
|
|
283
|
+
"execution_time": execution_time,
|
|
284
|
+
"timestamp": datetime.now().isoformat()
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
async def cleanup(self):
|
|
289
|
+
"""Clean up resources."""
|
|
290
|
+
for client in self._client_cache.values():
|
|
291
|
+
try:
|
|
292
|
+
await client.close()
|
|
293
|
+
except Exception as e:
|
|
294
|
+
self.logger.warning(f"Error closing client: {e}")
|
|
295
|
+
self._client_cache.clear()
|