intentkit 0.6.7.dev7__tar.gz → 0.6.7.dev8__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.

Potentially problematic release.


This version of intentkit might be problematic. Click here for more details.

Files changed (407) hide show
  1. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/PKG-INFO +1 -1
  2. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/__init__.py +1 -1
  3. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/pyproject.toml +1 -1
  4. intentkit-0.6.7.dev8/skills/elfa/README.md +152 -0
  5. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/elfa/__init__.py +1 -10
  6. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/elfa/base.py +1 -1
  7. intentkit-0.6.7.dev8/skills/elfa/mention.py +223 -0
  8. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/elfa/schema.json +1 -17
  9. intentkit-0.6.7.dev8/skills/elfa/stats.py +85 -0
  10. intentkit-0.6.7.dev8/skills/elfa/tokens.py +122 -0
  11. intentkit-0.6.7.dev8/skills/elfa/utils.py +129 -0
  12. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/get_mentions.py +1 -1
  13. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/get_timeline.py +1 -1
  14. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/get_user_by_username.py +1 -1
  15. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/get_user_tweets.py +1 -1
  16. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/search_tweets.py +1 -1
  17. intentkit-0.6.7.dev7/skills/elfa/README.md +0 -100
  18. intentkit-0.6.7.dev7/skills/elfa/mention.py +0 -504
  19. intentkit-0.6.7.dev7/skills/elfa/stats.py +0 -118
  20. intentkit-0.6.7.dev7/skills/elfa/tokens.py +0 -126
  21. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/.gitignore +0 -0
  22. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/LICENSE +0 -0
  23. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/MANIFEST.in +0 -0
  24. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/README.md +0 -0
  25. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/__init__.py +0 -0
  26. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/agent.py +0 -0
  27. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/api.py +0 -0
  28. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/engine.py +0 -0
  29. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/exception.py +0 -0
  30. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/graph.py +0 -0
  31. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/skill.py +0 -0
  32. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/abstracts/twitter.py +0 -0
  33. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/clients/__init__.py +0 -0
  34. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/clients/cdp.py +0 -0
  35. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/clients/twitter.py +0 -0
  36. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/config/__init__.py +0 -0
  37. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/config/config.py +0 -0
  38. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/__init__.py +0 -0
  39. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/agent.py +0 -0
  40. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/api.py +0 -0
  41. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/client.py +0 -0
  42. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/credit.py +0 -0
  43. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/engine.py +0 -0
  44. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/node.py +0 -0
  45. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/prompt.py +0 -0
  46. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/core/skill.py +0 -0
  47. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/agent.py +0 -0
  48. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/agent_data.py +0 -0
  49. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/agent_schema.json +0 -0
  50. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/app_setting.py +0 -0
  51. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/base.py +0 -0
  52. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/chat.py +0 -0
  53. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/conversation.py +0 -0
  54. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/credit.py +0 -0
  55. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/db.py +0 -0
  56. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/db_mig.py +0 -0
  57. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/generator.py +0 -0
  58. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/llm.py +0 -0
  59. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/redis.py +0 -0
  60. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/skill.py +0 -0
  61. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/models/user.py +0 -0
  62. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/__init__.py +0 -0
  63. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/acolyt/__init__.py +0 -0
  64. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/acolyt/acolyt.jpg +0 -0
  65. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/acolyt/ask.py +0 -0
  66. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/acolyt/base.py +0 -0
  67. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/acolyt/schema.json +0 -0
  68. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/README.md +0 -0
  69. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/__init__.py +0 -0
  70. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/aixbt.jpg +0 -0
  71. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/base.py +0 -0
  72. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/projects.py +0 -0
  73. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/aixbt/schema.json +0 -0
  74. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/allora/__init__.py +0 -0
  75. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/allora/allora.jpeg +0 -0
  76. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/allora/base.py +0 -0
  77. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/allora/price.py +0 -0
  78. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/allora/schema.json +0 -0
  79. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/base.py +0 -0
  80. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/README.md +0 -0
  81. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/__init__.py +0 -0
  82. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/base.py +0 -0
  83. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/carv.webp +0 -0
  84. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/fetch_news.py +0 -0
  85. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/onchain_query.py +0 -0
  86. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/schema.json +0 -0
  87. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/carv/token_info_and_price.py +0 -0
  88. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/__init__.py +0 -0
  89. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/base.py +0 -0
  90. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/cdp.png +0 -0
  91. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/get_balance.py +0 -0
  92. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/schema.json +0 -0
  93. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cdp/swap.py +0 -0
  94. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/README.md +0 -0
  95. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/__init__.py +0 -0
  96. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/base.py +0 -0
  97. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/chain_lookup.py +0 -0
  98. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/chainlist.png +0 -0
  99. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/chainlist/schema.json +0 -0
  100. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/common/__init__.py +0 -0
  101. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/common/base.py +0 -0
  102. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/common/common.jpg +0 -0
  103. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/common/current_time.py +0 -0
  104. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/common/schema.json +0 -0
  105. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/README.md +0 -0
  106. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/__init__.py +0 -0
  107. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/base.py +0 -0
  108. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/constants.py +0 -0
  109. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/cookiefun.png +0 -0
  110. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/get_account_details.py +0 -0
  111. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/get_account_feed.py +0 -0
  112. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/get_account_smart_followers.py +0 -0
  113. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/get_sectors.py +0 -0
  114. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/schema.json +0 -0
  115. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cookiefun/search_accounts.py +0 -0
  116. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/__init__.py +0 -0
  117. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/api.py +0 -0
  118. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/base.py +0 -0
  119. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/cryptocompare.png +0 -0
  120. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_news.py +0 -0
  121. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_price.py +0 -0
  122. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  123. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  124. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_top_volume.py +0 -0
  125. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/fetch_trading_signals.py +0 -0
  126. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptocompare/schema.json +0 -0
  127. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/__init__.py +0 -0
  128. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/base.py +0 -0
  129. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/cryptopanic.png +0 -0
  130. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/fetch_crypto_news.py +0 -0
  131. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  132. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/cryptopanic/schema.json +0 -0
  133. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/README.md +0 -0
  134. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/__init__.py +0 -0
  135. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/base.py +0 -0
  136. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/dapplooker.jpg +0 -0
  137. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/dapplooker_token_data.py +0 -0
  138. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dapplooker/schema.json +0 -0
  139. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/__init__.py +0 -0
  140. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/api.py +0 -0
  141. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/base.py +0 -0
  142. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/__init__.py +0 -0
  143. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  144. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_block.py +0 -0
  145. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_current_prices.py +0 -0
  146. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_first_price.py +0 -0
  147. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_historical_prices.py +0 -0
  148. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_price_chart.py +0 -0
  149. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/coins/fetch_price_percentage.py +0 -0
  150. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/config/__init__.py +0 -0
  151. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/config/chains.py +0 -0
  152. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/defillama.jpeg +0 -0
  153. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/fees/__init__.py +0 -0
  154. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/fees/fetch_fees_overview.py +0 -0
  155. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/schema.json +0 -0
  156. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/stablecoins/__init__.py +0 -0
  157. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  158. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  159. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  160. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  161. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tests/__init__.py +0 -0
  162. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tests/api_integration.test.py +0 -0
  163. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tests/api_unit.test.py +0 -0
  164. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/__init__.py +0 -0
  165. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  166. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_chains.py +0 -0
  167. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  168. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_protocol.py +0 -0
  169. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  170. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/tvl/fetch_protocols.py +0 -0
  171. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/volumes/__init__.py +0 -0
  172. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  173. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  174. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/volumes/fetch_options_overview.py +0 -0
  175. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/yields/__init__.py +0 -0
  176. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/yields/fetch_pool_chart.py +0 -0
  177. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/defillama/yields/fetch_pools.py +0 -0
  178. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/__init__.py +0 -0
  179. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/base.py +0 -0
  180. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/dexscreener.png +0 -0
  181. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/model/__init__.py +0 -0
  182. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/model/search_token_response.py +0 -0
  183. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/schema.json +0 -0
  184. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dexscreener/search_token.py +0 -0
  185. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/__init__.py +0 -0
  186. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/base.py +0 -0
  187. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/dune.png +0 -0
  188. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/fetch_kol_buys.py +0 -0
  189. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  190. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/dune_analytics/schema.json +0 -0
  191. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/elfa/elfa.jpg +0 -0
  192. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/README.md +0 -0
  193. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/__init__.py +0 -0
  194. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/abi/__init__.py +0 -0
  195. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/abi/approval.py +0 -0
  196. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/abi/erc20.py +0 -0
  197. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/abi/route.py +0 -0
  198. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/base.py +0 -0
  199. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/best_yield.py +0 -0
  200. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/enso.jpg +0 -0
  201. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/networks.py +0 -0
  202. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/prices.py +0 -0
  203. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/route.py +0 -0
  204. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/schema.json +0 -0
  205. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/tokens.py +0 -0
  206. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/enso/wallet.py +0 -0
  207. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/README.md +0 -0
  208. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/__init__.py +0 -0
  209. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/base.py +0 -0
  210. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/clear.py +0 -0
  211. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/crawl.py +0 -0
  212. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/firecrawl.png +0 -0
  213. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/query.py +0 -0
  214. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/schema.json +0 -0
  215. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/scrape.py +0 -0
  216. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/firecrawl/utils.py +0 -0
  217. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/README.md +0 -0
  218. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/__init__.py +0 -0
  219. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/base.py +0 -0
  220. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/github.jpg +0 -0
  221. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/github_search.py +0 -0
  222. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/github/schema.json +0 -0
  223. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/__init__.py +0 -0
  224. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/base.py +0 -0
  225. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/heurist.png +0 -0
  226. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_animagine_xl.py +0 -0
  227. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_arthemy_comics.py +0 -0
  228. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_arthemy_real.py +0 -0
  229. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_braindance.py +0 -0
  230. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
  231. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_flux_1_dev.py +0 -0
  232. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/image_generation_sdxl.py +0 -0
  233. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/heurist/schema.json +0 -0
  234. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/README.md +0 -0
  235. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/__init__.py +0 -0
  236. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/base.py +0 -0
  237. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/get.py +0 -0
  238. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/http.svg +0 -0
  239. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/post.py +0 -0
  240. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/put.py +0 -0
  241. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/http/schema.json +0 -0
  242. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/README.md +0 -0
  243. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/__init__.py +0 -0
  244. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/base.py +0 -0
  245. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/lifi.png +0 -0
  246. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/schema.json +0 -0
  247. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/token_execute.py +0 -0
  248. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/token_quote.py +0 -0
  249. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/lifi/utils.py +0 -0
  250. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/README.md +0 -0
  251. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/__init__.py +0 -0
  252. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/api.py +0 -0
  253. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/base.py +0 -0
  254. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/fetch_chain_portfolio.py +0 -0
  255. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/fetch_nft_portfolio.py +0 -0
  256. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/fetch_solana_portfolio.py +0 -0
  257. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/fetch_wallet_portfolio.py +0 -0
  258. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/moralis.png +0 -0
  259. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/schema.json +0 -0
  260. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/tests/__init__.py +0 -0
  261. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/moralis/tests/test_wallet.py +0 -0
  262. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/nation/__init__.py +0 -0
  263. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/nation/base.py +0 -0
  264. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/nation/nation.png +0 -0
  265. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/nation/nft_check.py +0 -0
  266. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/nation/schema.json +0 -0
  267. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/__init__.py +0 -0
  268. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/base.py +0 -0
  269. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/dalle_image_generation.py +0 -0
  270. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/gpt_image_generation.py +0 -0
  271. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/gpt_image_to_image.py +0 -0
  272. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/image_to_text.py +0 -0
  273. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/openai.png +0 -0
  274. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/openai/schema.json +0 -0
  275. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/README.md +0 -0
  276. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/__init__.py +0 -0
  277. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/base.py +0 -0
  278. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/constants.py +0 -0
  279. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/moralis.png +0 -0
  280. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/schema.json +0 -0
  281. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/token_balances.py +0 -0
  282. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_approvals.py +0 -0
  283. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_defi_positions.py +0 -0
  284. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_history.py +0 -0
  285. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_net_worth.py +0 -0
  286. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_nfts.py +0 -0
  287. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_profitability.py +0 -0
  288. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_profitability_summary.py +0 -0
  289. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_stats.py +0 -0
  290. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/portfolio/wallet_swaps.py +0 -0
  291. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/skills.toml +0 -0
  292. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/__init__.py +0 -0
  293. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/base.py +0 -0
  294. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/get_channel.py +0 -0
  295. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/get_message.py +0 -0
  296. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/schedule_message.py +0 -0
  297. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/schema.json +0 -0
  298. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/send_message.py +0 -0
  299. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/slack/slack.jpg +0 -0
  300. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/__init__.py +0 -0
  301. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/base.py +0 -0
  302. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/delete_data.py +0 -0
  303. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/fetch_data.py +0 -0
  304. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/insert_data.py +0 -0
  305. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/invoke_function.py +0 -0
  306. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/schema.json +0 -0
  307. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/supabase.svg +0 -0
  308. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/update_data.py +0 -0
  309. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/supabase/upsert_data.py +0 -0
  310. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/__init__.py +0 -0
  311. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/add_autonomous_task.py +0 -0
  312. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/base.py +0 -0
  313. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/delete_autonomous_task.py +0 -0
  314. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/edit_autonomous_task.py +0 -0
  315. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/list_autonomous_tasks.py +0 -0
  316. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/read_agent_api_key.py +0 -0
  317. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/regenerate_agent_api_key.py +0 -0
  318. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/schema.json +0 -0
  319. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/system/system.svg +0 -0
  320. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/README.md +0 -0
  321. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/__init__.py +0 -0
  322. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/base.py +0 -0
  323. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/schema.json +0 -0
  324. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/tavily.jpg +0 -0
  325. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/tavily_extract.py +0 -0
  326. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/tavily/tavily_search.py +0 -0
  327. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/README.md +0 -0
  328. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/__init__.py +0 -0
  329. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/base.py +0 -0
  330. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/constants.py +0 -0
  331. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/erc20_transfers.py +0 -0
  332. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/moralis.png +0 -0
  333. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/schema.json +0 -0
  334. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/token_analytics.py +0 -0
  335. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/token_price.py +0 -0
  336. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/token/token_search.py +0 -0
  337. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/__init__.py +0 -0
  338. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/base.py +0 -0
  339. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/follow_user.py +0 -0
  340. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/like_tweet.py +0 -0
  341. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/post_tweet.py +0 -0
  342. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/reply_tweet.py +0 -0
  343. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/retweet.py +0 -0
  344. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/schema.json +0 -0
  345. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/twitter/twitter.png +0 -0
  346. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/unrealspeech/__init__.py +0 -0
  347. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/unrealspeech/base.py +0 -0
  348. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/unrealspeech/schema.json +0 -0
  349. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/unrealspeech/text_to_speech.py +0 -0
  350. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/unrealspeech/unrealspeech.jpg +0 -0
  351. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/__init__.py +0 -0
  352. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/base.py +0 -0
  353. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/input.py +0 -0
  354. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/schema.json +0 -0
  355. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/venice_audio.py +0 -0
  356. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_audio/venice_logo.jpg +0 -0
  357. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/README.md +0 -0
  358. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/__init__.py +0 -0
  359. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/api.py +0 -0
  360. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/base.py +0 -0
  361. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/config.py +0 -0
  362. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_enhance/README.md +0 -0
  363. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_enhance/__init__.py +0 -0
  364. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_enhance/image_enhance.py +0 -0
  365. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  366. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  367. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/README.md +0 -0
  368. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/__init__.py +0 -0
  369. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_base.py +0 -0
  370. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  371. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  372. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  373. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_input.py +0 -0
  374. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  375. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  376. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  377. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  378. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_upscale/README.md +0 -0
  379. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_upscale/__init__.py +0 -0
  380. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_upscale/image_upscale.py +0 -0
  381. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  382. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  383. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_vision/README.md +0 -0
  384. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_vision/__init__.py +0 -0
  385. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_vision/image_vision.py +0 -0
  386. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_vision/image_vision_base.py +0 -0
  387. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/image_vision/image_vision_input.py +0 -0
  388. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/schema.json +0 -0
  389. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/utils.py +0 -0
  390. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/venice_image/venice_image.jpg +0 -0
  391. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/README.md +0 -0
  392. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/__init__.py +0 -0
  393. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/base.py +0 -0
  394. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/document_indexer.py +0 -0
  395. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/langchain.png +0 -0
  396. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/schema.json +0 -0
  397. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/scrape_and_index.py +0 -0
  398. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/utils.py +0 -0
  399. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/skills/web_scraper/website_indexer.py +0 -0
  400. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/__init__.py +0 -0
  401. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/chain.py +0 -0
  402. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/error.py +0 -0
  403. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/logging.py +0 -0
  404. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/random.py +0 -0
  405. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/s3.py +0 -0
  406. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/slack_alert.py +0 -0
  407. {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev8}/utils/tx.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.6.7.dev7
3
+ Version: 0.6.7.dev8
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestal-network/intentkit
6
6
  Project-URL: Repository, https://github.com/crestal-network/intentkit
@@ -3,7 +3,7 @@
3
3
  A powerful platform for building AI agents with blockchain and cryptocurrency capabilities.
4
4
  """
5
5
 
6
- __version__ = "0.6.7-dev7"
6
+ __version__ = "0.6.7-dev8"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intentkit"
3
- version = "0.6.7-dev7"
3
+ version = "0.6.7-dev8"
4
4
  description = "Intent-based AI Agent Platform - Core Package"
5
5
  authors = [{ name = "hyacinthus", email = "hyacinthus@gmail.com" }]
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,152 @@
1
+ # Elfa Skills - Social Media Intelligence
2
+
3
+ Integration with [Elfa AI API v2](https://api.elfa.ai/v2) providing real-time social media data analysis and processing capabilities for crypto and stock market sentiment tracking.
4
+
5
+ **Important: V2 API Changes**
6
+ - **No Raw Content**: V2 API removes raw tweet content for platform compliance
7
+ - **Sanitized Data**: Returns engagement metrics, timestamps, and account metadata only
8
+ - **New Endpoints**: Updated endpoints with consistent response format
9
+ - **Enhanced Pagination**: Different pagination patterns for search vs aggregation endpoints
10
+
11
+ ## Setup
12
+
13
+ Add your Elfa API key to your environment:
14
+ ```bash
15
+ ELFA_API_KEY=your_elfa_api_key_here
16
+ ```
17
+
18
+ ## Available Skills
19
+
20
+ ### 1. Get Trending Tokens (`get_trending_tokens`)
21
+
22
+ Ranks the most discussed tokens based on smart mentions count for a given period, updated every 5 minutes.
23
+
24
+ **Endpoint**: `v2/aggregations/trending-tokens` - Direct Migration
25
+
26
+ **Example Prompts:**
27
+ ```
28
+ "What are the trending crypto tokens in the last 24 hours?"
29
+ "Get trending tokens with minimum 50 mentions in the past week"
30
+ ```
31
+
32
+ **Parameters:**
33
+ - `timeWindow`: "30m", "1h", "4h", "24h", "7d", "30d" (default: "7d")
34
+ - `page`: Page number for pagination (default: 1)
35
+ - `pageSize`: Number of items per page (default: 50)
36
+ - `minMentions`: Minimum mentions required (default: 5)
37
+
38
+ **V2 Changes:**
39
+ - Same functionality and parameters
40
+ - Enhanced response format with metadata
41
+ - Uses page+pageSize pagination for aggregations
42
+
43
+ ---
44
+
45
+ ### 2. Get Top Mentions (`get_top_mentions`)
46
+
47
+ Queries tweets mentioning a specific stock/crypto ticker, ranked by view count for market sentiment analysis.
48
+
49
+ **Endpoint**: `v2/data/top-mentions` - Breaking Changes
50
+
51
+ **Example Prompts:**
52
+ ```
53
+ "Get the top mentions for Bitcoin in the last 24 hours"
54
+ "Show me engagement metrics for tweets about $ETH today"
55
+ ```
56
+
57
+ **Parameters:**
58
+ - `ticker`: Stock/crypto symbol (e.g., "BTC", "$ETH", "AAPL") - required
59
+ - `timeWindow`: "1h", "24h", "7d" (default: "1h")
60
+ - `page`: Page number for pagination (default: 1)
61
+ - `pageSize`: Number of items per page (default: 10)
62
+
63
+ **V2 Changes:**
64
+ - **Removed**: Raw tweet content/text
65
+ - **Removed**: `includeAccountDetails` parameter (always included)
66
+ - **Preserved**: Engagement metrics (view_count, like_count, etc.)
67
+ - **Preserved**: Account information and verification status
68
+ - **Enhanced**: Account tags (e.g., "smart" accounts)
69
+
70
+ ---
71
+
72
+ ### 3. Search Mentions (`search_mentions`)
73
+
74
+ Searches tweets mentioning up to 5 keywords or from specific accounts with sanitized engagement data.
75
+
76
+ **Endpoint**: `v2/data/keyword-mentions` - Breaking Changes
77
+
78
+ **Example Prompts:**
79
+ ```
80
+ "Search for engagement metrics of tweets mentioning 'DeFi, NFT, blockchain'"
81
+ "Find tweets from account 'elonmusk' about cryptocurrency"
82
+ ```
83
+
84
+ **Parameters:**
85
+ - `keywords`: Up to 5 keywords (comma-separated, phrases accepted) - optional if accountName provided
86
+ - `accountName`: Account username to filter by - optional if keywords provided
87
+ - `timeWindow`: Time window for search (default: "7d")
88
+ - `limit`: Number of results to return, max 30 (default: 20)
89
+ - `searchType`: Type of search - "and" or "or" (default: "or")
90
+ - `cursor`: Cursor for pagination (optional)
91
+
92
+ **V2 Changes:**
93
+ - **Removed**: Raw tweet content/text
94
+ - **Preserved**: Engagement metrics and sentiment analysis
95
+ - **Enhanced**: Account filtering with `accountName` parameter
96
+ - **Updated**: Uses limit+cursor pagination for search
97
+ - **Added**: Account tags and metadata
98
+
99
+ ---
100
+
101
+ ### 4. Get Smart Stats (`get_smart_stats`)
102
+
103
+ Retrieves key social media metrics for a specific username including engagement ratios and smart following count.
104
+
105
+ **Endpoint**: `v2/account/smart-stats` - Direct Migration
106
+
107
+ **Example Prompts:**
108
+ ```
109
+ "Get smart stats for @elonmusk"
110
+ "Analyze the social metrics for username 'VitalikButerin'"
111
+ ```
112
+
113
+ **Parameters:**
114
+ - `username`: Twitter username (with or without @) - required
115
+
116
+ **V2 Changes:**
117
+ - Same functionality and parameters
118
+ - Consistent response format with metadata
119
+
120
+ ## V2 Response Format
121
+
122
+ All V2 endpoints return a consistent format:
123
+
124
+ ```json
125
+ {
126
+ "success": boolean,
127
+ "data": [...], // Array or object with actual data
128
+ "metadata": { // Pagination and additional info
129
+ "total": number,
130
+ "page": number,
131
+ "pageSize": number,
132
+ "cursor": "string" // For search endpoints
133
+ }
134
+ }
135
+ ```
136
+
137
+ ## Migration Notes
138
+
139
+ ### What's Removed in V2:
140
+ - Raw tweet content/text (compliance requirement)
141
+ - Direct access to tweet body/message content
142
+ - `includeAccountDetails` parameter (always included)
143
+ - **Deprecated**: `get_mentions` skill (no v2 equivalent)
144
+
145
+ ### What's Preserved:
146
+ - Engagement metrics (likes, views, reposts, replies)
147
+ - Account information and verification status
148
+ - Timestamps and metadata
149
+ - Sentiment analysis
150
+ - Core functionality for trend analysis
151
+
152
+
@@ -7,7 +7,6 @@ from intentkit.abstracts.skill import SkillStoreABC
7
7
  from intentkit.skills.base import SkillConfig, SkillState
8
8
  from intentkit.skills.elfa.base import ElfaBaseTool
9
9
  from intentkit.skills.elfa.mention import (
10
- ElfaGetMentions,
11
10
  ElfaGetTopMentions,
12
11
  ElfaSearchMentions,
13
12
  )
@@ -21,7 +20,6 @@ logger = logging.getLogger(__name__)
21
20
 
22
21
 
23
22
  class SkillStates(TypedDict):
24
- get_mentions: SkillState
25
23
  get_top_mentions: SkillState
26
24
  search_mentions: SkillState
27
25
  get_trending_tokens: SkillState
@@ -83,14 +81,7 @@ def get_elfa_skill(
83
81
  The requested Elfa skill
84
82
  """
85
83
 
86
- if name == "get_mentions":
87
- if name not in _cache:
88
- _cache[name] = ElfaGetMentions(
89
- skill_store=store,
90
- )
91
- return _cache[name]
92
-
93
- elif name == "get_top_mentions":
84
+ if name == "get_top_mentions":
94
85
  if name not in _cache:
95
86
  _cache[name] = ElfaGetTopMentions(
96
87
  skill_store=store,
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field
5
5
  from intentkit.abstracts.skill import SkillStoreABC
6
6
  from intentkit.skills.base import IntentKitSkill, SkillContext
7
7
 
8
- base_url = "https://api.elfa.ai"
8
+ base_url = "https://api.elfa.ai/v2"
9
9
 
10
10
 
11
11
  class ElfaBaseTool(IntentKitSkill):
@@ -0,0 +1,223 @@
1
+ """Mention-related skills for Elfa AI API."""
2
+
3
+ from typing import Any, Dict, List, Optional, Type
4
+
5
+ from langchain_core.runnables import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from .base import ElfaBaseTool
9
+ from .utils import MentionData, make_elfa_request
10
+
11
+
12
+ class ElfaGetTopMentionsInput(BaseModel):
13
+ """Input parameters for top mentions."""
14
+
15
+ ticker: str = Field(description="Stock ticker symbol (e.g., ETH, $ETH, BTC, $BTC)")
16
+ timeWindow: Optional[str] = Field(
17
+ "1h", description="Time window (e.g., '1h', '24h', '7d')"
18
+ )
19
+ page: Optional[int] = Field(1, description="Page number for pagination")
20
+ pageSize: Optional[int] = Field(10, description="Number of items per page")
21
+
22
+
23
+ class ElfaGetTopMentionsOutput(BaseModel):
24
+ """Output structure for top mentions response."""
25
+
26
+ success: bool
27
+ data: Optional[List[MentionData]] = Field(None, description="List of top mentions")
28
+ metadata: Optional[Dict[str, Any]] = Field(None, description="Response metadata")
29
+
30
+
31
+ class ElfaGetTopMentions(ElfaBaseTool):
32
+ """
33
+ Get top mentions for a specific ticker.
34
+
35
+ This tool uses the Elfa API to query tweets mentioning a specific stock ticker.
36
+ The tweets are ranked by view count, providing insight into the most visible and
37
+ potentially influential discussions surrounding the stock. Results are updated hourly.
38
+
39
+ Use Cases:
40
+ - Real-time sentiment analysis: Track changes in public opinion about a stock
41
+ - News monitoring: Identify trending news and discussions related to a specific ticker
42
+ - Investor insights: Monitor conversations and opinions of investors and traders
43
+ """
44
+
45
+ name: str = "elfa_get_top_mentions"
46
+ description: str = """Get top mentions for a specific ticker symbol ranked by view count.
47
+ Updated hourly. Returns engagement metrics and account information for market sentiment analysis.
48
+
49
+ Use this to track public opinion, identify trending news, and monitor investor discussions."""
50
+ args_schema: Type[BaseModel] = ElfaGetTopMentionsInput
51
+
52
+ async def _arun(
53
+ self,
54
+ ticker: str,
55
+ timeWindow: str = "1h",
56
+ page: int = 1,
57
+ pageSize: int = 10,
58
+ config: RunnableConfig = None,
59
+ **kwargs,
60
+ ) -> ElfaGetTopMentionsOutput:
61
+ """
62
+ Execute the top mentions request.
63
+
64
+ Args:
65
+ ticker: Stock ticker symbol
66
+ timeWindow: Time window for mentions (default: 1h)
67
+ page: Page number for pagination (default: 1)
68
+ pageSize: Items per page (default: 10)
69
+ config: LangChain runnable configuration
70
+ **kwargs: Additional parameters
71
+
72
+ Returns:
73
+ ElfaGetTopMentionsOutput: Structured response with top mentions
74
+
75
+ Raises:
76
+ ValueError: If API key is not found
77
+ ToolException: If there's an error with the API request
78
+ """
79
+ context = self.context_from_config(config)
80
+ api_key = self.get_api_key(context)
81
+
82
+ # Prepare parameters according to API spec
83
+ params = {
84
+ "ticker": ticker,
85
+ "timeWindow": timeWindow,
86
+ "page": page,
87
+ "pageSize": pageSize,
88
+ }
89
+
90
+ # Make API request using shared utility
91
+ response = await make_elfa_request(
92
+ endpoint="data/top-mentions", api_key=api_key, params=params
93
+ )
94
+
95
+ # Parse response data into MentionData objects
96
+ mentions = []
97
+ if response.data and isinstance(response.data, list):
98
+ mentions = [MentionData(**item) for item in response.data]
99
+
100
+ return ElfaGetTopMentionsOutput(
101
+ success=response.success, data=mentions, metadata=response.metadata
102
+ )
103
+
104
+
105
+ class ElfaSearchMentionsInput(BaseModel):
106
+ """Input parameters for search mentions."""
107
+
108
+ keywords: Optional[str] = Field(
109
+ None,
110
+ description="Up to 5 keywords to search for, separated by commas. Phrases accepted",
111
+ )
112
+ accountName: Optional[str] = Field(
113
+ None,
114
+ description="Account username to filter by (optional if keywords provided)",
115
+ )
116
+ timeWindow: Optional[str] = Field("7d", description="Time window for search")
117
+ limit: Optional[int] = Field(20, description="Number of results to return (max 30)")
118
+ searchType: Optional[str] = Field(
119
+ "or", description="Type of search ('and' or 'or')"
120
+ )
121
+ cursor: Optional[str] = Field(None, description="Cursor for pagination")
122
+
123
+
124
+ class ElfaSearchMentionsOutput(BaseModel):
125
+ """Output structure for search mentions response."""
126
+
127
+ success: bool
128
+ data: Optional[List[MentionData]] = Field(
129
+ None, description="List of matching mentions"
130
+ )
131
+ metadata: Optional[Dict[str, Any]] = Field(
132
+ None, description="Response metadata with cursor"
133
+ )
134
+
135
+
136
+ class ElfaSearchMentions(ElfaBaseTool):
137
+ """
138
+ Search mentions by keywords or account name.
139
+
140
+ This tool uses the Elfa API to search tweets mentioning up to five keywords or from specific accounts.
141
+ It can search within the past 30 days of data (updated every 5 minutes) or access historical data.
142
+ Returns sanitized engagement metrics and sentiment data.
143
+
144
+ Use Cases:
145
+ - Market research: Track conversations and sentiment around specific products or industries
146
+ - Brand monitoring: Monitor mentions of your brand and identify potential PR issues
147
+ - Public opinion tracking: Analyze public opinion on various topics
148
+ - Competitive analysis: See what people are saying about your competitors
149
+ """
150
+
151
+ name: str = "elfa_search_mentions"
152
+ description: str = """Search tweets by keywords or account name with engagement data and sentiment analysis.
153
+ Updated every 5 minutes. Access 30 days of recent data or historical archives.
154
+
155
+ Use this for market research, brand monitoring, opinion tracking, and competitive analysis."""
156
+ args_schema: Type[BaseModel] = ElfaSearchMentionsInput
157
+
158
+ async def _arun(
159
+ self,
160
+ keywords: Optional[str] = None,
161
+ accountName: Optional[str] = None,
162
+ timeWindow: str = "7d",
163
+ limit: int = 20,
164
+ searchType: str = "or",
165
+ cursor: Optional[str] = None,
166
+ config: RunnableConfig = None,
167
+ **kwargs,
168
+ ) -> ElfaSearchMentionsOutput:
169
+ """
170
+ Execute the search mentions request.
171
+
172
+ Args:
173
+ keywords: Keywords to search for (optional if accountName provided)
174
+ accountName: Account username to filter by (optional if keywords provided)
175
+ timeWindow: Time window for search (default: 7d)
176
+ limit: Number of results to return (default: 20, max 30)
177
+ searchType: Type of search - 'and' or 'or' (default: 'or')
178
+ cursor: Pagination cursor (optional)
179
+ config: LangChain runnable configuration
180
+ **kwargs: Additional parameters
181
+
182
+ Returns:
183
+ ElfaSearchMentionsOutput: Structured response with matching mentions
184
+
185
+ Raises:
186
+ ValueError: If API key is not found or neither keywords nor accountName provided
187
+ ToolException: If there's an error with the API request
188
+ """
189
+ context = self.context_from_config(config)
190
+ api_key = self.get_api_key(context)
191
+
192
+ # Validate that at least one search criteria is provided
193
+ if not keywords and not accountName:
194
+ raise ValueError("Either keywords or accountName must be provided")
195
+
196
+ # Prepare parameters according to API spec
197
+ params = {
198
+ "timeWindow": timeWindow,
199
+ "limit": min(limit, 30), # API max is 30
200
+ "searchType": searchType,
201
+ }
202
+
203
+ # Add optional parameters
204
+ if keywords:
205
+ params["keywords"] = keywords
206
+ if accountName:
207
+ params["accountName"] = accountName
208
+ if cursor:
209
+ params["cursor"] = cursor
210
+
211
+ # Make API request using shared utility
212
+ response = await make_elfa_request(
213
+ endpoint="data/keyword-mentions", api_key=api_key, params=params
214
+ )
215
+
216
+ # Parse response data into MentionData objects
217
+ mentions = []
218
+ if response.data and isinstance(response.data, list):
219
+ mentions = [MentionData(**item) for item in response.data]
220
+
221
+ return ElfaSearchMentionsOutput(
222
+ success=response.success, data=mentions, metadata=response.metadata
223
+ )
@@ -18,22 +18,6 @@
18
18
  "states": {
19
19
  "type": "object",
20
20
  "properties": {
21
- "get_mentions": {
22
- "type": "string",
23
- "title": "Get Mentions",
24
- "enum": [
25
- "disabled",
26
- "public",
27
- "private"
28
- ],
29
- "x-enum-title": [
30
- "Disabled",
31
- "Agent Owner + All Users",
32
- "Agent Owner Only"
33
- ],
34
- "description": "This tool uses the Elfa AI API to query hourly-updated tweets from \"smart accounts\" \u2013 accounts identified as influential or relevant \u2013 that have received at least 10 interactions (comments, retweets, quote tweets).",
35
- "default": "disabled"
36
- },
37
21
  "get_top_mentions": {
38
22
  "type": "string",
39
23
  "title": "Get Top Mentions",
@@ -63,7 +47,7 @@
63
47
  "Agent Owner + All Users",
64
48
  "Agent Owner Only"
65
49
  ],
66
- "description": "This tool uses the Elfa API to search tweets mentioning up to five keywords. It can search within the past 30 days of data, which is updated every 5 minutes, or access up to six months of historical tweet data.",
50
+ "description": "This tool uses the Elfa API to search tweets mentioning up to five keywords or from specific accounts. It can search within the past 30 days of data, which is updated every 5 minutes, or access up to six months of historical tweet data.",
67
51
  "default": "private"
68
52
  },
69
53
  "get_trending_tokens": {
@@ -0,0 +1,85 @@
1
+ """Smart stats skill for Elfa AI API."""
2
+
3
+ from typing import Any, Dict, Optional, Type
4
+
5
+ from langchain_core.runnables import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from .base import ElfaBaseTool
9
+ from .utils import SmartStatsData, make_elfa_request
10
+
11
+
12
+ class ElfaGetSmartStatsInput(BaseModel):
13
+ """Input parameters for smart stats."""
14
+
15
+ username: str = Field(description="Account username to get stats for")
16
+
17
+
18
+ class ElfaGetSmartStatsOutput(BaseModel):
19
+ """Output structure for smart stats response."""
20
+
21
+ success: bool
22
+ data: Optional[SmartStatsData] = Field(None, description="Smart stats data")
23
+ metadata: Optional[Dict[str, Any]] = Field(None, description="Response metadata")
24
+
25
+
26
+ class ElfaGetSmartStats(ElfaBaseTool):
27
+ """
28
+ Get smart stats for a specific username.
29
+
30
+ This tool uses the Elfa API to retrieve key social media metrics for a given username including:
31
+ - Smart Following Count: Number of high-quality or influential followers
32
+ - Average Engagement: Composite score reflecting interaction with user's content
33
+ - Average Reach: Average reach of the user's content
34
+ - Smart Follower Count: Number of smart followers
35
+ - Follower Count: Total follower count
36
+
37
+ Use Cases:
38
+ - Competitor analysis: Compare social media performance to competitors
39
+ - Influencer identification: Identify influential users in your niche
40
+ - Social media audits: Assess overall health and effectiveness of social media presence
41
+ """
42
+
43
+ name: str = "elfa_get_smart_stats"
44
+ description: str = """Get comprehensive social media metrics for a username including smart following count,
45
+ engagement scores, and follower analytics. Use this for competitor analysis, influencer identification,
46
+ and social media performance audits."""
47
+ args_schema: Type[BaseModel] = ElfaGetSmartStatsInput
48
+
49
+ async def _arun(
50
+ self, username: str, config: RunnableConfig = None, **kwargs
51
+ ) -> ElfaGetSmartStatsOutput:
52
+ """
53
+ Execute the smart stats request.
54
+
55
+ Args:
56
+ username: The username to check stats for
57
+ config: LangChain runnable configuration
58
+ **kwargs: Additional parameters
59
+
60
+ Returns:
61
+ ElfaGetSmartStatsOutput: Structured response with smart stats
62
+
63
+ Raises:
64
+ ValueError: If API key is not found
65
+ ToolException: If there's an error with the API request
66
+ """
67
+ context = self.context_from_config(config)
68
+ api_key = self.get_api_key(context)
69
+
70
+ # Prepare parameters according to API spec
71
+ params = {"username": username}
72
+
73
+ # Make API request using shared utility
74
+ response = await make_elfa_request(
75
+ endpoint="account/smart-stats", api_key=api_key, params=params
76
+ )
77
+
78
+ # Parse response data into SmartStatsData object
79
+ stats_data = None
80
+ if response.data and isinstance(response.data, dict):
81
+ stats_data = SmartStatsData(**response.data)
82
+
83
+ return ElfaGetSmartStatsOutput(
84
+ success=response.success, data=stats_data, metadata=response.metadata
85
+ )
@@ -0,0 +1,122 @@
1
+ """Trending tokens skill for Elfa AI API."""
2
+
3
+ from typing import Any, Dict, List, Optional, Type
4
+
5
+ from langchain_core.runnables import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from .base import ElfaBaseTool
9
+ from .utils import make_elfa_request
10
+
11
+
12
+ class ElfaGetTrendingTokensInput(BaseModel):
13
+ """Input parameters for trending tokens."""
14
+
15
+ timeWindow: Optional[str] = Field(
16
+ "7d",
17
+ description="Time window for trending analysis (e.g., '30m', '1h', '4h', '24h', '7d', '30d')",
18
+ )
19
+ page: Optional[int] = Field(1, description="Page number for pagination")
20
+ pageSize: Optional[int] = Field(50, description="Number of items per page")
21
+ minMentions: Optional[int] = Field(
22
+ 5, description="Minimum number of mentions required"
23
+ )
24
+
25
+
26
+ class TrendingToken(BaseModel):
27
+ """Individual trending token data."""
28
+
29
+ token: Optional[str] = Field(None, description="Token symbol")
30
+ current_count: Optional[int] = Field(None, description="Current mention count")
31
+ previous_count: Optional[int] = Field(None, description="Previous mention count")
32
+ change_percent: Optional[float] = Field(None, description="Change percentage")
33
+
34
+
35
+ class ElfaGetTrendingTokensOutput(BaseModel):
36
+ """Output structure for trending tokens response."""
37
+
38
+ success: bool
39
+ data: Optional[List[TrendingToken]] = Field(
40
+ None, description="List of trending tokens"
41
+ )
42
+ metadata: Optional[Dict[str, Any]] = Field(None, description="Response metadata")
43
+
44
+
45
+ class ElfaGetTrendingTokens(ElfaBaseTool):
46
+ """
47
+ Get trending tokens based on smart mentions count.
48
+
49
+ This tool ranks the most discussed tokens based on smart mentions count for a given period,
50
+ with updates every 5 minutes via the Elfa API. Smart mentions provide a more sophisticated
51
+ measure of discussion volume than simple keyword counts.
52
+
53
+ Use Cases:
54
+ - Identify trending tokens: Quickly see which tokens are gaining traction in online discussions
55
+ - Gauge market sentiment: Track changes in smart mention counts to understand shifts in market opinion
56
+ - Research potential investments: Use the ranking as a starting point for further due diligence
57
+ """
58
+
59
+ name: str = "elfa_get_trending_tokens"
60
+ description: str = """Get trending tokens ranked by smart mentions count for a given time period.
61
+ Updated every 5 minutes. Smart mentions provide sophisticated discussion volume measurement beyond simple keyword counts.
62
+
63
+ Use this to identify tokens gaining traction, gauge market sentiment, and research potential investments."""
64
+ args_schema: Type[BaseModel] = ElfaGetTrendingTokensInput
65
+
66
+ async def _arun(
67
+ self,
68
+ timeWindow: str = "7d",
69
+ page: int = 1,
70
+ pageSize: int = 50,
71
+ minMentions: int = 5,
72
+ config: RunnableConfig = None,
73
+ **kwargs,
74
+ ) -> ElfaGetTrendingTokensOutput:
75
+ """
76
+ Execute the trending tokens request.
77
+
78
+ Args:
79
+ timeWindow: Time window for analysis (default: 7d)
80
+ page: Page number for pagination (default: 1)
81
+ pageSize: Items per page (default: 50)
82
+ minMentions: Minimum mentions required (default: 5)
83
+ config: LangChain runnable configuration
84
+ **kwargs: Additional parameters
85
+
86
+ Returns:
87
+ ElfaGetTrendingTokensOutput: Structured response with trending tokens
88
+
89
+ Raises:
90
+ ValueError: If API key is not found
91
+ ToolException: If there's an error with the API request
92
+ """
93
+ context = self.context_from_config(config)
94
+ api_key = self.get_api_key(context)
95
+
96
+ # Prepare parameters according to API spec
97
+ params = {
98
+ "timeWindow": timeWindow,
99
+ "page": page,
100
+ "pageSize": pageSize,
101
+ "minMentions": minMentions,
102
+ }
103
+
104
+ # Make API request using shared utility
105
+ response = await make_elfa_request(
106
+ endpoint="aggregations/trending-tokens", api_key=api_key, params=params
107
+ )
108
+
109
+ # Parse response data into TrendingToken objects
110
+ trending_tokens = []
111
+ if response.data:
112
+ if isinstance(response.data, list):
113
+ trending_tokens = [TrendingToken(**item) for item in response.data]
114
+ elif isinstance(response.data, dict) and "data" in response.data:
115
+ # Handle nested data structure if present
116
+ trending_tokens = [
117
+ TrendingToken(**item) for item in response.data["data"]
118
+ ]
119
+
120
+ return ElfaGetTrendingTokensOutput(
121
+ success=response.success, data=trending_tokens, metadata=response.metadata
122
+ )