aden-tools 1.0.2__tar.gz

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 (709) hide show
  1. aden_tools-1.0.2/.env.example +66 -0
  2. aden_tools-1.0.2/.gitignore +88 -0
  3. aden_tools-1.0.2/BROWSER_USE_PATTERNS.md +180 -0
  4. aden_tools-1.0.2/BUILDING_TOOLS.md +358 -0
  5. aden_tools-1.0.2/Dockerfile +47 -0
  6. aden_tools-1.0.2/PKG-INFO +307 -0
  7. aden_tools-1.0.2/README.md +235 -0
  8. aden_tools-1.0.2/_working_notes +26 -0
  9. aden_tools-1.0.2/browser-extension/README.md +103 -0
  10. aden_tools-1.0.2/browser-extension/background.js +1456 -0
  11. aden_tools-1.0.2/browser-extension/icons/icon-128.png +0 -0
  12. aden_tools-1.0.2/browser-extension/icons/icon-16.png +0 -0
  13. aden_tools-1.0.2/browser-extension/icons/icon-32.png +0 -0
  14. aden_tools-1.0.2/browser-extension/icons/icon-48.png +0 -0
  15. aden_tools-1.0.2/browser-extension/manifest.json +46 -0
  16. aden_tools-1.0.2/browser-extension/mockups/hive.svg +3 -0
  17. aden_tools-1.0.2/browser-extension/mockups/sidepanel-v2.html +968 -0
  18. aden_tools-1.0.2/browser-extension/offscreen.html +4 -0
  19. aden_tools-1.0.2/browser-extension/offscreen.js +237 -0
  20. aden_tools-1.0.2/browser-extension/popup.html +57 -0
  21. aden_tools-1.0.2/browser-extension/popup.js +12 -0
  22. aden_tools-1.0.2/browser-extension/sidepanel.html +615 -0
  23. aden_tools-1.0.2/browser-extension/sidepanel.js +1293 -0
  24. aden_tools-1.0.2/browser-extension/wordlist.js +51 -0
  25. aden_tools-1.0.2/chart_tools_server.py +16 -0
  26. aden_tools-1.0.2/direct_browser_test.py +91 -0
  27. aden_tools-1.0.2/files_server.py +98 -0
  28. aden_tools-1.0.2/linkedin_browser_test.py +187 -0
  29. aden_tools-1.0.2/manual_browser_complex_test.py +324 -0
  30. aden_tools-1.0.2/manual_browser_test.py +279 -0
  31. aden_tools-1.0.2/manual_click_debug.py +149 -0
  32. aden_tools-1.0.2/mcp_server.py +126 -0
  33. aden_tools-1.0.2/mcp_servers.json +9 -0
  34. aden_tools-1.0.2/memory_tools_server.py +15 -0
  35. aden_tools-1.0.2/pyproject.toml +146 -0
  36. aden_tools-1.0.2/src/aden_tools/__init__.py +52 -0
  37. aden_tools-1.0.2/src/aden_tools/credentials/__init__.py +330 -0
  38. aden_tools-1.0.2/src/aden_tools/credentials/airtable.py +40 -0
  39. aden_tools-1.0.2/src/aden_tools/credentials/apify.py +34 -0
  40. aden_tools-1.0.2/src/aden_tools/credentials/apollo.py +46 -0
  41. aden_tools-1.0.2/src/aden_tools/credentials/asana.py +38 -0
  42. aden_tools-1.0.2/src/aden_tools/credentials/attio.py +55 -0
  43. aden_tools-1.0.2/src/aden_tools/credentials/aws_s3.py +63 -0
  44. aden_tools-1.0.2/src/aden_tools/credentials/azure_sql.py +55 -0
  45. aden_tools-1.0.2/src/aden_tools/credentials/base.py +493 -0
  46. aden_tools-1.0.2/src/aden_tools/credentials/bigquery.py +51 -0
  47. aden_tools-1.0.2/src/aden_tools/credentials/brevo.py +39 -0
  48. aden_tools-1.0.2/src/aden_tools/credentials/browser.py +104 -0
  49. aden_tools-1.0.2/src/aden_tools/credentials/calcom.py +43 -0
  50. aden_tools-1.0.2/src/aden_tools/credentials/calendly.py +37 -0
  51. aden_tools-1.0.2/src/aden_tools/credentials/cloudflare.py +70 -0
  52. aden_tools-1.0.2/src/aden_tools/credentials/cloudinary.py +83 -0
  53. aden_tools-1.0.2/src/aden_tools/credentials/confluence.py +83 -0
  54. aden_tools-1.0.2/src/aden_tools/credentials/databricks.py +39 -0
  55. aden_tools-1.0.2/src/aden_tools/credentials/discord.py +42 -0
  56. aden_tools-1.0.2/src/aden_tools/credentials/docker_hub.py +38 -0
  57. aden_tools-1.0.2/src/aden_tools/credentials/email.py +100 -0
  58. aden_tools-1.0.2/src/aden_tools/credentials/freshdesk.py +67 -0
  59. aden_tools-1.0.2/src/aden_tools/credentials/gcp_vision.py +46 -0
  60. aden_tools-1.0.2/src/aden_tools/credentials/github.py +58 -0
  61. aden_tools-1.0.2/src/aden_tools/credentials/gitlab.py +40 -0
  62. aden_tools-1.0.2/src/aden_tools/credentials/google_analytics.py +44 -0
  63. aden_tools-1.0.2/src/aden_tools/credentials/google_maps.py +49 -0
  64. aden_tools-1.0.2/src/aden_tools/credentials/google_search_console.py +38 -0
  65. aden_tools-1.0.2/src/aden_tools/credentials/greenhouse.py +40 -0
  66. aden_tools-1.0.2/src/aden_tools/credentials/health_check.py +1540 -0
  67. aden_tools-1.0.2/src/aden_tools/credentials/hubspot.py +56 -0
  68. aden_tools-1.0.2/src/aden_tools/credentials/huggingface.py +39 -0
  69. aden_tools-1.0.2/src/aden_tools/credentials/integrations.py +149 -0
  70. aden_tools-1.0.2/src/aden_tools/credentials/intercom.py +47 -0
  71. aden_tools-1.0.2/src/aden_tools/credentials/jira.py +86 -0
  72. aden_tools-1.0.2/src/aden_tools/credentials/kafka.py +59 -0
  73. aden_tools-1.0.2/src/aden_tools/credentials/langfuse.py +59 -0
  74. aden_tools-1.0.2/src/aden_tools/credentials/linear.py +51 -0
  75. aden_tools-1.0.2/src/aden_tools/credentials/lusha.py +37 -0
  76. aden_tools-1.0.2/src/aden_tools/credentials/mattermost.py +65 -0
  77. aden_tools-1.0.2/src/aden_tools/credentials/microsoft_graph.py +45 -0
  78. aden_tools-1.0.2/src/aden_tools/credentials/mongodb.py +78 -0
  79. aden_tools-1.0.2/src/aden_tools/credentials/n8n.py +56 -0
  80. aden_tools-1.0.2/src/aden_tools/credentials/news.py +53 -0
  81. aden_tools-1.0.2/src/aden_tools/credentials/notion.py +52 -0
  82. aden_tools-1.0.2/src/aden_tools/credentials/obsidian.py +37 -0
  83. aden_tools-1.0.2/src/aden_tools/credentials/pagerduty.py +55 -0
  84. aden_tools-1.0.2/src/aden_tools/credentials/pinecone.py +38 -0
  85. aden_tools-1.0.2/src/aden_tools/credentials/pipedrive.py +43 -0
  86. aden_tools-1.0.2/src/aden_tools/credentials/plaid.py +58 -0
  87. aden_tools-1.0.2/src/aden_tools/credentials/postgres.py +40 -0
  88. aden_tools-1.0.2/src/aden_tools/credentials/powerbi.py +35 -0
  89. aden_tools-1.0.2/src/aden_tools/credentials/prometheus.py +41 -0
  90. aden_tools-1.0.2/src/aden_tools/credentials/pushover.py +38 -0
  91. aden_tools-1.0.2/src/aden_tools/credentials/quickbooks.py +61 -0
  92. aden_tools-1.0.2/src/aden_tools/credentials/razorpay.py +74 -0
  93. aden_tools-1.0.2/src/aden_tools/credentials/reddit.py +61 -0
  94. aden_tools-1.0.2/src/aden_tools/credentials/redis.py +40 -0
  95. aden_tools-1.0.2/src/aden_tools/credentials/redshift.py +56 -0
  96. aden_tools-1.0.2/src/aden_tools/credentials/salesforce.py +63 -0
  97. aden_tools-1.0.2/src/aden_tools/credentials/sap.py +74 -0
  98. aden_tools-1.0.2/src/aden_tools/credentials/search.py +115 -0
  99. aden_tools-1.0.2/src/aden_tools/credentials/serpapi.py +36 -0
  100. aden_tools-1.0.2/src/aden_tools/credentials/shell_config.py +245 -0
  101. aden_tools-1.0.2/src/aden_tools/credentials/shopify.py +63 -0
  102. aden_tools-1.0.2/src/aden_tools/credentials/similarweb.py +53 -0
  103. aden_tools-1.0.2/src/aden_tools/credentials/slack.py +121 -0
  104. aden_tools-1.0.2/src/aden_tools/credentials/snowflake.py +52 -0
  105. aden_tools-1.0.2/src/aden_tools/credentials/store_adapter.py +897 -0
  106. aden_tools-1.0.2/src/aden_tools/credentials/stripe.py +87 -0
  107. aden_tools-1.0.2/src/aden_tools/credentials/supabase.py +39 -0
  108. aden_tools-1.0.2/src/aden_tools/credentials/telegram.py +48 -0
  109. aden_tools-1.0.2/src/aden_tools/credentials/terraform.py +35 -0
  110. aden_tools-1.0.2/src/aden_tools/credentials/tines.py +54 -0
  111. aden_tools-1.0.2/src/aden_tools/credentials/trello.py +70 -0
  112. aden_tools-1.0.2/src/aden_tools/credentials/twilio.py +58 -0
  113. aden_tools-1.0.2/src/aden_tools/credentials/twitter.py +37 -0
  114. aden_tools-1.0.2/src/aden_tools/credentials/vercel.py +37 -0
  115. aden_tools-1.0.2/src/aden_tools/credentials/wandb.py +38 -0
  116. aden_tools-1.0.2/src/aden_tools/credentials/x.py +106 -0
  117. aden_tools-1.0.2/src/aden_tools/credentials/youtube.py +40 -0
  118. aden_tools-1.0.2/src/aden_tools/credentials/zendesk.py +83 -0
  119. aden_tools-1.0.2/src/aden_tools/credentials/zoho.py +45 -0
  120. aden_tools-1.0.2/src/aden_tools/credentials/zoho_crm.py +36 -0
  121. aden_tools-1.0.2/src/aden_tools/credentials/zoom.py +39 -0
  122. aden_tools-1.0.2/src/aden_tools/file_ops.py +1703 -0
  123. aden_tools-1.0.2/src/aden_tools/file_state_cache.py +177 -0
  124. aden_tools-1.0.2/src/aden_tools/hashline.py +223 -0
  125. aden_tools-1.0.2/src/aden_tools/senders/__init__.py +21 -0
  126. aden_tools-1.0.2/src/aden_tools/senders/providers.py +346 -0
  127. aden_tools-1.0.2/src/aden_tools/senders/registry.py +196 -0
  128. aden_tools-1.0.2/src/aden_tools/senders/rotation.py +173 -0
  129. aden_tools-1.0.2/src/aden_tools/senders/sendlog.py +203 -0
  130. aden_tools-1.0.2/src/aden_tools/senders/setup.py +403 -0
  131. aden_tools-1.0.2/src/aden_tools/senders/threads.py +163 -0
  132. aden_tools-1.0.2/src/aden_tools/tools/__init__.py +397 -0
  133. aden_tools-1.0.2/src/aden_tools/tools/account_info_tool/README.md +104 -0
  134. aden_tools-1.0.2/src/aden_tools/tools/account_info_tool/__init__.py +5 -0
  135. aden_tools-1.0.2/src/aden_tools/tools/account_info_tool/account_info_tool.py +35 -0
  136. aden_tools-1.0.2/src/aden_tools/tools/airtable_tool/README.md +99 -0
  137. aden_tools-1.0.2/src/aden_tools/tools/airtable_tool/__init__.py +5 -0
  138. aden_tools-1.0.2/src/aden_tools/tools/airtable_tool/airtable_tool.py +466 -0
  139. aden_tools-1.0.2/src/aden_tools/tools/apify_tool/README.md +155 -0
  140. aden_tools-1.0.2/src/aden_tools/tools/apify_tool/__init__.py +5 -0
  141. aden_tools-1.0.2/src/aden_tools/tools/apify_tool/apify_tool.py +346 -0
  142. aden_tools-1.0.2/src/aden_tools/tools/apollo_tool/README.md +42 -0
  143. aden_tools-1.0.2/src/aden_tools/tools/apollo_tool/__init__.py +13 -0
  144. aden_tools-1.0.2/src/aden_tools/tools/apollo_tool/apollo_tool.py +745 -0
  145. aden_tools-1.0.2/src/aden_tools/tools/arxiv_tool/README.md +171 -0
  146. aden_tools-1.0.2/src/aden_tools/tools/arxiv_tool/__init__.py +5 -0
  147. aden_tools-1.0.2/src/aden_tools/tools/arxiv_tool/arxiv_tool.py +224 -0
  148. aden_tools-1.0.2/src/aden_tools/tools/asana_tool/README.md +78 -0
  149. aden_tools-1.0.2/src/aden_tools/tools/asana_tool/__init__.py +5 -0
  150. aden_tools-1.0.2/src/aden_tools/tools/asana_tool/asana_tool.py +476 -0
  151. aden_tools-1.0.2/src/aden_tools/tools/attach_file_tool/__init__.py +5 -0
  152. aden_tools-1.0.2/src/aden_tools/tools/attach_file_tool/attach_file_tool.py +317 -0
  153. aden_tools-1.0.2/src/aden_tools/tools/attio_tool/README.md +65 -0
  154. aden_tools-1.0.2/src/aden_tools/tools/attio_tool/__init__.py +5 -0
  155. aden_tools-1.0.2/src/aden_tools/tools/attio_tool/attio_tool.py +739 -0
  156. aden_tools-1.0.2/src/aden_tools/tools/attio_tool/tests/__init__.py +0 -0
  157. aden_tools-1.0.2/src/aden_tools/tools/attio_tool/tests/test_attio_tool.py +836 -0
  158. aden_tools-1.0.2/src/aden_tools/tools/aws_s3_tool/README.md +59 -0
  159. aden_tools-1.0.2/src/aden_tools/tools/aws_s3_tool/__init__.py +5 -0
  160. aden_tools-1.0.2/src/aden_tools/tools/aws_s3_tool/aws_s3_tool.py +461 -0
  161. aden_tools-1.0.2/src/aden_tools/tools/azure_sql_tool/README.md +62 -0
  162. aden_tools-1.0.2/src/aden_tools/tools/azure_sql_tool/__init__.py +5 -0
  163. aden_tools-1.0.2/src/aden_tools/tools/azure_sql_tool/azure_sql_tool.py +214 -0
  164. aden_tools-1.0.2/src/aden_tools/tools/bigquery_tool/README.md +207 -0
  165. aden_tools-1.0.2/src/aden_tools/tools/bigquery_tool/__init__.py +9 -0
  166. aden_tools-1.0.2/src/aden_tools/tools/bigquery_tool/bigquery_tool.py +379 -0
  167. aden_tools-1.0.2/src/aden_tools/tools/brevo_tool/README.md +172 -0
  168. aden_tools-1.0.2/src/aden_tools/tools/brevo_tool/__init__.py +5 -0
  169. aden_tools-1.0.2/src/aden_tools/tools/brevo_tool/brevo_tool.py +626 -0
  170. aden_tools-1.0.2/src/aden_tools/tools/calcom_tool/README.md +94 -0
  171. aden_tools-1.0.2/src/aden_tools/tools/calcom_tool/__init__.py +9 -0
  172. aden_tools-1.0.2/src/aden_tools/tools/calcom_tool/calcom_tool.py +597 -0
  173. aden_tools-1.0.2/src/aden_tools/tools/calendar_tool/README.md +265 -0
  174. aden_tools-1.0.2/src/aden_tools/tools/calendar_tool/__init__.py +5 -0
  175. aden_tools-1.0.2/src/aden_tools/tools/calendar_tool/calendar_tool.py +921 -0
  176. aden_tools-1.0.2/src/aden_tools/tools/calendly_tool/README.md +79 -0
  177. aden_tools-1.0.2/src/aden_tools/tools/calendly_tool/__init__.py +5 -0
  178. aden_tools-1.0.2/src/aden_tools/tools/calendly_tool/calendly_tool.py +388 -0
  179. aden_tools-1.0.2/src/aden_tools/tools/cloudflare_tool/README.md +271 -0
  180. aden_tools-1.0.2/src/aden_tools/tools/cloudflare_tool/__init__.py +5 -0
  181. aden_tools-1.0.2/src/aden_tools/tools/cloudflare_tool/cloudflare_tool.py +1842 -0
  182. aden_tools-1.0.2/src/aden_tools/tools/cloudinary_tool/README.md +59 -0
  183. aden_tools-1.0.2/src/aden_tools/tools/cloudinary_tool/__init__.py +5 -0
  184. aden_tools-1.0.2/src/aden_tools/tools/cloudinary_tool/cloudinary_tool.py +416 -0
  185. aden_tools-1.0.2/src/aden_tools/tools/confluence_tool/README.md +198 -0
  186. aden_tools-1.0.2/src/aden_tools/tools/confluence_tool/__init__.py +5 -0
  187. aden_tools-1.0.2/src/aden_tools/tools/confluence_tool/confluence_tool.py +446 -0
  188. aden_tools-1.0.2/src/aden_tools/tools/csv_tool/README.md +168 -0
  189. aden_tools-1.0.2/src/aden_tools/tools/csv_tool/__init__.py +5 -0
  190. aden_tools-1.0.2/src/aden_tools/tools/csv_tool/csv_tool.py +328 -0
  191. aden_tools-1.0.2/src/aden_tools/tools/databricks_tool/README.md +128 -0
  192. aden_tools-1.0.2/src/aden_tools/tools/databricks_tool/__init__.py +5 -0
  193. aden_tools-1.0.2/src/aden_tools/tools/databricks_tool/databricks_tool.py +339 -0
  194. aden_tools-1.0.2/src/aden_tools/tools/discord_tool/README.md +44 -0
  195. aden_tools-1.0.2/src/aden_tools/tools/discord_tool/__init__.py +5 -0
  196. aden_tools-1.0.2/src/aden_tools/tools/discord_tool/discord_tool.py +419 -0
  197. aden_tools-1.0.2/src/aden_tools/tools/dns_security_scanner/README.md +111 -0
  198. aden_tools-1.0.2/src/aden_tools/tools/dns_security_scanner/__init__.py +5 -0
  199. aden_tools-1.0.2/src/aden_tools/tools/dns_security_scanner/dns_security_scanner.py +249 -0
  200. aden_tools-1.0.2/src/aden_tools/tools/docker_hub_tool/README.md +124 -0
  201. aden_tools-1.0.2/src/aden_tools/tools/docker_hub_tool/__init__.py +5 -0
  202. aden_tools-1.0.2/src/aden_tools/tools/docker_hub_tool/docker_hub_tool.py +361 -0
  203. aden_tools-1.0.2/src/aden_tools/tools/duckduckgo_tool/README.md +64 -0
  204. aden_tools-1.0.2/src/aden_tools/tools/duckduckgo_tool/__init__.py +5 -0
  205. aden_tools-1.0.2/src/aden_tools/tools/duckduckgo_tool/duckduckgo_tool.py +176 -0
  206. aden_tools-1.0.2/src/aden_tools/tools/email_tool/README.md +50 -0
  207. aden_tools-1.0.2/src/aden_tools/tools/email_tool/__init__.py +5 -0
  208. aden_tools-1.0.2/src/aden_tools/tools/email_tool/email_tool.py +446 -0
  209. aden_tools-1.0.2/src/aden_tools/tools/exa_search_tool/README.md +98 -0
  210. aden_tools-1.0.2/src/aden_tools/tools/exa_search_tool/__init__.py +5 -0
  211. aden_tools-1.0.2/src/aden_tools/tools/exa_search_tool/exa_search_tool.py +630 -0
  212. aden_tools-1.0.2/src/aden_tools/tools/excel_tool/README.md +361 -0
  213. aden_tools-1.0.2/src/aden_tools/tools/excel_tool/__init__.py +5 -0
  214. aden_tools-1.0.2/src/aden_tools/tools/excel_tool/excel_tool.py +703 -0
  215. aden_tools-1.0.2/src/aden_tools/tools/file_system_toolkits/README.md +35 -0
  216. aden_tools-1.0.2/src/aden_tools/tools/file_system_toolkits/__init__.py +0 -0
  217. aden_tools-1.0.2/src/aden_tools/tools/file_system_toolkits/security.py +62 -0
  218. aden_tools-1.0.2/src/aden_tools/tools/freshdesk_tool/README.md +109 -0
  219. aden_tools-1.0.2/src/aden_tools/tools/freshdesk_tool/__init__.py +5 -0
  220. aden_tools-1.0.2/src/aden_tools/tools/freshdesk_tool/freshdesk_tool.py +889 -0
  221. aden_tools-1.0.2/src/aden_tools/tools/github_tool/README.md +646 -0
  222. aden_tools-1.0.2/src/aden_tools/tools/github_tool/__init__.py +5 -0
  223. aden_tools-1.0.2/src/aden_tools/tools/github_tool/github_tool.py +1231 -0
  224. aden_tools-1.0.2/src/aden_tools/tools/gitlab_tool/README.md +62 -0
  225. aden_tools-1.0.2/src/aden_tools/tools/gitlab_tool/__init__.py +5 -0
  226. aden_tools-1.0.2/src/aden_tools/tools/gitlab_tool/gitlab_tool.py +568 -0
  227. aden_tools-1.0.2/src/aden_tools/tools/gmail_tool/README.md +107 -0
  228. aden_tools-1.0.2/src/aden_tools/tools/gmail_tool/__init__.py +5 -0
  229. aden_tools-1.0.2/src/aden_tools/tools/gmail_tool/gmail_tool.py +807 -0
  230. aden_tools-1.0.2/src/aden_tools/tools/google_analytics_tool/README.md +124 -0
  231. aden_tools-1.0.2/src/aden_tools/tools/google_analytics_tool/__init__.py +5 -0
  232. aden_tools-1.0.2/src/aden_tools/tools/google_analytics_tool/google_analytics_tool.py +451 -0
  233. aden_tools-1.0.2/src/aden_tools/tools/google_docs_tool/README.md +146 -0
  234. aden_tools-1.0.2/src/aden_tools/tools/google_docs_tool/__init__.py +9 -0
  235. aden_tools-1.0.2/src/aden_tools/tools/google_docs_tool/google_docs_tool.py +797 -0
  236. aden_tools-1.0.2/src/aden_tools/tools/google_docs_tool/tests/__init__.py +1 -0
  237. aden_tools-1.0.2/src/aden_tools/tools/google_docs_tool/tests/test_google_docs_tool.py +468 -0
  238. aden_tools-1.0.2/src/aden_tools/tools/google_maps_tool/README.md +180 -0
  239. aden_tools-1.0.2/src/aden_tools/tools/google_maps_tool/__init__.py +5 -0
  240. aden_tools-1.0.2/src/aden_tools/tools/google_maps_tool/google_maps_tool.py +694 -0
  241. aden_tools-1.0.2/src/aden_tools/tools/google_search_console_tool/README.md +68 -0
  242. aden_tools-1.0.2/src/aden_tools/tools/google_search_console_tool/__init__.py +5 -0
  243. aden_tools-1.0.2/src/aden_tools/tools/google_search_console_tool/google_search_console_tool.py +439 -0
  244. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/README.md +181 -0
  245. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/__init__.py +5 -0
  246. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/google_sheets_tool.py +634 -0
  247. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/tests/__init__.py +0 -0
  248. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/tests/test_google_sheets_integration.py +253 -0
  249. aden_tools-1.0.2/src/aden_tools/tools/google_sheets_tool/tests/test_google_sheets_tool.py +717 -0
  250. aden_tools-1.0.2/src/aden_tools/tools/greenhouse_tool/README.md +60 -0
  251. aden_tools-1.0.2/src/aden_tools/tools/greenhouse_tool/__init__.py +5 -0
  252. aden_tools-1.0.2/src/aden_tools/tools/greenhouse_tool/greenhouse_tool.py +511 -0
  253. aden_tools-1.0.2/src/aden_tools/tools/http_headers_scanner/README.md +111 -0
  254. aden_tools-1.0.2/src/aden_tools/tools/http_headers_scanner/__init__.py +5 -0
  255. aden_tools-1.0.2/src/aden_tools/tools/http_headers_scanner/http_headers_scanner.py +164 -0
  256. aden_tools-1.0.2/src/aden_tools/tools/hubspot_tool/README.md +73 -0
  257. aden_tools-1.0.2/src/aden_tools/tools/hubspot_tool/__init__.py +9 -0
  258. aden_tools-1.0.2/src/aden_tools/tools/hubspot_tool/hubspot_tool.py +662 -0
  259. aden_tools-1.0.2/src/aden_tools/tools/hubspot_tool/tests/__init__.py +0 -0
  260. aden_tools-1.0.2/src/aden_tools/tools/hubspot_tool/tests/test_hubspot_tool.py +464 -0
  261. aden_tools-1.0.2/src/aden_tools/tools/huggingface_tool/README.md +101 -0
  262. aden_tools-1.0.2/src/aden_tools/tools/huggingface_tool/__init__.py +5 -0
  263. aden_tools-1.0.2/src/aden_tools/tools/huggingface_tool/huggingface_tool.py +524 -0
  264. aden_tools-1.0.2/src/aden_tools/tools/image_gen_tool/__init__.py +5 -0
  265. aden_tools-1.0.2/src/aden_tools/tools/image_gen_tool/image_gen_tool.py +429 -0
  266. aden_tools-1.0.2/src/aden_tools/tools/intercom_tool/README.md +99 -0
  267. aden_tools-1.0.2/src/aden_tools/tools/intercom_tool/__init__.py +9 -0
  268. aden_tools-1.0.2/src/aden_tools/tools/intercom_tool/intercom_tool.py +706 -0
  269. aden_tools-1.0.2/src/aden_tools/tools/intercom_tool/tests/__init__.py +0 -0
  270. aden_tools-1.0.2/src/aden_tools/tools/intercom_tool/tests/test_intercom_tool.py +734 -0
  271. aden_tools-1.0.2/src/aden_tools/tools/jira_tool/README.md +127 -0
  272. aden_tools-1.0.2/src/aden_tools/tools/jira_tool/__init__.py +5 -0
  273. aden_tools-1.0.2/src/aden_tools/tools/jira_tool/jira_tool.py +516 -0
  274. aden_tools-1.0.2/src/aden_tools/tools/kafka_tool/README.md +58 -0
  275. aden_tools-1.0.2/src/aden_tools/tools/kafka_tool/__init__.py +5 -0
  276. aden_tools-1.0.2/src/aden_tools/tools/kafka_tool/kafka_tool.py +250 -0
  277. aden_tools-1.0.2/src/aden_tools/tools/langfuse_tool/README.md +102 -0
  278. aden_tools-1.0.2/src/aden_tools/tools/langfuse_tool/__init__.py +5 -0
  279. aden_tools-1.0.2/src/aden_tools/tools/langfuse_tool/langfuse_tool.py +490 -0
  280. aden_tools-1.0.2/src/aden_tools/tools/linear_tool/README.md +151 -0
  281. aden_tools-1.0.2/src/aden_tools/tools/linear_tool/__init__.py +5 -0
  282. aden_tools-1.0.2/src/aden_tools/tools/linear_tool/linear_tool.py +1410 -0
  283. aden_tools-1.0.2/src/aden_tools/tools/linear_tool/tests/__init__.py +1 -0
  284. aden_tools-1.0.2/src/aden_tools/tools/linear_tool/tests/test_linear_tool.py +792 -0
  285. aden_tools-1.0.2/src/aden_tools/tools/lusha_tool/README.md +38 -0
  286. aden_tools-1.0.2/src/aden_tools/tools/lusha_tool/__init__.py +5 -0
  287. aden_tools-1.0.2/src/aden_tools/tools/lusha_tool/lusha_tool.py +445 -0
  288. aden_tools-1.0.2/src/aden_tools/tools/mattermost_tool/__init__.py +5 -0
  289. aden_tools-1.0.2/src/aden_tools/tools/mattermost_tool/mattermost_tool.py +435 -0
  290. aden_tools-1.0.2/src/aden_tools/tools/microsoft_graph_tool/README.md +83 -0
  291. aden_tools-1.0.2/src/aden_tools/tools/microsoft_graph_tool/__init__.py +5 -0
  292. aden_tools-1.0.2/src/aden_tools/tools/microsoft_graph_tool/microsoft_graph_tool.py +588 -0
  293. aden_tools-1.0.2/src/aden_tools/tools/mongodb_tool/README.md +100 -0
  294. aden_tools-1.0.2/src/aden_tools/tools/mongodb_tool/__init__.py +5 -0
  295. aden_tools-1.0.2/src/aden_tools/tools/mongodb_tool/mongodb_tool.py +321 -0
  296. aden_tools-1.0.2/src/aden_tools/tools/n8n_tool/README.md +56 -0
  297. aden_tools-1.0.2/src/aden_tools/tools/n8n_tool/__init__.py +5 -0
  298. aden_tools-1.0.2/src/aden_tools/tools/n8n_tool/n8n_tool.py +410 -0
  299. aden_tools-1.0.2/src/aden_tools/tools/news_tool/README.md +71 -0
  300. aden_tools-1.0.2/src/aden_tools/tools/news_tool/__init__.py +7 -0
  301. aden_tools-1.0.2/src/aden_tools/tools/news_tool/news_tool.py +710 -0
  302. aden_tools-1.0.2/src/aden_tools/tools/notion_tool/README.md +270 -0
  303. aden_tools-1.0.2/src/aden_tools/tools/notion_tool/__init__.py +5 -0
  304. aden_tools-1.0.2/src/aden_tools/tools/notion_tool/notion_tool.py +844 -0
  305. aden_tools-1.0.2/src/aden_tools/tools/obsidian_tool/README.md +54 -0
  306. aden_tools-1.0.2/src/aden_tools/tools/obsidian_tool/__init__.py +5 -0
  307. aden_tools-1.0.2/src/aden_tools/tools/obsidian_tool/obsidian_tool.py +345 -0
  308. aden_tools-1.0.2/src/aden_tools/tools/openmeteo_tool/README.md +19 -0
  309. aden_tools-1.0.2/src/aden_tools/tools/openmeteo_tool/__init__.py +3 -0
  310. aden_tools-1.0.2/src/aden_tools/tools/openmeteo_tool/openmeteo_tool.py +99 -0
  311. aden_tools-1.0.2/src/aden_tools/tools/pagerduty_tool/README.md +62 -0
  312. aden_tools-1.0.2/src/aden_tools/tools/pagerduty_tool/__init__.py +5 -0
  313. aden_tools-1.0.2/src/aden_tools/tools/pagerduty_tool/pagerduty_tool.py +410 -0
  314. aden_tools-1.0.2/src/aden_tools/tools/pdf_read_tool/README.md +37 -0
  315. aden_tools-1.0.2/src/aden_tools/tools/pdf_read_tool/__init__.py +5 -0
  316. aden_tools-1.0.2/src/aden_tools/tools/pdf_read_tool/pdf_read_tool.py +510 -0
  317. aden_tools-1.0.2/src/aden_tools/tools/pinecone_tool/README.md +127 -0
  318. aden_tools-1.0.2/src/aden_tools/tools/pinecone_tool/__init__.py +5 -0
  319. aden_tools-1.0.2/src/aden_tools/tools/pinecone_tool/pinecone_tool.py +459 -0
  320. aden_tools-1.0.2/src/aden_tools/tools/pipedrive_tool/README.md +72 -0
  321. aden_tools-1.0.2/src/aden_tools/tools/pipedrive_tool/__init__.py +5 -0
  322. aden_tools-1.0.2/src/aden_tools/tools/pipedrive_tool/pipedrive_tool.py +743 -0
  323. aden_tools-1.0.2/src/aden_tools/tools/plaid_tool/README.md +57 -0
  324. aden_tools-1.0.2/src/aden_tools/tools/plaid_tool/__init__.py +5 -0
  325. aden_tools-1.0.2/src/aden_tools/tools/plaid_tool/plaid_tool.py +366 -0
  326. aden_tools-1.0.2/src/aden_tools/tools/port_scanner/README.md +118 -0
  327. aden_tools-1.0.2/src/aden_tools/tools/port_scanner/__init__.py +5 -0
  328. aden_tools-1.0.2/src/aden_tools/tools/port_scanner/port_scanner.py +278 -0
  329. aden_tools-1.0.2/src/aden_tools/tools/postgres_tool/README.md +161 -0
  330. aden_tools-1.0.2/src/aden_tools/tools/postgres_tool/__init__.py +3 -0
  331. aden_tools-1.0.2/src/aden_tools/tools/postgres_tool/postgres_tool.py +752 -0
  332. aden_tools-1.0.2/src/aden_tools/tools/powerbi_tool/README.md +56 -0
  333. aden_tools-1.0.2/src/aden_tools/tools/powerbi_tool/__init__.py +5 -0
  334. aden_tools-1.0.2/src/aden_tools/tools/powerbi_tool/powerbi_tool.py +238 -0
  335. aden_tools-1.0.2/src/aden_tools/tools/prometheus_tool/README.md +158 -0
  336. aden_tools-1.0.2/src/aden_tools/tools/prometheus_tool/__init__.py +5 -0
  337. aden_tools-1.0.2/src/aden_tools/tools/prometheus_tool/prometheus_tool.py +260 -0
  338. aden_tools-1.0.2/src/aden_tools/tools/pushover_tool/README.md +79 -0
  339. aden_tools-1.0.2/src/aden_tools/tools/pushover_tool/__init__.py +5 -0
  340. aden_tools-1.0.2/src/aden_tools/tools/pushover_tool/pushover_tool.py +365 -0
  341. aden_tools-1.0.2/src/aden_tools/tools/pushover_tool/tests/__init__.py +0 -0
  342. aden_tools-1.0.2/src/aden_tools/tools/pushover_tool/tests/test_pushover_tool.py +88 -0
  343. aden_tools-1.0.2/src/aden_tools/tools/quickbooks_tool/README.md +61 -0
  344. aden_tools-1.0.2/src/aden_tools/tools/quickbooks_tool/__init__.py +5 -0
  345. aden_tools-1.0.2/src/aden_tools/tools/quickbooks_tool/quickbooks_tool.py +409 -0
  346. aden_tools-1.0.2/src/aden_tools/tools/razorpay_tool/README.md +183 -0
  347. aden_tools-1.0.2/src/aden_tools/tools/razorpay_tool/__init__.py +3 -0
  348. aden_tools-1.0.2/src/aden_tools/tools/razorpay_tool/razorpay_tool.py +548 -0
  349. aden_tools-1.0.2/src/aden_tools/tools/reddit_tool/README.md +338 -0
  350. aden_tools-1.0.2/src/aden_tools/tools/reddit_tool/__init__.py +5 -0
  351. aden_tools-1.0.2/src/aden_tools/tools/reddit_tool/reddit_tool.py +440 -0
  352. aden_tools-1.0.2/src/aden_tools/tools/redis_tool/README.md +96 -0
  353. aden_tools-1.0.2/src/aden_tools/tools/redis_tool/__init__.py +5 -0
  354. aden_tools-1.0.2/src/aden_tools/tools/redis_tool/redis_tool.py +341 -0
  355. aden_tools-1.0.2/src/aden_tools/tools/redshift_tool/README.md +563 -0
  356. aden_tools-1.0.2/src/aden_tools/tools/redshift_tool/__init__.py +5 -0
  357. aden_tools-1.0.2/src/aden_tools/tools/redshift_tool/redshift_tool.py +299 -0
  358. aden_tools-1.0.2/src/aden_tools/tools/risk_scorer/README.md +156 -0
  359. aden_tools-1.0.2/src/aden_tools/tools/risk_scorer/__init__.py +5 -0
  360. aden_tools-1.0.2/src/aden_tools/tools/risk_scorer/risk_scorer.py +281 -0
  361. aden_tools-1.0.2/src/aden_tools/tools/salesforce_tool/README.md +66 -0
  362. aden_tools-1.0.2/src/aden_tools/tools/salesforce_tool/__init__.py +5 -0
  363. aden_tools-1.0.2/src/aden_tools/tools/salesforce_tool/salesforce_tool.py +457 -0
  364. aden_tools-1.0.2/src/aden_tools/tools/sap_tool/README.md +56 -0
  365. aden_tools-1.0.2/src/aden_tools/tools/sap_tool/__init__.py +5 -0
  366. aden_tools-1.0.2/src/aden_tools/tools/sap_tool/sap_tool.py +311 -0
  367. aden_tools-1.0.2/src/aden_tools/tools/senders_tool/__init__.py +3 -0
  368. aden_tools-1.0.2/src/aden_tools/tools/senders_tool/senders_tool.py +745 -0
  369. aden_tools-1.0.2/src/aden_tools/tools/serpapi_tool/README.md +77 -0
  370. aden_tools-1.0.2/src/aden_tools/tools/serpapi_tool/__init__.py +5 -0
  371. aden_tools-1.0.2/src/aden_tools/tools/serpapi_tool/serpapi_tool.py +728 -0
  372. aden_tools-1.0.2/src/aden_tools/tools/shopify_tool/README.md +135 -0
  373. aden_tools-1.0.2/src/aden_tools/tools/shopify_tool/__init__.py +5 -0
  374. aden_tools-1.0.2/src/aden_tools/tools/shopify_tool/shopify_tool.py +675 -0
  375. aden_tools-1.0.2/src/aden_tools/tools/similarweb_tool/README.md +152 -0
  376. aden_tools-1.0.2/src/aden_tools/tools/similarweb_tool/__init__.py +3 -0
  377. aden_tools-1.0.2/src/aden_tools/tools/similarweb_tool/similarweb_tool.py +559 -0
  378. aden_tools-1.0.2/src/aden_tools/tools/slack_tool/README.md +127 -0
  379. aden_tools-1.0.2/src/aden_tools/tools/slack_tool/__init__.py +5 -0
  380. aden_tools-1.0.2/src/aden_tools/tools/slack_tool/slack_tool.py +3108 -0
  381. aden_tools-1.0.2/src/aden_tools/tools/snowflake_tool/README.md +111 -0
  382. aden_tools-1.0.2/src/aden_tools/tools/snowflake_tool/__init__.py +5 -0
  383. aden_tools-1.0.2/src/aden_tools/tools/snowflake_tool/snowflake_tool.py +155 -0
  384. aden_tools-1.0.2/src/aden_tools/tools/ssl_tls_scanner/README.md +96 -0
  385. aden_tools-1.0.2/src/aden_tools/tools/ssl_tls_scanner/__init__.py +5 -0
  386. aden_tools-1.0.2/src/aden_tools/tools/ssl_tls_scanner/ssl_tls_scanner.py +244 -0
  387. aden_tools-1.0.2/src/aden_tools/tools/stripe_tool/README.md +233 -0
  388. aden_tools-1.0.2/src/aden_tools/tools/stripe_tool/__init__.py +3 -0
  389. aden_tools-1.0.2/src/aden_tools/tools/stripe_tool/stripe_tool.py +2772 -0
  390. aden_tools-1.0.2/src/aden_tools/tools/subdomain_enumerator/README.md +110 -0
  391. aden_tools-1.0.2/src/aden_tools/tools/subdomain_enumerator/__init__.py +5 -0
  392. aden_tools-1.0.2/src/aden_tools/tools/subdomain_enumerator/subdomain_enumerator.py +179 -0
  393. aden_tools-1.0.2/src/aden_tools/tools/supabase_tool/README.md +131 -0
  394. aden_tools-1.0.2/src/aden_tools/tools/supabase_tool/__init__.py +5 -0
  395. aden_tools-1.0.2/src/aden_tools/tools/supabase_tool/supabase_tool.py +404 -0
  396. aden_tools-1.0.2/src/aden_tools/tools/tech_stack_detector/README.md +122 -0
  397. aden_tools-1.0.2/src/aden_tools/tools/tech_stack_detector/__init__.py +5 -0
  398. aden_tools-1.0.2/src/aden_tools/tools/tech_stack_detector/tech_stack_detector.py +422 -0
  399. aden_tools-1.0.2/src/aden_tools/tools/telegram_tool/README.md +124 -0
  400. aden_tools-1.0.2/src/aden_tools/tools/telegram_tool/__init__.py +9 -0
  401. aden_tools-1.0.2/src/aden_tools/tools/telegram_tool/telegram_tool.py +835 -0
  402. aden_tools-1.0.2/src/aden_tools/tools/terraform_tool/README.md +57 -0
  403. aden_tools-1.0.2/src/aden_tools/tools/terraform_tool/__init__.py +5 -0
  404. aden_tools-1.0.2/src/aden_tools/tools/terraform_tool/terraform_tool.py +270 -0
  405. aden_tools-1.0.2/src/aden_tools/tools/time_tool/README.md +47 -0
  406. aden_tools-1.0.2/src/aden_tools/tools/time_tool/__init__.py +5 -0
  407. aden_tools-1.0.2/src/aden_tools/tools/time_tool/time_tool.py +55 -0
  408. aden_tools-1.0.2/src/aden_tools/tools/tines_tool/README.md +55 -0
  409. aden_tools-1.0.2/src/aden_tools/tools/tines_tool/__init__.py +5 -0
  410. aden_tools-1.0.2/src/aden_tools/tools/tines_tool/tines_tool.py +242 -0
  411. aden_tools-1.0.2/src/aden_tools/tools/trello_tool/README.md +188 -0
  412. aden_tools-1.0.2/src/aden_tools/tools/trello_tool/__init__.py +5 -0
  413. aden_tools-1.0.2/src/aden_tools/tools/trello_tool/trello_client.py +229 -0
  414. aden_tools-1.0.2/src/aden_tools/tools/trello_tool/trello_tool.py +376 -0
  415. aden_tools-1.0.2/src/aden_tools/tools/twilio_tool/README.md +111 -0
  416. aden_tools-1.0.2/src/aden_tools/tools/twilio_tool/__init__.py +5 -0
  417. aden_tools-1.0.2/src/aden_tools/tools/twilio_tool/twilio_tool.py +352 -0
  418. aden_tools-1.0.2/src/aden_tools/tools/twitter_tool/README.md +108 -0
  419. aden_tools-1.0.2/src/aden_tools/tools/twitter_tool/__init__.py +5 -0
  420. aden_tools-1.0.2/src/aden_tools/tools/twitter_tool/twitter_tool.py +357 -0
  421. aden_tools-1.0.2/src/aden_tools/tools/vercel_tool/README.md +106 -0
  422. aden_tools-1.0.2/src/aden_tools/tools/vercel_tool/__init__.py +5 -0
  423. aden_tools-1.0.2/src/aden_tools/tools/vercel_tool/vercel_tool.py +336 -0
  424. aden_tools-1.0.2/src/aden_tools/tools/vision_tool/README.md +149 -0
  425. aden_tools-1.0.2/src/aden_tools/tools/vision_tool/__init__.py +5 -0
  426. aden_tools-1.0.2/src/aden_tools/tools/vision_tool/vision_tool.py +522 -0
  427. aden_tools-1.0.2/src/aden_tools/tools/wandb_tool/README.md +94 -0
  428. aden_tools-1.0.2/src/aden_tools/tools/wandb_tool/__init__.py +5 -0
  429. aden_tools-1.0.2/src/aden_tools/tools/wandb_tool/wandb_tool.py +437 -0
  430. aden_tools-1.0.2/src/aden_tools/tools/web_scrape_tool/README.md +51 -0
  431. aden_tools-1.0.2/src/aden_tools/tools/web_scrape_tool/__init__.py +5 -0
  432. aden_tools-1.0.2/src/aden_tools/tools/web_scrape_tool/web_scrape_tool.py +475 -0
  433. aden_tools-1.0.2/src/aden_tools/tools/web_search_tool/README.md +64 -0
  434. aden_tools-1.0.2/src/aden_tools/tools/web_search_tool/__init__.py +5 -0
  435. aden_tools-1.0.2/src/aden_tools/tools/web_search_tool/web_search_tool.py +235 -0
  436. aden_tools-1.0.2/src/aden_tools/tools/wikipedia_tool/README.md +54 -0
  437. aden_tools-1.0.2/src/aden_tools/tools/wikipedia_tool/__init__.py +3 -0
  438. aden_tools-1.0.2/src/aden_tools/tools/wikipedia_tool/wikipedia_tool.py +88 -0
  439. aden_tools-1.0.2/src/aden_tools/tools/yahoo_finance_tool/README.md +118 -0
  440. aden_tools-1.0.2/src/aden_tools/tools/yahoo_finance_tool/__init__.py +5 -0
  441. aden_tools-1.0.2/src/aden_tools/tools/yahoo_finance_tool/yahoo_finance_tool.py +232 -0
  442. aden_tools-1.0.2/src/aden_tools/tools/youtube_tool/README.md +130 -0
  443. aden_tools-1.0.2/src/aden_tools/tools/youtube_tool/__init__.py +5 -0
  444. aden_tools-1.0.2/src/aden_tools/tools/youtube_tool/youtube_tool.py +563 -0
  445. aden_tools-1.0.2/src/aden_tools/tools/youtube_transcript_tool/README.md +110 -0
  446. aden_tools-1.0.2/src/aden_tools/tools/youtube_transcript_tool/__init__.py +5 -0
  447. aden_tools-1.0.2/src/aden_tools/tools/youtube_transcript_tool/youtube_transcript_tool.py +110 -0
  448. aden_tools-1.0.2/src/aden_tools/tools/zendesk_tool/README.md +134 -0
  449. aden_tools-1.0.2/src/aden_tools/tools/zendesk_tool/__init__.py +5 -0
  450. aden_tools-1.0.2/src/aden_tools/tools/zendesk_tool/zendesk_tool.py +420 -0
  451. aden_tools-1.0.2/src/aden_tools/tools/zoho_crm_tool/README.md +204 -0
  452. aden_tools-1.0.2/src/aden_tools/tools/zoho_crm_tool/__init__.py +5 -0
  453. aden_tools-1.0.2/src/aden_tools/tools/zoho_crm_tool/zoho_crm_tool.py +333 -0
  454. aden_tools-1.0.2/src/aden_tools/tools/zoom_tool/README.md +130 -0
  455. aden_tools-1.0.2/src/aden_tools/tools/zoom_tool/__init__.py +5 -0
  456. aden_tools-1.0.2/src/aden_tools/tools/zoom_tool/zoom_tool.py +630 -0
  457. aden_tools-1.0.2/src/aden_tools/utils/__init__.py +7 -0
  458. aden_tools-1.0.2/src/aden_tools/utils/attachments.py +144 -0
  459. aden_tools-1.0.2/src/aden_tools/utils/env_helpers.py +32 -0
  460. aden_tools-1.0.2/src/chart_tools/__init__.py +35 -0
  461. aden_tools-1.0.2/src/chart_tools/renderer.py +386 -0
  462. aden_tools-1.0.2/src/chart_tools/server.py +148 -0
  463. aden_tools-1.0.2/src/chart_tools/static/echarts.min.js +45 -0
  464. aden_tools-1.0.2/src/chart_tools/static/mermaid.min.js +2314 -0
  465. aden_tools-1.0.2/src/chart_tools/theme.py +183 -0
  466. aden_tools-1.0.2/src/chart_tools/tools.py +308 -0
  467. aden_tools-1.0.2/src/gcu/__init__.py +77 -0
  468. aden_tools-1.0.2/src/gcu/bridge_host.py +481 -0
  469. aden_tools-1.0.2/src/gcu/browser/__init__.py +80 -0
  470. aden_tools-1.0.2/src/gcu/browser/bridge.py +6442 -0
  471. aden_tools-1.0.2/src/gcu/browser/bridge_rpc.py +867 -0
  472. aden_tools-1.0.2/src/gcu/browser/health.py +490 -0
  473. aden_tools-1.0.2/src/gcu/browser/hooks/__init__.py +0 -0
  474. aden_tools-1.0.2/src/gcu/browser/hooks/rate_limit_hook.py +250 -0
  475. aden_tools-1.0.2/src/gcu/browser/identity.py +64 -0
  476. aden_tools-1.0.2/src/gcu/browser/refs.py +183 -0
  477. aden_tools-1.0.2/src/gcu/browser/session.py +76 -0
  478. aden_tools-1.0.2/src/gcu/browser/telemetry.py +347 -0
  479. aden_tools-1.0.2/src/gcu/browser/tools/__init__.py +31 -0
  480. aden_tools-1.0.2/src/gcu/browser/tools/advanced.py +569 -0
  481. aden_tools-1.0.2/src/gcu/browser/tools/inspection.py +960 -0
  482. aden_tools-1.0.2/src/gcu/browser/tools/interact.py +1012 -0
  483. aden_tools-1.0.2/src/gcu/browser/tools/interactions.py +1045 -0
  484. aden_tools-1.0.2/src/gcu/browser/tools/lifecycle.py +945 -0
  485. aden_tools-1.0.2/src/gcu/browser/tools/navigation.py +293 -0
  486. aden_tools-1.0.2/src/gcu/browser/tools/script.py +668 -0
  487. aden_tools-1.0.2/src/gcu/browser/tools/tabs.py +397 -0
  488. aden_tools-1.0.2/src/gcu/cli.py +384 -0
  489. aden_tools-1.0.2/src/gcu/cli_commands/__init__.py +9 -0
  490. aden_tools-1.0.2/src/gcu/cli_commands/capture.py +52 -0
  491. aden_tools-1.0.2/src/gcu/cli_commands/dialog.py +52 -0
  492. aden_tools-1.0.2/src/gcu/cli_commands/evaluate.py +67 -0
  493. aden_tools-1.0.2/src/gcu/cli_commands/interact.py +300 -0
  494. aden_tools-1.0.2/src/gcu/cli_commands/lifecycle.py +127 -0
  495. aden_tools-1.0.2/src/gcu/cli_commands/nav.py +242 -0
  496. aden_tools-1.0.2/src/gcu/cli_commands/page.py +201 -0
  497. aden_tools-1.0.2/src/gcu/cli_commands/script.py +69 -0
  498. aden_tools-1.0.2/src/gcu/cli_commands/tab.py +146 -0
  499. aden_tools-1.0.2/src/gcu/errors.py +174 -0
  500. aden_tools-1.0.2/src/gcu/files/__init__.py +22 -0
  501. aden_tools-1.0.2/src/gcu/files/tools.py +5 -0
  502. aden_tools-1.0.2/src/gcu/memtrace.py +137 -0
  503. aden_tools-1.0.2/src/gcu/server.py +353 -0
  504. aden_tools-1.0.2/src/memory_tools/__init__.py +29 -0
  505. aden_tools-1.0.2/src/memory_tools/enrich.py +414 -0
  506. aden_tools-1.0.2/src/memory_tools/index.py +582 -0
  507. aden_tools-1.0.2/src/memory_tools/locate.py +337 -0
  508. aden_tools-1.0.2/src/memory_tools/paths.py +183 -0
  509. aden_tools-1.0.2/src/memory_tools/recall.py +225 -0
  510. aden_tools-1.0.2/src/memory_tools/server.py +70 -0
  511. aden_tools-1.0.2/src/memory_tools/timeline.py +147 -0
  512. aden_tools-1.0.2/src/memory_tools/tool.py +351 -0
  513. aden_tools-1.0.2/src/pyproject.toml +14 -0
  514. aden_tools-1.0.2/src/terminal_tools/__init__.py +43 -0
  515. aden_tools-1.0.2/src/terminal_tools/common/__init__.py +0 -0
  516. aden_tools-1.0.2/src/terminal_tools/common/command_guard.py +118 -0
  517. aden_tools-1.0.2/src/terminal_tools/common/destructive_warning.py +72 -0
  518. aden_tools-1.0.2/src/terminal_tools/common/limits.py +308 -0
  519. aden_tools-1.0.2/src/terminal_tools/common/output_store.py +121 -0
  520. aden_tools-1.0.2/src/terminal_tools/common/process_tree.py +82 -0
  521. aden_tools-1.0.2/src/terminal_tools/common/ring_buffer.py +155 -0
  522. aden_tools-1.0.2/src/terminal_tools/common/ripgrep.py +120 -0
  523. aden_tools-1.0.2/src/terminal_tools/common/semantic_exit.py +103 -0
  524. aden_tools-1.0.2/src/terminal_tools/common/truncation.py +105 -0
  525. aden_tools-1.0.2/src/terminal_tools/common/windows_job.py +119 -0
  526. aden_tools-1.0.2/src/terminal_tools/exec.py +354 -0
  527. aden_tools-1.0.2/src/terminal_tools/jobs/__init__.py +6 -0
  528. aden_tools-1.0.2/src/terminal_tools/jobs/manager.py +458 -0
  529. aden_tools-1.0.2/src/terminal_tools/jobs/tools.py +288 -0
  530. aden_tools-1.0.2/src/terminal_tools/output.py +41 -0
  531. aden_tools-1.0.2/src/terminal_tools/pty/__init__.py +5 -0
  532. aden_tools-1.0.2/src/terminal_tools/pty/session.py +367 -0
  533. aden_tools-1.0.2/src/terminal_tools/pty/tools.py +249 -0
  534. aden_tools-1.0.2/src/terminal_tools/search/__init__.py +5 -0
  535. aden_tools-1.0.2/src/terminal_tools/search/glob_match.py +45 -0
  536. aden_tools-1.0.2/src/terminal_tools/search/tools.py +560 -0
  537. aden_tools-1.0.2/src/terminal_tools/server.py +175 -0
  538. aden_tools-1.0.2/system_summary.csv +11 -0
  539. aden_tools-1.0.2/terminal_tools_server.py +20 -0
  540. aden_tools-1.0.2/tests/__init__.py +1 -0
  541. aden_tools-1.0.2/tests/conftest.py +131 -0
  542. aden_tools-1.0.2/tests/credentials/__init__.py +1 -0
  543. aden_tools-1.0.2/tests/credentials/test_google_analytics_credentials.py +56 -0
  544. aden_tools-1.0.2/tests/integrations/__init__.py +8 -0
  545. aden_tools-1.0.2/tests/integrations/conftest.py +193 -0
  546. aden_tools-1.0.2/tests/integrations/test_input_validation.py +155 -0
  547. aden_tools-1.0.2/tests/integrations/test_registration.py +142 -0
  548. aden_tools-1.0.2/tests/integrations/test_spec_conformance.py +292 -0
  549. aden_tools-1.0.2/tests/test_bridge_host_lifetime.py +61 -0
  550. aden_tools-1.0.2/tests/test_bridge_multiconnection.py +264 -0
  551. aden_tools-1.0.2/tests/test_bridge_rpc_allowlist.py +38 -0
  552. aden_tools-1.0.2/tests/test_browser_cleanup_phase1.py +439 -0
  553. aden_tools-1.0.2/tests/test_browser_discovery.py +78 -0
  554. aden_tools-1.0.2/tests/test_browser_profile_conflict.py +112 -0
  555. aden_tools-1.0.2/tests/test_browser_tools_comprehensive.py +1174 -0
  556. aden_tools-1.0.2/tests/test_chart_tools_smoke.py +148 -0
  557. aden_tools-1.0.2/tests/test_coding_file_tools.py +111 -0
  558. aden_tools-1.0.2/tests/test_command_guard.py +158 -0
  559. aden_tools-1.0.2/tests/test_credential_registry.py +104 -0
  560. aden_tools-1.0.2/tests/test_credentials.py +608 -0
  561. aden_tools-1.0.2/tests/test_credentials_tool.py +270 -0
  562. aden_tools-1.0.2/tests/test_env_helpers.py +51 -0
  563. aden_tools-1.0.2/tests/test_file_state_cache.py +193 -0
  564. aden_tools-1.0.2/tests/test_health_checks.py +599 -0
  565. aden_tools-1.0.2/tests/test_live_health_checks.py +185 -0
  566. aden_tools-1.0.2/tests/test_memory_recall_timeline.py +167 -0
  567. aden_tools-1.0.2/tests/test_memory_tools.py +532 -0
  568. aden_tools-1.0.2/tests/test_rate_limit_hook.py +298 -0
  569. aden_tools-1.0.2/tests/test_refs.py +190 -0
  570. aden_tools-1.0.2/tests/test_script_hooks.py +153 -0
  571. aden_tools-1.0.2/tests/test_senders_body_html.py +121 -0
  572. aden_tools-1.0.2/tests/test_senders_feature_flag.py +68 -0
  573. aden_tools-1.0.2/tests/test_shell_config.py +90 -0
  574. aden_tools-1.0.2/tests/test_terminal_tools_exec.py +282 -0
  575. aden_tools-1.0.2/tests/test_terminal_tools_jobs.py +123 -0
  576. aden_tools-1.0.2/tests/test_terminal_tools_lifecycle.py +211 -0
  577. aden_tools-1.0.2/tests/test_terminal_tools_pty.py +112 -0
  578. aden_tools-1.0.2/tests/test_terminal_tools_ripgrep.py +237 -0
  579. aden_tools-1.0.2/tests/test_terminal_tools_search.py +293 -0
  580. aden_tools-1.0.2/tests/test_terminal_tools_security.py +149 -0
  581. aden_tools-1.0.2/tests/test_terminal_tools_shell.py +156 -0
  582. aden_tools-1.0.2/tests/test_terminal_tools_smoke.py +31 -0
  583. aden_tools-1.0.2/tests/test_x_page_load_repro.py +366 -0
  584. aden_tools-1.0.2/tests/tools/__init__.py +1 -0
  585. aden_tools-1.0.2/tests/tools/test_airtable_tool.py +211 -0
  586. aden_tools-1.0.2/tests/tools/test_apify_tool.py +178 -0
  587. aden_tools-1.0.2/tests/tools/test_apollo_tool.py +672 -0
  588. aden_tools-1.0.2/tests/tools/test_arxiv_tool.py +230 -0
  589. aden_tools-1.0.2/tests/tools/test_asana_tool.py +169 -0
  590. aden_tools-1.0.2/tests/tools/test_attach_file_tool.py +274 -0
  591. aden_tools-1.0.2/tests/tools/test_attio_tool.py +836 -0
  592. aden_tools-1.0.2/tests/tools/test_aws_s3_tool.py +156 -0
  593. aden_tools-1.0.2/tests/tools/test_azure_sql_tool.py +201 -0
  594. aden_tools-1.0.2/tests/tools/test_bigquery_tool.py +401 -0
  595. aden_tools-1.0.2/tests/tools/test_brevo_tool.py +645 -0
  596. aden_tools-1.0.2/tests/tools/test_calcom_tool.py +433 -0
  597. aden_tools-1.0.2/tests/tools/test_calendar_tool.py +1394 -0
  598. aden_tools-1.0.2/tests/tools/test_calendly_tool.py +201 -0
  599. aden_tools-1.0.2/tests/tools/test_cloudflare.py +1104 -0
  600. aden_tools-1.0.2/tests/tools/test_cloudinary_tool.py +180 -0
  601. aden_tools-1.0.2/tests/tools/test_confluence_tool.py +161 -0
  602. aden_tools-1.0.2/tests/tools/test_csv_tool.py +891 -0
  603. aden_tools-1.0.2/tests/tools/test_databricks_tool.py +179 -0
  604. aden_tools-1.0.2/tests/tools/test_discord_tool.py +95 -0
  605. aden_tools-1.0.2/tests/tools/test_dns_security_scanner.py +260 -0
  606. aden_tools-1.0.2/tests/tools/test_docker_hub_tool.py +151 -0
  607. aden_tools-1.0.2/tests/tools/test_duckduckgo_tool.py +97 -0
  608. aden_tools-1.0.2/tests/tools/test_email_tool.py +679 -0
  609. aden_tools-1.0.2/tests/tools/test_exa_search_tool.py +241 -0
  610. aden_tools-1.0.2/tests/tools/test_excel_tool.py +1124 -0
  611. aden_tools-1.0.2/tests/tools/test_file_ops.py +408 -0
  612. aden_tools-1.0.2/tests/tools/test_freshdesk_tool.py +1771 -0
  613. aden_tools-1.0.2/tests/tools/test_github_tool.py +620 -0
  614. aden_tools-1.0.2/tests/tools/test_gitlab_tool.py +213 -0
  615. aden_tools-1.0.2/tests/tools/test_gmail_tool.py +929 -0
  616. aden_tools-1.0.2/tests/tools/test_google_analytics_tool.py +764 -0
  617. aden_tools-1.0.2/tests/tools/test_google_docs_tool.py +593 -0
  618. aden_tools-1.0.2/tests/tools/test_google_maps_tool.py +949 -0
  619. aden_tools-1.0.2/tests/tools/test_google_search_console_tool.py +154 -0
  620. aden_tools-1.0.2/tests/tools/test_google_sheets_tool.py +108 -0
  621. aden_tools-1.0.2/tests/tools/test_greenhouse_tool.py +217 -0
  622. aden_tools-1.0.2/tests/tools/test_hashline.py +186 -0
  623. aden_tools-1.0.2/tests/tools/test_http_headers_scanner.py +315 -0
  624. aden_tools-1.0.2/tests/tools/test_hubspot_tool.py +580 -0
  625. aden_tools-1.0.2/tests/tools/test_huggingface_tool.py +374 -0
  626. aden_tools-1.0.2/tests/tools/test_image_gen_tool.py +229 -0
  627. aden_tools-1.0.2/tests/tools/test_intercom_tool.py +537 -0
  628. aden_tools-1.0.2/tests/tools/test_jira_tool.py +200 -0
  629. aden_tools-1.0.2/tests/tools/test_kafka_tool.py +180 -0
  630. aden_tools-1.0.2/tests/tools/test_langfuse_tool.py +242 -0
  631. aden_tools-1.0.2/tests/tools/test_linear_tool.py +792 -0
  632. aden_tools-1.0.2/tests/tools/test_lusha_tool.py +187 -0
  633. aden_tools-1.0.2/tests/tools/test_mattermost_tool.py +106 -0
  634. aden_tools-1.0.2/tests/tools/test_microsoft_graph_tool.py +224 -0
  635. aden_tools-1.0.2/tests/tools/test_mongodb_tool.py +186 -0
  636. aden_tools-1.0.2/tests/tools/test_n8n_tool.py +199 -0
  637. aden_tools-1.0.2/tests/tools/test_news_tool.py +333 -0
  638. aden_tools-1.0.2/tests/tools/test_notion_tool.py +1156 -0
  639. aden_tools-1.0.2/tests/tools/test_obsidian_tool.py +191 -0
  640. aden_tools-1.0.2/tests/tools/test_pagerduty_tool.py +162 -0
  641. aden_tools-1.0.2/tests/tools/test_pdf_read_tool.py +536 -0
  642. aden_tools-1.0.2/tests/tools/test_pinecone_tool.py +265 -0
  643. aden_tools-1.0.2/tests/tools/test_pipedrive_tool.py +307 -0
  644. aden_tools-1.0.2/tests/tools/test_plaid_tool.py +232 -0
  645. aden_tools-1.0.2/tests/tools/test_port_scanner.py +282 -0
  646. aden_tools-1.0.2/tests/tools/test_postgres_tool.py +255 -0
  647. aden_tools-1.0.2/tests/tools/test_powerbi_tool.py +174 -0
  648. aden_tools-1.0.2/tests/tools/test_prometheus_tool.py +167 -0
  649. aden_tools-1.0.2/tests/tools/test_pushover_tool.py +146 -0
  650. aden_tools-1.0.2/tests/tools/test_quickbooks_tool.py +184 -0
  651. aden_tools-1.0.2/tests/tools/test_razorpay_tool.py +825 -0
  652. aden_tools-1.0.2/tests/tools/test_reddit_tool.py +218 -0
  653. aden_tools-1.0.2/tests/tools/test_redis_tool.py +159 -0
  654. aden_tools-1.0.2/tests/tools/test_redshift_tool.py +174 -0
  655. aden_tools-1.0.2/tests/tools/test_risk_scorer.py +316 -0
  656. aden_tools-1.0.2/tests/tools/test_run_command_pythonpath.py +110 -0
  657. aden_tools-1.0.2/tests/tools/test_salesforce_tool.py +228 -0
  658. aden_tools-1.0.2/tests/tools/test_sap_tool.py +258 -0
  659. aden_tools-1.0.2/tests/tools/test_security.py +205 -0
  660. aden_tools-1.0.2/tests/tools/test_security_tools.py +291 -0
  661. aden_tools-1.0.2/tests/tools/test_serpapi_tool.py +409 -0
  662. aden_tools-1.0.2/tests/tools/test_shopify_tool.py +269 -0
  663. aden_tools-1.0.2/tests/tools/test_similarweb_tool.py +549 -0
  664. aden_tools-1.0.2/tests/tools/test_slack_tool.py +1070 -0
  665. aden_tools-1.0.2/tests/tools/test_snowflake_tool.py +161 -0
  666. aden_tools-1.0.2/tests/tools/test_ssl_tls_scanner.py +275 -0
  667. aden_tools-1.0.2/tests/tools/test_stripe_tool.py +1663 -0
  668. aden_tools-1.0.2/tests/tools/test_subdomain_enumerator.py +294 -0
  669. aden_tools-1.0.2/tests/tools/test_supabase_tool.py +190 -0
  670. aden_tools-1.0.2/tests/tools/test_tech_stack_detector.py +269 -0
  671. aden_tools-1.0.2/tests/tools/test_telegram_tool.py +839 -0
  672. aden_tools-1.0.2/tests/tools/test_terraform_tool.py +242 -0
  673. aden_tools-1.0.2/tests/tools/test_time_tool.py +140 -0
  674. aden_tools-1.0.2/tests/tools/test_tines_tool.py +178 -0
  675. aden_tools-1.0.2/tests/tools/test_trello_tool.py +99 -0
  676. aden_tools-1.0.2/tests/tools/test_trello_tool_integration.py +69 -0
  677. aden_tools-1.0.2/tests/tools/test_twilio_tool.py +152 -0
  678. aden_tools-1.0.2/tests/tools/test_twitter_tool.py +180 -0
  679. aden_tools-1.0.2/tests/tools/test_vercel_tool.py +154 -0
  680. aden_tools-1.0.2/tests/tools/test_vision_tool.py +542 -0
  681. aden_tools-1.0.2/tests/tools/test_wandb_tool.py +313 -0
  682. aden_tools-1.0.2/tests/tools/test_web_scrape_tool.py +483 -0
  683. aden_tools-1.0.2/tests/tools/test_web_search_tool.py +147 -0
  684. aden_tools-1.0.2/tests/tools/test_wikipedia_tool.py +109 -0
  685. aden_tools-1.0.2/tests/tools/test_yahoo_finance_tool.py +141 -0
  686. aden_tools-1.0.2/tests/tools/test_youtube_tool.py +257 -0
  687. aden_tools-1.0.2/tests/tools/test_youtube_transcript_tool.py +97 -0
  688. aden_tools-1.0.2/tests/tools/test_zendesk_tool.py +153 -0
  689. aden_tools-1.0.2/tests/tools/test_zoho_crm_tool.py +160 -0
  690. aden_tools-1.0.2/tests/tools/test_zoom_tool.py +244 -0
  691. aden_tools-1.0.2/tests/vision_eval/README.md +67 -0
  692. aden_tools-1.0.2/tests/vision_eval/runs/20260521T021450Z.jsonl +56 -0
  693. aden_tools-1.0.2/tests/vision_eval/runs/20260521T025034Z.jsonl +22 -0
  694. aden_tools-1.0.2/tests/vision_eval/runs/fix.jsonl +3 -0
  695. aden_tools-1.0.2/tests/vision_eval/server.py +412 -0
  696. aden_tools-1.0.2/tests/vision_eval/static/instrument.js +113 -0
  697. aden_tools-1.0.2/tests/vision_eval/static/style.css +61 -0
  698. aden_tools-1.0.2/tests/vision_eval/tasks/disambiguation_dropdown.html +92 -0
  699. aden_tools-1.0.2/tests/vision_eval/tasks/disambiguation_duplicates.html +58 -0
  700. aden_tools-1.0.2/tests/vision_eval/tasks/disambiguation_text_as_image.html +53 -0
  701. aden_tools-1.0.2/tests/vision_eval/tasks/multistep_drag_drop.html +96 -0
  702. aden_tools-1.0.2/tests/vision_eval/tasks/multistep_tab_handoff.html +75 -0
  703. aden_tools-1.0.2/tests/vision_eval/tasks/multistep_tab_handoff_code.html +32 -0
  704. aden_tools-1.0.2/tests/vision_eval/tasks/precision_low_contrast.html +73 -0
  705. aden_tools-1.0.2/tests/vision_eval/tasks/precision_occluded.html +71 -0
  706. aden_tools-1.0.2/tests/vision_eval/tasks/precision_tiny_button.html +61 -0
  707. aden_tools-1.0.2/tests/vision_eval/tasks/spatial_below_fold.html +60 -0
  708. aden_tools-1.0.2/tests/vision_eval/tasks/spatial_form_fill.html +67 -0
  709. aden_tools-1.0.2/uv.lock +3419 -0
@@ -0,0 +1,66 @@
1
+ # MSSQL Connection Configuration Template
2
+ #
3
+ # Copy this file to .env and fill in your actual values
4
+ # DO NOT commit the .env file to version control!
5
+
6
+ # ============================================================================
7
+ # SQL Server Connection - Choose ONE format below:
8
+ # ============================================================================
9
+
10
+ # OPTION 1: Local named instance
11
+ MSSQL_SERVER=localhost\SQLEXPRESS
12
+
13
+ # OPTION 2: Local default instance
14
+ # MSSQL_SERVER=localhost
15
+
16
+ # OPTION 3: Remote server with default port (1433)
17
+ # MSSQL_SERVER=192.168.1.100
18
+
19
+ # OPTION 4: Remote server with custom port (comma-separated)
20
+ # MSSQL_SERVER=192.168.1.100,1433
21
+
22
+ # OPTION 5: Remote named instance
23
+ # MSSQL_SERVER=PRODUCTION-SERVER\INSTANCE01
24
+
25
+ # OPTION 6: Domain server name
26
+ # MSSQL_SERVER=sql-prod.company.com
27
+
28
+ # OPTION 7: Domain server with port
29
+ # MSSQL_SERVER=sql-prod.company.com,1433
30
+
31
+ # ============================================================================
32
+ # Database Configuration
33
+ # ============================================================================
34
+ MSSQL_DATABASE=AdenTestDB
35
+
36
+ # ============================================================================
37
+ # Authentication - Choose ONE method:
38
+ # ============================================================================
39
+
40
+ # METHOD 1: SQL Server Authentication (username/password)
41
+ # Use this for: remote servers, Linux servers, specific SQL logins
42
+ MSSQL_USERNAME=sa
43
+ MSSQL_PASSWORD=your_password_here
44
+
45
+ # METHOD 2: Windows Authentication (leave both empty)
46
+ # Use this for: local Windows servers, domain-joined environments
47
+ # MSSQL_USERNAME=
48
+ # MSSQL_PASSWORD=
49
+
50
+ # ============================================================================
51
+ # Important Notes:
52
+ # ============================================================================
53
+ # - Port format: Use comma (,) not colon - Example: server,1433
54
+ # - Named instances: Use backslash (\) - Example: SERVER\INSTANCE
55
+ # - Default port: 1433 (can be omitted if using default)
56
+ # - ODBC Driver: Requires "ODBC Driver 17 for SQL Server" or newer
57
+ # - Security: Never commit this file with real credentials!
58
+ # - Escaping: In some shells, escape backslashes (\\) when setting env vars
59
+ # ============================================================================
60
+
61
+ # Example Production Configurations:
62
+ # -----------------------------------
63
+ # Azure SQL: MSSQL_SERVER=yourserver.database.windows.net
64
+ # AWS RDS: MSSQL_SERVER=yourinstance.region.rds.amazonaws.com,1433
65
+ # Docker: MSSQL_SERVER=localhost,1401
66
+ # Kubernetes: MSSQL_SERVER=mssql-service.namespace.svc.cluster.local,1433
@@ -0,0 +1,88 @@
1
+ # Dependencies
2
+ node_modules/
3
+ .pnpm-store/
4
+
5
+ # Build outputs
6
+ dist/
7
+ build/
8
+ workdir/
9
+ .next/
10
+ out/
11
+
12
+ # Environment files
13
+ .env
14
+ .env.local
15
+ .env.*.local
16
+ .venv
17
+ /venv
18
+ tools/src/uv.lock
19
+
20
+
21
+ # User configuration (copied from .example)
22
+ config.yaml
23
+ docker-compose.override.yml
24
+
25
+ # IDE
26
+ .idea/
27
+ .vscode/*
28
+ !.vscode/extensions.json
29
+ !.vscode/settings.json.example
30
+ *.swp
31
+ *.swo
32
+ *~
33
+
34
+ # OS
35
+ .DS_Store
36
+ Thumbs.db
37
+
38
+ # Logs
39
+ logs/
40
+ *.log
41
+ npm-debug.log*
42
+ yarn-debug.log*
43
+ yarn-error.log*
44
+ pnpm-debug.log*
45
+
46
+ # Testing
47
+ coverage/
48
+ .nyc_output/
49
+ .pytest_cache/
50
+
51
+ # TypeScript
52
+ *.tsbuildinfo
53
+ vite.config.d.ts
54
+
55
+ # Python
56
+ __pycache__/
57
+ *.py[cod]
58
+ *$py.class
59
+ *.egg-info/
60
+ .eggs/
61
+ *.egg
62
+
63
+ # Generated runtime data
64
+ core/data/
65
+
66
+ # Misc
67
+ *.local
68
+ .cache/
69
+ tmp/
70
+ temp/
71
+
72
+ exports/*
73
+ exports.old*
74
+ artifacts/*
75
+
76
+ .claude/settings.local.json
77
+
78
+ docs/github-issues/*
79
+ core/tests/*dumps/*
80
+
81
+ screenshots/*
82
+
83
+ .gemini/*
84
+ .coverage
85
+
86
+ temp/
87
+ # Agent runtime scratch output — never commit
88
+ data/
@@ -0,0 +1,180 @@
1
+ # Browser-Use Patterns Analysis
2
+
3
+ ## Key Learnings from the browser-use integration
4
+
5
+ ### 1. Element Click Implementation
6
+
7
+ **browser-use approach** (`browser_use/actor/element.py`):
8
+
9
+ ```python
10
+ # Three fallback methods for element geometry:
11
+
12
+ # Method 1: DOM.getContentQuads (best for inline elements and complex layouts)
13
+ content_quads_result = await self._client.send.DOM.getContentQuads(
14
+ params={'backendNodeId': self._backend_node_id}, session_id=self._session_id
15
+ )
16
+
17
+ # Method 2: DOM.getBoxModel (fallback)
18
+ box_model = await self._client.send.DOM.getBoxModel(
19
+ params={'backendNodeId': self._backend_node_id}, session_id=self._session_id
20
+ )
21
+
22
+ # Method 3: JavaScript getBoundingClientRect (final fallback)
23
+ bounds_result = await self._client.send.Runtime.callFunctionOn(
24
+ params={
25
+ 'functionDeclaration': """
26
+ function() {
27
+ const rect = this.getBoundingClientRect();
28
+ return {
29
+ x: rect.left,
30
+ y: rect.top,
31
+ width: rect.width,
32
+ height: rect.height
33
+ };
34
+ }
35
+ """,
36
+ 'objectId': object_id,
37
+ 'returnByValue': True,
38
+ },
39
+ session_id=self._session_id,
40
+ )
41
+
42
+ # Method 4: JavaScript click (if all else fails)
43
+ await self._client.send.Runtime.callFunctionOn(
44
+ params={
45
+ 'functionDeclaration': 'function() { this.click(); }',
46
+ 'objectId': object_id,
47
+ },
48
+ session_id=self._session_id,
49
+ )
50
+ ```
51
+
52
+ **Key differences from our implementation:**
53
+ - Uses `backendNodeId` instead of `nodeId` (more stable across DOM updates)
54
+ - Tries `DOM.getContentQuads` first (better for complex layouts)
55
+ - Multiple fallback methods with JavaScript click as final resort
56
+ - Finds largest visible quad within viewport
57
+ - Has timeouts for each mouse operation
58
+ - Proper modifier key handling
59
+
60
+ ### 2. Input/Type Text Implementation
61
+
62
+ **browser-use approach**:
63
+
64
+ ```python
65
+ # 1. Scroll element into view
66
+ await cdp_client.send.DOM.scrollIntoViewIfNeeded(
67
+ params={'backendNodeId': backend_node_id},
68
+ session_id=session_id
69
+ )
70
+
71
+ # 2. Get object ID
72
+ result = await cdp_client.send.DOM.resolveNode(
73
+ params={'backendNodeId': backend_node_id},
74
+ session_id=session_id,
75
+ )
76
+ object_id = result['object']['objectId']
77
+
78
+ # 3. Focus via JavaScript (more reliable than CDP focus)
79
+ await cdp_client.send.Runtime.callFunctionOn(
80
+ params={
81
+ 'functionDeclaration': 'function() { this.focus(); }',
82
+ 'objectId': object_id,
83
+ },
84
+ session_id=session_id,
85
+ )
86
+
87
+ # 4. Type using Input.dispatchKeyEvent
88
+ for char in text:
89
+ await self._client.send.Input.dispatchKeyEvent(
90
+ params={
91
+ 'type': 'keyDown',
92
+ 'key': char,
93
+ 'text': char,
94
+ },
95
+ session_id=self._session_id,
96
+ )
97
+ ```
98
+
99
+ ### 3. Accessibility Tree (Snapshot)
100
+
101
+ **browser-use approach** (`browser_use/dom/service.py`):
102
+
103
+ - Uses `Accessibility.getFullAXTree` for accessibility data
104
+ - Combines with DOM tree for enhanced snapshot
105
+ - Filters by paint order (elements actually visible)
106
+ - Handles iframes with depth limits
107
+ - Detects hidden interactive elements and reports them
108
+ - Uses `DOM.getFrameOwner` for iframe handling
109
+
110
+ ### 4. CDP Domain Handling
111
+
112
+ **browser-use approach** (`browser_use/browser/session.py`):
113
+
114
+ ```python
115
+ # Session setup enables ONLY these domains:
116
+ await self._client.send.Page.enable(session_id=self._session_id)
117
+ await self._client.send.DOM.enable(session_id=self._session_id)
118
+ await self._client.send.Runtime.enable(session_id=self._session_id)
119
+ await self._client.send.Network.enable(session_id=self._session_id)
120
+
121
+ # Input.enable is NEVER called - it's not required!
122
+ ```
123
+
124
+ ### 5. Element Selection
125
+
126
+ **browser-use approach**:
127
+
128
+ - Uses index-based element selection from accessibility tree
129
+ - Maintains a map of index -> EnhancedAXNode
130
+ - Elements have `backendNodeId` which is stable
131
+ - Uses `DOM.pushNodesByBackendIdsToFrontend` to get fresh nodeId
132
+
133
+ ### 6. Scroll Handling
134
+
135
+ **browser-use approach**:
136
+
137
+ ```python
138
+ # Uses multiple methods:
139
+ # 1. DOM.scrollIntoViewIfNeeded (CDP)
140
+ # 2. JavaScript scrollIntoView as fallback
141
+ # 3. Mouse wheel events for smooth scrolling
142
+ ```
143
+
144
+ ### 7. Wait Strategies
145
+
146
+ **browser-use approach**:
147
+
148
+ - `wait_for_element` uses CDP DOM queries with polling
149
+ - Has configurable timeouts
150
+ - Uses `DOM.getContentQuads` to verify element is visible
151
+ - Detects page load state via `Page.loadEventFired`
152
+
153
+ ---
154
+
155
+ ## Improvements to Make to hive/tools
156
+
157
+ ### 1. Bridge Updates
158
+
159
+ - [x] Use `backendNodeId` instead of `nodeId` where possible
160
+ - [x] Add `DOM.getContentQuads` as primary method for element geometry
161
+ - [x] Add JavaScript click as final fallback
162
+ - [x] Add proper timeouts to mouse operations
163
+ - [x] Handle modifier keys for click
164
+
165
+ ### 2. Type Text Updates
166
+
167
+ - [x] Focus element via JavaScript before typing
168
+ - [x] Use `Input.dispatchKeyEvent` for typing (more reliable than insertText)
169
+
170
+ ### 3. Snapshot Updates
171
+
172
+ - [x] Use accessibility tree (CDP Accessibility domain)
173
+ - [x] Add computed styles to detect visibility
174
+ - [x] Report hidden interactive elements
175
+
176
+ ### 4. Error Handling
177
+
178
+ - [x] Better error messages with element context
179
+ - [x] Graceful fallbacks instead of hard failures
180
+ - [x] Timeout handling for all CDP operations
@@ -0,0 +1,358 @@
1
+ # Building Tools for Aden
2
+
3
+ This guide explains how to create new tools for the Hive framework using FastMCP.
4
+
5
+ ## Quick Start Checklist
6
+
7
+ 1. Create folder under `src/aden_tools/tools/<tool_name>/`
8
+ 2. Implement a `register_tools(mcp: FastMCP)` function using the `@mcp.tool()` decorator
9
+ 3. Add a `README.md` documenting your tool
10
+ 4. Register in `src/aden_tools/tools/__init__.py`
11
+ 5. Add tests in `tests/tools/`
12
+
13
+ ## Tool Structure
14
+
15
+ Each tool lives in its own folder:
16
+
17
+ ```
18
+ src/aden_tools/tools/my_tool/
19
+ ├── __init__.py # Export register_tools function
20
+ ├── my_tool.py # Tool implementation
21
+ └── README.md # Documentation
22
+ ```
23
+
24
+ ## Implementation Pattern
25
+
26
+ Tools use FastMCP's native decorator pattern:
27
+
28
+ ```python
29
+ from fastmcp import FastMCP
30
+
31
+
32
+ def register_tools(mcp: FastMCP) -> None:
33
+ """Register my tools with the MCP server."""
34
+
35
+ @mcp.tool()
36
+ def my_tool(
37
+ query: str,
38
+ limit: int = 10,
39
+ ) -> dict:
40
+ """
41
+ Search for items matching a query.
42
+
43
+ Use this when you need to find specific information.
44
+
45
+ Args:
46
+ query: The search query (1-500 chars)
47
+ limit: Maximum number of results (1-100)
48
+
49
+ Returns:
50
+ Dict with search results or error dict
51
+ """
52
+ # Validate inputs
53
+ if not query or len(query) > 500:
54
+ return {"error": "Query must be 1-500 characters"}
55
+ if limit < 1 or limit > 100:
56
+ limit = max(1, min(100, limit))
57
+
58
+ try:
59
+ # Your implementation here
60
+ results = do_search(query, limit)
61
+ return {
62
+ "query": query,
63
+ "results": results,
64
+ "total": len(results),
65
+ }
66
+ except Exception as e:
67
+ return {"error": f"Search failed: {str(e)}"}
68
+ ```
69
+
70
+ ## Exporting the Tool
71
+
72
+ In `src/aden_tools/tools/my_tool/__init__.py`:
73
+ ```python
74
+ from .my_tool import register_tools
75
+
76
+ __all__ = ["register_tools"]
77
+ ```
78
+
79
+ In `src/aden_tools/tools/__init__.py`, add to `_TOOL_MODULES`:
80
+ ```python
81
+ _TOOL_MODULES = [
82
+ # ... existing tools
83
+ "my_tool",
84
+ ]
85
+ ```
86
+
87
+ ## Credential Management
88
+
89
+ Tools fall into two categories based on whether they need external API credentials:
90
+
91
+ | Signature | Meaning | CI Enforcement |
92
+ |-----------|---------|----------------|
93
+ | `register_tools(mcp)` | No credentials needed | ✅ Just works |
94
+ | `register_tools(mcp, credentials=None)` | Requires credentials | ⚠️ Must have `CredentialSpec` |
95
+
96
+ **This is enforced by CI** — if your `register_tools` accepts a `credentials` parameter, every tool it registers must appear in a `CredentialSpec.tools` list. Otherwise, CI will fail with a clear error message.
97
+
98
+ ### Tools WITHOUT Credentials (Simple Case)
99
+
100
+ If your tool doesn't need external API keys (file operations, local processing, etc.), just use the simple signature:
101
+
102
+ ```python
103
+ def register_tools(mcp: FastMCP) -> None:
104
+ """Register tools that don't need credentials."""
105
+
106
+ @mcp.tool()
107
+ def my_local_tool(path: str) -> dict:
108
+ """Process a local file."""
109
+ # No credentials needed - just do the work
110
+ return {"result": process_file(path)}
111
+ ```
112
+
113
+ That's it! No additional configuration needed.
114
+
115
+ ### Tools WITH Credentials (Integration Case)
116
+
117
+ For tools requiring API keys, follow these steps:
118
+
119
+ #### Step 1: Add the `credentials` parameter
120
+
121
+ ```python
122
+ from typing import TYPE_CHECKING
123
+
124
+ if TYPE_CHECKING:
125
+ from aden_tools.credentials import CredentialStoreAdapter
126
+
127
+
128
+ def register_tools(
129
+ mcp: FastMCP,
130
+ credentials: CredentialStoreAdapter | None = None,
131
+ ) -> None:
132
+ @mcp.tool()
133
+ def my_api_tool(query: str) -> dict:
134
+ """Tool that requires an API key."""
135
+ # Use credentials adapter if provided, fallback to direct env access
136
+ if credentials is not None:
137
+ api_key = credentials.get("my_api")
138
+ else:
139
+ api_key = os.getenv("MY_API_KEY")
140
+
141
+ if not api_key:
142
+ return {
143
+ "error": "MY_API_KEY environment variable not set",
144
+ "help": "Get an API key at https://example.com/api-keys",
145
+ }
146
+
147
+ # Use the API key...
148
+ ```
149
+
150
+ #### Step 2: Create a CredentialSpec
151
+
152
+ Find the appropriate category file in `src/aden_tools/credentials/` or create a new one:
153
+
154
+ | Category | File | Examples |
155
+ |----------|------|----------|
156
+ | LLM providers | `llm.py` | anthropic, openai |
157
+ | Search tools | `search.py` | brave_search, google_search |
158
+ | Email providers | `email.py` | resend, google/gmail |
159
+ | GitHub | `github.py` | github |
160
+ | CRM | `hubspot.py` | hubspot |
161
+ | Messaging | `slack.py` | slack |
162
+
163
+ Add your credential spec:
164
+
165
+ ```python
166
+ # In credentials/<category>.py
167
+ from .base import CredentialSpec
168
+
169
+ MY_CREDENTIALS = {
170
+ "my_api": CredentialSpec(
171
+ env_var="MY_API_KEY",
172
+ tools=["my_api_tool"], # IMPORTANT: List ALL tool names this credential covers
173
+ required=True,
174
+ help_url="https://example.com/api-keys",
175
+ description="API key for My Service",
176
+ # Credential store mapping
177
+ credential_id="my_api",
178
+ credential_key="api_key",
179
+ ),
180
+ }
181
+ ```
182
+
183
+ **Important:** The `tools` list must include every tool name that your `register_tools` function creates. CI will fail if any tool is missing.
184
+
185
+ #### Step 3: Merge into CREDENTIAL_SPECS
186
+
187
+ If you created a new category file, import and merge it in `credentials/__init__.py`:
188
+
189
+ ```python
190
+ from .my_category import MY_CREDENTIALS
191
+
192
+ CREDENTIAL_SPECS = {
193
+ **LLM_CREDENTIALS,
194
+ **SEARCH_CREDENTIALS,
195
+ **MY_CREDENTIALS, # Add new category
196
+ }
197
+
198
+ __all__ = [
199
+ # ... existing exports
200
+ "MY_CREDENTIALS",
201
+ ]
202
+ ```
203
+
204
+ #### Step 4: Update register_all_tools
205
+
206
+ In `tools/__init__.py`, add your tool registration with credentials:
207
+
208
+ ```python
209
+ from .my_tool import register_tools as register_my_tool
210
+
211
+ def register_all_tools(mcp: FastMCP, credentials=None) -> list[str]:
212
+ # ... existing registrations
213
+
214
+ # Tools that need credentials
215
+ register_my_tool(mcp, credentials=credentials)
216
+
217
+ return [
218
+ # ... existing tool names
219
+ "my_api_tool",
220
+ ]
221
+ ```
222
+
223
+ ### CI Enforcement Rules
224
+
225
+ The following conformance tests run in CI (`tests/integrations/test_spec_conformance.py`):
226
+
227
+ | Test | What It Checks |
228
+ |------|----------------|
229
+ | `TestModuleStructure` | Every tool module exports `register_tools` |
230
+ | `TestRegisterToolsSignature` | Correct function signature (`mcp` param, optional `credentials`) |
231
+ | `TestCredentialSpecFields` | All CredentialSpec fields are complete (`env_var`, `help_url`, `description`, `credential_id`, `credential_key`) |
232
+ | `TestSpecToolsMatchRegistered` | Tool names in `spec.tools` actually exist |
233
+ | `TestCredentialCoverage` | **Every tool from a module with `credentials` param has a spec** |
234
+
235
+ If `TestCredentialCoverage` fails, you'll see:
236
+
237
+ ```
238
+ Tool 'my_new_tool' from module 'my_tool' accepts credentials but has no CredentialSpec.
239
+
240
+ Fix by either:
241
+ 1. Adding a CredentialSpec in credentials/<category>.py with tools=['my_new_tool'], or
242
+ 2. Removing 'credentials' param from register_tools() if this tool doesn't need credentials
243
+ ```
244
+
245
+ ### Testing with Mock Credentials
246
+
247
+ ```python
248
+ from aden_tools.credentials import CredentialStoreAdapter
249
+
250
+ def test_my_tool_with_valid_key(mcp):
251
+ creds = CredentialStoreAdapter.for_testing({"my_api": "test-key"})
252
+ register_tools(mcp, credentials=creds)
253
+ tool_fn = mcp._tool_manager._tools["my_api_tool"].fn
254
+
255
+ result = tool_fn(query="test")
256
+ # Assertions...
257
+ ```
258
+
259
+ ### When Validation Happens
260
+
261
+ Credentials are validated when an agent is loaded (via `AgentRunner.validate()`), not at MCP server startup. This means:
262
+
263
+ 1. The MCP server always starts (even if credentials are missing)
264
+ 2. When you load an agent, validation checks which tools it needs
265
+ 3. If credentials are missing, you get a clear error:
266
+
267
+ ```
268
+ Cannot run agent: Missing credentials
269
+
270
+ The following tools require credentials that are not set:
271
+
272
+ web_search requires BRAVE_SEARCH_API_KEY
273
+ API key for Brave Search
274
+ Get an API key at: https://brave.com/search/api/
275
+ Set via: export BRAVE_SEARCH_API_KEY=your_key
276
+
277
+ Set these environment variables and re-run the agent.
278
+ ```
279
+
280
+ ## Best Practices
281
+
282
+ ### Error Handling
283
+
284
+ Return error dicts instead of raising exceptions:
285
+
286
+ ```python
287
+ @mcp.tool()
288
+ def my_tool(**kwargs) -> dict:
289
+ try:
290
+ result = do_work()
291
+ return {"success": True, "data": result}
292
+ except SpecificError as e:
293
+ return {"error": f"Failed to process: {str(e)}"}
294
+ except Exception as e:
295
+ return {"error": f"Unexpected error: {str(e)}"}
296
+ ```
297
+
298
+ ### Return Values
299
+
300
+ - Return dicts for structured data
301
+ - Include relevant metadata (query, total count, etc.)
302
+ - Use `{"error": "message"}` for errors
303
+
304
+ ### Documentation
305
+
306
+ The docstring becomes the tool description in MCP. Include:
307
+ - What the tool does
308
+ - When to use it
309
+ - Args with types and constraints
310
+ - What it returns
311
+
312
+ Every tool folder needs a `README.md` with:
313
+ - Description and use cases
314
+ - Usage examples
315
+ - Argument table
316
+ - Environment variables (if any)
317
+ - Error handling notes
318
+
319
+ ## Testing
320
+
321
+ Place tests in `tests/tools/test_{{tool_name}}.py`:
322
+
323
+ ```python
324
+ import pytest
325
+ from fastmcp import FastMCP
326
+
327
+ from aden_tools.tools.{{tool_name}} import register_tools
328
+
329
+
330
+ @pytest.fixture
331
+ def mcp():
332
+ """Create a FastMCP instance with tools registered."""
333
+ server = FastMCP("test")
334
+ register_tools(server)
335
+ return server
336
+
337
+
338
+ def test_my_tool_basic(mcp):
339
+ """Test basic tool functionality."""
340
+ tool_fn = mcp._tool_manager._tools["my_tool"].fn
341
+ result = tool_fn(query="test")
342
+ assert "results" in result
343
+
344
+
345
+ def test_my_tool_validation(mcp):
346
+ """Test input validation."""
347
+ tool_fn = mcp._tool_manager._tools["my_tool"].fn
348
+ result = tool_fn(query="")
349
+ assert "error" in result
350
+ ```
351
+
352
+ Mock external APIs to keep tests fast and deterministic.
353
+
354
+ ## Naming Conventions
355
+
356
+ - **Folder name**: `snake_case` with `_tool` suffix (e.g., `file_read_tool`)
357
+ - **Function name**: `snake_case` (e.g., `file_read`)
358
+ - **Tool description**: Clear, actionable docstring