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,466 @@
1
+ # Select Action Documentation
2
+
3
+ ## Overview
4
+
5
+ The `Select` action allows you to select options from HTML `<select>` dropdown elements. It provides multiple selection methods (by value, visible text, or index) and automatically handles change/blur events.
6
+
7
+ ## Action Definition
8
+
9
+ ```python
10
+ class Select(BrowserAction):
11
+ """Select an option from a dropdown/select element"""
12
+ name: str = 'select'
13
+ action: Literal['select'] = 'select'
14
+ selector: str # CSS selector for the select element
15
+ value: Optional[str] = None # Value attribute of option
16
+ text: Optional[str] = None # Visible text of option
17
+ index: Optional[int] = None # Zero-based index of option
18
+ by: Literal['value', 'text', 'index'] = 'value' # Selection method
19
+ blur_after: bool = True # Trigger blur/change events
20
+ wait_after_select: Optional[str] = None # Wait for element after select
21
+ wait_timeout: int = 2 # Timeout for post-select wait
22
+ ```
23
+
24
+ ---
25
+
26
+ ## Parameters
27
+
28
+ | Parameter | Type | Required | Default | Description |
29
+ |-----------|------|----------|---------|-------------|
30
+ | `action` | `str` | ✅ | - | Must be `"select"` |
31
+ | `selector` | `str` | ✅ | - | CSS selector for the `<select>` element |
32
+ | `value` | `str` | Conditional | `None` | Value attribute of the option (required if `by='value'`) |
33
+ | `text` | `str` | Conditional | `None` | Visible text of the option (required if `by='text'`) |
34
+ | `index` | `int` | Conditional | `None` | Zero-based index of the option (required if `by='index'`) |
35
+ | `by` | `str` | ❌ | `'value'` | Selection method: `'value'`, `'text'`, or `'index'` |
36
+ | `blur_after` | `bool` | ❌ | `True` | Trigger blur and change events after selection |
37
+ | `wait_after_select` | `str` | ❌ | `None` | CSS selector to wait for after selecting |
38
+ | `wait_timeout` | `int` | ❌ | `2` | Timeout in seconds for post-select wait |
39
+ | `timeout` | `int` | ❌ | - | Maximum wait time for the select element |
40
+ | `description` | `str` | ❌ | - | Human-readable description |
41
+
42
+ ---
43
+
44
+ ## Selection Methods
45
+
46
+ ### 1. By Value (Default)
47
+
48
+ Select an option by its `value` attribute:
49
+
50
+ ```html
51
+ <select id="country">
52
+ <option value="US">United States</option>
53
+ <option value="CA">Canada</option>
54
+ <option value="UK">United Kingdom</option>
55
+ </select>
56
+ ```
57
+
58
+ ```python
59
+ {
60
+ "action": "select",
61
+ "selector": "#country",
62
+ "value": "CA",
63
+ "by": "value", # Optional, this is the default
64
+ "description": "Select Canada"
65
+ }
66
+ ```
67
+
68
+ ### 2. By Text
69
+
70
+ Select an option by its visible text:
71
+
72
+ ```html
73
+ <select id="state">
74
+ <option value="ca">California</option>
75
+ <option value="tx">Texas</option>
76
+ <option value="ny">New York</option>
77
+ </select>
78
+ ```
79
+
80
+ ```python
81
+ {
82
+ "action": "select",
83
+ "selector": "#state",
84
+ "text": "California",
85
+ "by": "text",
86
+ "description": "Select California by text"
87
+ }
88
+ ```
89
+
90
+ ### 3. By Index
91
+
92
+ Select an option by its position (0-based):
93
+
94
+ ```html
95
+ <select id="size">
96
+ <option>Small</option>
97
+ <option>Medium</option>
98
+ <option>Large</option>
99
+ </select>
100
+ ```
101
+
102
+ ```python
103
+ {
104
+ "action": "select",
105
+ "selector": "#size",
106
+ "index": 2, # Selects "Large" (third option)
107
+ "by": "index",
108
+ "description": "Select large size"
109
+ }
110
+ ```
111
+
112
+ ---
113
+
114
+ ## blur_after Parameter
115
+
116
+ The `blur_after` parameter controls whether the element loses focus after selection, which triggers important events:
117
+
118
+ ### When `blur_after=True` (Default)
119
+ - ✅ Triggers `change` event on the select element
120
+ - ✅ Triggers `blur` event (element loses focus)
121
+ - ✅ Activates dependent dropdowns (e.g., country → states)
122
+ - ✅ Runs JavaScript event listeners
123
+ - ✅ Updates form validation
124
+ - **Use Case**: Standard form behavior, cascading dropdowns
125
+
126
+ ### When `blur_after=False`
127
+ - ❌ No events triggered automatically
128
+ - ❌ Element keeps focus
129
+ - **Use Case**: When you need to programmatically control event timing or avoid triggering unwanted behavior
130
+
131
+ ```python
132
+ # Standard selection (recommended)
133
+ {
134
+ "action": "select",
135
+ "selector": "#country",
136
+ "value": "US",
137
+ "blur_after": True, # Triggers events
138
+ "description": "Select country and trigger dependent fields"
139
+ }
140
+
141
+ # Keep focus (rare)
142
+ {
143
+ "action": "select",
144
+ "selector": "#option",
145
+ "value": "test",
146
+ "blur_after": False, # No events
147
+ "description": "Select without triggering events"
148
+ }
149
+ ```
150
+
151
+ ---
152
+
153
+ ## Waiting for Dynamic Content
154
+
155
+ Use `wait_after_select` for cascading dropdowns or AJAX-loaded content:
156
+
157
+ ```python
158
+ # Select country and wait for states to load
159
+ {
160
+ "action": "select",
161
+ "selector": "#country",
162
+ "value": "US",
163
+ "wait_after_select": "#state option[value]:not([value=''])",
164
+ "wait_timeout": 5,
165
+ "description": "Select country and wait for states"
166
+ }
167
+ ```
168
+
169
+ **HTML Example:**
170
+ ```html
171
+ <select id="country">
172
+ <option value="US">United States</option>
173
+ <option value="CA">Canada</option>
174
+ </select>
175
+
176
+ <select id="state">
177
+ <!-- Options loaded dynamically via AJAX -->
178
+ </select>
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Complete Examples
184
+
185
+ ### Example 1: Simple Form
186
+
187
+ ```python
188
+ steps = [
189
+ {
190
+ "action": "navigate",
191
+ "url": "https://example.com/registration",
192
+ "description": "Go to registration page"
193
+ },
194
+ {
195
+ "action": "fill",
196
+ "selector": "#email",
197
+ "value": "user@example.com",
198
+ "description": "Enter email"
199
+ },
200
+ {
201
+ "action": "select",
202
+ "selector": "#country",
203
+ "value": "US",
204
+ "description": "Select United States"
205
+ },
206
+ {
207
+ "action": "click",
208
+ "selector": "#submit",
209
+ "description": "Submit form"
210
+ }
211
+ ]
212
+ ```
213
+
214
+ ### Example 2: Cascading Dropdowns
215
+
216
+ ```python
217
+ steps = [
218
+ {
219
+ "action": "navigate",
220
+ "url": "https://example.com/location",
221
+ "description": "Go to location page"
222
+ },
223
+ {
224
+ "action": "select",
225
+ "selector": "#country",
226
+ "value": "US",
227
+ "wait_after_select": "#state",
228
+ "wait_timeout": 5,
229
+ "description": "Select country and wait for states"
230
+ },
231
+ {
232
+ "action": "select",
233
+ "selector": "#state",
234
+ "text": "California",
235
+ "by": "text",
236
+ "wait_after_select": "#city",
237
+ "wait_timeout": 3,
238
+ "description": "Select state and wait for cities"
239
+ },
240
+ {
241
+ "action": "select",
242
+ "selector": "#city",
243
+ "text": "Los Angeles",
244
+ "by": "text",
245
+ "description": "Select city"
246
+ }
247
+ ]
248
+ ```
249
+
250
+ ### Example 3: E-commerce Product Selection
251
+
252
+ ```python
253
+ steps = [
254
+ {
255
+ "action": "navigate",
256
+ "url": "https://shop.example.com/product/123",
257
+ "description": "Go to product page"
258
+ },
259
+ {
260
+ "action": "select",
261
+ "selector": "#size",
262
+ "text": "Large",
263
+ "by": "text",
264
+ "description": "Select size"
265
+ },
266
+ {
267
+ "action": "select",
268
+ "selector": "#color",
269
+ "value": "blue",
270
+ "description": "Select color"
271
+ },
272
+ {
273
+ "action": "select",
274
+ "selector": "#quantity",
275
+ "index": 2, # Select "3" if options are 1, 2, 3, 4...
276
+ "by": "index",
277
+ "description": "Select quantity"
278
+ },
279
+ {
280
+ "action": "click",
281
+ "selector": "#add-to-cart",
282
+ "wait_after_click": ".cart-notification",
283
+ "description": "Add to cart"
284
+ }
285
+ ]
286
+ ```
287
+
288
+ ### Example 4: Multi-step Form with Validation
289
+
290
+ ```python
291
+ steps = [
292
+ {
293
+ "action": "navigate",
294
+ "url": "https://example.com/survey",
295
+ "description": "Go to survey"
296
+ },
297
+ {
298
+ "action": "select",
299
+ "selector": "#age-range",
300
+ "value": "25-34",
301
+ "wait_after_select": ".question-2",
302
+ "description": "Select age range, wait for next question"
303
+ },
304
+ {
305
+ "action": "select",
306
+ "selector": "#education",
307
+ "text": "Bachelor's Degree",
308
+ "by": "text",
309
+ "description": "Select education level"
310
+ },
311
+ {
312
+ "action": "select",
313
+ "selector": "#employment",
314
+ "index": 1,
315
+ "by": "index",
316
+ "blur_after": True,
317
+ "description": "Select employment status"
318
+ }
319
+ ]
320
+ ```
321
+
322
+ ---
323
+
324
+ ## Comparison: Select vs Fill vs Evaluate
325
+
326
+ | Feature | Select | Fill | Evaluate |
327
+ |---------|--------|------|----------|
328
+ | **Use Case** | Dropdown menus | Text inputs | Custom JavaScript |
329
+ | **Target Element** | `<select>` | `<input>`, `<textarea>` | Any element |
330
+ | **Selection Methods** | value/text/index | N/A | Custom |
331
+ | **Auto Events** | change/blur | N/A | Manual |
332
+ | **Complexity** | Simple | Simple | Advanced |
333
+
334
+ **When to use Select:**
335
+ - ✅ Standard HTML `<select>` dropdowns
336
+ - ✅ Multi-option selections with known values
337
+ - ✅ Cascading/dependent dropdowns
338
+
339
+ **When to use Evaluate instead:**
340
+ - Custom dropdown implementations (not `<select>`)
341
+ - Complex selection logic
342
+ - Multiple selections in multi-select dropdowns
343
+
344
+ ---
345
+
346
+ ## Best Practices
347
+
348
+ ### 1. **Prefer `by='value'`** (Default)
349
+ Values are more stable than visible text and faster than index:
350
+ ```python
351
+ # ✅ Good - stable
352
+ {"action": "select", "selector": "#country", "value": "US"}
353
+
354
+ # ⚠️ Less stable - text might change with translations
355
+ {"action": "select", "selector": "#country", "text": "United States", "by": "text"}
356
+
357
+ # ❌ Fragile - breaks if options are reordered
358
+ {"action": "select", "selector": "#country", "index": 0, "by": "index"}
359
+ ```
360
+
361
+ ### 2. **Use `wait_after_select` for Dynamic Content**
362
+ Always wait for dependent elements to load:
363
+ ```python
364
+ {
365
+ "action": "select",
366
+ "selector": "#country",
367
+ "value": "US",
368
+ "wait_after_select": "#state option:not([disabled])", # Wait for enabled options
369
+ "wait_timeout": 5
370
+ }
371
+ ```
372
+
373
+ ### 3. **Keep `blur_after=True` for Standard Behavior**
374
+ Unless you have a specific reason, always trigger events:
375
+ ```python
376
+ # ✅ Standard - triggers all events
377
+ {"action": "select", "selector": "#field", "value": "option1", "blur_after": True}
378
+ ```
379
+
380
+ ### 4. **Combine with Wait Actions for Complex Pages**
381
+ ```python
382
+ [
383
+ {"action": "wait", "condition": "#country", "condition_type": "selector"},
384
+ {"action": "select", "selector": "#country", "value": "US"},
385
+ {"action": "wait", "duration": 1}, # Allow AJAX to complete
386
+ {"action": "select", "selector": "#state", "text": "California", "by": "text"}
387
+ ]
388
+ ```
389
+
390
+ ### 5. **Handle Errors Gracefully**
391
+ Check that options exist before selecting:
392
+ ```python
393
+ {
394
+ "action": "evaluate",
395
+ "script": "return Array.from(document.querySelector('#country').options).map(o => o.value);",
396
+ "description": "Log available options for debugging"
397
+ }
398
+ ```
399
+
400
+ ---
401
+
402
+ ## Troubleshooting
403
+
404
+ ### Issue: Selection doesn't trigger dependent dropdown
405
+
406
+ **Solution**: Ensure `blur_after=True` and use `wait_after_select`:
407
+ ```python
408
+ {
409
+ "action": "select",
410
+ "selector": "#country",
411
+ "value": "US",
412
+ "blur_after": True, # Must be True
413
+ "wait_after_select": "#state",
414
+ "wait_timeout": 5
415
+ }
416
+ ```
417
+
418
+ ### Issue: "Option not found" error
419
+
420
+ **Solution**: Verify the selection method and value:
421
+ ```python
422
+ # Debug: Check available options first
423
+ {
424
+ "action": "evaluate",
425
+ "script": """
426
+ const select = document.querySelector('#country');
427
+ return Array.from(select.options).map(opt => ({
428
+ value: opt.value,
429
+ text: opt.text,
430
+ index: opt.index
431
+ }));
432
+ """,
433
+ "description": "List all options"
434
+ }
435
+ ```
436
+
437
+ ### Issue: Element not interactable
438
+
439
+ **Solution**: Wait for the select element to be ready:
440
+ ```python
441
+ {
442
+ "action": "wait",
443
+ "condition": "#country",
444
+ "condition_type": "selector",
445
+ "timeout": 5
446
+ },
447
+ {
448
+ "action": "select",
449
+ "selector": "#country",
450
+ "value": "US"
451
+ }
452
+ ```
453
+
454
+ ---
455
+
456
+ ## Browser Support
457
+
458
+ | Browser | Selenium | Playwright |
459
+ |---------|----------|------------|
460
+ | Chrome | ✅ Full | ✅ Full |
461
+ | Firefox | ✅ Full | ✅ Full |
462
+ | Edge | ✅ Full | ✅ Full |
463
+ | Safari | ✅ Full | ✅ Full |
464
+ | Undetected Chrome | ✅ Full | N/A |
465
+
466
+ Both implementations use native driver methods for maximum reliability.