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.
Files changed (535) hide show
  1. agentui/.prettierrc +15 -0
  2. agentui/QUICKSTART.md +272 -0
  3. agentui/README.md +59 -0
  4. agentui/env.example +16 -0
  5. agentui/jsconfig.json +14 -0
  6. agentui/package-lock.json +4242 -0
  7. agentui/package.json +34 -0
  8. agentui/scripts/postinstall/apply-patches.mjs +260 -0
  9. agentui/src/app.css +61 -0
  10. agentui/src/app.d.ts +13 -0
  11. agentui/src/app.html +12 -0
  12. agentui/src/components/LoadingSpinner.svelte +64 -0
  13. agentui/src/components/ThemeSwitcher.svelte +159 -0
  14. agentui/src/components/index.js +4 -0
  15. agentui/src/lib/api/bots.ts +60 -0
  16. agentui/src/lib/api/chat.ts +22 -0
  17. agentui/src/lib/api/http.ts +25 -0
  18. agentui/src/lib/components/BotCard.svelte +33 -0
  19. agentui/src/lib/components/ChatBubble.svelte +63 -0
  20. agentui/src/lib/components/Toast.svelte +21 -0
  21. agentui/src/lib/config.ts +20 -0
  22. agentui/src/lib/stores/auth.svelte.ts +73 -0
  23. agentui/src/lib/stores/theme.svelte.js +64 -0
  24. agentui/src/lib/stores/toast.svelte.ts +31 -0
  25. agentui/src/lib/utils/conversation.ts +39 -0
  26. agentui/src/routes/+layout.svelte +20 -0
  27. agentui/src/routes/+page.svelte +232 -0
  28. agentui/src/routes/login/+page.svelte +200 -0
  29. agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
  30. agentui/src/routes/talk/[agentId]/+page.ts +7 -0
  31. agentui/static/README.md +1 -0
  32. agentui/svelte.config.js +11 -0
  33. agentui/tailwind.config.ts +53 -0
  34. agentui/tsconfig.json +3 -0
  35. agentui/vite.config.ts +10 -0
  36. ai_parrot-0.17.2.dist-info/METADATA +472 -0
  37. ai_parrot-0.17.2.dist-info/RECORD +535 -0
  38. ai_parrot-0.17.2.dist-info/WHEEL +6 -0
  39. ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
  40. ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
  41. ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
  42. crew-builder/.prettierrc +15 -0
  43. crew-builder/QUICKSTART.md +259 -0
  44. crew-builder/README.md +113 -0
  45. crew-builder/env.example +17 -0
  46. crew-builder/jsconfig.json +14 -0
  47. crew-builder/package-lock.json +4182 -0
  48. crew-builder/package.json +37 -0
  49. crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
  50. crew-builder/src/app.css +62 -0
  51. crew-builder/src/app.d.ts +13 -0
  52. crew-builder/src/app.html +12 -0
  53. crew-builder/src/components/LoadingSpinner.svelte +64 -0
  54. crew-builder/src/components/ThemeSwitcher.svelte +149 -0
  55. crew-builder/src/components/index.js +9 -0
  56. crew-builder/src/lib/api/bots.ts +60 -0
  57. crew-builder/src/lib/api/chat.ts +80 -0
  58. crew-builder/src/lib/api/client.ts +56 -0
  59. crew-builder/src/lib/api/crew/crew.ts +136 -0
  60. crew-builder/src/lib/api/index.ts +5 -0
  61. crew-builder/src/lib/api/o365/auth.ts +65 -0
  62. crew-builder/src/lib/auth/auth.ts +54 -0
  63. crew-builder/src/lib/components/AgentNode.svelte +43 -0
  64. crew-builder/src/lib/components/BotCard.svelte +33 -0
  65. crew-builder/src/lib/components/ChatBubble.svelte +67 -0
  66. crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
  67. crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
  68. crew-builder/src/lib/components/JsonViewer.svelte +24 -0
  69. crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
  70. crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
  71. crew-builder/src/lib/components/Toast.svelte +67 -0
  72. crew-builder/src/lib/components/Toolbar.svelte +157 -0
  73. crew-builder/src/lib/components/index.ts +10 -0
  74. crew-builder/src/lib/config.ts +8 -0
  75. crew-builder/src/lib/stores/auth.svelte.ts +228 -0
  76. crew-builder/src/lib/stores/crewStore.ts +369 -0
  77. crew-builder/src/lib/stores/theme.svelte.js +145 -0
  78. crew-builder/src/lib/stores/toast.svelte.ts +69 -0
  79. crew-builder/src/lib/utils/conversation.ts +39 -0
  80. crew-builder/src/lib/utils/markdown.ts +122 -0
  81. crew-builder/src/lib/utils/talkHistory.ts +47 -0
  82. crew-builder/src/routes/+layout.svelte +20 -0
  83. crew-builder/src/routes/+page.svelte +539 -0
  84. crew-builder/src/routes/agents/+page.svelte +247 -0
  85. crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
  86. crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
  87. crew-builder/src/routes/builder/+page.svelte +204 -0
  88. crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
  89. crew-builder/src/routes/crew/ask/+page.ts +1 -0
  90. crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
  91. crew-builder/src/routes/login/+page.svelte +197 -0
  92. crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
  93. crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
  94. crew-builder/static/README.md +1 -0
  95. crew-builder/svelte.config.js +11 -0
  96. crew-builder/tailwind.config.ts +53 -0
  97. crew-builder/tsconfig.json +3 -0
  98. crew-builder/vite.config.ts +10 -0
  99. mcp_servers/calculator_server.py +309 -0
  100. parrot/__init__.py +27 -0
  101. parrot/__pycache__/__init__.cpython-310.pyc +0 -0
  102. parrot/__pycache__/version.cpython-310.pyc +0 -0
  103. parrot/_version.py +34 -0
  104. parrot/a2a/__init__.py +48 -0
  105. parrot/a2a/client.py +658 -0
  106. parrot/a2a/discovery.py +89 -0
  107. parrot/a2a/mixin.py +257 -0
  108. parrot/a2a/models.py +376 -0
  109. parrot/a2a/server.py +770 -0
  110. parrot/agents/__init__.py +29 -0
  111. parrot/bots/__init__.py +12 -0
  112. parrot/bots/a2a_agent.py +19 -0
  113. parrot/bots/abstract.py +3139 -0
  114. parrot/bots/agent.py +1129 -0
  115. parrot/bots/basic.py +9 -0
  116. parrot/bots/chatbot.py +669 -0
  117. parrot/bots/data.py +1618 -0
  118. parrot/bots/database/__init__.py +5 -0
  119. parrot/bots/database/abstract.py +3071 -0
  120. parrot/bots/database/cache.py +286 -0
  121. parrot/bots/database/models.py +468 -0
  122. parrot/bots/database/prompts.py +154 -0
  123. parrot/bots/database/retries.py +98 -0
  124. parrot/bots/database/router.py +269 -0
  125. parrot/bots/database/sql.py +41 -0
  126. parrot/bots/db/__init__.py +6 -0
  127. parrot/bots/db/abstract.py +556 -0
  128. parrot/bots/db/bigquery.py +602 -0
  129. parrot/bots/db/cache.py +85 -0
  130. parrot/bots/db/documentdb.py +668 -0
  131. parrot/bots/db/elastic.py +1014 -0
  132. parrot/bots/db/influx.py +898 -0
  133. parrot/bots/db/mock.py +96 -0
  134. parrot/bots/db/multi.py +783 -0
  135. parrot/bots/db/prompts.py +185 -0
  136. parrot/bots/db/sql.py +1255 -0
  137. parrot/bots/db/tools.py +212 -0
  138. parrot/bots/document.py +680 -0
  139. parrot/bots/hrbot.py +15 -0
  140. parrot/bots/kb.py +170 -0
  141. parrot/bots/mcp.py +36 -0
  142. parrot/bots/orchestration/README.md +463 -0
  143. parrot/bots/orchestration/__init__.py +1 -0
  144. parrot/bots/orchestration/agent.py +155 -0
  145. parrot/bots/orchestration/crew.py +3330 -0
  146. parrot/bots/orchestration/fsm.py +1179 -0
  147. parrot/bots/orchestration/hr.py +434 -0
  148. parrot/bots/orchestration/storage/__init__.py +4 -0
  149. parrot/bots/orchestration/storage/memory.py +100 -0
  150. parrot/bots/orchestration/storage/mixin.py +119 -0
  151. parrot/bots/orchestration/verify.py +202 -0
  152. parrot/bots/product.py +204 -0
  153. parrot/bots/prompts/__init__.py +96 -0
  154. parrot/bots/prompts/agents.py +155 -0
  155. parrot/bots/prompts/data.py +216 -0
  156. parrot/bots/prompts/output_generation.py +8 -0
  157. parrot/bots/scraper/__init__.py +3 -0
  158. parrot/bots/scraper/models.py +122 -0
  159. parrot/bots/scraper/scraper.py +1173 -0
  160. parrot/bots/scraper/templates.py +115 -0
  161. parrot/bots/stores/__init__.py +5 -0
  162. parrot/bots/stores/local.py +172 -0
  163. parrot/bots/webdev.py +81 -0
  164. parrot/cli.py +17 -0
  165. parrot/clients/__init__.py +16 -0
  166. parrot/clients/base.py +1491 -0
  167. parrot/clients/claude.py +1191 -0
  168. parrot/clients/factory.py +129 -0
  169. parrot/clients/google.py +4567 -0
  170. parrot/clients/gpt.py +1975 -0
  171. parrot/clients/grok.py +432 -0
  172. parrot/clients/groq.py +986 -0
  173. parrot/clients/hf.py +582 -0
  174. parrot/clients/models.py +18 -0
  175. parrot/conf.py +395 -0
  176. parrot/embeddings/__init__.py +9 -0
  177. parrot/embeddings/base.py +157 -0
  178. parrot/embeddings/google.py +98 -0
  179. parrot/embeddings/huggingface.py +74 -0
  180. parrot/embeddings/openai.py +84 -0
  181. parrot/embeddings/processor.py +88 -0
  182. parrot/exceptions.c +13868 -0
  183. parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
  184. parrot/exceptions.pxd +22 -0
  185. parrot/exceptions.pxi +15 -0
  186. parrot/exceptions.pyx +44 -0
  187. parrot/generators/__init__.py +29 -0
  188. parrot/generators/base.py +200 -0
  189. parrot/generators/html.py +293 -0
  190. parrot/generators/react.py +205 -0
  191. parrot/generators/streamlit.py +203 -0
  192. parrot/generators/template.py +105 -0
  193. parrot/handlers/__init__.py +4 -0
  194. parrot/handlers/agent.py +861 -0
  195. parrot/handlers/agents/__init__.py +1 -0
  196. parrot/handlers/agents/abstract.py +900 -0
  197. parrot/handlers/bots.py +338 -0
  198. parrot/handlers/chat.py +915 -0
  199. parrot/handlers/creation.sql +192 -0
  200. parrot/handlers/crew/ARCHITECTURE.md +362 -0
  201. parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
  202. parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
  203. parrot/handlers/crew/__init__.py +0 -0
  204. parrot/handlers/crew/handler.py +801 -0
  205. parrot/handlers/crew/models.py +229 -0
  206. parrot/handlers/crew/redis_persistence.py +523 -0
  207. parrot/handlers/jobs/__init__.py +10 -0
  208. parrot/handlers/jobs/job.py +384 -0
  209. parrot/handlers/jobs/mixin.py +627 -0
  210. parrot/handlers/jobs/models.py +115 -0
  211. parrot/handlers/jobs/worker.py +31 -0
  212. parrot/handlers/models.py +596 -0
  213. parrot/handlers/o365_auth.py +105 -0
  214. parrot/handlers/stream.py +337 -0
  215. parrot/interfaces/__init__.py +6 -0
  216. parrot/interfaces/aws.py +143 -0
  217. parrot/interfaces/credentials.py +113 -0
  218. parrot/interfaces/database.py +27 -0
  219. parrot/interfaces/google.py +1123 -0
  220. parrot/interfaces/hierarchy.py +1227 -0
  221. parrot/interfaces/http.py +651 -0
  222. parrot/interfaces/images/__init__.py +0 -0
  223. parrot/interfaces/images/plugins/__init__.py +24 -0
  224. parrot/interfaces/images/plugins/abstract.py +58 -0
  225. parrot/interfaces/images/plugins/analisys.py +148 -0
  226. parrot/interfaces/images/plugins/classify.py +150 -0
  227. parrot/interfaces/images/plugins/classifybase.py +182 -0
  228. parrot/interfaces/images/plugins/detect.py +150 -0
  229. parrot/interfaces/images/plugins/exif.py +1103 -0
  230. parrot/interfaces/images/plugins/hash.py +52 -0
  231. parrot/interfaces/images/plugins/vision.py +104 -0
  232. parrot/interfaces/images/plugins/yolo.py +66 -0
  233. parrot/interfaces/images/plugins/zerodetect.py +197 -0
  234. parrot/interfaces/o365.py +978 -0
  235. parrot/interfaces/onedrive.py +822 -0
  236. parrot/interfaces/sharepoint.py +1435 -0
  237. parrot/interfaces/soap.py +257 -0
  238. parrot/loaders/__init__.py +8 -0
  239. parrot/loaders/abstract.py +1131 -0
  240. parrot/loaders/audio.py +199 -0
  241. parrot/loaders/basepdf.py +53 -0
  242. parrot/loaders/basevideo.py +1568 -0
  243. parrot/loaders/csv.py +409 -0
  244. parrot/loaders/docx.py +116 -0
  245. parrot/loaders/epubloader.py +316 -0
  246. parrot/loaders/excel.py +199 -0
  247. parrot/loaders/factory.py +55 -0
  248. parrot/loaders/files/__init__.py +0 -0
  249. parrot/loaders/files/abstract.py +39 -0
  250. parrot/loaders/files/html.py +26 -0
  251. parrot/loaders/files/text.py +63 -0
  252. parrot/loaders/html.py +152 -0
  253. parrot/loaders/markdown.py +442 -0
  254. parrot/loaders/pdf.py +373 -0
  255. parrot/loaders/pdfmark.py +320 -0
  256. parrot/loaders/pdftables.py +506 -0
  257. parrot/loaders/ppt.py +476 -0
  258. parrot/loaders/qa.py +63 -0
  259. parrot/loaders/splitters/__init__.py +10 -0
  260. parrot/loaders/splitters/base.py +138 -0
  261. parrot/loaders/splitters/md.py +228 -0
  262. parrot/loaders/splitters/token.py +143 -0
  263. parrot/loaders/txt.py +26 -0
  264. parrot/loaders/video.py +89 -0
  265. parrot/loaders/videolocal.py +218 -0
  266. parrot/loaders/videounderstanding.py +377 -0
  267. parrot/loaders/vimeo.py +167 -0
  268. parrot/loaders/web.py +599 -0
  269. parrot/loaders/youtube.py +504 -0
  270. parrot/manager/__init__.py +5 -0
  271. parrot/manager/manager.py +1030 -0
  272. parrot/mcp/__init__.py +28 -0
  273. parrot/mcp/adapter.py +105 -0
  274. parrot/mcp/cli.py +174 -0
  275. parrot/mcp/client.py +119 -0
  276. parrot/mcp/config.py +75 -0
  277. parrot/mcp/integration.py +842 -0
  278. parrot/mcp/oauth.py +933 -0
  279. parrot/mcp/server.py +225 -0
  280. parrot/mcp/transports/__init__.py +3 -0
  281. parrot/mcp/transports/base.py +279 -0
  282. parrot/mcp/transports/grpc_session.py +163 -0
  283. parrot/mcp/transports/http.py +312 -0
  284. parrot/mcp/transports/mcp.proto +108 -0
  285. parrot/mcp/transports/quic.py +1082 -0
  286. parrot/mcp/transports/sse.py +330 -0
  287. parrot/mcp/transports/stdio.py +309 -0
  288. parrot/mcp/transports/unix.py +395 -0
  289. parrot/mcp/transports/websocket.py +547 -0
  290. parrot/memory/__init__.py +16 -0
  291. parrot/memory/abstract.py +209 -0
  292. parrot/memory/agent.py +32 -0
  293. parrot/memory/cache.py +175 -0
  294. parrot/memory/core.py +555 -0
  295. parrot/memory/file.py +153 -0
  296. parrot/memory/mem.py +131 -0
  297. parrot/memory/redis.py +613 -0
  298. parrot/models/__init__.py +46 -0
  299. parrot/models/basic.py +118 -0
  300. parrot/models/compliance.py +208 -0
  301. parrot/models/crew.py +395 -0
  302. parrot/models/detections.py +654 -0
  303. parrot/models/generation.py +85 -0
  304. parrot/models/google.py +223 -0
  305. parrot/models/groq.py +23 -0
  306. parrot/models/openai.py +30 -0
  307. parrot/models/outputs.py +285 -0
  308. parrot/models/responses.py +938 -0
  309. parrot/notifications/__init__.py +743 -0
  310. parrot/openapi/__init__.py +3 -0
  311. parrot/openapi/components.yaml +641 -0
  312. parrot/openapi/config.py +322 -0
  313. parrot/outputs/__init__.py +32 -0
  314. parrot/outputs/formats/__init__.py +108 -0
  315. parrot/outputs/formats/altair.py +359 -0
  316. parrot/outputs/formats/application.py +122 -0
  317. parrot/outputs/formats/base.py +351 -0
  318. parrot/outputs/formats/bokeh.py +356 -0
  319. parrot/outputs/formats/card.py +424 -0
  320. parrot/outputs/formats/chart.py +436 -0
  321. parrot/outputs/formats/d3.py +255 -0
  322. parrot/outputs/formats/echarts.py +310 -0
  323. parrot/outputs/formats/generators/__init__.py +0 -0
  324. parrot/outputs/formats/generators/abstract.py +61 -0
  325. parrot/outputs/formats/generators/panel.py +145 -0
  326. parrot/outputs/formats/generators/streamlit.py +86 -0
  327. parrot/outputs/formats/generators/terminal.py +63 -0
  328. parrot/outputs/formats/holoviews.py +310 -0
  329. parrot/outputs/formats/html.py +147 -0
  330. parrot/outputs/formats/jinja2.py +46 -0
  331. parrot/outputs/formats/json.py +87 -0
  332. parrot/outputs/formats/map.py +933 -0
  333. parrot/outputs/formats/markdown.py +172 -0
  334. parrot/outputs/formats/matplotlib.py +237 -0
  335. parrot/outputs/formats/mixins/__init__.py +0 -0
  336. parrot/outputs/formats/mixins/emaps.py +855 -0
  337. parrot/outputs/formats/plotly.py +341 -0
  338. parrot/outputs/formats/seaborn.py +310 -0
  339. parrot/outputs/formats/table.py +397 -0
  340. parrot/outputs/formats/template_report.py +138 -0
  341. parrot/outputs/formats/yaml.py +125 -0
  342. parrot/outputs/formatter.py +152 -0
  343. parrot/outputs/templates/__init__.py +95 -0
  344. parrot/pipelines/__init__.py +0 -0
  345. parrot/pipelines/abstract.py +210 -0
  346. parrot/pipelines/detector.py +124 -0
  347. parrot/pipelines/models.py +90 -0
  348. parrot/pipelines/planogram.py +3002 -0
  349. parrot/pipelines/table.sql +97 -0
  350. parrot/plugins/__init__.py +106 -0
  351. parrot/plugins/importer.py +80 -0
  352. parrot/py.typed +0 -0
  353. parrot/registry/__init__.py +18 -0
  354. parrot/registry/registry.py +594 -0
  355. parrot/scheduler/__init__.py +1189 -0
  356. parrot/scheduler/models.py +60 -0
  357. parrot/security/__init__.py +16 -0
  358. parrot/security/prompt_injection.py +268 -0
  359. parrot/security/security_events.sql +25 -0
  360. parrot/services/__init__.py +1 -0
  361. parrot/services/mcp/__init__.py +8 -0
  362. parrot/services/mcp/config.py +13 -0
  363. parrot/services/mcp/server.py +295 -0
  364. parrot/services/o365_remote_auth.py +235 -0
  365. parrot/stores/__init__.py +7 -0
  366. parrot/stores/abstract.py +352 -0
  367. parrot/stores/arango.py +1090 -0
  368. parrot/stores/bigquery.py +1377 -0
  369. parrot/stores/cache.py +106 -0
  370. parrot/stores/empty.py +10 -0
  371. parrot/stores/faiss_store.py +1157 -0
  372. parrot/stores/kb/__init__.py +9 -0
  373. parrot/stores/kb/abstract.py +68 -0
  374. parrot/stores/kb/cache.py +165 -0
  375. parrot/stores/kb/doc.py +325 -0
  376. parrot/stores/kb/hierarchy.py +346 -0
  377. parrot/stores/kb/local.py +457 -0
  378. parrot/stores/kb/prompt.py +28 -0
  379. parrot/stores/kb/redis.py +659 -0
  380. parrot/stores/kb/store.py +115 -0
  381. parrot/stores/kb/user.py +374 -0
  382. parrot/stores/models.py +59 -0
  383. parrot/stores/pgvector.py +3 -0
  384. parrot/stores/postgres.py +2853 -0
  385. parrot/stores/utils/__init__.py +0 -0
  386. parrot/stores/utils/chunking.py +197 -0
  387. parrot/telemetry/__init__.py +3 -0
  388. parrot/telemetry/mixin.py +111 -0
  389. parrot/template/__init__.py +3 -0
  390. parrot/template/engine.py +259 -0
  391. parrot/tools/__init__.py +23 -0
  392. parrot/tools/abstract.py +644 -0
  393. parrot/tools/agent.py +363 -0
  394. parrot/tools/arangodbsearch.py +537 -0
  395. parrot/tools/arxiv_tool.py +188 -0
  396. parrot/tools/calculator/__init__.py +3 -0
  397. parrot/tools/calculator/operations/__init__.py +38 -0
  398. parrot/tools/calculator/operations/calculus.py +80 -0
  399. parrot/tools/calculator/operations/statistics.py +76 -0
  400. parrot/tools/calculator/tool.py +150 -0
  401. parrot/tools/cloudwatch.py +988 -0
  402. parrot/tools/codeinterpreter/__init__.py +127 -0
  403. parrot/tools/codeinterpreter/executor.py +371 -0
  404. parrot/tools/codeinterpreter/internals.py +473 -0
  405. parrot/tools/codeinterpreter/models.py +643 -0
  406. parrot/tools/codeinterpreter/prompts.py +224 -0
  407. parrot/tools/codeinterpreter/tool.py +664 -0
  408. parrot/tools/company_info/__init__.py +6 -0
  409. parrot/tools/company_info/tool.py +1138 -0
  410. parrot/tools/correlationanalysis.py +437 -0
  411. parrot/tools/database/abstract.py +286 -0
  412. parrot/tools/database/bq.py +115 -0
  413. parrot/tools/database/cache.py +284 -0
  414. parrot/tools/database/models.py +95 -0
  415. parrot/tools/database/pg.py +343 -0
  416. parrot/tools/databasequery.py +1159 -0
  417. parrot/tools/db.py +1800 -0
  418. parrot/tools/ddgo.py +370 -0
  419. parrot/tools/decorators.py +271 -0
  420. parrot/tools/dftohtml.py +282 -0
  421. parrot/tools/document.py +549 -0
  422. parrot/tools/ecs.py +819 -0
  423. parrot/tools/edareport.py +368 -0
  424. parrot/tools/elasticsearch.py +1049 -0
  425. parrot/tools/employees.py +462 -0
  426. parrot/tools/epson/__init__.py +96 -0
  427. parrot/tools/excel.py +683 -0
  428. parrot/tools/file/__init__.py +13 -0
  429. parrot/tools/file/abstract.py +76 -0
  430. parrot/tools/file/gcs.py +378 -0
  431. parrot/tools/file/local.py +284 -0
  432. parrot/tools/file/s3.py +511 -0
  433. parrot/tools/file/tmp.py +309 -0
  434. parrot/tools/file/tool.py +501 -0
  435. parrot/tools/file_reader.py +129 -0
  436. parrot/tools/flowtask/__init__.py +19 -0
  437. parrot/tools/flowtask/tool.py +761 -0
  438. parrot/tools/gittoolkit.py +508 -0
  439. parrot/tools/google/__init__.py +18 -0
  440. parrot/tools/google/base.py +169 -0
  441. parrot/tools/google/tools.py +1251 -0
  442. parrot/tools/googlelocation.py +5 -0
  443. parrot/tools/googleroutes.py +5 -0
  444. parrot/tools/googlesearch.py +5 -0
  445. parrot/tools/googlesitesearch.py +5 -0
  446. parrot/tools/googlevoice.py +2 -0
  447. parrot/tools/gvoice.py +695 -0
  448. parrot/tools/ibisworld/README.md +225 -0
  449. parrot/tools/ibisworld/__init__.py +11 -0
  450. parrot/tools/ibisworld/tool.py +366 -0
  451. parrot/tools/jiratoolkit.py +1718 -0
  452. parrot/tools/manager.py +1098 -0
  453. parrot/tools/math.py +152 -0
  454. parrot/tools/metadata.py +476 -0
  455. parrot/tools/msteams.py +1621 -0
  456. parrot/tools/msword.py +635 -0
  457. parrot/tools/multidb.py +580 -0
  458. parrot/tools/multistoresearch.py +369 -0
  459. parrot/tools/networkninja.py +167 -0
  460. parrot/tools/nextstop/__init__.py +4 -0
  461. parrot/tools/nextstop/base.py +286 -0
  462. parrot/tools/nextstop/employee.py +733 -0
  463. parrot/tools/nextstop/store.py +462 -0
  464. parrot/tools/notification.py +435 -0
  465. parrot/tools/o365/__init__.py +42 -0
  466. parrot/tools/o365/base.py +295 -0
  467. parrot/tools/o365/bundle.py +522 -0
  468. parrot/tools/o365/events.py +554 -0
  469. parrot/tools/o365/mail.py +992 -0
  470. parrot/tools/o365/onedrive.py +497 -0
  471. parrot/tools/o365/sharepoint.py +641 -0
  472. parrot/tools/openapi_toolkit.py +904 -0
  473. parrot/tools/openweather.py +527 -0
  474. parrot/tools/pdfprint.py +1001 -0
  475. parrot/tools/powerbi.py +518 -0
  476. parrot/tools/powerpoint.py +1113 -0
  477. parrot/tools/pricestool.py +146 -0
  478. parrot/tools/products/__init__.py +246 -0
  479. parrot/tools/prophet_tool.py +171 -0
  480. parrot/tools/pythonpandas.py +630 -0
  481. parrot/tools/pythonrepl.py +910 -0
  482. parrot/tools/qsource.py +436 -0
  483. parrot/tools/querytoolkit.py +395 -0
  484. parrot/tools/quickeda.py +827 -0
  485. parrot/tools/resttool.py +553 -0
  486. parrot/tools/retail/__init__.py +0 -0
  487. parrot/tools/retail/bby.py +528 -0
  488. parrot/tools/sandboxtool.py +703 -0
  489. parrot/tools/sassie/__init__.py +352 -0
  490. parrot/tools/scraping/__init__.py +7 -0
  491. parrot/tools/scraping/docs/select.md +466 -0
  492. parrot/tools/scraping/documentation.md +1278 -0
  493. parrot/tools/scraping/driver.py +436 -0
  494. parrot/tools/scraping/models.py +576 -0
  495. parrot/tools/scraping/options.py +85 -0
  496. parrot/tools/scraping/orchestrator.py +517 -0
  497. parrot/tools/scraping/readme.md +740 -0
  498. parrot/tools/scraping/tool.py +3115 -0
  499. parrot/tools/seasonaldetection.py +642 -0
  500. parrot/tools/shell_tool/__init__.py +5 -0
  501. parrot/tools/shell_tool/actions.py +408 -0
  502. parrot/tools/shell_tool/engine.py +155 -0
  503. parrot/tools/shell_tool/models.py +322 -0
  504. parrot/tools/shell_tool/tool.py +442 -0
  505. parrot/tools/site_search.py +214 -0
  506. parrot/tools/textfile.py +418 -0
  507. parrot/tools/think.py +378 -0
  508. parrot/tools/toolkit.py +298 -0
  509. parrot/tools/webapp_tool.py +187 -0
  510. parrot/tools/whatif.py +1279 -0
  511. parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
  512. parrot/tools/workday/__init__.py +6 -0
  513. parrot/tools/workday/models.py +1389 -0
  514. parrot/tools/workday/tool.py +1293 -0
  515. parrot/tools/yfinance_tool.py +306 -0
  516. parrot/tools/zipcode.py +217 -0
  517. parrot/utils/__init__.py +2 -0
  518. parrot/utils/helpers.py +73 -0
  519. parrot/utils/parsers/__init__.py +5 -0
  520. parrot/utils/parsers/toml.c +12078 -0
  521. parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
  522. parrot/utils/parsers/toml.pyx +21 -0
  523. parrot/utils/toml.py +11 -0
  524. parrot/utils/types.cpp +20936 -0
  525. parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
  526. parrot/utils/types.pyx +213 -0
  527. parrot/utils/uv.py +11 -0
  528. parrot/version.py +10 -0
  529. parrot/yaml-rs/Cargo.lock +350 -0
  530. parrot/yaml-rs/Cargo.toml +19 -0
  531. parrot/yaml-rs/pyproject.toml +19 -0
  532. parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
  533. parrot/yaml-rs/src/lib.rs +222 -0
  534. requirements/docker-compose.yml +24 -0
  535. requirements/requirements-dev.txt +21 -0
@@ -0,0 +1,497 @@
1
+ """
2
+ OneDrive Tools for AI-Parrot.
3
+
4
+ Tools for interacting with OneDrive:
5
+ - List files in folders
6
+ - Search for files
7
+ - Download files
8
+ - Upload files
9
+ """
10
+ from typing import Dict, Any, Optional, List, Type
11
+ from pathlib import Path
12
+ import shutil
13
+ from pydantic import BaseModel, Field
14
+ from .base import O365Tool, O365ToolArgsSchema
15
+ from ...interfaces.onedrive import OneDriveClient
16
+
17
+
18
+ # ============================================================================
19
+ # LIST ONEDRIVE FILES TOOL
20
+ # ============================================================================
21
+
22
+ class ListOneDriveFilesArgs(O365ToolArgsSchema):
23
+ """Arguments for listing OneDrive files."""
24
+ folder_path: Optional[str] = Field(
25
+ default="",
26
+ description="Folder path in OneDrive (e.g., 'Documents/Projects'). Empty for root."
27
+ )
28
+ recursive: bool = Field(
29
+ default=False,
30
+ description="Whether to list files recursively in subfolders"
31
+ )
32
+
33
+
34
+ class ListOneDriveFilesTool(O365Tool):
35
+ """
36
+ Tool for listing files in OneDrive.
37
+
38
+ This tool lists all files in a specified OneDrive location, with options
39
+ for recursive listing and filtering.
40
+
41
+ Examples:
42
+ # List files in root
43
+ result = await tool.run()
44
+
45
+ # List files in specific folder
46
+ result = await tool.run(
47
+ folder_path="Documents/Projects"
48
+ )
49
+
50
+ # Recursive listing
51
+ result = await tool.run(
52
+ folder_path="Work",
53
+ recursive=True
54
+ )
55
+ """
56
+
57
+ name: str = "list_onedrive_files"
58
+ description: str = (
59
+ "List files in OneDrive folder. "
60
+ "Returns file names, paths, sizes, and modification dates."
61
+ )
62
+ args_schema: Type[BaseModel] = ListOneDriveFilesArgs
63
+
64
+ async def _execute_graph_operation(
65
+ self,
66
+ client: OneDriveClient,
67
+ **kwargs
68
+ ) -> Dict[str, Any]:
69
+ """
70
+ List OneDrive files using the OneDriveClient.
71
+
72
+ Args:
73
+ client: Authenticated OneDriveClient instance
74
+ **kwargs: Tool parameters
75
+
76
+ Returns:
77
+ Dict with file listing
78
+ """
79
+ folder_path = kwargs.get('folder_path', '')
80
+ recursive = kwargs.get('recursive', False)
81
+
82
+ try:
83
+ self.logger.info(f"Listing OneDrive files in: {folder_path or 'root'}")
84
+
85
+ # Verify access
86
+ await client.verify_onedrive_access()
87
+
88
+ if recursive:
89
+ # Recursive listing
90
+ files = await self._list_recursive(client, folder_path)
91
+ else:
92
+ # Single level listing using the client's file_list method
93
+ files = await client.file_list(folder_path)
94
+
95
+ self.logger.info(f"Found {len(files)} items")
96
+
97
+ return {
98
+ "folder_path": folder_path or "root",
99
+ "total_items": len(files),
100
+ "files": files,
101
+ "recursive": recursive
102
+ }
103
+
104
+ except Exception as e:
105
+ self.logger.error(f"Failed to list OneDrive files: {e}")
106
+ raise
107
+
108
+ async def _list_recursive(
109
+ self,
110
+ client: OneDriveClient,
111
+ folder_path: str
112
+ ) -> List[Dict[str, Any]]:
113
+ """Recursively list all files in a folder."""
114
+ all_files = []
115
+
116
+ # Get items in current folder
117
+ items = await client.file_list(folder_path)
118
+
119
+ for item in items:
120
+ all_files.append(item)
121
+
122
+ # Recurse into subfolders
123
+ if item.get('isFolder'):
124
+ subfolder_path = item.get('path', '')
125
+ if subfolder_path:
126
+ subfolder_files = await self._list_recursive(client, subfolder_path)
127
+ all_files.extend(subfolder_files)
128
+
129
+ return all_files
130
+
131
+
132
+ # ============================================================================
133
+ # SEARCH ONEDRIVE FILES TOOL
134
+ # ============================================================================
135
+
136
+ class SearchOneDriveFilesArgs(O365ToolArgsSchema):
137
+ """Arguments for searching OneDrive files."""
138
+ query: str = Field(
139
+ description="Search query (filename or content search)"
140
+ )
141
+ max_results: int = Field(
142
+ default=20,
143
+ description="Maximum number of results to return (1-100)"
144
+ )
145
+
146
+
147
+ class SearchOneDriveFilesTool(O365Tool):
148
+ """
149
+ Tool for searching files in OneDrive.
150
+
151
+ This tool searches for files in OneDrive by name or content.
152
+
153
+ Examples:
154
+ # Search by filename
155
+ result = await tool.run(
156
+ query="budget spreadsheet"
157
+ )
158
+
159
+ # Search with limit
160
+ result = await tool.run(
161
+ query="meeting notes",
162
+ max_results=10
163
+ )
164
+ """
165
+
166
+ name: str = "search_onedrive_files"
167
+ description: str = (
168
+ "Search for files in OneDrive by name or content. "
169
+ "Returns matching files with their locations."
170
+ )
171
+ args_schema: Type[BaseModel] = SearchOneDriveFilesArgs
172
+
173
+ async def _execute_graph_operation(
174
+ self,
175
+ client: OneDriveClient,
176
+ **kwargs
177
+ ) -> Dict[str, Any]:
178
+ """
179
+ Search OneDrive files using the OneDriveClient.
180
+
181
+ Args:
182
+ client: Authenticated OneDriveClient instance
183
+ **kwargs: Tool parameters
184
+
185
+ Returns:
186
+ Dict with search results
187
+ """
188
+ query = kwargs.get('query')
189
+ max_results = min(kwargs.get('max_results', 20), 100)
190
+
191
+ try:
192
+ self.logger.info(f"Searching OneDrive for: {query}")
193
+
194
+ # Verify access
195
+ await client.verify_onedrive_access()
196
+
197
+ # Perform search
198
+ search_results = await client.file_search(query)
199
+
200
+ # Limit results
201
+ if len(search_results) > max_results:
202
+ search_results = search_results[:max_results]
203
+
204
+ self.logger.info(f"Found {len(search_results)} matching files")
205
+
206
+ return {
207
+ "query": query,
208
+ "total_results": len(search_results),
209
+ "files": search_results
210
+ }
211
+
212
+ except Exception as e:
213
+ self.logger.error(f"Failed to search OneDrive: {e}")
214
+ raise
215
+
216
+
217
+ # ============================================================================
218
+ # DOWNLOAD ONEDRIVE FILE TOOL
219
+ # ============================================================================
220
+
221
+ class DownloadOneDriveFileArgs(O365ToolArgsSchema):
222
+ """Arguments for downloading OneDrive files."""
223
+ file_path: Optional[str] = Field(
224
+ default=None,
225
+ description="Path to file in OneDrive (e.g., 'Documents/report.pdf'). "
226
+ "Use either file_path or file_id."
227
+ )
228
+ file_id: Optional[str] = Field(
229
+ default=None,
230
+ description="OneDrive file ID. Use either file_path or file_id."
231
+ )
232
+ local_destination: Optional[str] = Field(
233
+ default=None,
234
+ description="Local directory to save file. If not provided, saves to current directory."
235
+ )
236
+ rename_as: Optional[str] = Field(
237
+ default=None,
238
+ description="Rename file when downloading"
239
+ )
240
+
241
+
242
+ class DownloadOneDriveFileTool(O365Tool):
243
+ """
244
+ Tool for downloading files from OneDrive.
245
+
246
+ This tool downloads a specific file from OneDrive to the local filesystem.
247
+ Can identify files by path or ID.
248
+
249
+ Examples:
250
+ # Download by path
251
+ result = await tool.run(
252
+ file_path="Documents/report.pdf"
253
+ )
254
+
255
+ # Download by ID
256
+ result = await tool.run(
257
+ file_id="01ABCDEF1234567890"
258
+ )
259
+
260
+ # Download and rename
261
+ result = await tool.run(
262
+ file_path="Contracts/agreement.docx",
263
+ rename_as="Client_Agreement.docx"
264
+ )
265
+
266
+ # Download to specific location
267
+ result = await tool.run(
268
+ file_path="Data/export.xlsx",
269
+ local_destination="/tmp/downloads"
270
+ )
271
+ """
272
+
273
+ name: str = "download_onedrive_file"
274
+ description: str = (
275
+ "Download a file from OneDrive to local storage. "
276
+ "Supports renaming and custom destination paths."
277
+ )
278
+ args_schema: Type[BaseModel] = DownloadOneDriveFileArgs
279
+
280
+ async def _execute_graph_operation(
281
+ self,
282
+ client: OneDriveClient,
283
+ **kwargs
284
+ ) -> Dict[str, Any]:
285
+ """
286
+ Download OneDrive file using the OneDriveClient.
287
+
288
+ Args:
289
+ client: Authenticated OneDriveClient instance
290
+ **kwargs: Tool parameters
291
+
292
+ Returns:
293
+ Dict with download details
294
+ """
295
+ file_path = kwargs.get('file_path')
296
+ file_id = kwargs.get('file_id')
297
+ local_destination = kwargs.get('local_destination')
298
+ rename_as = kwargs.get('rename_as')
299
+
300
+ try:
301
+ if not file_path and not file_id:
302
+ raise ValueError("Either file_path or file_id must be provided")
303
+
304
+ # Set up download destination
305
+ if local_destination:
306
+ dest_dir = Path(local_destination)
307
+ else:
308
+ dest_dir = Path.cwd()
309
+
310
+ dest_dir.mkdir(parents=True, exist_ok=True)
311
+
312
+ # Verify access
313
+ await client.verify_onedrive_access()
314
+
315
+ if file_id:
316
+ # Download by ID
317
+ self.logger.info(f"Downloading OneDrive file ID: {file_id}")
318
+
319
+ # Get file info first
320
+ drive_info = await client._resolve_drive()
321
+ item = await client.graph_client.drives.by_drive_id(drive_info.id)\
322
+ .items.by_drive_item_id(file_id).get()
323
+
324
+ filename = rename_as or item.name
325
+ destination = dest_dir / filename
326
+
327
+ downloaded_path = await client.file_download(file_id, destination)
328
+
329
+ else:
330
+ # Download by path
331
+ self.logger.info(f"Downloading OneDrive file: {file_path}")
332
+
333
+ # Search for the file
334
+ search_results = await client.file_search(file_path.split('/')[-1])
335
+
336
+ # Find exact match
337
+ matching_file = None
338
+ for result in search_results:
339
+ if result.get('path', '').endswith(file_path):
340
+ matching_file = result
341
+ break
342
+
343
+ if not matching_file:
344
+ raise FileNotFoundError(f"File not found: {file_path}")
345
+
346
+ file_id = matching_file['id']
347
+ filename = rename_as or matching_file['name']
348
+ destination = dest_dir / filename
349
+
350
+ downloaded_path = await client.file_download(file_id, destination)
351
+
352
+ local_path = Path(downloaded_path)
353
+
354
+ self.logger.info(f"Downloaded to: {local_path}")
355
+
356
+ return {
357
+ "file_path": file_path,
358
+ "file_id": file_id,
359
+ "local_path": str(local_path),
360
+ "size": local_path.stat().st_size if local_path.exists() else 0
361
+ }
362
+
363
+ except Exception as e:
364
+ self.logger.error(f"Failed to download OneDrive file: {e}")
365
+ raise
366
+
367
+
368
+ # ============================================================================
369
+ # UPLOAD ONEDRIVE FILE TOOL
370
+ # ============================================================================
371
+
372
+ class UploadOneDriveFileArgs(O365ToolArgsSchema):
373
+ """Arguments for uploading files to OneDrive."""
374
+ local_file_path: str = Field(
375
+ description="Local file path to upload"
376
+ )
377
+ folder_path: Optional[str] = Field(
378
+ default="",
379
+ description="Target folder path in OneDrive (e.g., 'Documents/Projects')"
380
+ )
381
+ rename_as: Optional[str] = Field(
382
+ default=None,
383
+ description="Rename file when uploading"
384
+ )
385
+
386
+
387
+ class UploadOneDriveFileTool(O365Tool):
388
+ """
389
+ Tool for uploading files to OneDrive.
390
+
391
+ This tool uploads a local file to OneDrive.
392
+ Supports folder creation and file renaming.
393
+
394
+ Examples:
395
+ # Upload to root
396
+ result = await tool.run(
397
+ local_file_path="/tmp/report.pdf"
398
+ )
399
+
400
+ # Upload to specific folder
401
+ result = await tool.run(
402
+ local_file_path="/data/export.xlsx",
403
+ folder_path="Documents/Reports"
404
+ )
405
+
406
+ # Upload and rename
407
+ result = await tool.run(
408
+ local_file_path="/tmp/draft.docx",
409
+ folder_path="Work",
410
+ rename_as="Final_Document.docx"
411
+ )
412
+ """
413
+
414
+ name: str = "upload_onedrive_file"
415
+ description: str = (
416
+ "Upload a file to OneDrive. "
417
+ "Creates folders as needed and supports file renaming."
418
+ )
419
+ args_schema: Type[BaseModel] = UploadOneDriveFileArgs
420
+
421
+ async def _execute_graph_operation(
422
+ self,
423
+ client: OneDriveClient,
424
+ **kwargs
425
+ ) -> Dict[str, Any]:
426
+ """
427
+ Upload file to OneDrive using the OneDriveClient.
428
+
429
+ Args:
430
+ client: Authenticated OneDriveClient instance
431
+ **kwargs: Tool parameters
432
+
433
+ Returns:
434
+ Dict with upload details
435
+ """
436
+ local_file_path = kwargs.get('local_file_path')
437
+ folder_path = kwargs.get('folder_path', '')
438
+ rename_as = kwargs.get('rename_as')
439
+
440
+ try:
441
+ # Validate local file
442
+ local_path = Path(local_file_path)
443
+ if not local_path.exists():
444
+ raise FileNotFoundError(f"Local file not found: {local_file_path}")
445
+
446
+ self.logger.info(f"Uploading {local_path.name} to OneDrive:{folder_path or 'root'}")
447
+
448
+ # Verify access
449
+ await client.verify_onedrive_access()
450
+
451
+ # If rename requested, we need to temporarily copy/rename
452
+ if rename_as:
453
+ # Create temporary renamed file
454
+ temp_path = local_path.parent / rename_as
455
+ shutil.copy2(local_path, temp_path)
456
+ upload_path = temp_path
457
+ cleanup_temp = True
458
+ else:
459
+ upload_path = local_path
460
+ cleanup_temp = False
461
+
462
+ try:
463
+ # Upload file
464
+ upload_result = await client.upload_file(
465
+ upload_path,
466
+ folder_path if folder_path else None
467
+ )
468
+ finally:
469
+ # Clean up temporary file if created
470
+ if cleanup_temp and temp_path.exists():
471
+ temp_path.unlink()
472
+
473
+ self.logger.info(f"Uploaded successfully: {upload_result['name']}")
474
+
475
+ return {
476
+ "folder_path": folder_path or "root",
477
+ "uploaded_file": upload_result['name'],
478
+ "file_id": upload_result['id'],
479
+ "size": upload_result['size'],
480
+ "web_url": upload_result.get('webUrl', '')
481
+ }
482
+
483
+ except Exception as e:
484
+ self.logger.error(f"Failed to upload to OneDrive: {e}")
485
+ raise
486
+
487
+
488
+ # ============================================================================
489
+ # EXPORT ALL ONEDRIVE TOOLS
490
+ # ============================================================================
491
+
492
+ __all__ = [
493
+ 'ListOneDriveFilesTool',
494
+ 'SearchOneDriveFilesTool',
495
+ 'DownloadOneDriveFileTool',
496
+ 'UploadOneDriveFileTool'
497
+ ]